blob: cedf895b72d63e46fb4555212dd8870f47d1687f [file] [log] [blame]
import boto.swf.layer2
from boto.swf.layer2 import Decider, ActivityWorker
from tests.unit import unittest
from mock import Mock
class TestActors(unittest.TestCase):
def setUp(self):
boto.swf.layer2.Layer1 = Mock()
self.worker = ActivityWorker(name='test-worker', domain='test', task_list='test_list')
self.decider = Decider(name='test-worker', domain='test', task_list='test_list')
self.worker._swf = Mock()
self.decider._swf = Mock()
def test_decider_pass_tasktoken(self):
self.decider._swf.poll_for_decision_task.return_value = {
'events': [{'eventId': 1,
'eventTimestamp': 1379019427.953,
'eventType': 'WorkflowExecutionStarted',
'workflowExecutionStartedEventAttributes': {
'childPolicy': 'TERMINATE',
'executionStartToCloseTimeout': '3600',
'parentInitiatedEventId': 0,
'taskList': {'name': 'test_list'},
'taskStartToCloseTimeout': '123',
'workflowType': {'name': 'test_workflow_name',
'version': 'v1'}}},
{'decisionTaskScheduledEventAttributes':
{'startToCloseTimeout': '123',
'taskList': {'name': 'test_list'}},
'eventId': 2,
'eventTimestamp': 1379019427.953,
'eventType': 'DecisionTaskScheduled'},
{'decisionTaskStartedEventAttributes': {'scheduledEventId': 2},
'eventId': 3, 'eventTimestamp': 1379019495.585,
'eventType': 'DecisionTaskStarted'}],
'previousStartedEventId': 0, 'startedEventId': 3,
'taskToken': 'my_specific_task_token',
'workflowExecution': {'runId': 'fwr243dsa324132jmflkfu0943tr09=',
'workflowId': 'test_workflow_name-v1-1379019427'},
'workflowType': {'name': 'test_workflow_name', 'version': 'v1'}}
self.decider.poll()
self.decider.complete()
self.decider._swf.respond_decision_task_completed.assert_called_with('my_specific_task_token', None)
self.assertEqual('my_specific_task_token', self.decider.last_tasktoken)
def test_worker_pass_tasktoken(self):
task_token = 'worker_task_token'
self.worker._swf.poll_for_activity_task.return_value = {
'activityId': 'SomeActivity-1379020713',
'activityType': {'name': 'SomeActivity', 'version': '1.0'},
'startedEventId': 6,
'taskToken': task_token,
'workflowExecution': {'runId': '12T026NzGK5c4eMti06N9O3GHFuTDaNyA+8LFtoDkAwfE=',
'workflowId': 'MyWorkflow-1.0-1379020705'}}
self.worker.poll()
self.worker.cancel(details='Cancelling!')
self.worker.complete(result='Done!')
self.worker.fail(reason='Failure!')
self.worker.heartbeat()
self.worker._swf.respond_activity_task_canceled.assert_called_with(task_token, 'Cancelling!')
self.worker._swf.respond_activity_task_completed.assert_called_with(task_token, 'Done!')
self.worker._swf.respond_activity_task_failed.assert_called_with(task_token, None, 'Failure!')
self.worker._swf.record_activity_task_heartbeat.assert_called_with(task_token, None)
def test_actor_poll_without_tasklist_override(self):
self.worker.poll()
self.decider.poll()
self.worker._swf.poll_for_activity_task.assert_called_with('test', 'test_list')
self.decider._swf.poll_for_decision_task.assert_called_with('test', 'test_list')
def test_worker_override_tasklist(self):
self.worker.poll(task_list='some_other_tasklist')
self.worker._swf.poll_for_activity_task.assert_called_with('test', 'some_other_tasklist')
def test_decider_override_tasklist(self):
self.decider.poll(task_list='some_other_tasklist')
self.decider._swf.poll_for_decision_task.assert_called_with('test', 'some_other_tasklist')
if __name__ == '__main__':
unittest.main()