Exemple #1
0
class TestVirtualPinball(MpfTestCase):

    def __init__(self, methodName):
        super().__init__(methodName)
        # remove config patch which disables bcp
        del self.machine_config_patches['bcp']
        self.machine_config_patches['bcp'] = dict()
        self.machine_config_patches['bcp']['connections'] = []

    def get_config_file(self):
        return 'config.yaml'

    def get_machine_path(self):
        return 'tests/machine_files/virtual_pinball/'

    def get_use_bcp(self):
        return True

    def _mock_loop(self):
        self.mock_server = MockServer(self.clock.loop)
        self.clock.mock_server("127.0.0.1", 5051, self.mock_server)

    @staticmethod
    async def _get_and_decode(client) -> Tuple[str, dict]:
        data = await client.send_queue.get()
        return decode_command_string(data[0:-1].decode())

    def _encode_and_send(self, client, cmd, **kwargs):
        client.recv_queue.append((encode_command_string(cmd, **kwargs) + '\n').encode())

    def test_virtual_pinball(self):
        # connect a client
        client = MockQueueSocket(self.loop)
        self.loop.run_until_complete(self.mock_server.add_client(client))

        # check hello
        cmd, args = self.loop.run_until_complete(self._get_and_decode(client))
        self.assertEqual("hello", cmd)

        self._encode_and_send(client, "monitor_start", category="switches")
        self._encode_and_send(client, "monitor_start", category="drivers")
        self._encode_and_send(client, "monitor_start", category="devices")

        self.advance_time_and_run()
        client.send_queue = asyncio.Queue()

        self.machine.lights["test_light1"].on()

        cmd, args = self.loop.run_until_complete(self._get_and_decode(client))
        self.assertEqual("device", cmd)
        self.assertEqual("test_light1", args['name'])
        self.assertEqual("light", args['type'])
        self.assertEqual({'color': [255, 255, 255]}, args['state'])

        self.machine.coils["c_test"].pulse()
        self.advance_time_and_run()

        cmd, args = self.loop.run_until_complete(self._get_and_decode(client))
        self.assertEqual("driver_event", cmd)
        self.assertEqual("pulse", args['action'])
        self.assertEqual("c_test", args['name'])
        self.assertEqual("0-0", args['number'])
        self.assertEqual(23, args['pulse_ms'])
        self.assertEqual(1.0, args['pulse_power'])

        self.machine.coils["c_test_allow_enable"].enable()
        cmd, args = self.loop.run_until_complete(self._get_and_decode(client))
        self.assertEqual("driver_event", cmd)
        self.assertEqual("enable", args['action'])
        self.assertEqual("c_test_allow_enable", args['name'])
        self.assertEqual("0-1", args['number'])
        self.assertEqual(23, args['pulse_ms'])
        self.assertEqual(1.0, args['pulse_power'])
        self.assertEqual(1.0, args['hold_power'])

        self.machine.coils["c_test_allow_enable"].disable()
        cmd, args = self.loop.run_until_complete(self._get_and_decode(client))
        self.assertEqual("driver_event", cmd)
        self.assertEqual("disable", args['action'])
        self.assertEqual("c_test_allow_enable", args['name'])
        self.assertEqual("0-1", args['number'])

        self.machine.flippers["f_test_single"].enable()
        cmd, args = self.loop.run_until_complete(self._get_and_decode(client))
        self.assertEqual("device", cmd)
        self.assertEqual("f_test_single", args['name'])
        self.assertEqual("flipper", args['type'])
        self.assertEqual({"enabled": True}, args['state'])

        cmd, args = self.loop.run_until_complete(self._get_and_decode(client))
        self.assertEqual("driver_event", cmd)
        self.assertEqual({'enable_switch_invert': False,
                          'coil_name': 'c_flipper_main',
                          'coil_pulse_power': 1.0,
                          'coil_hold_power': 'HoldSettings(power=0.375)',
                          'enable_switch_name': 's_flipper',
                          'enable_switch_number': '0-3',
                          'coil_pulse_ms': 10,
                          'coil_number': '0-3',
                          'action': 'pulse_on_hit_and_enable_and_release',
                          'coil_recycle': False,
                          'enable_switch_debounce': False}, args)

        self.machine.flippers["f_test_single"].disable()
        cmd, args = self.loop.run_until_complete(self._get_and_decode(client))
        self.assertEqual("driver_event", cmd)
        self.assertEqual({'coil_number': '0-3',
                          'enable_switch_invert': False,
                          'action': 'remove',
                          'enable_switch_number': '0-3'}, args)

        cmd, args = self.loop.run_until_complete(self._get_and_decode(client))
        self.assertEqual("device", cmd)
        self.assertEqual("f_test_single", args['name'])
        self.assertEqual("flipper", args['type'])
        self.assertEqual({"enabled": False}, args['state'])

        self.assertSwitchState("s_test_nc", 0)

        self._encode_and_send(client, "switch", name="s_test_nc", state=1)
        self.advance_time_and_run()
        self.assertSwitchState("s_test_nc", 1)
Exemple #2
0
 def _mock_loop(self):
     self.mock_server = MockServer(self.clock.loop)
     self.clock.mock_server("127.0.0.1", 5051, self.mock_server)
Exemple #3
0
class TestBcp(MpfTestCase):
    def __init__(self, methodName):
        super().__init__(methodName)
        # remove config patch which disables bcp
        del self.machine_config_patches['bcp']
        self.machine_config_patches['bcp'] = dict()
        self.machine_config_patches['bcp']['connections'] = []

    def get_use_bcp(self):
        return True

    def _mock_loop(self):
        self.mock_server = MockServer(self.clock.loop)
        self.clock.mock_server("127.0.0.1", 5051, self.mock_server)

    def testConnect(self):
        # check that server was opened
        self.assertTrue(self.mock_server.is_bound)

        # add client
        client = MockQueueSocket()
        self.mock_server.add_client(client)
        self.advance_time_and_run()

        # check hello
        self.assertEqual(1, len(client.send_queue))
        cmd, kwargs = decode_command_string(
            client.send_queue.pop()[0:-1].decode())
        self.assertEqual("hello", cmd)

        # test trigger
        self.mock_event("test_event")
        client.recv_queue.append(
            (encode_command_string("trigger", name="test_event") +
             '\n').encode())
        self.advance_time_and_run()
        self.assertEqual(1, self._events['test_event'])

        # register for event/trigger
        client.recv_queue.append(
            (encode_command_string("register_trigger", event="test_trigger") +
             '\n').encode())
        self.advance_time_and_run()
        self.assertEqual(0, len(client.send_queue))

        # post trigger event
        self.post_event("test_trigger")
        self.advance_time_and_run()
        self.assertEqual(1, len(client.send_queue))
        cmd, kwargs = decode_command_string(
            client.send_queue.pop()[0:-1].decode())
        self.assertEqual("trigger", cmd)
        self.assertEqual("test_trigger", kwargs['name'])

        # send goodbye. machine should continue to run.
        client.close = MagicMock()
        client.recv_queue.append(
            (encode_command_string("goodbye") + '\n').encode())
        self.advance_time_and_run()

        client.close.assert_called_with()

        self.assertFalse(self.machine._done)