def test_car_battery_integration_lower_limit(self, hw_type): POWER_DRAW = 4 with pm_patch("HARDWARE.get_current_power_draw", POWER_DRAW): pm = PowerMonitoring() pm.car_battery_capacity_uWh = 1000 for _ in range(TEST_DURATION_S + 1): pm.calculate(self.mock_peripheralState(hw_type), False) estimated_capacity = 0 - ((1 / 3600) * POWER_DRAW * 1e6) self.assertLess( abs(pm.get_car_battery_capacity() - estimated_capacity), 10)
def test_car_battery_integration_upper_limit(self, hw_type): POWER_DRAW = 4 with pm_patch("HARDWARE.get_current_power_draw", POWER_DRAW): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh - 1000 for _ in range(TEST_DURATION_S + 1): pm.calculate(self.mock_peripheralState(hw_type), True) estimated_capacity = CAR_BATTERY_CAPACITY_uWh + ( CAR_CHARGING_RATE_W / 3600 * 1e6) self.assertLess( abs(pm.get_car_battery_capacity() - estimated_capacity), 10)
def test_car_battery_integration_onroad(self, hw_type): POWER_DRAW = 4 with pm_patch("HARDWARE.get_current_power_draw", POWER_DRAW): pm = PowerMonitoring() pm.car_battery_capacity_uWh = 0 for _ in range(TEST_DURATION_S + 1): pm.calculate(self.mock_peripheralState(hw_type), True) expected_capacity = ((TEST_DURATION_S / 3600) * CAR_CHARGING_RATE_W * 1e6) self.assertLess( abs(pm.get_car_battery_capacity() - expected_capacity), 10)
def test_car_battery_integration_upper_limit(self, hw_type): BATT_VOLTAGE = 4 BATT_CURRENT = 1 with pm_patch("get_battery_voltage", BATT_VOLTAGE * 1e6), pm_patch("get_battery_current", BATT_CURRENT * 1e6), \ pm_patch("get_battery_status", "Discharging"): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh - 1000 for _ in range(TEST_DURATION_S + 1): pm.calculate(self.mock_health(True, hw_type)) estimated_capacity = CAR_BATTERY_CAPACITY_uWh + (CAR_CHARGING_RATE_W / 3600 * 1e6) self.assertLess(abs(pm.get_car_battery_capacity() - estimated_capacity), 10)
def test_car_battery_integration_offroad(self, hw_type): POWER_DRAW = 4 with pm_patch("HARDWARE.get_current_power_draw", POWER_DRAW): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh for _ in range(TEST_DURATION_S + 1): pm.calculate(self.mock_peripheralState(hw_type), False) expected_capacity = CAR_BATTERY_CAPACITY_uWh - ( (TEST_DURATION_S / 3600) * POWER_DRAW * 1e6) self.assertLess( abs(pm.get_car_battery_capacity() - expected_capacity), 10)
def test_car_battery_integration_lower_limit(self, hw_type): BATT_VOLTAGE = 4 BATT_CURRENT = 1 with pm_patch("get_battery_voltage", BATT_VOLTAGE * 1e6), pm_patch("get_battery_current", BATT_CURRENT * 1e6), \ pm_patch("get_battery_status", "Discharging"): pm = PowerMonitoring() pm.car_battery_capacity_uWh = 1000 for _ in range(TEST_DURATION_S + 1): pm.calculate(self.mock_health(False, hw_type)) estimated_capacity = 0 - ((1/3600) * (BATT_VOLTAGE * BATT_CURRENT) * 1e6) self.assertLess(abs(pm.get_car_battery_capacity() - estimated_capacity), 10)
def test_car_battery_integration_onroad(self, hw_type): BATT_VOLTAGE = 4 BATT_CURRENT = 1 with pm_patch("get_battery_voltage", BATT_VOLTAGE * 1e6), pm_patch("get_battery_current", BATT_CURRENT * 1e6), \ pm_patch("get_battery_status", "Discharging"): pm = PowerMonitoring() pm.car_battery_capacity_uWh = 0 for _ in range(TEST_DURATION_S + 1): pm.calculate(self.mock_health(True, hw_type)) expected_capacity = ((TEST_DURATION_S/3600) * CAR_CHARGING_RATE_W * 1e6) self.assertLess(abs(pm.get_car_battery_capacity() - expected_capacity), 10)
def test_car_battery_integration_offroad(self, hw_type): BATT_VOLTAGE = 4 BATT_CURRENT = 1 with pm_patch("get_battery_voltage", BATT_VOLTAGE * 1e6), pm_patch("get_battery_current", BATT_CURRENT * 1e6), \ pm_patch("get_battery_status", "Discharging"): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh for _ in range(TEST_DURATION_S + 1): pm.calculate(self.mock_health(False, hw_type)) expected_capacity = CAR_BATTERY_CAPACITY_uWh - ((TEST_DURATION_S/3600) * (BATT_VOLTAGE * BATT_CURRENT) * 1e6) self.assertLess(abs(pm.get_car_battery_capacity() - expected_capacity), 10)
def test_ignition(self): global ssb BATT_VOLTAGE = 4 BATT_CURRENT = 0 # To stop shutting down for other reasons TEST_TIME = 100 with pm_patch("get_battery_voltage", BATT_VOLTAGE * 1e6), pm_patch("get_battery_current", BATT_CURRENT * 1e6), \ pm_patch("get_battery_status", "Discharging"): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh health = self.mock_health(True, log.HealthData.HwType.uno, car_voltage=(VBATT_PAUSE_CHARGING - 1)) for i in range(TEST_TIME): pm.calculate(health) if i % 10 == 0: self.assertFalse(pm.should_disable_charging(health, ssb)) self.assertFalse(pm.should_disable_charging(health, ssb))
def test_car_voltage(self, hw_type): global ssb BATT_VOLTAGE = 4 BATT_CURRENT = 0 # To stop shutting down for other reasons TEST_TIME = 100 with pm_patch("HARDWARE.get_battery_voltage", BATT_VOLTAGE * 1e6), pm_patch("HARDWARE.get_battery_current", BATT_CURRENT * 1e6), \ pm_patch("HARDWARE.get_battery_status", "Discharging"), pm_patch("HARDWARE.get_current_power_draw", None): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh health = self.mock_health(False, hw_type, car_voltage=(VBATT_PAUSE_CHARGING - 1)) for i in range(TEST_TIME): pm.calculate(health) if i % 10 == 0: self.assertEqual(pm.should_disable_charging(health, ssb), (pm.car_voltage_mV < VBATT_PAUSE_CHARGING*1e3)) self.assertTrue(pm.should_disable_charging(health, ssb))
def test_ignition(self): POWER_DRAW = 0 # To stop shutting down for other reasons TEST_TIME = 100 with pm_patch("HARDWARE.get_current_power_draw", POWER_DRAW): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh ignition = True peripheralState = self.mock_peripheralState( log.PandaState.PandaType.uno, car_voltage=(VBATT_PAUSE_CHARGING - 1)) for i in range(TEST_TIME): pm.calculate(peripheralState, ignition) if i % 10 == 0: self.assertFalse( pm.should_disable_charging(ignition, True, ssb)) self.assertFalse(pm.should_disable_charging(ignition, True, ssb))
def test_max_time_offroad(self, hw_type): global ssb BATT_VOLTAGE = 4 BATT_CURRENT = 0 # To stop shutting down for other reasons MOCKED_MAX_OFFROAD_TIME = 3600 with pm_patch("get_battery_voltage", BATT_VOLTAGE * 1e6), pm_patch("get_battery_current", BATT_CURRENT * 1e6), \ pm_patch("get_battery_status", "Discharging"), pm_patch("MAX_TIME_OFFROAD_S", MOCKED_MAX_OFFROAD_TIME, constant=True): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh start_time = ssb health = self.mock_health(False, hw_type) while ssb <= start_time + MOCKED_MAX_OFFROAD_TIME: pm.calculate(health) if (ssb - start_time) % 1000 == 0 and ssb < start_time + MOCKED_MAX_OFFROAD_TIME: self.assertFalse(pm.should_disable_charging(health, start_time)) self.assertTrue(pm.should_disable_charging(health, start_time))
def test_disable_power_down(self): global ssb BATT_VOLTAGE = 4 BATT_CURRENT = 0 # To stop shutting down for other reasons TEST_TIME = 100 params.put("DisablePowerDown", b"1") with pm_patch("HARDWARE.get_battery_voltage", BATT_VOLTAGE * 1e6), pm_patch("HARDWARE.get_battery_current", BATT_CURRENT * 1e6), \ pm_patch("HARDWARE.get_battery_status", "Discharging"), pm_patch("HARDWARE.get_current_power_draw", None): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh health = self.mock_health(False, log.HealthData.PandaType.uno, car_voltage=(VBATT_PAUSE_CHARGING - 1)) for i in range(TEST_TIME): pm.calculate(health) if i % 10 == 0: self.assertFalse(pm.should_disable_charging(health, ssb)) self.assertFalse(pm.should_disable_charging(health, ssb))
def test_harness_connection(self): BATT_VOLTAGE = 4 BATT_CURRENT = 0 # To stop shutting down for other reasons TEST_TIME = 100 with pm_patch("HARDWARE.get_battery_voltage", BATT_VOLTAGE * 1e6), pm_patch("HARDWARE.get_battery_current", BATT_CURRENT * 1e6), \ pm_patch("HARDWARE.get_battery_status", "Discharging"), pm_patch("HARDWARE.get_current_power_draw", None): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh ignition = False peripheralState = self.mock_peripheralState( log.PandaState.PandaType.uno, car_voltage=(VBATT_PAUSE_CHARGING - 1)) for i in range(TEST_TIME): pm.calculate(peripheralState, ignition) if i % 10 == 0: self.assertFalse( pm.should_disable_charging(ignition, False, ssb)) self.assertFalse(pm.should_disable_charging(ignition, False, ssb))
def test_max_time_offroad(self, hw_type): MOCKED_MAX_OFFROAD_TIME = 3600 with pm_patch("MAX_TIME_OFFROAD_S", MOCKED_MAX_OFFROAD_TIME, constant=True), pm_patch( "HARDWARE.get_current_power_draw", None): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh start_time = ssb ignition = False peripheralState = self.mock_peripheralState(hw_type) while ssb <= start_time + MOCKED_MAX_OFFROAD_TIME: pm.calculate(peripheralState, ignition) if ( ssb - start_time ) % 1000 == 0 and ssb < start_time + MOCKED_MAX_OFFROAD_TIME: self.assertFalse( pm.should_disable_charging(ignition, True, start_time)) self.assertTrue( pm.should_disable_charging(ignition, True, start_time))
def test_max_time_offroad(self, hw_type): BATT_VOLTAGE = 4 BATT_CURRENT = 0 # To stop shutting down for other reasons MOCKED_MAX_OFFROAD_TIME = 3600 with pm_patch("HARDWARE.get_battery_voltage", BATT_VOLTAGE * 1e6), pm_patch("HARDWARE.get_battery_current", BATT_CURRENT * 1e6), \ pm_patch("HARDWARE.get_battery_status", "Discharging"), pm_patch("MAX_TIME_OFFROAD_S", MOCKED_MAX_OFFROAD_TIME, constant=True), \ pm_patch("HARDWARE.get_current_power_draw", None): pm = PowerMonitoring() pm.car_battery_capacity_uWh = CAR_BATTERY_CAPACITY_uWh start_time = ssb ignition = False peripheralState = self.mock_peripheralState(hw_type) while ssb <= start_time + MOCKED_MAX_OFFROAD_TIME: pm.calculate(peripheralState, ignition) if ( ssb - start_time ) % 1000 == 0 and ssb < start_time + MOCKED_MAX_OFFROAD_TIME: self.assertFalse( pm.should_disable_charging(ignition, True, start_time)) self.assertTrue( pm.should_disable_charging(ignition, True, start_time))