1 /**
2  * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *   http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  *
15  */
16 #include "ohos_types.h"
17 #include <securec.h>
18 #include "hctest.h"
19 #include "los_config.h"
20 #include "cmsis_os2.h"
21 #include "kernel_test.h"
22 
23 osMessageQueueId_t g_cmsisMessageQId;
24 #define MSGQUEUE_COUNT    16
25 #define MSGQUEUE_SPACE_COUNT    13
26 #define MSGQUEUE_PUT_COUNT    3
27 #define MSG_SIZE    4
28 #define MSGINFO_LEN    4
29 #define TIMEOUT_COUNT    1000
30 #define BUF_LEN    32
31 #define MSGQUEUE_COUNT_INDEX_0    0
32 #define MSGQUEUE_COUNT_INDEX_1    1
33 #define MSGQUEUE_COUNT_INDEX_2    2
34 static char *g_cmsisMessageInfo[] = {"msg1", "msg2", "msg3", "msg4", "msg5", "msg6", "msg7", "msg8"};
35 
36 /**
37  * @tc.desc      : register a test suite, this suite is used to test basic flow and interface dependency
38  * @param        : subsystem name is utils
39  * @param        : module name is utilsFile
40  * @param        : test suit name is CmsisMsgFuncTestSuite
41  */
42 LITE_TEST_SUIT(Cmsis, Cmsismsg, CmsisMsgFuncTestSuite);
43 
44 /**
45  * @tc.setup     : setup for all testcases
46  * @return       : setup result, TRUE is success, FALSE is fail
47  */
CmsisMsgFuncTestSuiteSetUp(void)48 static BOOL CmsisMsgFuncTestSuiteSetUp(void)
49 {
50     return TRUE;
51 }
52 
53 /**
54  * @tc.teardown  : teardown for all testcases
55  * @return       : teardown result, TRUE is success, FALSE is fail
56  */
CmsisMsgFuncTestSuiteTearDown(void)57 static BOOL CmsisMsgFuncTestSuiteTearDown(void)
58 {
59     printf("+-------------------------------------------+\n");
60     return TRUE;
61 }
62 
CmsisMessageQueueGetFunc001(void const *argument)63 static void CmsisMessageQueueGetFunc001(void const *argument)
64 {
65     (void)argument;
66     osStatus_t uwRet;
67     UINT8 msg_prio = 0;
68     CHAR   uctemp[MSGINFO_LEN] = "";
69     UINT32 uwCmp;
70     uwRet = osMessageQueueGet(g_cmsisMessageQId, uctemp, &msg_prio, TIMEOUT_COUNT);
71     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
72     uwCmp = memcmp(uctemp, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], MSGINFO_LEN);
73     TEST_ASSERT_EQUAL_INT(0, uwCmp);
74 
75     uwRet = osMessageQueueDelete(g_cmsisMessageQId);
76     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
77     osThreadExit();
78 }
79 
80 /**
81  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_0100
82  * @tc.name      : message queue operation for creat
83  * @tc.desc      : [C- SOFTWARE -0200]
84  */
85 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueNew001, Function | MediumTest | Level1)
86 {
87     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
88     TEST_ASSERT_NOT_NULL(g_cmsisMessageQId);
89     (void)osMessageQueueDelete(g_cmsisMessageQId);
90     osDelay(DELAY_TICKS_5);
91 };
92 
93 /**
94  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_0200
95  * @tc.name      : message queue operation for creat when msg_count = 0
96  * @tc.desc      : [C- SOFTWARE -0200]
97  */
98 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueNew002, Function | MediumTest | Level1)
99 {
100     g_cmsisMessageQId = osMessageQueueNew(0, MSG_SIZE, NULL);
101     TEST_ASSERT_NULL(g_cmsisMessageQId);
102     osDelay(DELAY_TICKS_5);
103 };
104 
105 /**
106  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_0300
107  * @tc.name      : message queue operation for creat when msg_size = 0
108  * @tc.desc      : [C- SOFTWARE -0200]
109  */
110 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueNew003, Function | MediumTest | Level1)
111 {
112     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, 0, NULL);
113     TEST_ASSERT_NULL(g_cmsisMessageQId);
114     osDelay(DELAY_TICKS_5);
115 };
116 
117 /**
118  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_0400
119  * @tc.name      : message queue operation for delete
120  * @tc.desc      : [C- SOFTWARE -0200]
121  */
122 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueDelete001, Function | MediumTest | Level1)
123 {
124     osStatus_t uwRet;
125     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
126     TEST_ASSERT_NOT_NULL(g_cmsisMessageQId);
127     uwRet = osMessageQueueDelete(g_cmsisMessageQId);
128     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
129 };
130 
131 /**
132  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_0500
133  * @tc.name      : message queue delete operation with mq_id = NULL
134  * @tc.desc      : [C- SOFTWARE -0200]
135  */
136 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueDelete002, Function | MediumTest | Level1)
137 {
138     osStatus_t uwRet;
139     uwRet = osMessageQueueDelete(NULL);
140     TEST_ASSERT_EQUAL_INT(osErrorParameter, uwRet);
141 };
142 
143 /**
144  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_0600
145  * @tc.name      : message queue operation for put
146  * @tc.desc      : [C- SOFTWARE -0200]
147  */
148 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueuePut001, Function | MediumTest | Level1)
149 {
150     osStatus_t uwRet;
151     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
152     TEST_ASSERT_NOT_NULL(g_cmsisMessageQId);
153 
154     uwRet = osMessageQueuePut(g_cmsisMessageQId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
155     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
156 
157     uwRet = osMessageQueueDelete(g_cmsisMessageQId);
158     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
159 };
160 
161 /**
162  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_0700
163  * @tc.name      : message queue put operation with mq_id = NULL
164  * @tc.desc      : [C- SOFTWARE -0200]
165  */
166 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueuePut002, Function | MediumTest | Level1)
167 {
168     osStatus_t uwRet;
169     uwRet = osMessageQueuePut(NULL, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
170     TEST_ASSERT_EQUAL_INT(osErrorParameter, uwRet);
171 };
172 
173 /**
174  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_0800
175  * @tc.name      : message queue operation for put when msg_ptr = 0
176  * @tc.desc      : [C- SOFTWARE -0200]
177  */
178 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueuePut003, Function | MediumTest | Level1)
179 {
180     osStatus_t uwRet;
181     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
182     TEST_ASSERT_NOT_NULL(g_cmsisMessageQId);
183 
184     uwRet = osMessageQueuePut(g_cmsisMessageQId, NULL, 0, 0);
185     TEST_ASSERT_EQUAL_INT(osErrorParameter, uwRet);
186 
187     uwRet = osMessageQueueDelete(g_cmsisMessageQId);
188     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
189 };
190 
191 /**
192  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_0900
193  * @tc.name      : message queue operation for get
194  * @tc.desc      : [C- SOFTWARE -0200]
195  */
196 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGet001, Function | MediumTest | Level1)
197 {
198     osStatus_t uwRet;
199     osThreadId_t id;
200     osThreadAttr_t attr;
201     attr.name = "test";
202     attr.attr_bits = 0U;
203     attr.cb_mem = NULL;
204     attr.cb_size = 0U;
205     attr.stack_mem = NULL;
206     attr.stack_size = TEST_TASK_STACK_SIZE;
207     attr.priority = osPriorityAboveNormal;
208     osKernelLock();
209     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
210     TEST_ASSERT_NOT_NULL(g_cmsisMessageQId);
211 
212     id = osThreadNew((osThreadFunc_t)CmsisMessageQueueGetFunc001, NULL, &attr);
213     TEST_ASSERT_NOT_NULL(id);
214     uwRet = osMessageQueuePut(g_cmsisMessageQId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
215     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
216     osKernelUnlock();
217 };
218 
219 /**
220  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_1000
221  * @tc.name      : message queue get operation with mq_id = NULL
222  * @tc.desc      : [C- SOFTWARE -0200]
223  */
224 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGet002, Function | MediumTest | Level1)
225 {
226     osStatus_t uwRet;
227     UINT8 msg_prio = 0;
228     CHAR   uctemp[MSGINFO_LEN] = "";
229     uwRet = osMessageQueueGet(NULL, uctemp, &msg_prio, TIMEOUT_COUNT);
230     TEST_ASSERT_EQUAL_INT(osErrorParameter, uwRet);
231 };
232 
233 /**
234  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_1100
235  * @tc.name      : message queue operation for get when msg_ptr = 0
236  * @tc.desc      : [C- SOFTWARE -0200]
237  */
238 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGet003, Function | MediumTest | Level1)
239 {
240     osStatus_t uwRet;
241     UINT8 msg_prio = 0;
242     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
243     TEST_ASSERT_NOT_NULL(g_cmsisMessageQId);
244 
245     uwRet = osMessageQueueGet(g_cmsisMessageQId, NULL, &msg_prio, TIMEOUT_COUNT);
246     TEST_ASSERT_EQUAL_INT(osErrorParameter, uwRet);
247 
248     uwRet = osMessageQueueDelete(g_cmsisMessageQId);
249     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
250 };
251 
252 /**
253  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_1200
254  * @tc.name      : message queue operation for get msg size
255  * @tc.desc      : [C- SOFTWARE -0200]
256  */
257 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetMsgSize001, Function | MediumTest | Level1)
258 {
259     UINT32 uwRet;
260     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
261     TEST_ASSERT_NOT_NULL(g_cmsisMessageQId);
262 
263     uwRet = osMessageQueueGetMsgSize(g_cmsisMessageQId);
264     TEST_ASSERT_EQUAL_INT(MSG_SIZE, uwRet);
265 
266     uwRet = osMessageQueueDelete(g_cmsisMessageQId);
267     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
268 };
269 
270 /**
271  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_1300
272  * @tc.name      : message queue get msg size with mq_id = NULL
273  * @tc.desc      : [C- SOFTWARE -0200]
274  */
275 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetMsgSize002, Function | MediumTest | Level1)
276 {
277     UINT32 uwRet;
278     uwRet = osMessageQueueGetMsgSize(NULL);
279     TEST_ASSERT_EQUAL_INT(0, uwRet);
280 };
281 
282 /**
283  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_1400
284  * @tc.name      : message queue operation for get capacity
285  * @tc.desc      : [C- SOFTWARE -0200]
286  */
287 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCapacity001, Function | MediumTest | Level1)
288 {
289     UINT32 uwRet;
290     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
291     TEST_ASSERT_NOT_NULL(g_cmsisMessageQId);
292     uwRet = osMessageQueueGetCapacity(g_cmsisMessageQId);
293     TEST_ASSERT_EQUAL_INT(MSGQUEUE_COUNT, uwRet);
294 
295     uwRet = osMessageQueueDelete(g_cmsisMessageQId);
296     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
297 };
298 
299 /**
300  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_1500
301  * @tc.name      : message queue get capacity with mq_id = NULL
302  * @tc.desc      : [C- SOFTWARE -0200]
303  */
304 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCapacity002, Function | MediumTest | Level1)
305 {
306     UINT32 uwRet;
307     uwRet = osMessageQueueGetCapacity(NULL);
308     TEST_ASSERT_EQUAL_INT(0, uwRet);
309 };
310 
311 /**
312  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_1600
313  * @tc.name      : message queue operation for get count
314  * @tc.desc      : [C- SOFTWARE -0200]
315  */
316 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCount001, Function | MediumTest | Level1)
317 {
318     UINT32 uwRet;
319     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
320     TEST_ASSERT_NOT_NULL(g_cmsisMessageQId);
321 
322     uwRet = osMessageQueuePut(g_cmsisMessageQId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
323     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
324 
325     uwRet = osMessageQueuePut(g_cmsisMessageQId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_1], 0, 0);
326     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
327 
328     uwRet = osMessageQueuePut(g_cmsisMessageQId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_2], 0, 0);
329     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
330 
331     uwRet = osMessageQueueGetCount(g_cmsisMessageQId);
332     TEST_ASSERT_EQUAL_INT(MSGQUEUE_PUT_COUNT, uwRet);
333 
334     uwRet = osMessageQueueDelete(g_cmsisMessageQId);
335     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
336 };
337 
338 /**
339  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_1700
340  * @tc.name      : message queue get count with mq_id = NULL
341  * @tc.desc      : [C- SOFTWARE -0200]
342  */
343 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetCount002, Function | MediumTest | Level1)
344 {
345     UINT32 uwRet;
346     uwRet = osMessageQueueGetCount(NULL);
347     TEST_ASSERT_EQUAL_INT(0, uwRet);
348 };
349 
350 /**
351  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_1800
352  * @tc.name      : message queue operation for get space
353  * @tc.desc      : [C- SOFTWARE -0200]
354  */
355 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetSpace001, Function | MediumTest | Level1)
356 {
357     UINT32 uwRet;
358     g_cmsisMessageQId = osMessageQueueNew(MSGQUEUE_COUNT, MSG_SIZE, NULL);
359     TEST_ASSERT_NOT_NULL(g_cmsisMessageQId);
360 
361     uwRet = osMessageQueuePut(g_cmsisMessageQId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_0], 0, 0);
362     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
363 
364     uwRet = osMessageQueuePut(g_cmsisMessageQId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_1], 0, 0);
365     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
366 
367     uwRet = osMessageQueuePut(g_cmsisMessageQId, g_cmsisMessageInfo[MSGQUEUE_COUNT_INDEX_2], 0, 0);
368     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
369 
370     uwRet = osMessageQueueGetSpace(g_cmsisMessageQId);
371     TEST_ASSERT_EQUAL_INT(MSGQUEUE_SPACE_COUNT, uwRet);
372 
373     uwRet = osMessageQueueDelete(g_cmsisMessageQId);
374     TEST_ASSERT_EQUAL_INT(osOK, uwRet);
375 };
376 
377 /**
378  * @tc.number    : SUB_KERNEL_CMSIS_MSG_OPERATION_1900
379  * @tc.name      : message queue get space with mq_id = NULL
380  * @tc.desc      : [C- SOFTWARE -0200]
381  */
382 LITE_TEST_CASE(CmsisMsgFuncTestSuite, testOsMessageQueueGetSpace002, Function | MediumTest | Level1)
383 {
384     UINT32 uwRet;
385     uwRet = osMessageQueueGetSpace(NULL);
386     TEST_ASSERT_EQUAL_INT(0, uwRet);
387 };
388 
389 RUN_TEST_SUITE(CmsisMsgFuncTestSuite);
390