Skip to content

Commit 0a3699f

Browse files
author
Alan Christie
committed
feat: Use of test message queue
1 parent b050f71 commit 0a3699f

File tree

4 files changed

+27
-9
lines changed

4 files changed

+27
-9
lines changed

tests/message_dispatcher.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
from google.protobuf.message import Message
22

3+
from tests.message_queue import UnitTestMessageQueue
34
from workflow.workflow_abc import MessageDispatcher
45

56

67
class UnitTestMessageDispatcher(MessageDispatcher):
78
"""A minimal Message dispatcher to support testing."""
89

10+
def __init__(self, msg_queue: UnitTestMessageQueue):
11+
super().__init__()
12+
self._msg_queue: UnitTestMessageQueue = msg_queue
13+
914
def send(self, message: Message) -> None:
10-
assert message
15+
self._msg_queue.put(message)

tests/message_queue.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from contextlib import suppress
22
from multiprocessing import Event, Process, Queue
33
from queue import Empty
4-
from typing import Callable
4+
from typing import Callable, Optional
55

66
from google.protobuf.message import Message
77
from informaticsmatters.protobuf.datamanager.pod_message_pb2 import PodMessage
@@ -12,7 +12,7 @@ class UnitTestMessageQueue(Process):
1212
"""A simple asynchronous message passer, used by the Validator
1313
(and UnitTestInstanceLauncher) to send ProtocolBuffer messages to the Engine."""
1414

15-
def __init__(self, receiver: Callable[[Message], None]):
15+
def __init__(self, receiver: Optional[Callable[[Message], None]] = None):
1616
super().__init__()
1717
self._stop = Event()
1818
self._queue = Queue()
@@ -23,16 +23,17 @@ def run(self):
2323
with suppress(Empty):
2424
if item := self._queue.get(True, 0.25):
2525
msg = None
26-
# We only support Workflow and Pod messages
27-
# during testing...
26+
# Convert the message (bytes) back to a ProtocolBuffer object.
27+
# We only support Workflow and Pod messages for testing...
2828
if item["class"] == "WorkflowMessage":
2929
msg = WorkflowMessage()
3030
msg.ParseFromString(item["bytes"])
3131
elif item["class"] == "PodMessage":
3232
msg = PodMessage()
3333
msg.ParseFromString(item["bytes"])
3434
assert msg
35-
self._receiver(msg)
35+
if self._receiver:
36+
self._receiver(msg)
3637

3738
def put(self, msg: Message):
3839
"""Puts a protocol buffer message onto the queue."""
Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
11
# Tests for the decoder package.
22

3+
from datetime import datetime, timezone
4+
35
import pytest
46

57
pytestmark = pytest.mark.unit
68

9+
from informaticsmatters.protobuf.datamanager.workflow_message_pb2 import WorkflowMessage
10+
711
from tests.message_dispatcher import UnitTestMessageDispatcher
12+
from tests.message_queue import UnitTestMessageQueue
813

914

1015
def test_get_nop_job():
1116
# Arrange
12-
utmd = UnitTestMessageDispatcher()
17+
utmq = UnitTestMessageQueue()
18+
utmd = UnitTestMessageDispatcher(msg_queue=utmq)
19+
msg = WorkflowMessage()
20+
msg.timestamp = f"{datetime.now(timezone.utc).isoformat()}Z"
21+
msg.action = "START"
22+
msg.running_workflow = "r-workflow-00000000-0000-0000-0000-000000000000"
1323

1424
# Act
15-
utmd.send(1)
25+
utmd.send(msg)
1626

1727
# Assert

tests/test_worflow_validator.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@
66

77
from tests.database_adapter import UnitTestDatabaseAdapter
88
from tests.message_dispatcher import UnitTestMessageDispatcher
9+
from tests.message_queue import UnitTestMessageQueue
910
from tests.test_decoder_minimal import _MINIMAL_WORKFLOW
1011
from workflow.worklfow_validator import ValidationLevel, WorkflowValidator
1112

1213

1314
def test_validate_minimal_for_create():
1415
# Arrange
16+
msg_queue = UnitTestMessageQueue()
1517
db_adapter = UnitTestDatabaseAdapter()
16-
msg_dispatcher = UnitTestMessageDispatcher()
18+
msg_dispatcher = UnitTestMessageDispatcher(msg_queue=msg_queue)
1719
validator = WorkflowValidator(db_adapter=db_adapter, msg_dispatcher=msg_dispatcher)
1820

1921
# Act

0 commit comments

Comments
 (0)