Example #1
0
class TestWorkflowExecution(unittest.TestCase):
    def setUp(self):
        self.domain = Domain("TestDomain")
        self.wt = WorkflowType(self.domain, "TestType", "1.0")
        self.we = WorkflowExecution(self.domain, self.wt,
                                    "TestType-0.1-TestDomain")

    def tearDown(self):
        pass

    def test_instantiation(self):
        we = WorkflowExecution(self.domain, self.wt, "TestType-0.1-TestDomain")
        self.assertIsNotNone(we)
        self.assertIsInstance(we, WorkflowExecution)
        self.assertIn(
            we.status,
            [WorkflowExecution.STATUS_OPEN, WorkflowExecution.STATUS_CLOSED])

    def test___diff_with_different_workflow_execution(self):
        with patch.object(
                Layer1,
                'describe_workflow_execution',
                mock_describe_workflow_execution,
        ):
            workflow_execution = WorkflowExecution(
                self.domain,
                WorkflowType(self.domain, "NonExistentTestType", "1.0"),
                "non-existent-id")
            diffs = workflow_execution._diff()

            self.assertIsNotNone(diffs)
            self.assertEqual(len(diffs), 7)

            self.assertTrue(hasattr(diffs[0], 'attr'))
            self.assertTrue(hasattr(diffs[0], 'local'))
            self.assertTrue(hasattr(diffs[0], 'upstream'))

    def test_workflow_execution__diff_with_identical_workflow_execution(self):
        with patch.object(
                Layer1,
                'describe_workflow_execution',
                mock_describe_workflow_execution,
        ):
            mocked = mock_describe_workflow_execution()
            workflow_execution = WorkflowExecution(
                self.domain,
                mocked['executionInfo']['execution']['workflowId'],
                run_id=mocked['executionInfo']['execution']['runId'],
                status=mocked['executionInfo']['executionStatus'],
                task_list=mocked['executionConfiguration']['taskList']['name'],
                child_policy=mocked['executionConfiguration']['childPolicy'],
                execution_timeout=mocked['executionConfiguration']
                ['executionStartToCloseTimeout'],
                tag_list=mocked['executionInfo']['tagList'],
                decision_tasks_timeout=mocked['executionConfiguration']
                ['taskStartToCloseTimeout'],
            )

            diffs = workflow_execution._diff()

            self.assertEqual(len(diffs), 0)

    def test_exists_with_existing_workflow_execution(self):
        with patch.object(Layer1, 'describe_workflow_execution'):
            self.assertTrue(self.we.exists)

    def test_exists_with_non_existent_workflow_execution(self):
        with patch.object(self.we.connection,
                          'describe_workflow_execution') as mock:
            mock.side_effect = SWFResponseError(
                400,
                "Bad Request:",
                {
                    '__type':
                    'com.amazonaws.swf.base.model#UnknownResourceFault',
                    'message':
                    'Unknown execution: WorkflowExecution=[workflowId=blah, runId=test]'
                },
                'UnknownResourceFault',
            )

            self.assertFalse(self.we.exists)

    # TODO: fix test when no network (probably hits real SWF endpoints)
    @unittest.skip("Skip it in case there's no network connection.")
    def test_workflow_execution_exists_with_whatever_error(self):
        with patch.object(self.we.connection,
                          'describe_workflow_execution') as mock:
            with self.assertRaises(ResponseError):
                mock.side_effect = SWFResponseError(400, "mocking exception", {
                    '__type': 'WhateverError',
                    'message': 'Whatever'
                })
                self.domain.exists

    def test_is_synced_with_unsynced_workflow_execution(self):
        pass

    def test_is_synced_with_synced_workflow_execution(self):
        pass

    def test_is_synced_over_non_existent_workflow_execution(self):
        with patch.object(Layer1, 'describe_workflow_execution',
                          mock_describe_workflow_execution):
            workflow_execution = WorkflowExecution(
                self.domain,
                WorkflowType(self.domain, "NonExistentTestType", "1.0"),
                "non-existent-id")
            self.assertFalse(workflow_execution.is_synced)

    def test_changes_with_different_workflow_execution(self):
        with patch.object(
                Layer1,
                'describe_workflow_execution',
                mock_describe_workflow_execution,
        ):
            workflow_execution = WorkflowExecution(
                self.domain,
                WorkflowType(self.domain, "NonExistentTestType", "1.0"),
                "non-existent-id")
            diffs = workflow_execution.changes

            self.assertIsNotNone(diffs)
            self.assertEqual(len(diffs), 7)

            self.assertTrue(hasattr(diffs[0], 'attr'))
            self.assertTrue(hasattr(diffs[0], 'local'))
            self.assertTrue(hasattr(diffs[0], 'upstream'))

    def test_workflow_execution_changes_with_identical_workflow_execution(
            self):
        with patch.object(
                Layer1,
                'describe_workflow_execution',
                mock_describe_workflow_execution,
        ):
            mocked = mock_describe_workflow_execution()
            workflow_execution = WorkflowExecution(
                self.domain,
                mocked['executionInfo']['execution']['workflowId'],
                run_id=mocked['executionInfo']['execution']['runId'],
                status=mocked['executionInfo']['executionStatus'],
                task_list=mocked['executionConfiguration']['taskList']['name'],
                child_policy=mocked['executionConfiguration']['childPolicy'],
                execution_timeout=mocked['executionConfiguration']
                ['executionStartToCloseTimeout'],
                tag_list=mocked['executionInfo']['tagList'],
                decision_tasks_timeout=mocked['executionConfiguration']
                ['taskStartToCloseTimeout'],
            )

            diffs = workflow_execution.changes

            self.assertEqual(len(diffs), 0)

    def test_history(self):
        with patch.object(self.we.connection, 'get_workflow_execution_history',
                          mock_get_workflow_execution_history):
            history = self.we.history()
            self.assertIsInstance(history, History)
Example #2
0
class TestWorkflowExecution(unittest.TestCase, CustomAssertions):
    def setUp(self):
        self.domain = Domain("TestDomain")
        self.wt = WorkflowType(self.domain, "TestType", "1.0")
        self.we = WorkflowExecution(self.domain, self.wt, "TestType-0.1-TestDomain")

    def tearDown(self):
        pass

    def test_instantiation(self):
        we = WorkflowExecution(self.domain, self.wt, "TestType-0.1-TestDomain")
        self.assertIsNotNone(we)
        self.assertIsInstance(we, WorkflowExecution)
        self.assertIn(
            we.status, [WorkflowExecution.STATUS_OPEN, WorkflowExecution.STATUS_CLOSED]
        )

    def test___diff_with_different_workflow_execution(self):
        with patch.object(
            Layer1, "describe_workflow_execution", mock_describe_workflow_execution,
        ):
            workflow_execution = WorkflowExecution(
                self.domain,
                WorkflowType(self.domain, "NonExistentTestType", "1.0"),
                "non-existent-id",
            )
            diffs = workflow_execution._diff()

            self.assertIsNotNone(diffs)
            self.assertLength(diffs, 7)

            self.assertTrue(hasattr(diffs[0], "attr"))
            self.assertTrue(hasattr(diffs[0], "local"))
            self.assertTrue(hasattr(diffs[0], "upstream"))

    def test_workflow_execution__diff_with_identical_workflow_execution(self):
        with patch.object(
            Layer1, "describe_workflow_execution", mock_describe_workflow_execution,
        ):
            mocked = mock_describe_workflow_execution()
            workflow_execution = WorkflowExecution(
                self.domain,
                mocked["executionInfo"]["execution"]["workflowId"],
                run_id=mocked["executionInfo"]["execution"]["runId"],
                status=mocked["executionInfo"]["executionStatus"],
                task_list=mocked["executionConfiguration"]["taskList"]["name"],
                child_policy=mocked["executionConfiguration"]["childPolicy"],
                execution_timeout=mocked["executionConfiguration"][
                    "executionStartToCloseTimeout"
                ],
                tag_list=mocked["executionInfo"]["tagList"],
                decision_tasks_timeout=mocked["executionConfiguration"][
                    "taskStartToCloseTimeout"
                ],
            )

            diffs = workflow_execution._diff()

            self.assertLength(diffs, 0)

    def test_exists_with_existing_workflow_execution(self):
        with patch.object(Layer1, "describe_workflow_execution"):
            self.assertTrue(self.we.exists)

    def test_exists_with_non_existent_workflow_execution(self):
        with patch.object(self.we.connection, "describe_workflow_execution") as mock:
            mock.side_effect = SWFResponseError(
                400,
                "Bad Request:",
                {
                    "__type": "com.amazonaws.swf.base.model#UnknownResourceFault",
                    "message": "Unknown execution: WorkflowExecution=[workflowId=blah, runId=test]",
                },
                "UnknownResourceFault",
            )

            self.assertFalse(self.we.exists)

    # TODO: fix test when no network (probably hits real SWF endpoints)
    @unittest.skip("Skip it in case there's no network connection.")
    def test_workflow_execution_exists_with_whatever_error(self):
        with patch.object(self.we.connection, "describe_workflow_execution") as mock:
            with self.assertRaises(ResponseError):
                mock.side_effect = SWFResponseError(
                    400,
                    "mocking exception",
                    {"__type": "WhateverError", "message": "Whatever"},
                )
                dummy = self.domain.exists

    def test_is_synced_with_unsynced_workflow_execution(self):
        pass

    def test_is_synced_with_synced_workflow_execution(self):
        pass

    def test_is_synced_over_non_existent_workflow_execution(self):
        with patch.object(
            Layer1, "describe_workflow_execution", mock_describe_workflow_execution
        ):
            workflow_execution = WorkflowExecution(
                self.domain,
                WorkflowType(self.domain, "NonExistentTestType", "1.0"),
                "non-existent-id",
            )
            self.assertFalse(workflow_execution.is_synced)

    def test_changes_with_different_workflow_execution(self):
        with patch.object(
            Layer1, "describe_workflow_execution", mock_describe_workflow_execution,
        ):
            workflow_execution = WorkflowExecution(
                self.domain,
                WorkflowType(self.domain, "NonExistentTestType", "1.0"),
                "non-existent-id",
            )
            diffs = workflow_execution.changes

            self.assertIsNotNone(diffs)
            self.assertLength(diffs, 7)

            self.assertTrue(hasattr(diffs[0], "attr"))
            self.assertTrue(hasattr(diffs[0], "local"))
            self.assertTrue(hasattr(diffs[0], "upstream"))

    def test_workflow_execution_changes_with_identical_workflow_execution(self):
        with patch.object(
            Layer1, "describe_workflow_execution", mock_describe_workflow_execution,
        ):
            mocked = mock_describe_workflow_execution()
            workflow_execution = WorkflowExecution(
                self.domain,
                mocked["executionInfo"]["execution"]["workflowId"],
                run_id=mocked["executionInfo"]["execution"]["runId"],
                status=mocked["executionInfo"]["executionStatus"],
                task_list=mocked["executionConfiguration"]["taskList"]["name"],
                child_policy=mocked["executionConfiguration"]["childPolicy"],
                execution_timeout=mocked["executionConfiguration"][
                    "executionStartToCloseTimeout"
                ],
                tag_list=mocked["executionInfo"]["tagList"],
                decision_tasks_timeout=mocked["executionConfiguration"][
                    "taskStartToCloseTimeout"
                ],
            )

            diffs = workflow_execution.changes

            self.assertLength(diffs, 0)

    def test_history(self):
        with patch.object(
            self.we.connection,
            "get_workflow_execution_history",
            mock_get_workflow_execution_history,
        ):
            history = self.we.history()
            self.assertIsInstance(history, History)
class TestWorkflowExecution(unittest2.TestCase):
    def setUp(self):
        self.domain = Domain("TestDomain")
        self.wt = WorkflowType(self.domain, "TestType", "1.0")
        self.we = WorkflowExecution(
            self.domain,
            self.wt,
            "TestType-0.1-TestDomain"
        )

    def tearDown(self):
        pass

    def test_instantiation(self):
        we = WorkflowExecution(
            self.domain,
            self.wt,
            "TestType-0.1-TestDomain"
        )
        self.assertIsNotNone(we)
        self.assertIsInstance(we, WorkflowExecution)
        self.assertIn(we.status, [
            WorkflowExecution.STATUS_OPEN,
            WorkflowExecution.STATUS_CLOSED
        ])

    def test___diff_with_different_workflow_execution(self):
        with patch.object(
            Layer1,
            'describe_workflow_execution',
            mock_describe_workflow_execution,
        ):
            workflow_execution = WorkflowExecution(
                self.domain,
                WorkflowType(self.domain, "NonExistentTestType", "1.0"),
                "non-existent-id"
            )
            diffs = workflow_execution._diff()

            self.assertIsNotNone(diffs)
            self.assertEqual(len(diffs), 7)

            self.assertTrue(hasattr(diffs[0], 'attr'))
            self.assertTrue(hasattr(diffs[0], 'local'))
            self.assertTrue(hasattr(diffs[0], 'upstream'))

    def test_workflow_execution__diff_with_identical_workflow_execution(self):
        with patch.object(
            Layer1,
            'describe_workflow_execution',
            mock_describe_workflow_execution,
        ):
            mocked = mock_describe_workflow_execution()
            workflow_execution = WorkflowExecution(
                self.domain,
                mocked['executionInfo']['execution']['workflowId'],
                run_id=mocked['executionInfo']['execution']['runId'],
                status=mocked['executionInfo']['executionStatus'],
                task_list=mocked['executionConfiguration']['taskList']['name'],
                child_policy=mocked['executionConfiguration']['childPolicy'],
                execution_timeout=mocked['executionConfiguration']['executionStartToCloseTimeout'],
                tag_list=mocked['executionInfo']['tagList'],
                decision_tasks_timeout=mocked['executionConfiguration']['taskStartToCloseTimeout'],
            )

            diffs = workflow_execution._diff()

            self.assertEqual(len(diffs), 0)

    def test_exists_with_existing_workflow_execution(self):
        with patch.object(Layer1, 'describe_workflow_execution'):
            self.assertTrue(self.we.exists)

    def test_exists_with_non_existent_workflow_execution(self):
        with patch.object(self.we.connection, 'describe_workflow_execution') as mock:
            mock.side_effect = SWFResponseError(
                    400,
                    "Bad Request:",
                    {'__type': 'com.amazonaws.swf.base.model#UnknownResourceFault',
                     'message': 'Unknown execution: WorkflowExecution=[workflowId=blah, runId=test]'},
                    'UnknownResourceFault',
                )

            self.assertFalse(self.we.exists)

    def test_workflow_execution_exists_with_whatever_error(self):
        with patch.object(self.we.connection, 'describe_workflow_execution') as mock:
            with self.assertRaises(ResponseError):
                mock.side_effect = SWFResponseError(
                        400,
                        "mocking exception",
                        {
                            '__type': 'WhateverError',
                            'message': 'Whatever'
                        }
                )
                self.domain.exists

    def test_is_synced_with_unsynced_workflow_execution(self):
        pass

    def test_is_synced_with_synced_workflow_execution(self):
        pass

    def test_is_synced_over_non_existent_workflow_execution(self):
        with patch.object(
            Layer1,
            'describe_workflow_execution',
            mock_describe_workflow_execution
        ):
            workflow_execution = WorkflowExecution(
                self.domain,
                WorkflowType(self.domain, "NonExistentTestType", "1.0"),
                "non-existent-id"
            )
            self.assertFalse(workflow_execution.is_synced)

    def test_changes_with_different_workflow_execution(self):
        with patch.object(
            Layer1,
            'describe_workflow_execution',
            mock_describe_workflow_execution,
        ):
            workflow_execution = WorkflowExecution(
                self.domain,
                WorkflowType(self.domain, "NonExistentTestType", "1.0"),
                "non-existent-id"
            )
            diffs = workflow_execution.changes

            self.assertIsNotNone(diffs)
            self.assertEqual(len(diffs), 7)

            self.assertTrue(hasattr(diffs[0], 'attr'))
            self.assertTrue(hasattr(diffs[0], 'local'))
            self.assertTrue(hasattr(diffs[0], 'upstream'))

    def test_workflow_execution_changes_with_identical_workflow_execution(self):
        with patch.object(
            Layer1,
            'describe_workflow_execution',
            mock_describe_workflow_execution,
        ):
            mocked = mock_describe_workflow_execution()
            workflow_execution = WorkflowExecution(
                self.domain,
                mocked['executionInfo']['execution']['workflowId'],
                run_id=mocked['executionInfo']['execution']['runId'],
                status=mocked['executionInfo']['executionStatus'],
                task_list=mocked['executionConfiguration']['taskList']['name'],
                child_policy=mocked['executionConfiguration']['childPolicy'],
                execution_timeout=mocked['executionConfiguration']['executionStartToCloseTimeout'],
                tag_list=mocked['executionInfo']['tagList'],
                decision_tasks_timeout=mocked['executionConfiguration']['taskStartToCloseTimeout'],
            )

            diffs = workflow_execution.changes

            self.assertEqual(len(diffs), 0)

    def test_history(self):
        with patch.object(
            self.we.connection,
            'get_workflow_execution_history',
            mock_get_workflow_execution_history
        ):
            history = self.we.history()
            self.assertIsInstance(history, History)