Formula Student Electronics & Software
The code for the embedded software
Loading...
Searching...
No Matches
test_checkupManager.cpp
Go to the documentation of this file.
1#include "comm/communicatorSettings.hpp"
4#include "unity.h"
5
7 SystemData systemData;
8 systemData.mission_ = Mission::MANUAL;
10 systemData.hardware_data_.asms_on_ = false;
11
12 CheckupManager checkupManager(&systemData);
13
14 TEST_ASSERT_TRUE(checkupManager.should_stay_manual_driving());
15}
16
18 SystemData systemData;
19 CheckupManager checkupManager(&systemData);
20
21 systemData.mission_ = Mission::INSPECTION;
22 TEST_ASSERT_FALSE(checkupManager.should_stay_manual_driving());
23
24 systemData.mission_ = Mission::MANUAL;
26 TEST_ASSERT_FALSE(checkupManager.should_stay_manual_driving());
27
29 systemData.hardware_data_.asms_on_ = true;
30 TEST_ASSERT_FALSE(checkupManager.should_stay_manual_driving());
31
32 systemData.hardware_data_.asms_on_ = false;
33 TEST_ASSERT_TRUE(checkupManager.should_stay_manual_driving());
34}
35
36// can only test false since we can't mock the initial sequence :(
38 SystemData systemData;
40 // default values shouldnt allow to pass test
41 CheckupManager checkupManager(&systemData);
42
43 TEST_ASSERT_TRUE(checkupManager.should_stay_off(&digitalSender));
44}
45
49 CheckupManager cm(&sd);
50
52 TEST_ASSERT_EQUAL(CheckupManager::CheckupState::WAIT_FOR_ASMS, cm.checkupState);
53
56 // TEST_ASSERT_EQUAL(CheckupManager::CheckupState::START_TOGGLING_WATCHDOG, cm.checkupState);
57
58 // cm.initialCheckupSequence(&digitalSender);
59 // TEST_ASSERT_EQUAL(CheckupManager::CheckupState::WAIT_FOR_WATCHDOG, cm.checkupState);
60
61 // cm.getInitialCheckupTimestamp().reset();
62 // sd.hardware_data_.watchdog_state = true;
63 // cm.initialCheckupSequence(&digitalSender);
64 // TEST_ASSERT_EQUAL(CheckupManager::CheckupState::STOP_TOGGLING_WATCHDOG, cm.checkupState);
65
66 // cm.initialCheckupSequence(&digitalSender);
67 // TEST_ASSERT_EQUAL(CheckupManager::CheckupState::CHECK_WATCHDOG, cm.checkupState);
68
69 // Metro waitForWatchdogExpiration{1000};
70 // while (!waitForWatchdogExpiration.check()) {
71 // }
72 // sd.hardware_data_.watchdog_state = false;
73 // cm.initialCheckupSequence(&digitalSender);
74 TEST_ASSERT_EQUAL(CheckupManager::CheckupState::CLOSE_SDC, cm.checkupState);
75
77 TEST_ASSERT_EQUAL(CheckupManager::CheckupState::WAIT_FOR_ASATS, cm.checkupState);
78
81 TEST_ASSERT_EQUAL(CheckupManager::CheckupState::WAIT_FOR_TS, cm.checkupState);
82
85 TEST_ASSERT_EQUAL(CheckupManager::CheckupState::TOGGLE_VALVE, cm.checkupState);
86
88 sd.hardware_data_._hydraulic_line_pressure = HYDRAULIC_BRAKE_THRESHOLD;
90 TEST_ASSERT_EQUAL(CheckupManager::CheckupState::CHECK_PRESSURE, cm.checkupState);
91
96 // todo MISSING INVERSOR ALIVE TIMESTAMP
97
100}
101
103 SystemData systemData;
104 systemData.r2d_logics_.r2d = false;
105
106 CheckupManager checkupManager(&systemData);
107
108 TEST_ASSERT_TRUE(checkupManager.shouldStayReady());
109
110 systemData.r2d_logics_.r2d = true;
111 TEST_ASSERT_FALSE(checkupManager.shouldStayReady());
112}
113
119 sd.hardware_data_._hydraulic_line_pressure = HYDRAULIC_BRAKE_THRESHOLD + 1;
126
127 CheckupManager checkupManager(&sd);
128
129 TEST_ASSERT_FALSE(checkupManager.shouldEnterEmergency(State::AS_READY));
131 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_READY));
135 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_READY));
137 sd.hardware_data_.asms_on_ = false;
138 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_READY));
141 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_READY));
144 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_READY));
147 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_READY));
148
153 TEST_ASSERT_FALSE(checkupManager.shouldEnterEmergency(State::AS_DRIVING));
155 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_DRIVING));
158 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_DRIVING));
160 sd.hardware_data_.asms_on_ = false;
161 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_DRIVING));
164 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_READY));
167 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_DRIVING));
169 sd.hardware_data_._hydraulic_line_pressure = HYDRAULIC_BRAKE_THRESHOLD + 1;
170
171 // // Metro wait{WATCHDOG_TIMEOUT};
172 // while (!wait.check()) {
173 // }
174 // TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_READY));
175 sd.hardware_data_._hydraulic_line_pressure = HYDRAULIC_BRAKE_THRESHOLD + 1;
176 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_DRIVING));
177}
178
192
193 CheckupManager checkupManager(&sd);
194
195 TEST_ASSERT_FALSE(checkupManager.shouldEnterEmergency(State::AS_DRIVING));
196 sd.hardware_data_._hydraulic_line_pressure = HYDRAULIC_BRAKE_THRESHOLD + 1;
197 TEST_ASSERT_FALSE(checkupManager.shouldEnterEmergency(State::AS_DRIVING));
198
199 Metro time3{RELEASE_EBS_TIMEOUT_MS + 10};
200 while (!time3.check()) {
205 }
206
207 TEST_ASSERT_TRUE(checkupManager.shouldEnterEmergency(State::AS_DRIVING));
209 TEST_ASSERT_FALSE(checkupManager.shouldEnterEmergency(State::AS_DRIVING));
210}
211
213 SystemData systemData;
214 systemData.hardware_data_._left_wheel_rpm = 0;
215 systemData.mission_finished_ = true;
216
217 CheckupManager checkupManager(&systemData);
218
219 TEST_ASSERT_FALSE(checkupManager.shouldStayDriving());
220
221 systemData.hardware_data_._left_wheel_rpm = 1;
222 TEST_ASSERT_TRUE(checkupManager.shouldStayDriving());
223
224 systemData.hardware_data_._left_wheel_rpm = 0;
225 systemData.mission_finished_ = false;
226 TEST_ASSERT_TRUE(checkupManager.shouldStayDriving());
227}
228
230 SystemData systemData;
231 systemData.hardware_data_.asms_on_ = false;
232
233 CheckupManager checkupManager(&systemData);
234
235 TEST_ASSERT_FALSE(checkupManager.shouldStayMissionFinished());
236
237 systemData.hardware_data_.asms_on_ = true;
238 TEST_ASSERT_TRUE(checkupManager.shouldStayMissionFinished());
239}
240
242 SystemData systemData;
243 systemData.hardware_data_.asms_on_ = true;
244
245 CheckupManager checkupManager(&systemData);
246
247 TEST_ASSERT_FALSE(checkupManager.emergencySequenceComplete());
248
249 systemData.hardware_data_.asms_on_ = false;
250 Metro waitForEbsSound{8500};
251 while (!waitForEbsSound.check()) {
252 }
253 TEST_ASSERT_TRUE(checkupManager.emergencySequenceComplete());
254}
255
257 SystemData systemData;
258 systemData.failure_detection_.emergency_signal_ = true;
259
260 CheckupManager checkupManager(&systemData);
261
262 TEST_ASSERT_TRUE(checkupManager.resTriggered());
263
264 systemData.failure_detection_.emergency_signal_ = false;
265 TEST_ASSERT_FALSE(checkupManager.resTriggered());
266}
267
268void setUp(void) {}
269
270void tearDown(void) {}
271
272int main() {
273 UNITY_BEGIN();
279 RUN_TEST(test_shouldStayReady);
281 RUN_TEST(test_shouldStayDriving);
284 RUN_TEST(test_resTriggered);
285 return UNITY_END();
286}
The CheckupManager class handles various checkup operations.
bool should_stay_manual_driving() const
Performs a manual driving checkup.
bool should_stay_off()
Performs an off checkup.
CheckupError initial_checkup_sequence()
Performs an initial checkup.
Class responsible for controlling digital outputs in the Master Teensy.
Our own implementation of Metro class.
Definition metro.h:13
void reset()
Resets the timer to the current time.
Definition metro.h:124
bool checkWithoutReset() const
Checks if the interval has passed without resetting the timer.
Definition metro.h:115
constexpr unsigned long RELEASE_EBS_TIMEOUT_MS
int _hydraulic_line_pressure
bool pneumatic_line_pressure_
double _left_wheel_rpm
Metro releaseEbsTimestamp
The whole model of the system: holds all the data necessary.
Mission mission_
R2DLogics r2d_logics_
FailureDetection failure_detection_
HardwareData hardware_data_
bool mission_finished_
@ AS_DRIVING
@ AS_READY
SystemData sd
void test_shouldStayReady()
void test_shouldStayOff_whenInitialCheckupFails_false()
void test_resTriggered()
void test_shouldEnterEmergencyAsDrivingEBSValves()
void test_shouldEnterEmergency()
void test_shouldStayManualDriving_true()
void test_shouldStayMissionFinished()
void setUp(void)
void test_shouldStayDriving()
void tearDown(void)
void test_initialCheckupSequence_states()
void test_shouldStayManualDriving_false()
void test_emergencySequenceComplete()
int main()
DigitalSender digitalSender