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)
示例#2
0
    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'
        })
示例#3
0
    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')
示例#5
0
    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'
        })
示例#6
0
    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'
        })
示例#7
0
    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)
示例#8
0
    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)))
示例#9
0
    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])
示例#10
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'})