Пример #1
0
    def test_ai_calibrate_nodes(self):
        intf = MockInterface(1)
        node = intf.nodes[0]
        node.ai_calibrate = True
        node.first_cross_flag = True
        node.enter_at_level = 12
        node.exit_at_level = 12
        rssis = [2, 2, 3, 4, 2, 4, 20, 22, 18, 2, 3, 4, 2]
        node.history.set(list(range(len(rssis))), rssis)
        new_enter_at_level = None
        new_exit_at_level = None

        def new_enter_callback(node, enter_level):
            nonlocal new_enter_at_level
            new_enter_at_level = enter_level

        def new_exit_callback(node, exit_level):
            nonlocal new_exit_at_level
            new_exit_at_level = exit_level

        intf.listener.on_enter_trigger_changed = new_enter_callback
        intf.listener.on_exit_trigger_changed = new_exit_callback
        intf.ai_calibrate_nodes()
        self.assertEqual(new_enter_at_level, 11)
        self.assertEqual(new_exit_at_level, 9)
Пример #2
0
    def test_calibrate_nodes(self):
        intf = MockInterface(1)
        node = intf.nodes[0]
        node.ai_calibrate = True
        history_values = [2, 2, 3, 4, 2, 4, 20, 22, 18, 2, 3, 4, 2]
        history_times = list(range(len(history_values)))
        new_enter_at_level = None
        new_exit_at_level = None

        def new_enter_callback(node, enter_level):
            nonlocal new_enter_at_level
            new_enter_at_level = enter_level

        def new_exit_callback(node, exit_level):
            nonlocal new_exit_at_level
            new_exit_at_level = exit_level

        intf.listener.on_enter_trigger_changed = new_enter_callback
        intf.listener.on_exit_trigger_changed = new_exit_callback
        intf.calibrate_nodes(
            0, {
                0: ([{
                    'lap_time_stamp': 7000,
                    'deleted': False
                }], history_times, history_values)
            })
        self.assertEqual(new_enter_at_level, 11)
        self.assertEqual(new_exit_at_level, 6)
Пример #3
0
    def check_mqtt_pass(self, mqtt_lap_source, expected_lap_source):
        hw = MockInterface(1)
        ann_topic = '/ann'
        timer_id = 'local'
        new_lap_ts = None
        new_lap_source = None

        def pass_record_callback(node, lap_ts, lap_source):
            nonlocal new_lap_ts
            nonlocal new_lap_source
            new_lap_ts = lap_ts
            new_lap_source = lap_source

        api = MqttAPI(StubMqttClient(), ann_topic, timer_id, hw, None,
                      pass_record_callback, None, None, None, None)

        intf = MqttInterface(StubMqttClient(), hw)
        intf.ann_topic = ann_topic
        intf.timer_id = timer_id
        msg = {
            'topic': intf._mqtt_create_node_topic(ann_topic, hw.nodes[0],
                                                  'pass'),
            'payload': json.dumps({
                'source': mqtt_lap_source,
                'timestamp': 11
            })
        }
        api.pass_handler(api.client, None, StubMqttMessage(**msg))
        self.assertEqual(new_lap_ts, 11)
        self.assertEqual(new_lap_source, expected_lap_source)
Пример #4
0
    def test(self):
        mock_intf = MockInterface()
        started = False
        race_stopped = False
        laps = 0

        def on_start():
            nonlocal started
            started = True

        def on_stop_race():
            nonlocal race_stopped
            race_stopped = True

        def on_reset_race():
            pass

        def on_pass(node, lap_ts, source, rssi):
            nonlocal laps
            laps += 1

        api = ChorusAPI(None, mock_intf, stub_sensor.discover(), on_start,
                        on_stop_race, on_reset_race)
        api_io = ChorusTest.DummySerial(
            lambda data: api._process_message(data))
        intf = ChorusInterface(api_io)
        api.serial_io = ChorusTest.DummySerial(
            lambda data: intf._process_message(intf.node_managers[0], data))
        intf.listener.on_pass = on_pass
        self.assertTrue(started)
        for sensor in intf.sensors:
            sensor.update()
            intf._update()
            self.assertGreater(len(sensor.getReadings()), 0)
        intf.set_frequency(2, 5885)
        self.assertEqual(mock_intf.nodes[2].frequency, 5885)
        intf.set_enter_at_level(4, 33)
        self.assertEqual(mock_intf.nodes[4].enter_at_level, 33)
        self.assertEqual(mock_intf.nodes[4].exit_at_level, 33)
        intf.set_exit_at_level(5, 34)
        self.assertEqual(mock_intf.nodes[4].enter_at_level, 33)
        self.assertEqual(mock_intf.nodes[4].exit_at_level, 33)
        self.assertEqual(mock_intf.nodes[5].enter_at_level, 34)
        self.assertEqual(mock_intf.nodes[5].exit_at_level, 34)
        api.emit_pass_record(mock_intf.nodes[0], 1, 98)
        gevent.sleep(0)
        self.assertEqual(laps, 1)

        intf.start()
        mock_intf.nodes[0].current_rssi = 66
        mock_intf.nodes[3].current_rssi = 67
        api.emit_rssi('*')
        gevent.sleep(0.5)
        intf.stop()
        self.assertEqual(intf.nodes[0].current_rssi, 66)
        self.assertEqual(intf.nodes[3].current_rssi, 67)
Пример #5
0
 def test_peak_nadir_history_peak_before_nadir(self):
     intf = MockInterface(1)
     node = intf.nodes[0]
     now = 100
     pn = PeakNadirHistory(node, now)
     pn.peakRssi = 10
     pn.nadirRssi = 1
     pn.peakFirstTime = pn.peakLastTime = 8000
     pn.nadirFirstTime = pn.nadirLastTime = 5000
     history = RssiHistory()
     pn.addTo(history)
     history_times, history_values = history.get()
     self.assertListEqual(history_times, [92, 95])
     self.assertListEqual(history_values, [10, 1])
Пример #6
0
 def test_mqtt_frequency(self):
     hw = MockInterface(1)
     intf = MqttInterface(StubMqttClient(), hw)
     intf.ann_topic = '/ann'
     intf.ctrl_topic = '/ctrl'
     intf.timer_id = 'local'
     msg = {
         'topic':
         intf._mqtt_create_node_topic('system', hw.nodes[0], "frequency"),
         'payload':
         '5675'
     }
     intf._mqtt_set_frequency(hw.node_managers[0], None, None,
                              StubMqttMessage(**msg))
     self.assertEqual(hw.nodes[0].frequency, 5675)
Пример #7
0
 def run_effects(self, module):
     strip = MockPixel(36)
     race = RHRace()
     race.result_fn = lambda race: {
         'by_race_time': [{
             'starts': 1,
             'node': 0,
             'position': 1
         }]
     }
     test_args = {
         'RACE': race,
         'iterations': 3,
         'time': 0,
         'lap': {
             'lap_number': 5,
             'lap_time': 45000,
             'lap_time_formatted': '45s'
         },
         'node_index': 0,
         'hide_stage_timer': True,
         'message': 'Test',
         'strip': strip,
         'manager': MockManager(),
         'INTERFACE': MockInterface()
     }
     config = {
         'LED_ROWS': 6,
         'PANEL_ROTATE': False,
         'INVERTED_PANEL_ROWS': False
     }
     effects = module.discover(config)
     for effect in effects:
         args = {}
         args.update(effect['defaultArgs'])
         args.update(test_args)
         strip.frames = []
         effect['handlerFn'](args)
         self.assertGreater(len(strip.frames), 0, effect)
Пример #8
0
 def test_peak_nadir_history_empty(self):
     intf = MockInterface(1)
     node = intf.nodes[0]
     now = 100
     pn = PeakNadirHistory(node, now)
     self.assertTrue(pn.isEmpty())