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 |