1 /*
2 * Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without modification,
5 * are permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright notice, this list of
8 * conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
11 * of conditions and the following disclaimer in the documentation and/or other materials
12 * provided with the distribution.
13 *
14 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
15 * to endorse or promote products derived from this software without specific prior written
16 * permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 #include "xts_cmsis.h"
32
33 osMessageQueueId_t g_cmsisMqId;
34 static char *g_cmsisMessageInfo[] = {"msg1", "msg2", "msg3", "msg4", "msg5", "msg6", "msg7", "msg8"};
35
36 LITE_TEST_SUIT(Cmsis, Cmsismsg, CmsisMsgFuncTestSuite);
37
CmsisMsgFuncTestSuiteSetUp(void)38 static BOOL CmsisMsgFuncTestSuiteSetUp(void)
39 {
40 return TRUE;
41 }
42
CmsisMsgFuncTestSuiteTearDown(void)43 static BOOL CmsisMsgFuncTestSuiteTearDown(void)
44 {
45 return TRUE;
46 }
47
CmsisMessageQueueGetFunc001(void const * argument)48 static void CmsisMessageQueueGetFunc001(void const *argument)
49 {
50 (void)argument;
51 osStatus_t uwRet;
52 UINT8 msgPrio = 0;
53 CHAR ucTemp[MSGINFO_LEN] = "";
54 UINT32 uwCmp;
55 uwRet = osMessageQueueGet(g_cmsisMqId, ucTemp, &msgPrio, TIMEOUT_COUNT);
56 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
57 uwCmp = memcmp(ucTemp, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], MSGINFO_LEN);
58 ICUNIT_ASSERT_EQUAL(uwRet, 0, uwCmp);
59
60 uwRet = osMessageQueueDelete(g_cmsisMqId);
61 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
62 osThreadExit();
63 }
64
65 /**
66 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0100
67 * @tc.name : message queue operation for creat
68 * @tc.desc : [C- SOFTWARE -0200]
69 */
70 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueNew001, Function | MediumTest | Level1)
71 {
72 osStatus_t status;
73 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
74 ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
75 (void)osMessageQueueDelete(g_cmsisMqId);
76 status = osDelay(DELAY_TICKS_5);
77 ICUNIT_ASSERT_EQUAL(status, osOK, status);
78 return 0;
79 };
80
81 /**
82 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0200
83 * @tc.name : message queue operation for creat when msg_count = 0
84 * @tc.desc : [C- SOFTWARE -0200]
85 */
86 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueNew002, Function | MediumTest | Level1)
87 {
88 osStatus_t status;
89 g_cmsisMqId = osMessageQueueNew(0, MSG_SIZE, NULL);
90 ICUNIT_ASSERT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
91 status = osDelay(DELAY_TICKS_5);
92 ICUNIT_ASSERT_EQUAL(status, osOK, status);
93 return 0;
94 };
95
96 /**
97 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0300
98 * @tc.name : message queue operation for creat when msg_size = 0
99 * @tc.desc : [C- SOFTWARE -0200]
100 */
101 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueNew003, Function | MediumTest | Level1)
102 {
103 osStatus_t status;
104 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, 0, NULL);
105 ICUNIT_ASSERT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
106 status = osDelay(DELAY_TICKS_5);
107 ICUNIT_ASSERT_EQUAL(status, osOK, status);
108 return 0;
109 };
110
111 /**
112 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0400
113 * @tc.name : message queue operation for delete
114 * @tc.desc : [C- SOFTWARE -0200]
115 */
116 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueDelete001, Function | MediumTest | Level1)
117 {
118 osStatus_t uwRet;
119 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
120 ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
121 uwRet = osMessageQueueDelete(g_cmsisMqId);
122 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
123 return 0;
124 };
125
126 /**
127 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0500
128 * @tc.name : message queue delete operation with mq_id = NULL
129 * @tc.desc : [C- SOFTWARE -0200]
130 */
131 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueDelete002, Function | MediumTest | Level1)
132 {
133 osStatus_t uwRet = osMessageQueueDelete(NULL);
134 ICUNIT_ASSERT_EQUAL(uwRet, osErrorParameter, uwRet);
135 return 0;
136 };
137
138 /**
139 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0600
140 * @tc.name : message queue operation for put
141 * @tc.desc : [C- SOFTWARE -0200]
142 */
143 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueuePut001, Function | MediumTest | Level1)
144 {
145 osStatus_t uwRet;
146 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
147 ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
148
149 uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
150 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
151
152 uwRet = osMessageQueueDelete(g_cmsisMqId);
153 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
154 return 0;
155 };
156
157 /**
158 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0700
159 * @tc.name : message queue put operation with mq_id = NULL
160 * @tc.desc : [C- SOFTWARE -0200]
161 */
162 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueuePut002, Function | MediumTest | Level1)
163 {
164 osStatus_t uwRet = osMessageQueuePut(NULL, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
165 ICUNIT_ASSERT_EQUAL(uwRet, osErrorParameter, uwRet);
166 return 0;
167 };
168
169 /**
170 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0800
171 * @tc.name : message queue operation for put when msg_ptr = 0
172 * @tc.desc : [C- SOFTWARE -0200]
173 */
174 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueuePut003, Function | MediumTest | Level1)
175 {
176 osStatus_t uwRet;
177 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
178 ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
179
180 uwRet = osMessageQueuePut(g_cmsisMqId, NULL, 0, 0);
181 ICUNIT_ASSERT_EQUAL(uwRet, osErrorParameter, uwRet);
182
183 uwRet = osMessageQueueDelete(g_cmsisMqId);
184 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
185 return 0;
186 };
187
188 /**
189 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_0900
190 * @tc.name : message queue operation for get
191 * @tc.desc : [C- SOFTWARE -0200]
192 */
193 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGet001, Function | MediumTest | Level1)
194 {
195 osStatus_t uwRet;
196 UINT32 uId;
197 osThreadId_t id;
198 osThreadAttr_t attr;
199 attr.name = "test";
200 attr.attr_bits = 0U;
201 attr.cb_mem = NULL;
202 attr.cb_size = 0U;
203 attr.stack_mem = NULL;
204 attr.stack_size = TEST_TASK_STACK_SIZE;
205 attr.priority = osPriorityAboveNormal;
206 uId = osKernelLock();
207 ICUNIT_ASSERT_EQUAL(uId, 0, uId); /* 1, common data for test, no special meaning */
208 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
209 ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
210
211 id = osThreadNew((osThreadFunc_t)CmsisMessageQueueGetFunc001, NULL, &attr);
212 ICUNIT_ASSERT_NOT_EQUAL(id, NULL, id);
213 uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
214 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
215 uId = osKernelUnlock();
216 ICUNIT_ASSERT_EQUAL(uId, 1, uId); /* 1, common data for test, no special meaning */
217 return 0;
218 };
219
220 /**
221 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1000
222 * @tc.name : message queue get operation with mq_id = NULL
223 * @tc.desc : [C- SOFTWARE -0200]
224 */
225 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGet002, Function | MediumTest | Level1)
226 {
227 osStatus_t uwRet;
228 UINT8 msgPrio = 0;
229 CHAR ucTemp[MSGINFO_LEN] = "";
230 uwRet = osMessageQueueGet(NULL, ucTemp, &msgPrio, TIMEOUT_COUNT);
231 ICUNIT_ASSERT_EQUAL(uwRet, osErrorParameter, uwRet);
232 return 0;
233 };
234
235 /**
236 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1100
237 * @tc.name : message queue operation for get when msg_ptr = 0
238 * @tc.desc : [C- SOFTWARE -0200]
239 */
240 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGet003, Function | MediumTest | Level1)
241 {
242 osStatus_t uwRet;
243 UINT8 msgPrio = 0;
244 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
245 ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
246
247 uwRet = osMessageQueueGet(g_cmsisMqId, NULL, &msgPrio, TIMEOUT_COUNT);
248 ICUNIT_ASSERT_EQUAL(uwRet, osErrorParameter, uwRet);
249
250 uwRet = osMessageQueueDelete(g_cmsisMqId);
251 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
252 return 0;
253 };
254
255 /**
256 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1200
257 * @tc.name : message queue operation for get msg size
258 * @tc.desc : [C- SOFTWARE -0200]
259 */
260 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetMsgSize001, Function | MediumTest | Level1)
261 {
262 UINT32 uwRet;
263 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
264 ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
265
266 uwRet = osMessageQueueGetMsgSize(g_cmsisMqId);
267 ICUNIT_ASSERT_EQUAL(uwRet, MSG_SIZE, uwRet);
268
269 uwRet = osMessageQueueDelete(g_cmsisMqId);
270 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
271 return 0;
272 };
273
274 /**
275 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1300
276 * @tc.name : message queue get msg size with mq_id = NULL
277 * @tc.desc : [C- SOFTWARE -0200]
278 */
279 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetMsgSize002, Function | MediumTest | Level1)
280 {
281 UINT32 uwRet = osMessageQueueGetMsgSize(NULL);
282 ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
283 return 0;
284 };
285
286 /**
287 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1400
288 * @tc.name : message queue operation for get capacity
289 * @tc.desc : [C- SOFTWARE -0200]
290 */
291 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCapacity001, Function | MediumTest | Level1)
292 {
293 UINT32 uwRet;
294 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
295 ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
296 uwRet = osMessageQueueGetCapacity(g_cmsisMqId);
297 ICUNIT_ASSERT_EQUAL(uwRet, MSGQUEUE_COUNT, uwRet);
298
299 uwRet = osMessageQueueDelete(g_cmsisMqId);
300 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
301 return 0;
302 };
303
304 /**
305 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1500
306 * @tc.name : message queue get capacity with mq_id = NULL
307 * @tc.desc : [C- SOFTWARE -0200]
308 */
309 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCapacity002, Function | MediumTest | Level1)
310 {
311 UINT32 uwRet = osMessageQueueGetCapacity(NULL);
312 ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
313 return 0;
314 };
315
316 /**
317 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1600
318 * @tc.name : message queue operation for get count
319 * @tc.desc : [C- SOFTWARE -0200]
320 */
321 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCount001, Function | MediumTest | Level1)
322 {
323 UINT32 uwRet;
324 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
325 ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
326
327 uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
328 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
329
330 uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_1], 0, 0);
331 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
332
333 uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_2], 0, 0);
334 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
335
336 uwRet = osMessageQueueGetCount(g_cmsisMqId);
337 ICUNIT_ASSERT_EQUAL(uwRet, MSGQUEUE_PUT_COUNT, uwRet);
338
339 uwRet = osMessageQueueDelete(g_cmsisMqId);
340 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
341 return 0;
342 };
343
344 /**
345 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1700
346 * @tc.name : message queue get count with mq_id = NULL
347 * @tc.desc : [C- SOFTWARE -0200]
348 */
349 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCount002, Function | MediumTest | Level1)
350 {
351 UINT32 uwRet = osMessageQueueGetCount(NULL);
352 ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
353 return 0;
354 };
355
356 /**
357 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1800
358 * @tc.name : message queue operation for get space
359 * @tc.desc : [C- SOFTWARE -0200]
360 */
361 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetSpace001, Function | MediumTest | Level1)
362 {
363 UINT32 uwRet;
364 g_cmsisMqId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
365 ICUNIT_ASSERT_NOT_EQUAL(g_cmsisMqId, NULL, g_cmsisMqId);
366
367 uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
368 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
369
370 uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_1], 0, 0);
371 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
372
373 uwRet = osMessageQueuePut(g_cmsisMqId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_2], 0, 0);
374 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
375
376 uwRet = osMessageQueueGetSpace(g_cmsisMqId);
377 ICUNIT_ASSERT_EQUAL(uwRet, MSGQUEUE_SPACE_COUNT, uwRet);
378
379 uwRet = osMessageQueueDelete(g_cmsisMqId);
380 ICUNIT_ASSERT_EQUAL(uwRet, osOK, uwRet);
381 return 0;
382 };
383
384 /**
385 * @tc.number : SUB_KERNEL_CMSIS_MSG_OPERATION_1900
386 * @tc.name : message queue get space with mq_id = NULL
387 * @tc.desc : [C- SOFTWARE -0200]
388 */
389 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetSpace002, Function | MediumTest | Level1)
390 {
391 UINT32 uwRet = osMessageQueueGetSpace(NULL);
392 ICUNIT_ASSERT_EQUAL(uwRet, 0, uwRet);
393 return 0;
394 };
395
396 RUN_TEST_SUITE(CmsisMsgFuncTestSuite);
397
CmsisMsgFuncTest(void)398 void CmsisMsgFuncTest(void)
399 {
400 RUN_ONE_TESTCASE(testOsMessageQueueNew001);
401 RUN_ONE_TESTCASE(testOsMessageQueueNew002);
402 RUN_ONE_TESTCASE(testOsMessageQueueNew003);
403 RUN_ONE_TESTCASE(testOsMessageQueueDelete001);
404 RUN_ONE_TESTCASE(testOsMessageQueueDelete002);
405 RUN_ONE_TESTCASE(testOsMessageQueuePut001);
406 RUN_ONE_TESTCASE(testOsMessageQueuePut002);
407 RUN_ONE_TESTCASE(testOsMessageQueuePut003);
408 RUN_ONE_TESTCASE(testOsMessageQueueGet001);
409 RUN_ONE_TESTCASE(testOsMessageQueueGet002);
410 RUN_ONE_TESTCASE(testOsMessageQueueGet003);
411 RUN_ONE_TESTCASE(testOsMessageQueueGetMsgSize001);
412 RUN_ONE_TESTCASE(testOsMessageQueueGetMsgSize002);
413 RUN_ONE_TESTCASE(testOsMessageQueueGetCapacity001);
414 RUN_ONE_TESTCASE(testOsMessageQueueGetCapacity002);
415 RUN_ONE_TESTCASE(testOsMessageQueueGetCount001);
416 RUN_ONE_TESTCASE(testOsMessageQueueGetCount002);
417 RUN_ONE_TESTCASE(testOsMessageQueueGetSpace001);
418 RUN_ONE_TESTCASE(testOsMessageQueueGetSpace002);
419 }
420