• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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