| Line | Branch | Decision | Exec | Source |
|---|---|---|---|---|
| 1 | #include "pch.h" | |||
| 2 | ||||
| 3 | #include "fan_control.h" | |||
| 4 | ||||
| 5 | 14 | static void updateFans() { | ||
| 6 | 14 | engine->module<FanControl1>()->onSlowCallback(); | ||
| 7 | 14 | } | ||
| 8 | ||||
| 9 | 4 | TEST(Actuators, Fan) { | ||
| 10 | struct MockAc : public AcController { | |||
| 11 | bool acState = false; | |||
| 12 | ||||
| 13 | bool isAcEnabled() const override { | |||
| 14 | return acState; | |||
| 15 | } | |||
| 16 | }; | |||
| 17 | ||||
| 18 |
1/1✓ Branch 2 taken 1 time.
|
1 | EngineTestHelper eth(engine_type_e::TEST_ENGINE); | |
| 19 | 1 | MockAc mockAc; | ||
| 20 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->module<AcController>().set(&mockAc); | |
| 21 | ||||
| 22 | 1 | engineConfiguration->fanOnTemperature = 90; | ||
| 23 | 1 | engineConfiguration->fanOffTemperature = 80; | ||
| 24 | 1 | engineConfiguration->enableFan1WithAc = false; | ||
| 25 | ||||
| 26 | // Cold, fan should be off | |||
| 27 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 75); | |
| 28 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 29 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(false, enginePins.fanRelay.getLogicValue()); | |
| 30 | ||||
| 31 | // Between thresholds, should still be off | |||
| 32 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 85); | |
| 33 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 34 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(false, enginePins.fanRelay.getLogicValue()); | |
| 35 | ||||
| 36 | // Hot, fan should turn on | |||
| 37 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 95); | |
| 38 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 39 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(true, enginePins.fanRelay.getLogicValue()); | |
| 40 | ||||
| 41 | // Between thresholds, should stay on | |||
| 42 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 85); | |
| 43 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 44 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(true, enginePins.fanRelay.getLogicValue()); | |
| 45 | ||||
| 46 | // Below threshold, should turn off | |||
| 47 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 75); | |
| 48 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 49 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(false, enginePins.fanRelay.getLogicValue()); | |
| 50 | ||||
| 51 | // Break the CLT sensor - fan turns on | |||
| 52 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setInvalidMockValue(SensorType::Clt); | |
| 53 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 54 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(true, enginePins.fanRelay.getLogicValue()); | |
| 55 | ||||
| 56 | // CLT sensor back to normal, fan turns off | |||
| 57 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 75); | |
| 58 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 59 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(false, enginePins.fanRelay.getLogicValue()); | |
| 60 | ||||
| 61 | 1 | engineConfiguration->enableFan1WithAc = true; | ||
| 62 | // Now AC is on, fan should turn on! | |||
| 63 | 1 | mockAc.acState = true; | ||
| 64 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 65 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(true, enginePins.fanRelay.getLogicValue()); | |
| 66 | ||||
| 67 | // Turn off AC, fan should turn off too. | |||
| 68 | 1 | mockAc.acState = false; | ||
| 69 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 70 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(false, enginePins.fanRelay.getLogicValue()); | |
| 71 | ||||
| 72 | // Back to hot, fan should turn on | |||
| 73 |
1/1✓ Branch 1 taken 1 time.
|
1 | Sensor::setMockValue(SensorType::Clt, 95); | |
| 74 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 75 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(true, enginePins.fanRelay.getLogicValue()); | |
| 76 | ||||
| 77 | // Engine starts cranking, fan should turn off | |||
| 78 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->rpmCalculator.setRpmValue(100); | |
| 79 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 80 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(false, enginePins.fanRelay.getLogicValue()); | |
| 81 | ||||
| 82 | // Engine running, fan should turn back on | |||
| 83 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->rpmCalculator.setRpmValue(1000); | |
| 84 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 85 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(true, enginePins.fanRelay.getLogicValue()); | |
| 86 | ||||
| 87 | // Stop the engine, fan should stay on | |||
| 88 |
1/1✓ Branch 1 taken 1 time.
|
1 | engine->rpmCalculator.setRpmValue(0); | |
| 89 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 90 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(true, enginePins.fanRelay.getLogicValue()); | |
| 91 | ||||
| 92 | // Set configuration to inhibit fan while engine is stopped, fan should stop | |||
| 93 | 1 | engineConfiguration->disableFan1WhenStopped = true; | ||
| 94 |
1/1✓ Branch 1 taken 1 time.
|
1 | updateFans(); | |
| 95 |
3/7✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 21 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(false, enginePins.fanRelay.getLogicValue()); | |
| 96 | 2 | } | ||
| 97 |