You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.2 KiB
58 lines
2.2 KiB
#!/usr/bin/env python3
|
|
import unittest
|
|
from unittest.mock import Mock, MagicMock, patch
|
|
from parameterized import parameterized
|
|
|
|
with patch("smbus2.SMBus", new=MagicMock()):
|
|
from selfdrive.thermald.fan_controller import EonFanController, UnoFanController, TiciFanController
|
|
|
|
ALL_CONTROLLERS = [(EonFanController, ), (UnoFanController,), (TiciFanController,)]
|
|
GEN2_CONTROLLERS = [(UnoFanController,), (TiciFanController,)]
|
|
|
|
def patched_controller(controller_class):
|
|
with patch("os.system", new=Mock()):
|
|
return controller_class()
|
|
|
|
class TestFanController(unittest.TestCase):
|
|
def wind_up(self, controller, ignition=True):
|
|
for _ in range(1000):
|
|
controller.update(max_cpu_temp=100, ignition=ignition)
|
|
|
|
def wind_down(self, controller, ignition=False):
|
|
for _ in range(1000):
|
|
controller.update(max_cpu_temp=10, ignition=ignition)
|
|
|
|
@parameterized.expand(ALL_CONTROLLERS)
|
|
def test_hot_onroad(self, controller_class):
|
|
controller = patched_controller(controller_class)
|
|
self.wind_up(controller)
|
|
self.assertGreaterEqual(controller.update(max_cpu_temp=100, ignition=True), 70)
|
|
|
|
@parameterized.expand(GEN2_CONTROLLERS)
|
|
def test_offroad_limits(self, controller_class):
|
|
controller = patched_controller(controller_class)
|
|
self.wind_up(controller)
|
|
self.assertLessEqual(controller.update(max_cpu_temp=100, ignition=False), 30)
|
|
|
|
@parameterized.expand(ALL_CONTROLLERS)
|
|
def test_no_fan_wear(self, controller_class):
|
|
controller = patched_controller(controller_class)
|
|
self.wind_down(controller)
|
|
self.assertEqual(controller.update(max_cpu_temp=10, ignition=False), 0)
|
|
|
|
@parameterized.expand(GEN2_CONTROLLERS)
|
|
def test_limited(self, controller_class):
|
|
controller = patched_controller(controller_class)
|
|
self.wind_up(controller, ignition=True)
|
|
self.assertGreaterEqual(controller.update(max_cpu_temp=100, ignition=True), 80)
|
|
|
|
@parameterized.expand(ALL_CONTROLLERS)
|
|
def test_windup_speed(self, controller_class):
|
|
controller = patched_controller(controller_class)
|
|
self.wind_down(controller, ignition=True)
|
|
for _ in range(10):
|
|
controller.update(max_cpu_temp=90, ignition=True)
|
|
self.assertGreaterEqual(controller.update(max_cpu_temp=90, ignition=True), 60)
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|
|
|