Line data Source code
1 : #include "unity.h"
2 : #include <sys/stat.h>
3 : #include "sensors_input.h"
4 : #include "dbc.h"
5 :
6 : // Declaration of functions implemented in sensors.c that will be tested
7 : can_msg conv2CANCarClusterData(bool aeb_system_enabled);
8 : can_msg conv2CANVelocityData(bool vehicle_direction, double relative_velocity, double relative_acceleration);
9 : can_msg conv2CANObstacleData(bool has_obstacle, double obstacle_distance);
10 : can_msg conv2CANPedalsData(bool brake_pedal, bool accelerator_pedal);
11 :
12 :
13 : // Global variables
14 : bool test_on_off_aeb_system;
15 : bool test_vehicle_direction;
16 : bool test_has_obstacle;
17 : bool test_brake_pedal, test_accelerator_pedal;
18 : double test_relative_velocity = 108.0;
19 : double test_obstacle_distance = 60;
20 : double test_relative_acceleration;
21 :
22 : /**
23 : * @brief setUp function to initialize AEB input state before each test.
24 : */
25 10 : void setUp()
26 : {
27 : // empty setUp
28 10 : }
29 :
30 : /**
31 : * @brief tearDown function to clean up after each test.
32 : */
33 10 : void tearDown()
34 : {
35 : // empty tearDown
36 10 : }
37 :
38 : /**
39 : * @test
40 : * @brief Tests for the function conv2CANCarClusterData on sensors.c
41 : * [SwR-9] (@ref SwR-9), [SwR-10] (@ref SwR-10), [SwR-11] (@ref SwR-11)
42 : * \anchor test_conv2CANCarClusterData_AEB_on
43 : * [TC_SENSORS_001](@ref TC_SENSORS_001)
44 : */
45 1 : void test_conv2CANCarClusterData_AEB_on()
46 : {
47 1 : test_on_off_aeb_system = true;
48 1 : can_msg result = conv2CANCarClusterData(test_on_off_aeb_system);
49 :
50 : // Test Case ID: TC_SENSORS_001
51 1 : TEST_ASSERT_EQUAL_INT(ID_CAR_C, result.identifier);
52 1 : TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[0]); // Check if AEB is on
53 :
54 1 : }
55 :
56 : /** @test
57 : * \anchor test_conv2CANCarClusterData_AEB_off
58 : * [TC_SENSORS_002](@ref TC_SENSORS_002)
59 : */
60 1 : void test_conv2CANCarClusterData_AEB_off()
61 : {
62 1 : test_on_off_aeb_system = false;
63 1 : can_msg result = conv2CANCarClusterData(test_on_off_aeb_system);
64 :
65 : // Test Case ID: TC_SENSORS_002
66 1 : TEST_ASSERT_EQUAL_INT(ID_CAR_C, result.identifier);
67 1 : TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[0]); // Check if AEB is off
68 :
69 1 : }
70 :
71 : /**
72 : * @test
73 : * @brief Tests for the function conv2CANVelocityData on sensors.c
74 : * [SwR-9] (@ref SwR-9), [SwR-10] (@ref SwR-10), [SwR-11] (@ref SwR-11)
75 : * \anchor test_conv2CANVelocityData_Forward
76 : * [TC_SENSORS_003](@ref TC_SENSORS_003)
77 : */
78 1 : void test_conv2CANVelocityData_Forward()
79 : {
80 1 : test_vehicle_direction = true;
81 1 : test_relative_acceleration = 9.1234;
82 1 : can_msg result = conv2CANVelocityData(test_vehicle_direction, test_relative_velocity, test_relative_acceleration);
83 :
84 : // Test Case ID: TC_SENSORS_003
85 :
86 : // vehicle direction data
87 1 : TEST_ASSERT_EQUAL_INT(ID_SPEED_S, result.identifier);
88 1 : TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[2]); // Check if vehicle direction is forward
89 :
90 : // relative velocity data
91 1 : unsigned int expected_speed = test_relative_velocity / RES_SPEED_S;
92 1 : TEST_ASSERT_EQUAL_UINT8(expected_speed & 0xFF, result.dataFrame[0]); // LS Byte
93 1 : TEST_ASSERT_EQUAL_UINT8((expected_speed >> 8) & 0xFF, result.dataFrame[1]); // MS Byte
94 :
95 : // relative acceleration data
96 1 : unsigned int expected_accel = ((test_relative_acceleration * RES_ACCELERATION_DIV_S) - OFFSET_ACCELERATION_S);
97 1 : TEST_ASSERT_EQUAL_UINT8(expected_accel & 0xFF, result.dataFrame[3]); // LS Byte
98 1 : TEST_ASSERT_EQUAL_UINT8((expected_accel >> 8) & 0xFF, result.dataFrame[4]); // MS Byte
99 1 : TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[5]); // Acceleration is positive
100 1 : }
101 :
102 : /** @test
103 : * \anchor test_conv2CANVelocityData_Reverse
104 : * [TC_SENSORS_004](@ref TC_SENSORS_004)
105 : */
106 1 : void test_conv2CANVelocityData_Reverse()
107 : {
108 1 : test_vehicle_direction = false;
109 1 : test_relative_acceleration = -1.1234;
110 1 : can_msg result = conv2CANVelocityData(test_vehicle_direction, test_relative_velocity, test_relative_acceleration);
111 :
112 : // Test Case ID: TC_SENSORS_004
113 :
114 : // vehicle direction data
115 1 : TEST_ASSERT_EQUAL_INT(ID_SPEED_S, result.identifier);
116 1 : TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[2]); // Check if vehicle direction is reverse
117 :
118 : // relative velocity data
119 1 : unsigned int expected_speed = test_relative_velocity / RES_SPEED_S;
120 1 : TEST_ASSERT_EQUAL_UINT8(expected_speed & 0xFF, result.dataFrame[0]); // least significant byte
121 1 : TEST_ASSERT_EQUAL_UINT8((expected_speed >> 8) & 0xFF, result.dataFrame[1]); // most significant bytes
122 :
123 : // relative acceleration data
124 1 : double accel_abs = -test_relative_acceleration; // convert to positive
125 1 : unsigned int expected_accel = ((accel_abs * RES_ACCELERATION_DIV_S) - OFFSET_ACCELERATION_S);
126 1 : TEST_ASSERT_EQUAL_UINT8(expected_accel & 0xFF, result.dataFrame[3]); // LS Byte
127 1 : TEST_ASSERT_EQUAL_UINT8((expected_accel >> 8) & 0xFF, result.dataFrame[4]); // MS Byte
128 1 : TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[5]); // Acceleration is negative
129 1 : }
130 :
131 : /**
132 : * @test
133 : * @brief Tests for the function conv2CANObstacleData on sensors.c
134 : * [SwR-9] (@ref SwR-9), [SwR-10] (@ref SwR-10), [SwR-11] (@ref SwR-11)
135 : * \anchor test_conv2CANObstacleData_Present
136 : * [TC_SENSORS_005](@ref TC_SENSORS_005)
137 : */
138 1 : void test_conv2CANObstacleData_Present()
139 : {
140 1 : test_has_obstacle = true;
141 1 : can_msg result = conv2CANObstacleData(test_has_obstacle, test_obstacle_distance);
142 :
143 : // Test Case ID: TC_SENSORS_005
144 :
145 1 : TEST_ASSERT_EQUAL_INT(ID_OBSTACLE_S, result.identifier);
146 1 : TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[2]); // Check if obstacle is present
147 :
148 1 : unsigned int expected_distance = test_obstacle_distance / RES_OBSTACLE_S;
149 1 : TEST_ASSERT_EQUAL_UINT8(expected_distance & 0xFF, result.dataFrame[0]); // least significant byte
150 1 : TEST_ASSERT_EQUAL_UINT8((expected_distance >> 8) & 0xFF, result.dataFrame[1]); // most significant byte
151 1 : }
152 :
153 : /** @test
154 : * \anchor test_conv2CANObstacleData_NotPresent
155 : * [TC_SENSORS_006](@ref TC_SENSORS_006)
156 : */
157 1 : void test_conv2CANObstacleData_NotPresent()
158 : {
159 1 : test_has_obstacle = false;
160 1 : can_msg result = conv2CANObstacleData(test_has_obstacle, test_obstacle_distance);
161 :
162 : // Test Case ID: TC_SENSORS_006
163 :
164 1 : TEST_ASSERT_EQUAL_INT(ID_OBSTACLE_S, result.identifier);
165 1 : TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[2]); // Check if obstacle is not present
166 :
167 1 : unsigned int expected_distance = test_obstacle_distance / RES_OBSTACLE_S;
168 1 : TEST_ASSERT_EQUAL_UINT8(expected_distance & 0xFF, result.dataFrame[0]); // least significant byte
169 1 : TEST_ASSERT_EQUAL_UINT8((expected_distance >> 8) & 0xFF, result.dataFrame[1]); // most significant byte
170 1 : }
171 :
172 : /**
173 : * @test
174 : * @brief Tests for the function conv2CANPedalsData on sensors.c
175 : * [SwR-9] (@ref SwR-9), [SwR-10] (@ref SwR-10), [SwR-11] (@ref SwR-11)
176 : * \anchor test_conv2CANPedalsData_BrakeAndAccelerator
177 : * [TC_SENSORS_007](@ref TC_SENSORS_007)
178 : */
179 1 : void test_conv2CANPedalsData_BrakeAndAccelerator()
180 : {
181 1 : test_brake_pedal = true;
182 1 : test_accelerator_pedal = true;
183 1 : can_msg result = conv2CANPedalsData(test_brake_pedal, test_accelerator_pedal);
184 :
185 : // Test Case ID: TC_SENSORS_007
186 :
187 1 : TEST_ASSERT_EQUAL_INT(ID_PEDALS, result.identifier);
188 1 : TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[0]); // Accelerator pedal active
189 1 : TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[1]); // Brake pedal active
190 1 : }
191 :
192 : /** @test
193 : * \anchor test_conv2CANPedalsData_BrakeOnly
194 : * [TC_SENSORS_008](@ref TC_SENSORS_008)
195 : */
196 1 : void test_conv2CANPedalsData_BrakeOnly()
197 : {
198 1 : test_brake_pedal = true;
199 1 : test_accelerator_pedal = false;
200 1 : can_msg result = conv2CANPedalsData(test_brake_pedal, test_accelerator_pedal);
201 :
202 : // Test Case ID: TC_SENSORS_008
203 :
204 1 : TEST_ASSERT_EQUAL_INT(ID_PEDALS, result.identifier);
205 1 : TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[0]); // Accelerator pedal inactive
206 1 : TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[1]); // Brake pedal active
207 1 : }
208 :
209 : /** @test
210 : * \anchor test_conv2CANPedalsData_AcceleratorOnly
211 : * [TC_SENSORS_009](@ref TC_SENSORS_009)
212 : */
213 1 : void test_conv2CANPedalsData_AcceleratorOnly()
214 : {
215 1 : test_brake_pedal = false;
216 1 : test_accelerator_pedal = true;
217 1 : can_msg result = conv2CANPedalsData(test_brake_pedal, test_accelerator_pedal);
218 :
219 : // Test Case ID: TC_SENSORS_009
220 :
221 1 : TEST_ASSERT_EQUAL_INT(ID_PEDALS, result.identifier);
222 1 : TEST_ASSERT_EQUAL_UINT8(0x01, result.dataFrame[0]); // Accelerator pedal active
223 1 : TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[1]); // Brake pedal inactive
224 1 : }
225 :
226 : /** @test
227 : * \anchor test_conv2CANPedalsData_NoneActive
228 : * [TC_SENSORS_010](@ref TC_SENSORS_010)
229 : */
230 1 : void test_conv2CANPedalsData_NoneActive()
231 : {
232 1 : test_brake_pedal = false;
233 1 : test_accelerator_pedal = false;
234 1 : can_msg result = conv2CANPedalsData(test_brake_pedal, test_accelerator_pedal);
235 :
236 : // Test Case ID: TC_SENSORS_010
237 :
238 1 : TEST_ASSERT_EQUAL_INT(ID_PEDALS, result.identifier);
239 1 : TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[0]); // Accelerator pedal inactive
240 1 : TEST_ASSERT_EQUAL_UINT8(0x00, result.dataFrame[1]); // Brake pedal inactive
241 1 : }
242 :
243 :
244 1 : int main()
245 : {
246 1 : UNITY_BEGIN();
247 1 : RUN_TEST(test_conv2CANCarClusterData_AEB_on);
248 1 : RUN_TEST(test_conv2CANCarClusterData_AEB_off);
249 1 : RUN_TEST(test_conv2CANVelocityData_Forward);
250 1 : RUN_TEST(test_conv2CANVelocityData_Reverse);
251 1 : RUN_TEST(test_conv2CANObstacleData_Present);
252 1 : RUN_TEST(test_conv2CANObstacleData_NotPresent);
253 1 : RUN_TEST(test_conv2CANPedalsData_BrakeAndAccelerator);
254 1 : RUN_TEST(test_conv2CANPedalsData_BrakeOnly);
255 1 : RUN_TEST(test_conv2CANPedalsData_AcceleratorOnly);
256 1 : RUN_TEST(test_conv2CANPedalsData_NoneActive);
257 1 : return UNITY_END();
258 :
259 : }
|