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