foxBMS - Unit Tests  1.6.0
The foxBMS Unit Tests API Documentation
test_can_cbs_rx_aerosol-sensor.c
Go to the documentation of this file.
1 /**
2  *
3  * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright notice, this
12  * list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  *
18  * 3. Neither the name of the copyright holder nor the names of its
19  * contributors may be used to endorse or promote products derived from
20  * this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  * We kindly request you to use one or more of the following phrases to refer to
34  * foxBMS in your hardware, software, documentation or advertising materials:
35  *
36  * - ″This product uses parts of foxBMS®″
37  * - ″This product includes parts of foxBMS®″
38  * - ″This product is derived from foxBMS®″
39  *
40  */
41 
42 /**
43  * @file test_can_cbs_rx_aerosol-sensor.c
44  * @author foxBMS Team
45  * @date 2023-08-31 (date of creation)
46  * @updated 2023-10-12 (date of last update)
47  * @version v1.6.0
48  * @ingroup UNIT_TEST_IMPLEMENTATION
49  * @prefix TEST
50  *
51  * @brief Tests for the CAN driver callbacks
52  *
53  */
54 
55 /*========== Includes =======================================================*/
56 #include "unity.h"
57 #include "Mockcan.h"
58 #include "Mockdatabase.h"
59 #include "Mockdiag.h"
60 #include "Mockfoxmath.h"
61 #include "Mockimd.h"
62 #include "Mockos.h"
63 
64 #include "database_cfg.h"
65 
66 #include "can_cbs_rx.h"
68 #include "can_helper.h"
69 #include "test_assert_helper.h"
70 
71 /*========== Unit Testing Framework Directives ==============================*/
72 TEST_SOURCE_FILE("can_cbs_rx_aerosol-sensor.c")
73 
74 TEST_INCLUDE_PATH("../../src/app/driver/can")
75 TEST_INCLUDE_PATH("../../src/app/driver/can/cbs")
76 TEST_INCLUDE_PATH("../../src/app/driver/can/cbs/rx")
77 TEST_INCLUDE_PATH("../../src/app/driver/config")
78 TEST_INCLUDE_PATH("../../src/app/driver/foxmath")
79 TEST_INCLUDE_PATH("../../src/app/driver/imd")
80 TEST_INCLUDE_PATH("../../src/app/engine/diag")
81 TEST_INCLUDE_PATH("../../src/app/task/config")
82 
83 /*========== Definitions and Implementations for Unit Test ==================*/
84 
102 
104 
107  .pTableCellVoltage = &can_tableCellVoltages,
108  .pTableCellTemperature = &can_tableTemperatures,
109  .pTableMinMax = &can_tableMinimumMaximumValues,
110  .pTableCurrentSensor = &can_tableCurrentSensor,
111  .pTableOpenWire = &can_tableOpenWire,
112  .pTableStateRequest = &can_tableStateRequest,
113  .pTablePackValues = &can_tablePackValues,
114  .pTableSof = &can_tableSof,
115  .pTableSoc = &can_tableSoc,
116  .pTableSoe = &can_tableSoe,
117  .pTableErrorState = &can_tableErrorState,
118  .pTableInsulation = &can_tableInsulation,
119  .pTableMsl = &can_tableMslFlags,
120  .pTableRsl = &can_tableRslFlags,
121  .pTableMol = &can_tableMolFlags,
122  .pTableAerosolSensor = &can_tableAerosolSensor,
123 };
124 
125 /*========== Setup and Teardown =============================================*/
126 void setUp(void) {
133 }
134 
135 void tearDown(void) {
136 }
137 
138 /*========== Test Cases =====================================================*/
139 
140 /**
141  * @brief Testing CANRX_HandleAerosolSensorErrors
142  * @details The following cases need to be tested:
143  * - Argument validation:
144  * - AT1/2: NULL_PTR for kpkCanShim -> assert
145  * - AT2/2: invalid value for signalData -> assert
146  * - Routine validation:
147  * - RT1/4: Function sets expected values in the struct
148  * - RT2/4: Function sets expected values in the struct
149  * - RT3/4: Function sets expected values in the struct
150  * - RT4/4: Function sets expected values in the struct
151  */
153  /* ======= Assertion tests ============================================= */
154  /* ======= AT1/2 ======= */
156  /* ======= AT2/2 ======= */
158 
159  /* ======= Routine tests =============================================== */
160  /* reset the error table from previous test */
164 
165  /* ======= RT1/4: Test implementation */
166  /* ======= RT1/4: call function under test */
168  /* ======= RT1/4: test output verification */
172 
173  /* ======= RT2/4: Test implementation */
174  /* ======= RT2/4: call function under test */
176  /* ======= RT2/4: test output verification */
180 
181  /* ======= RT3/4: Test implementation */
182  /* reset the error table from previous test */
186  /* ======= RT3/4: call function under test */
188  /* ======= RT3/4: test output verification */
192 
193  /* ======= RT4/4: Test implementation */
194  /* reset the error table from previous test */
198  /* ======= RT4/4: call function under test */
200  /* ======= RT4/4: test output verification */
204 }
205 
206 /**
207  * @brief Testing CANRX_HandleAerosolSensorStatus
208  * @details The following cases need to be tested:
209  * - Argument validation:
210  * - AT1/2: NULL_PTR for kpkCanShim -> assert
211  * - AT2/2: invalid value for signalData -> assert
212  * - Routine validation:
213  * - RT1/2: Function calls expected subroutines
214  * - RT2/2: Function sets expected values in the struct and calls
215  * expected subroutines
216  */
218  /* ======= Assertion tests ============================================= */
219  /* ======= AT1/2 ======= */
221  /* ======= AT2/2 ======= */
223 
224  /* ======= Routine tests =============================================== */
225  /* ======= RT1/2: Test implementation */
226  /* ======= RT1/2: call function under test */
228  /* ======= RT1/2: test output verification */
229  TEST_ASSERT_EQUAL(0, can_kShim.pTableAerosolSensor->sensorStatus);
230 
231  /* ======= RT2/2: Test implementation */
232  DIAG_Handler_ExpectAndReturn(DIAG_ID_AEROSOL_ALERT, DIAG_EVENT_NOT_OK, DIAG_SYSTEM, 0u, DIAG_HANDLER_RETURN_OK);
233  /* ======= RT2/2: call function under test */
235  /* ======= RT2/2: test output verification */
236  TEST_ASSERT_EQUAL(1u, can_kShim.pTableAerosolSensor->sensorStatus);
237 }
238 
239 /**
240  * @brief Testing CANRX_SetParticulateMatterConcentration
241  * @details The following cases need to be tested:
242  * - Argument validation:
243  * - AT1/1: NULL_PTR for kpkCanShim -> assert
244  * - Routine validation:
245  * - RT1/1: Function sets expected values in the struct
246  */
248  /* ======= Assertion tests ============================================= */
249  /* ======= AT1/1 ======= */
251 
252  /* ======= Routine tests =============================================== */
253  /* ======= RT1/1: Test implementation */
254  /* ======= RT1/1: call function under test */
256  /* ======= RT1/1: test output verification */
258 }
259 
260 /**
261  * @brief Testing CANRX_SetAerosolSensorCrcCheckCode
262  * @details The following cases need to be tested:
263  * - Argument validation:
264  * - AT1/1: NULL_PTR for kpkCanShim -> assert
265  * - Routine validation:
266  * - RT1/1: Function calls expected subroutines
267  */
269  /* ======= Assertion tests ============================================= */
270  /* ======= AT1/1 ======= */
272 
273  /* ======= Routine tests =============================================== */
274  /* ======= RT1/1: Test implementation */
275  /* ======= RT1/1: call function under test */
277  /* ======= RT1/1: test output verification */
278  TEST_ASSERT_EQUAL(4u, can_kShim.pTableAerosolSensor->crcCheckCode);
279 }
280 
281 /**
282  * @brief Testing CANRX_AerosolSensor
283  * @details The following cases need to be tested:
284  * - Argument validation:
285  * - AT1/5: invalid message id for message -> assert
286  * - AT2/5: invalid message idType for message -> assert
287  * - AT3/5: invalid message DLC for message -> assert
288  * - AT4/5: NULL_PTR for kpkCanData -> assert
289  * - AT5/5: NULL_PTR for kpkCanShim -> assert
290  * - Routine validation:
291  * - RT1/1: Function calls expected subroutines
292  */
294  /* ======= Assertion tests ============================================= */
295  uint8_t canData[CAN_MAX_DLC] = {0};
296 
297  /* ======= AT1/5 ======= */
298  CAN_MESSAGE_PROPERTIES_s testMessageInvalidId = {
299  .id = CAN_MAX_11BIT_ID, /* invalid message id */
300  .idType = CANRX_AEROSOL_SENSOR_ID_TYPE, /* valid id type */
301  .dlc = CAN_DEFAULT_DLC, /* valid dlc */
302  .endianness = CANRX_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */
303  };
304  TEST_ASSERT_FAIL_ASSERT(CANRX_AerosolSensor(testMessageInvalidId, canData, &can_kShim));
305 
306  /* ======= AT2/5 ======= */
307  CAN_MESSAGE_PROPERTIES_s testMessageInvalidIdType = {
308  .id = CANRX_AEROSOL_SENSOR_ID, /* valid message id */
309  .idType = CAN_EXTENDED_IDENTIFIER_29_BIT, /* invalid id type */
310  .dlc = CAN_DEFAULT_DLC, /* valid dlc */
311  .endianness = CANRX_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */
312  };
313  TEST_ASSERT_FAIL_ASSERT(CANRX_AerosolSensor(testMessageInvalidIdType, canData, &can_kShim));
314 
315  /* ======= AT3/5 ======= */
316  CAN_MESSAGE_PROPERTIES_s testMessageInvalidDlc = {
317  .id = CANRX_AEROSOL_SENSOR_ID, /* valid message id */
318  .idType = CANRX_AEROSOL_SENSOR_ID_TYPE, /* valid id type */
319  .dlc = CAN_DEFAULT_DLC + 1u, /* invalid dlc */
320  .endianness = CANRX_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */
321  };
322  TEST_ASSERT_FAIL_ASSERT(CANRX_AerosolSensor(testMessageInvalidDlc, canData, &can_kShim));
323 
324  /* ======= AT4/5 ======= */
325  CAN_MESSAGE_PROPERTIES_s validTestMessage = {
326  .id = CANRX_AEROSOL_SENSOR_ID, /* valid message id */
327  .idType = CANRX_AEROSOL_SENSOR_ID_TYPE, /* valid id type */
328  .dlc = CAN_DEFAULT_DLC, /* valid dlc */
329  .endianness = CANRX_AEROSOL_SENSOR_ENDIANNESS, /* valid endianness */
330  };
332 
333  /* ======= AT5/5 ======= */
334  TEST_ASSERT_FAIL_ASSERT(CANRX_AerosolSensor(validTestMessage, canData, NULL_PTR));
335 
336  /* ======= Routine tests =============================================== */
337  /* ======= RT1/1: Test implementation */
338  /* ignore reads that are not used in this test */
339  DATA_Read1DataBlock_IgnoreAndReturn(STD_OK);
340  DATA_Write1DataBlock_IgnoreAndReturn(STD_OK);
341  /* ======= RT1/1: call function under test */
342  CANRX_AerosolSensor(validTestMessage, canData, &can_kShim);
343 }
CAN callbacks header.
void TEST_CANRX_HandleAerosolSensorErrors(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData)
void TEST_CANRX_SetAerosolSensorCrcCheckCode(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData)
uint32_t CANRX_AerosolSensor(CAN_MESSAGE_PROPERTIES_s message, const uint8_t *const kpkCanData, const CAN_SHIM_s *const kpkCanShim)
can rx callback function for aerosol sensor messages
void TEST_CANRX_HandleAerosolSensorStatus(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData)
void TEST_CANRX_SetParticulateMatterConcentration(const CAN_SHIM_s *const kpkCanShim, uint16_t signalData)
#define CAN_MAX_11BIT_ID
Definition: can_cfg.h:99
#define CAN_DEFAULT_DLC
Definition: can_cfg.h:103
#define CAN_MAX_DLC
Definition: can_cfg.h:101
@ CAN_EXTENDED_IDENTIFIER_29_BIT
Definition: can_cfg.h:164
Header for the driver for the CAN module.
#define CANRX_AEROSOL_SENSOR_ID
#define CANRX_AEROSOL_SENSOR_ENDIANNESS
#define CANRX_AEROSOL_SENSOR_ID_TYPE
Headers for the helper functions for the CAN module.
Database configuration header.
@ DATA_BLOCK_ID_MIN_MAX
Definition: database_cfg.h:99
@ DATA_BLOCK_ID_SOE
Definition: database_cfg.h:109
@ DATA_BLOCK_ID_ERROR_STATE
Definition: database_cfg.h:95
@ DATA_BLOCK_ID_RSL_FLAG
Definition: database_cfg.h:106
@ DATA_BLOCK_ID_INSULATION_MONITORING
Definition: database_cfg.h:97
@ DATA_BLOCK_ID_STATE_REQUEST
Definition: database_cfg.h:112
@ DATA_BLOCK_ID_CELL_VOLTAGE
Definition: database_cfg.h:89
@ DATA_BLOCK_ID_CURRENT_SENSOR
Definition: database_cfg.h:93
@ DATA_BLOCK_ID_OPEN_WIRE_BASE
Definition: database_cfg.h:103
@ DATA_BLOCK_ID_SOF
Definition: database_cfg.h:110
@ DATA_BLOCK_ID_MSL_FLAG
Definition: database_cfg.h:102
@ DATA_BLOCK_ID_PACK_VALUES
Definition: database_cfg.h:105
@ DATA_BLOCK_ID_MOL_FLAG
Definition: database_cfg.h:100
@ DATA_BLOCK_ID_CELL_TEMPERATURE
Definition: database_cfg.h:86
@ DATA_BLOCK_ID_SOC
Definition: database_cfg.h:108
@ DATA_BLOCK_ID_AEROSOL_SENSOR
Definition: database_cfg.h:80
static DIAG_DIAGNOSIS_STATE_s diag
Definition: diag.c:71
@ DIAG_HANDLER_RETURN_OK
Definition: diag.h:69
@ DIAG_EVENT_NOT_OK
Definition: diag_cfg.h:268
@ DIAG_SYSTEM
Definition: diag_cfg.h:280
@ DIAG_ID_AEROSOL_ALERT
Definition: diag_cfg.h:261
@ STD_OK
Definition: fstd_types.h:83
#define NULL_PTR
Null pointer.
Definition: fstd_types.h:77
DATA_BLOCK_AEROSOL_SENSOR_s * pTableAerosolSensor
Definition: can_cfg.h:195
OS_QUEUE * pQueueImd
Definition: can_cfg.h:178
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:635
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:153
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:135
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:219
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:337
DATA_BLOCK_ID_e uniqueId
Definition: database_cfg.h:125
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:167
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:497
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:455
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:310
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:195
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:477
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:517
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:539
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:427
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:553
Helper for unit tests.
#define TEST_ASSERT_FAIL_ASSERT(_code_under_test)
assert whether assert macro has failed
static DATA_BLOCK_CELL_VOLTAGE_s can_tableCellVoltages
void test_CANRX_SetAerosolSensorCrcCheckCode(void)
Testing CANRX_SetAerosolSensorCrcCheckCode.
static DATA_BLOCK_MSL_FLAG_s can_tableMslFlags
static DATA_BLOCK_MIN_MAX_s can_tableMinimumMaximumValues
static DATA_BLOCK_OPEN_WIRE_s can_tableOpenWire
void testCANRX_SetParticulateMatterConcentration(void)
Testing CANRX_SetParticulateMatterConcentration.
static DATA_BLOCK_PACK_VALUES_s can_tablePackValues
void testCANRX_HandleAerosolSensorStatus(void)
Testing CANRX_HandleAerosolSensorStatus.
static DATA_BLOCK_MOL_FLAG_s can_tableMolFlags
static DATA_BLOCK_AEROSOL_SENSOR_s can_tableAerosolSensor
static DATA_BLOCK_ERROR_STATE_s can_tableErrorState
void setUp(void)
void tearDown(void)
const CAN_SHIM_s can_kShim
static DATA_BLOCK_CELL_TEMPERATURE_s can_tableTemperatures
void testCANRX_AerosolSensor(void)
Testing CANRX_AerosolSensor.
static DATA_BLOCK_SOE_s can_tableSoe
static DATA_BLOCK_RSL_FLAG_s can_tableRslFlags
static DATA_BLOCK_STATE_REQUEST_s can_tableStateRequest
static DATA_BLOCK_INSULATION_MONITORING_s can_tableInsulation
static DATA_BLOCK_SOF_s can_tableSof
void testCANRX_HandleAerosolSensorErrors(void)
Testing CANRX_HandleAerosolSensorErrors.
static DATA_BLOCK_SOC_s can_tableSoc
static DATA_BLOCK_CURRENT_SENSOR_s can_tableCurrentSensor
OS_QUEUE imd_canDataQueue