def test_get_all(self): resp = stream.StreamController().get_all() self.assertEqual(resp._status, '200 OK') self.assertIn(('Content-Type', 'text/event-stream; charset=UTF-8'), resp._headerlist) listener = st2common.stream.listener.get_listener(name='stream') process = listener.processor(LiveActionAPI) message = None for message in resp._app_iter: if message != '\n': break process(LiveActionDB(**LIVE_ACTION_1), META()) self.assertIn('event: some__thing', message) self.assertIn('data: {"', message) self.assertNotIn(SUPER_SECRET_PARAMETER, message)
def test_get_all(self): resp = stream.StreamController().get_all() self.assertEqual(resp._status, "200 OK") self.assertIn(("Content-Type", "text/event-stream; charset=UTF-8"), resp._headerlist) listener = st2common.stream.listener.get_listener(name="stream") process = listener.processor(LiveActionAPI) message = None for message in resp._app_iter: message = message.decode("utf-8") if message != "\n": break process(LiveActionDB(**LIVE_ACTION_1), META()) self.assertIn("event: some__thing", message) self.assertIn('data: {"', message) self.assertNotIn(SUPER_SECRET_PARAMETER, message)
def test_get_all_with_filters(self): cfg.CONF.set_override(name='heartbeat', group='stream', override=0.1) listener = st2common.stream.listener.get_listener(name='stream') process_execution = listener.processor(ActionExecutionAPI) process_liveaction = listener.processor(LiveActionAPI) process_output = listener.processor(ActionExecutionOutputAPI) process_no_api_model = listener.processor() execution_api = ActionExecutionDB(**EXECUTION_1) liveaction_api = LiveActionDB(**LIVE_ACTION_1) output_api_stdout = ActionExecutionOutputDB(**STDOUT_1) output_api_stderr = ActionExecutionOutputDB(**STDERR_1) def dispatch_and_handle_mock_data(resp): received_messages_data = '' for index, message in enumerate(resp._app_iter): if message.strip(): received_messages_data += message # Dispatch some mock events if index == 0: meta = META('st2.execution', 'create') process_execution(execution_api, meta) elif index == 1: meta = META('st2.execution', 'update') process_execution(execution_api, meta) elif index == 2: meta = META('st2.execution', 'delete') process_execution(execution_api, meta) elif index == 3: meta = META('st2.liveaction', 'create') process_liveaction(liveaction_api, meta) elif index == 4: meta = META('st2.liveaction', 'create') process_liveaction(liveaction_api, meta) elif index == 5: meta = META('st2.liveaction', 'delete') process_liveaction(liveaction_api, meta) elif index == 6: meta = META('st2.liveaction', 'delete') process_liveaction(liveaction_api, meta) elif index == 7: meta = META('st2.announcement', 'chatops') process_no_api_model({}, meta) elif index == 8: meta = META('st2.execution.output', 'create') process_output(output_api_stdout, meta) elif index == 9: meta = META('st2.execution.output', 'create') process_output(output_api_stderr, meta) elif index == 10: meta = META('st2.announcement', 'errbot') process_no_api_model({}, meta) else: break received_messages = received_messages_data.split('\n\n') received_messages = [message for message in received_messages if message] return received_messages # 1. Default filter - stdout and stderr messages should be excluded for backward # compatibility reasons resp = stream.StreamController().get_all() received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 9) self.assertTrue('st2.execution__create' in received_messages[0]) self.assertTrue('st2.liveaction__delete' in received_messages[5]) self.assertTrue('st2.announcement__chatops' in received_messages[7]) self.assertTrue('st2.announcement__errbot' in received_messages[8]) # 1. ?events= filter # No filter provided - all messages should be received stream.DEFAULT_EVENTS_WHITELIST = None resp = stream.StreamController().get_all() received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 11) self.assertTrue('st2.execution__create' in received_messages[0]) self.assertTrue('st2.announcement__chatops' in received_messages[7]) self.assertTrue('st2.execution.output__create' in received_messages[8]) self.assertTrue('st2.execution.output__create' in received_messages[9]) self.assertTrue('st2.announcement__errbot' in received_messages[10]) # Filter provided, only three messages should be received events = ['st2.execution__create', 'st2.liveaction__delete'] resp = stream.StreamController().get_all(events=events) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 3) self.assertTrue('st2.execution__create' in received_messages[0]) self.assertTrue('st2.liveaction__delete' in received_messages[1]) self.assertTrue('st2.liveaction__delete' in received_messages[2]) # Filter provided, only three messages should be received events = ['st2.liveaction__create', 'st2.liveaction__delete'] resp = stream.StreamController().get_all(events=events) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 4) self.assertTrue('st2.liveaction__create' in received_messages[0]) self.assertTrue('st2.liveaction__create' in received_messages[1]) self.assertTrue('st2.liveaction__delete' in received_messages[2]) self.assertTrue('st2.liveaction__delete' in received_messages[3]) # Glob filter events = ['st2.announcement__*'] resp = stream.StreamController().get_all(events=events) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 2) self.assertTrue('st2.announcement__chatops' in received_messages[0]) self.assertTrue('st2.announcement__errbot' in received_messages[1]) # Filter provided events = ['st2.execution.output__create'] resp = stream.StreamController().get_all(events=events) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 2) self.assertTrue('st2.execution.output__create' in received_messages[0]) self.assertTrue('st2.execution.output__create' in received_messages[1]) # Filter provided, invalid , no message should be received events = ['invalid1', 'invalid2'] resp = stream.StreamController().get_all(events=events) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 0) # 2. ?action_refs= filter action_refs = ['invalid1', 'invalid2'] resp = stream.StreamController().get_all(action_refs=action_refs) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 0) action_refs = ['dummy.action1'] resp = stream.StreamController().get_all(action_refs=action_refs) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 2) # 3. ?execution_ids= filter execution_ids = ['invalid1', 'invalid2'] resp = stream.StreamController().get_all(execution_ids=execution_ids) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 0) execution_ids = [EXECUTION_1['id']] resp = stream.StreamController().get_all(execution_ids=execution_ids) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 5)
def test_get_all(self): resp = stream.StreamController().get_all() self.assertIsInstance(resp._app_iter, mock.Mock) self.assertEqual(resp._status, '200 OK') self.assertIn(('Content-Type', 'text/event-stream; charset=UTF-8'), resp._headerlist)
def test_get_all_with_filters(self): cfg.CONF.set_override(name='heartbeat', group='stream', override=0.1) listener = st2stream.listener.get_listener() process_execution = listener.processor(ActionExecutionAPI) process_liveaction = listener.processor(LiveActionAPI) execution_api = ActionExecutionDB(**EXECUTION_1) liveaction_api = LiveActionDB(**LIVE_ACTION_1) liveaction_api_2 = LiveActionDB(**LIVE_ACTION_1) liveaction_api_2.action = 'dummy.action1' def dispatch_and_handle_mock_data(resp): received_messages_data = '' for index, message in enumerate(resp._app_iter): if message.strip(): received_messages_data += message # Dispatch some mock events if index == 0: meta = META('st2.execution', 'create') process_execution(execution_api, meta) elif index == 1: meta = META('st2.execution', 'update') process_execution(execution_api, meta) elif index == 2: meta = META('st2.execution', 'delete') process_execution(execution_api, meta) elif index == 3: meta = META('st2.liveaction', 'create') process_liveaction(liveaction_api, meta) elif index == 4: meta = META('st2.liveaction', 'create') process_liveaction(liveaction_api, meta) elif index == 5: meta = META('st2.liveaction', 'delete') process_liveaction(liveaction_api_2, meta) else: break received_messages = received_messages_data.split('\n\n') received_messages = [message for message in received_messages if message] return received_messages # 1. Default filter resp = stream.StreamController().get_all() received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 6) # 1. ?events= filter # No filter provided - all messages should be received resp = stream.StreamController().get_all() received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 6) # Filter provided, only two messages should be received events = ['st2.execution__create', 'st2.liveaction__delete'] events = ','.join(events) resp = stream.StreamController().get_all(events=events) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 2) # Filter provided, invalid , no message should be received events = ['invalid1', 'invalid2'] events = ','.join(events) resp = stream.StreamController().get_all(events=events) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 0) # 2. ?action_refs= filter action_refs = ['invalid1', 'invalid2'] action_refs = ','.join(action_refs) resp = stream.StreamController().get_all(action_refs=action_refs) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 0) action_refs = ['dummy.action1'] action_refs = ','.join(action_refs) resp = stream.StreamController().get_all(action_refs=action_refs) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 1) # 3. ?execution_ids= filter execution_ids = ['invalid1', 'invalid2'] execution_ids = ','.join(execution_ids) resp = stream.StreamController().get_all(execution_ids=execution_ids) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 0) execution_ids = [EXECUTION_1['id']] execution_ids = ','.join(execution_ids) resp = stream.StreamController().get_all(execution_ids=execution_ids) received_messages = dispatch_and_handle_mock_data(resp) self.assertEqual(len(received_messages), 3)