diff --git a/system/sensord/tests/test_sensord.py b/system/sensord/tests/test_sensord.py index 20214e12f..9a66678ec 100644 --- a/system/sensord/tests/test_sensord.py +++ b/system/sensord/tests/test_sensord.py @@ -30,16 +30,16 @@ SENSOR_CONFIGURATIONS: list[set] = { }.get(HARDWARE.get_device_type(), []) Sensor = log.SensorEventData.SensorSource -SensorConfig = namedtuple('SensorConfig', ['type', 'sanity_min', 'sanity_max']) +SensorConfig = namedtuple('SensorConfig', ['type', 'sanity_min', 'sanity_max', 'std_max']) ALL_SENSORS = { Sensor.lsm6ds3trc: { - SensorConfig("acceleration", 5, 15), - SensorConfig("gyroUncalibrated", 0, .2), - SensorConfig("temperature", 10, 40), # set for max range of our office + SensorConfig("acceleration", 5, 15, 5), + SensorConfig("gyroUncalibrated", 0, .15, 0.5), + SensorConfig("temperature", 10, 40, 0.5), # set for max range of our office }, Sensor.mmc5603nj: { - SensorConfig("magneticUncalibrated", 0, 300), + SensorConfig("magneticUncalibrated", 0, 300, 10), } } ALL_SENSORS[Sensor.lsm6ds3] = ALL_SENSORS[Sensor.lsm6ds3trc] @@ -198,9 +198,16 @@ class TestSensord: continue key = (sensor, s.type) - mean_norm = np.mean(np.linalg.norm(sensor_values[key], axis=1)) - err_msg = f"Sensor '{sensor} {s.type}' failed sanity checks {mean_norm} is not between {s.sanity_min} and {s.sanity_max}" - assert s.sanity_min <= mean_norm <= s.sanity_max, err_msg + if s.type == 'temperature': + measurement_stat = np.mean(sensor_values[key]) + else: + measurement_stat = np.mean(np.linalg.norm(sensor_values[key], axis=1)) + err_msg = f"Sensor '{sensor} {s.type}' failed sanity checks {measurement_stat} is not between {s.sanity_min} and {s.sanity_max}" + assert s.sanity_min <= measurement_stat <= s.sanity_max, err_msg + + std_dev = np.std(sensor_values[key], axis=0) + err_msg = f"Sensor '{sensor} {s.type}' failed std dev test {std_dev} is not under {s.std_max}" + assert np.all(std_dev <= s.std_max), err_msg def test_sensor_verify_no_interrupts_after_stop(self): managed_processes["sensord"].start() @@ -222,4 +229,3 @@ class TestSensord: time.sleep(1) state_two = get_irq_count(self.sensord_irq) assert state_one == state_two, "Interrupts received after sensord stop!" -