def test_execute_workflow_change_arguments(self): playbook = execution_db_help.standard_load() workflow = executiondb.execution_db.session.query(Workflow).filter_by( playbook_id=playbook.id).first() action_ids = [ action.id for action in workflow.actions if action.name == 'start' ] setup_subscriptions_for_action(workflow.id, action_ids) result = {'count': 0} @WalkoffEvent.ActionExecutionSuccess.connect def y(sender, **kwargs): result['count'] += 1 data = { "workflow_id": str(workflow.id), "arguments": [{ "name": "call", "value": "CHANGE INPUT" }] } self.post_with_status_check('/api/workflowqueue', headers=self.headers, status_code=SUCCESS_ASYNC, content_type="application/json", data=json.dumps(data)) flask_server.running_context.executor.wait_and_reset(1) self.assertEqual(result['count'], 1)
def test_execute_workflow(self): workflow = flask_server.running_context.controller.get_workflow( 'test', 'helloWorldWorkflow') action_uids = [ action.uid for action in workflow.actions.values() if action.name == 'start' ] setup_subscriptions_for_action(workflow.uid, action_uids) start = datetime.utcnow() response = self.post_with_status_check( '/api/playbooks/test/workflows/helloWorldWorkflow/execute', headers=self.headers, data=json.dumps({}), status_code=SUCCESS_ASYNC, content_type="application/json") flask_server.running_context.controller.wait_and_reset(1) self.assertIn('id', response) actions = [] for uid in action_uids: actions.extend(executed_actions(uid, start, datetime.utcnow())) self.assertEqual(len(actions), 1) action = actions[0] result = action['data'] self.assertEqual(result, { 'status': 'Success', 'result': 'REPEATING: Hello World' })
def test_abort_workflow(self): execution_db_help.load_playbook('pauseWorkflowTest') workflow = self.app.running_context.execution_db.session.query(Workflow).filter_by(name='pauseWorkflow').first() action_ids = [action.id for action in workflow.actions if action.name == 'start'] setup_subscriptions_for_action(workflow.id, action_ids) result = {"aborted": False} @WalkoffEvent.ActionExecutionSuccess.connect def y(sender, **kwargs): self.act_on_workflow(response['id'], 'abort') @WalkoffEvent.WorkflowAborted.connect def workflow_aborted_listener(sender, **kwargs): result['aborted'] = True response = self.post_with_status_check('/api/workflowqueue', headers=self.headers, status_code=SUCCESS_ASYNC, content_type="application/json", data=json.dumps({'workflow_id': str(workflow.id)})) current_app.running_context.executor.wait_and_reset(1) self.assertIn('id', response) self.assertTrue(result['aborted']) workflow_status = self.app.running_context.execution_db.session.query(WorkflowStatus).filter_by( execution_id=response['id']).first() self.assertIsNotNone(workflow_status) self.assertEqual(workflow_status.status.name, 'aborted')
def test_execute_workflow(self): playbook = execution_db_help.standard_load() workflow = executiondb.execution_db.session.query(Workflow).filter_by( playbook_id=playbook.id).first() action_ids = [ action.id for action in workflow.actions if action.name == 'start' ] setup_subscriptions_for_action(workflow.id, action_ids) result = {'count': 0} @WalkoffEvent.ActionExecutionSuccess.connect def y(sender, **kwargs): result['count'] += 1 response = self.post_with_status_check( '/api/workflowqueue', headers=self.headers, status_code=SUCCESS_ASYNC, content_type="application/json", data=json.dumps({'workflow_id': str(workflow.id)})) flask_server.running_context.executor.wait_and_reset(1) self.assertIn('id', response) self.assertEqual(result['count'], 1) workflow_status = executiondb.execution_db.session.query( WorkflowStatus).filter_by(execution_id=response['id']).first() self.assertIsNotNone(workflow_status) self.assertEqual(workflow_status.status.name, 'completed')
def test_execute_workflow_change_arguments(self): workflow = flask_server.running_context.controller.get_workflow( 'test', 'helloWorldWorkflow') action_uids = [ action.uid for action in workflow.actions.values() if action.name == 'start' ] setup_subscriptions_for_action(workflow.uid, action_uids) result = {'count': 0} @WalkoffEvent.ActionExecutionSuccess.connect def y(sender, **kwargs): result['count'] += 1 result['data'] = kwargs['data'] data = {"arguments": [{"name": "call", "value": "CHANGE INPUT"}]} self.post_with_status_check( '/api/playbooks/test/workflows/helloWorldWorkflow/execute', headers=self.headers, status_code=SUCCESS_ASYNC, content_type="application/json", data=json.dumps(data)) flask_server.running_context.controller.wait_and_reset(1) self.assertEqual(result['count'], 1) self.assertDictEqual(result['data'], { 'status': 'Success', 'result': 'REPEATING: CHANGE INPUT' })
def test_execute_workflow(self): sync = Event() workflow = flask_server.running_context.controller.get_workflow( 'test', 'helloWorldWorkflow') action_uids = [ action.uid for action in workflow.actions.values() if action.name == 'start' ] setup_subscriptions_for_action(workflow.uid, action_uids) @WalkoffEvent.WorkflowShutdown.connect def wait_for_completion(sender, **kwargs): sync.set() result = {'count': 0} @WalkoffEvent.ActionExecutionSuccess.connect def y(sender, **kwargs): result['count'] += 1 result['data'] = kwargs['data'] response = self.post_with_status_check( '/api/playbooks/test/workflows/helloWorldWorkflow/execute', headers=self.headers, status_code=SUCCESS_ASYNC, content_type="application/json", data=json.dumps({})) flask_server.running_context.controller.wait_and_reset(1) self.assertIn('id', response) sync.wait(timeout=10) self.assertEqual(result['count'], 1) self.assertDictEqual(result['data'], { 'status': 'Success', 'result': 'REPEATING: Hello World' })
def test_execute_workflow_pause_resume(self): sync = Event() flask_server.running_context.controller.load_playbook( os.path.join(".", "tests", "testWorkflows", "pauseWorkflowTest.playbook")) workflow = flask_server.running_context.controller.get_workflow('pauseWorkflowTest', 'pauseWorkflow') action_uids = [action.uid for action in workflow.actions.values() if action.name == 'start'] setup_subscriptions_for_action(workflow.uid, action_uids) result = {'paused': False, 'count': 0, 'data': []} @WalkoffEvent.ActionExecutionSuccess.connect def y(sender, **kwargs): result['count'] += 1 result['data'].append(kwargs['data']) if not result['paused']: result['response2'] = self.post_with_status_check( '/api/playbooks/pauseWorkflowTest/workflows/pauseWorkflow/pause', headers=self.headers, status_code=SUCCESS, content_type="application/json", data=json.dumps(response)) @WalkoffEvent.WorkflowPaused.connect def workflow_paused_listener(sender, **kwargs): result['paused'] = True result['response3'] = self.post_with_status_check( '/api/playbooks/pauseWorkflowTest/workflows/pauseWorkflow/resume', headers=self.headers, status_code=SUCCESS, content_type="application/json", data=json.dumps(response)) @WalkoffEvent.WorkflowResumed.connect def workflow_resumed_listner(sender, **kwargs): result['resumed'] = True @WalkoffEvent.WorkflowShutdown.connect def wait_for_completion(sender, **kwargs): sync.set() response = self.post_with_status_check('/api/playbooks/pauseWorkflowTest/workflows/pauseWorkflow/execute', headers=self.headers, status_code=SUCCESS_ASYNC, content_type="application/json", data=json.dumps({})) flask_server.running_context.controller.wait_and_reset(1) sync.wait(timeout=10) self.assertIn('id', response) self.assertTrue(result['paused']) self.assertTrue(result['resumed']) self.assertEqual(result['count'], 3) self.assertDictEqual(result['response2'], {'info': 'Workflow paused'}) self.assertDictEqual(result['response3'], {'info': 'Workflow resumed'}) expected_data = [{'status': 'Success', 'result': {'message': 'HELLO WORLD'}}, {'status': 'Success', 'result': None}, {'status': 'Success', 'result': None}] self.assertEqual(len(result['data']), len(expected_data)) for exp, act in zip(expected_data, result['data']): self.assertDictEqual(exp, act)
def test_templated_workflow(self): action_names = ['start', '1'] workflow = self.controller.get_workflow('templatedWorkflowTest', 'templatedWorkflow') action_uids = [action.uid for action in workflow.actions.values() if action.name in action_names] setup_subscriptions_for_action(workflow.uid, action_uids) self.controller.execute_workflow('templatedWorkflowTest', 'templatedWorkflow') self.controller.wait_and_reset(1) actions = [] for uid in action_uids: actions.extend(executed_actions(uid, self.start, datetime.utcnow())) self.assertEqual(len(actions), 2, 'Unexpected number of actions executed. ' 'Expected {0}, got {1}'.format(2, len(actions)))
def test_execute_workflow_change_env_vars(self): playbook = execution_db_help.standard_load() workflow = self.app.running_context.execution_db.session.query( Workflow).filter_by(playbook_id=playbook.id).first() env_var_id = str(uuid4()) workflow.actions[0].arguments[0].value = None workflow.actions[0].arguments[0].reference = env_var_id action_ids = [ action.id for action in workflow.actions if action.name == 'start' ] setup_subscriptions_for_action(workflow.id, action_ids) result = {'count': 0, 'output': None} @WalkoffEvent.ActionExecutionSuccess.connect def y(sender, **kwargs): result['count'] += 1 result['output'] = kwargs['data']['data']['result'] data = { "workflow_id": str(workflow.id), "environment_variables": [{ "id": env_var_id, "value": "CHANGE INPUT" }] } response = self.post_with_status_check('/api/workflowqueue', headers=self.headers, status_code=SUCCESS_ASYNC, content_type="application/json", data=json.dumps(data)) current_app.running_context.executor.wait_and_reset(1) self.assertEqual(result['count'], 1) self.assertEqual(result['output'], 'REPEATING: CHANGE INPUT') action = current_app.running_context.execution_db.session.query( ActionStatus).filter(ActionStatus._workflow_status_id == UUID( response['id'])).first() arguments = json.loads(action.arguments) self.assertEqual(arguments[0]["name"], "call") self.assertIn('reference', arguments[0])
def test_execute_workflow(self): workflow = execution_db_help.load_workflow('test', 'helloWorldWorkflow') action_ids = [action.id for action in workflow.actions if action.name == 'start'] setup_subscriptions_for_action(workflow.id, action_ids) start = datetime.utcnow() data = {"workflow_id": str(workflow.id)} response = self.post_with_status_check('/api/workflowqueue', headers=self.headers, data=json.dumps(data), status_code=SUCCESS_ASYNC, content_type="application/json") flask_server.running_context.executor.wait_and_reset(1) self.assertIn('id', response) actions = [] for id_ in action_ids: actions.extend(executed_actions(id_, start, datetime.utcnow())) self.assertEqual(len(actions), 1) action = actions[0] result = action['data'] self.assertEqual(result, {'status': 'Success', 'result': 'REPEATING: Hello World'})