Exemple #1
0
    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)
Exemple #4
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)
Exemple #5
0
    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)