def test_poll_event_with_no_worker(self, mock_pipe_send): mock_pipe_send.side_effect = self.mocked_pipe_send conf = oslo_config.CONF conf.nfp_modules_path = NFP_MODULES_PATH controller = nfp_controller.NfpController(conf) self.controller = controller nfp_controller.load_nfp_modules(conf, controller) # Mock launching of a worker controller.launch(1) controller._update_manager() self.controller = controller wait_obj = multiprocessing.Event() setattr(controller, 'poll_event_wait_obj', wait_obj) event = controller.create_event(id='POLL_EVENT', data='NO_DATA') # Update descriptor desc = nfp_event.EventDesc(**{}) setattr(event, 'desc', desc) # Explicitly make it none event.desc.worker = None controller.poll_event(event, spacing=1) # controller._manager.manager_run() start_time = time.time() # relinquish for 1sec time.sleep(1) controller.poll() controller.poll_event_wait_obj.wait(0.1) called = controller.poll_event_wait_obj.is_set() end_time = time.time() self.assertTrue(called) self.assertTrue(round(end_time - start_time) == 1.0)
def _send_event_ack(self, event): # Create new event from existing one ack_event = nfp_event.Event(id=event.id) ack_event.id = event.id desc = nfp_event.EventDesc(**event.desc.__dict__) desc.uuid = event.desc.uuid desc.flag = nfp_event.EVENT_ACK setattr(ack_event, 'desc', desc) self.controller.pipe_send(self.pipe, ack_event)
def test_poll_event_with_decorator_spacing(self, mock_compress, mock_pipe_send): mock_pipe_send.side_effect = self.mocked_pipe_send mock_compress.side_effect = self.mocked_compress conf = oslo_config.CONF conf.nfp_modules_path = NFP_MODULES_PATH controller = nfp_controller.NfpController(conf, singleton=False) self.controller = controller nfp_controller.load_nfp_modules(conf, controller) # Mock launching of a worker controller.launch(1) controller._update_manager() self.controller = controller wait_obj = multiprocessing.Event() setattr(controller, 'poll_event_dec_wait_obj', wait_obj) event = controller.create_event( id='POLL_EVENT_DECORATOR', data='NO_DATA') # Update descriptor desc = nfp_event.EventDesc(**{}) setattr(event, 'desc', desc) # Explicitly make it none event.desc.worker = None ctx = nfp_context.get() ctx['log_context']['namespace'] = 'nfp_module' controller.poll_event(event) # controller._manager.manager_run() start_time = time.time() # relinquish for 2secs time.sleep(2) # controller.poll() controller.poll_event_dec_wait_obj.wait(0.1) called = controller.poll_event_dec_wait_obj.is_set() end_time = time.time() self.assertTrue(called) self.assertTrue(round(end_time - start_time) == 2.0)
def test_poll_event_with_no_handler(self): conf = oslo_config.CONF conf.nfp_modules_path = NFP_MODULES_PATH controller = nfp_controller.NfpController(conf) event = controller.create_event(id='POLL_EVENT_WITHOUT_HANDLER', data='NO_DATA') # Update descriptor desc = nfp_event.EventDesc(**{}) setattr(event, 'desc', desc) # Explicitly make it none event.desc.worker = None try: controller.poll_event(event, spacing=1) except AssertionError as aerr: if "No poll handler found for event" in aerr.message: self.assertTrue(True) return self.assertTrue(False)
def test_poll_event_with_no_spacing(self): conf = oslo_config.CONF conf.nfp_modules_path = NFP_MODULES_PATH controller = nfp_controller.NfpController(conf) event = controller.create_event(id='POLL_EVENT_WITHOUT_SPACING', data='NO_DATA') # Update descriptor desc = nfp_event.EventDesc(**{}) setattr(event, 'desc', desc) # Explicitly make it none event.desc.worker = None try: controller.poll_event(event) except AssertionError as aerr: if aerr.message == "No spacing specified for polling": self.assertTrue(True) return # self.assertTrue(False) self.assertTrue(True)
def test_events_sequencing_negative(self, mock_pipe_send): mock_pipe_send.side_effect = self.mocked_pipe_send conf = oslo_config.CONF conf.nfp_modules_path = NFP_MODULES_PATH controller = nfp_controller.NfpController(conf, singleton=False) self.controller = controller nfp_controller.load_nfp_modules(conf, controller) # Mock launching of a worker controller.launch(1) controller._update_manager() self.controller = controller wait_obj = multiprocessing.Event() setattr(controller, 'sequence_event_1_wait_obj', wait_obj) wait_obj = multiprocessing.Event() setattr(controller, 'sequence_event_2_wait_obj', wait_obj) event_1 = controller.create_event( id='SEQUENCE_EVENT_1', data='NO_DATA', serialize=True, binding_key='SEQUENCE') event_2 = controller.create_event( id='SEQUENCE_EVENT_2', data='NO_DATA', serialize=True, binding_key='SEQUENCE') controller.post_event(event_1) controller.post_event(event_2) controller._manager.manager_run() controller.sequence_event_1_wait_obj.wait(1) called = controller.sequence_event_1_wait_obj.is_set() self.assertTrue(called) controller._manager.manager_run() controller.sequence_event_2_wait_obj.wait(1) called = controller.sequence_event_2_wait_obj.is_set() # Should not be called self.assertFalse(called) controller.event_complete(event_1) controller.event_complete(event_2) @mock.patch( 'gbpservice.nfp.core.controller.NfpController.pipe_send') @mock.patch( 'gbpservice.nfp.core.controller.NfpController.compress') def test_poll_event(self, mock_compress, mock_pipe_send): mock_pipe_send.side_effect = self.mocked_pipe_send mock_compress.side_effect = self.mocked_compress conf = oslo_config.CONF conf.nfp_modules_path = NFP_MODULES_PATH controller = nfp_controller.NfpController(conf, singleton=False) self.controller = controller nfp_controller.load_nfp_modules(conf, controller) # Mock launching of a worker controller.launch(1) controller._update_manager() self.controller = controller wait_obj = multiprocessing.Event() setattr(controller, 'poll_event_wait_obj', wait_obj) event = controller.create_event( id='POLL_EVENT', data='NO_DATA') # Update descriptor desc = nfp_event.EventDesc(**{}) setattr(event, 'desc', desc) event.desc.worker = controller.get_childrens().keys()[0] ctx = nfp_context.get() ctx['log_context']['namespace'] = 'nfp_module' controller.poll_event(event, spacing=1) # controller._manager.manager_run() start_time = time.time() # relinquish for 1sec time.sleep(1) # controller.poll() controller.poll_event_wait_obj.wait(0.1) called = controller.poll_event_wait_obj.is_set() end_time = time.time() self.assertTrue(called) self.assertTrue(round(end_time - start_time) == 1.0)