class TestMonitorSetup(unittest.TestCase): def setUp(self): global config self.monitor = Monitor(config, name="integration_test", general_config=dict()) # Catches and ignores all the print to stdout in monitor.do_monitoring() self.original_stdout = sys.stdout self.stdout_dump = open("stdout_dump.txt", "w") sys.stdout = self.stdout_dump def update_condition_data(self): return self.monitor.st_pairs[0].source.get_data(), self.monitor.st_pairs[0].trigger.fire_condition_met def test_do_monitoring(self): self.monitor.do_monitoring() data, condition = self.update_condition_data() self.assertTrue((data == 0) and (condition is True)) # No trigger downtime set self.monitor.do_monitoring() data, condition = self.update_condition_data() self.assertTrue((data == 0) and (condition is True)) self.monitor.do_monitoring() data, condition = self.update_condition_data() self.assertTrue((data == 1) and (condition is False)) self.monitor.do_monitoring() data, condition = self.update_condition_data() self.assertTrue(data is None) def tearDown(self): self.monitor = None sys.stdout = self.original_stdout self.stdout_dump.close() os.remove("stdout_dump.txt")
class TestEventTransition(unittest.TestCase): def setUp(self): # Empty Database EventCacheDatabase.clear_all() mock = MagicMock() mock.side_effect = self.retrieve_data_mock PeerplaysEvents.retrieve_data = mock action_mock = MagicMock(return_value=None) action_mock.side_effect = self.action_message_mock Stdout.fire = action_mock def retrieve_data_mock(self): data = None if self.iteration == 0: data = [{ 'event_id': '1.22.1', 'start_time': '2019-01-20T12:00:00', 'status': 'in_progress' }, { 'event_id': '1.22.2', 'start_time': '2019-01-21T12:00:00', 'status': 'in_progress' }, { 'event_id': '1.22.3', 'start_time': '2019-01-22T12:00:00', 'status': 'upcoming' }, { 'event_id': '1.22.4', 'start_time': '2029-01-23T12:00:00', 'status': 'upcoming' }] elif self.iteration == 1: data = [ { 'event_id': '1.22.1', 'start_time': '2019-01-20T12:00:00', 'status': 'finished' }, # finished { 'event_id': '1.22.2', 'start_time': '2019-01-21T12:00:00', 'status': 'in_progress' }, # Not Changed { 'event_id': '1.22.3', 'start_time': '2019-02-22T12:00:00', 'status': 'upcoming' }, # s_t changed { 'event_id': '1.22.4', 'start_time': '2029-01-23T12:00:00', 'status': 'upcoming' }, { 'event_id': '1.22.5', 'start_time': '2019-01-24T12:00:00', 'status': 'upcoming' } ] self.iteration += 1 # set data internally self.monitor.sources[0]._set_data(data) def action_message_mock(self, message): # Every event is printed in a newline, 2 lines are "metadata" self.event_amount = len(message.split("\n")) - 3 def test_database_setup(self): Config.add_general_config(general_config) self.monitor = Monitor(config, name="integration_test", general_config=dict()) self.iteration = 0 self.monitor.do_monitoring() #sleep 2 seconds so the time window is already reached time.sleep(2) self.monitor.do_monitoring() self.assertEqual( EventCacheDatabase.session.query( EventCacheDatabase.EventCache).count(), 5) # only one new event self.assertEqual(self.event_amount, 2) def test_event_transition_with_status(self): Config.add_general_config(general_config) self.monitor = Monitor(config2, name="integration_test", general_config=dict()) self.iteration = 0 self.monitor.do_monitoring() # sleep 2 seconds so the time window is already reached time.sleep(2) self.monitor.do_monitoring() self.assertEqual( EventCacheDatabase.session.query( EventCacheDatabase.EventCache).count(), 5) # only one new event # Event 1.22.4 doesnt matter because we dont care about upcoming events self.assertEqual(self.event_amount, 1) def tearDown(self): pass