Exemplo n.º 1
0
    async def test_update_input(self):
        """
        Test updating inputs to new values
        """
        # Test zero initial values
        obj_under_test = StateMachineInputs()
        for i, input in enumerate(TestStateMachine.INPUTS):
            self.assertEqual(obj_under_test.__dict__[input], 0)
            await obj_under_test.update_input(input, i)
            self.assertEqual(obj_under_test.__dict__[input], i)

        # Test all initial values
        TEST_VALUE = 123
        kwargs = {input: TEST_VALUE for input in TestStateMachine.INPUTS}
        obj_under_test = StateMachineInputs(**kwargs)
        for i, input in enumerate(TestStateMachine.INPUTS):
            self.assertEqual(obj_under_test.__dict__[input], TEST_VALUE)
            await obj_under_test.update_input(input, i)
            self.assertEqual(obj_under_test.__dict__[input], i)

        # Test some initial values
        TEST_VALUE = 8687687
        random_samples = random.sample(TestStateMachine.INPUTS, 5)
        kwargs = {sample: TEST_VALUE for sample in random_samples}
        obj_under_test = StateMachineInputs(**kwargs)
        for i, sample in enumerate(random_samples):
            self.assertEqual(obj_under_test.__dict__[sample], TEST_VALUE)
            await obj_under_test.update_input(input, i)
            self.assertEqual(obj_under_test.__dict__[input], i)

        # Test invalid inputs
        await obj_under_test.update_input("INVALID_INPUT", "INVALID")
        _LOG_TEST_FUNC()
Exemplo n.º 2
0
 async def test_deliver_package(self):
     state_machine_inputs = StateMachineInputs()
     state_machine = StateMachine(state_machine_inputs)
     # Transition to LOOKING_FOR_PATH
     state_machine_inputs.found_house = True
     await state_machine.run()
     # Transition to FOUND_PATH_TO_HOUSE
     state_machine_inputs.found_path = True
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.FOUND_PATH_TO_HOUSE)
     # Transition to NAVIGATING_PATH
     state_machine_inputs.ready_to_go_down_path = True
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.NAVIGATING_PATH)
     # Transition to REACHED_DOOR
     state_machine_inputs.left_ir_sensor = 49
     state_machine_inputs.right_ir_sensor = 49
     state_machine_inputs.bottom_ir_sensor = 49
     await state_machine.run()
     self.assertEqual(state_machine.current_state, SystemState.REACHED_DOOR)
     # Stay in REACHED_DOOR
     state_machine_inputs.ready_to_drop_package = False
     await state_machine.run()
     self.assertEqual(state_machine.current_state, SystemState.REACHED_DOOR)
     # Transition to DELIVER_PACKAGE
     state_machine_inputs.ready_to_drop_package = True
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.DELIVER_PACKAGE)
     _LOG_TEST_FUNC()
Exemplo n.º 3
0
    async def test_init(self):
        """
        Test initializing the object's member variables
        """
        # Test zero initial values
        obj_under_test = StateMachineInputs()
        for input in TestStateMachine.INPUTS:
            self.assertEqual(obj_under_test.__dict__[input], 0)

        # Test all initial values
        TEST_VALUE = 123
        kwargs = {input: TEST_VALUE for input in TestStateMachine.INPUTS}
        obj_under_test = StateMachineInputs(**kwargs)
        for input in TestStateMachine.INPUTS:
            self.assertEqual(obj_under_test.__dict__[input], TEST_VALUE)

        # Test some initial values
        TEST_VALUE = 8687687
        random_samples = random.sample(TestStateMachine.INPUTS, 5)
        kwargs = {sample: TEST_VALUE for sample in random_samples}
        obj_under_test = StateMachineInputs(**kwargs)
        for sample in random_samples:
            self.assertEqual(obj_under_test.__dict__[sample], TEST_VALUE)

        _LOG_TEST_FUNC()
Exemplo n.º 4
0
 async def test_looking_for_path(self):
     state_machine_inputs = StateMachineInputs()
     state_machine = StateMachine(state_machine_inputs)
     # Stays in NAVIGATING_SIDEWALK
     state_machine_inputs.found_house = False
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.NAVIGATING_SIDEWALK)
     # Transition to LOOKING_FOR_PATH
     state_machine_inputs.found_house = True
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.LOOKING_FOR_PATH)
     _LOG_TEST_FUNC()
Exemplo n.º 5
0
    async def test_task_state_machine(self):
        """
        This task does not really need to be tested, all it does is run the StateMachine and sleep
        """

        TEST_INPUTS = StateMachineInputs()
        await tasks.task_state_machine(TEST_INPUTS)
Exemplo n.º 6
0
    async def _register_server_background_tasks_on_startup(self, app):
        """
        Startup handler for registering background tasks
        """
        CONFIG_JSON_FILE = "config.json"

        # Parse configurations
        with open(CONFIG_JSON_FILE, "r") as config_file:
            configuration = json.load(config_file)
            protocol_json_file = configuration["protocol_json_file"]["value"]

        # Shared task variables
        state_machine_inputs = StateMachineInputs(
        )  # Bundled state machine inputs object
        log_store = LogStore(protocol_json_file)  # Stores logging data
        packet_queue = asyncio.Queue(100)  # Logging packet queue

        # Tasks that run in the background of the web server
        app["background_tasks"] = [
            app.loop.create_task(
                tasks.task_state_machine(state_machine_inputs)),
            app.loop.create_task(
                tasks.task_consume_logging_packets(packet_queue,
                                                   state_machine_inputs,
                                                   log_store,
                                                   protocol_json_file), ),
        ]

        # This coroutine is enabled by the passed in flag
        if self.open_browser:
            app["background_tasks"].append(
                app.loop.create_task(tasks.task_open_browser(True)), )

        # Add a reader (asynchronous interrupt) to the event loop for UART serial data
        self._add_reader_process_uart(packet_queue)
Exemplo n.º 7
0
 async def test_found_path_to_found(self):
     state_machine_inputs = StateMachineInputs()
     state_machine = StateMachine(state_machine_inputs)
     # Transition to LOOKING_FOR_PATH
     state_machine_inputs.found_house = True
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.LOOKING_FOR_PATH)
     # Stay in LOOKING_FOR_PATH
     state_machine_inputs.found_path = False
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.LOOKING_FOR_PATH)
     # Transition to FOUND_PATH_TO_HOUSE
     state_machine_inputs.found_path = True
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.FOUND_PATH_TO_HOUSE)
     _LOG_TEST_FUNC()
Exemplo n.º 8
0
    async def test_task_consume_logging_packets(self):
        """
        Tests an infrared_log_type packet in the queue
        """
        TEST_QUEUE     = asyncio.Queue()
        TEST_SM_INPUTS = StateMachineInputs()
        TEST_LOG_STORE = LogStore(TestTask_ConsumeLoggingPackets.TEST_JSON_FILE)
        TEST_PACKET    = LogPacket(type=6, length=1, payload="x")

        await TEST_QUEUE.put(TEST_PACKET)

        with patch("tasks.tasks.state_machine_inputs.StateMachineInputs.update_input") as patcher:
            await tasks.task_consume_logging_packets(
                TEST_QUEUE,
                TEST_SM_INPUTS,
                TEST_LOG_STORE,
                TestTask_ConsumeLoggingPackets.TEST_JSON_FILE
            )
            patcher.assert_called_once_with(6, "x")
Exemplo n.º 9
0
 async def test_navigation_path(self):
     state_machine_inputs = StateMachineInputs()
     state_machine = StateMachine(state_machine_inputs)
     # Transition to LOOKING_FOR_PATH
     state_machine_inputs.found_house = True
     await state_machine.run()
     # Transition to FOUND_PATH_TO_HOUSE
     state_machine_inputs.found_path = True
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.FOUND_PATH_TO_HOUSE)
     # Stay in FOUND_PATH_TO_HOUSE
     state_machine_inputs.ready_to_go_down_path = False
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.FOUND_PATH_TO_HOUSE)
     # Transition to NAVIGATING_PATH
     state_machine_inputs.ready_to_go_down_path = True
     await state_machine.run()
     self.assertEqual(state_machine.current_state,
                      SystemState.NAVIGATING_PATH)
     _LOG_TEST_FUNC()
Exemplo n.º 10
0
 async def test_navigating_sidewalk(self):
     state_machine_inputs = StateMachineInputs()
     state_machine = StateMachine(state_machine_inputs)
     self.assertEqual(state_machine.current_state,
                      SystemState.NAVIGATING_SIDEWALK)
     _LOGGER.info(inspect.stack()[0].function)