• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3  * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice, this list of
9  * conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12  * of conditions and the following disclaimer in the documentation and/or other materials
13  * provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16  * to endorse or promote products derived from this software without specific prior written
17  * permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #include "osTest.h"
33 #include "los_config.h"
34 #include "los_bitmap.h"
35 #include "It_los_mux.h"
36 
37 #ifdef __cplusplus
38 #if __cplusplus
39 extern "C" {
40 #endif /* __cplusplus */
41 #endif /* __cplusplus */
42 
43 #define OS_MUX_NUM 1000
44 static LosMux g_testMux1;
45 static LosMux g_testMux2;
46 static LosMux g_testMux3;
47 static LosMux g_testMux4;
48 static LosMux g_testMux5;
49 
TaskFe7Func(VOID)50 static VOID TaskFe7Func(VOID)
51 {
52     UINT32 ret;
53 
54     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 15, g_testCount); // 15, here assert the result.
55     g_testCount++;
56 
57     ret = LOS_MuxLock(&g_testMux4, LOS_WAIT_FOREVER);
58     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
59 
60     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 17, g_testCount); // 17, here assert the result.
61     g_testCount++;
62 
63     ret = LOS_MuxLock(&g_testMux1, LOS_WAIT_FOREVER);
64     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
65 
66     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 21, g_testCount); // 21, here assert the result.
67     g_testCount++;
68     return;
69 }
70 
71 
TaskFe8Func(VOID)72 static VOID TaskFe8Func(VOID)
73 {
74     UINT32 ret;
75 
76     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 13, g_testCount); // 13, here assert the result.
77     g_testCount++;
78 
79     ret = LOS_MuxLock(&g_testMux3, LOS_WAIT_FOREVER);
80     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
81 
82     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 18, g_testCount); // 18, here assert the result.
83     g_testCount++;
84 
85     ret = LOS_MuxLock(&g_testMux1, LOS_WAIT_FOREVER);
86     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
87 
88     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 22, g_testCount); // 22, here assert the result.
89     g_testCount++;
90     return;
91 }
92 
TaskFe9Func(VOID)93 static VOID TaskFe9Func(VOID)
94 {
95     UINT32 ret;
96 
97     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 11, g_testCount); // 11, here assert the result.
98     g_testCount++;
99 
100     ret = LOS_MuxLock(&g_testMux2, LOS_WAIT_FOREVER);
101     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
102 
103     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 19, g_testCount); // 19, here assert the result.
104     g_testCount++;
105 
106     ret = LOS_MuxLock(&g_testMux1, LOS_WAIT_FOREVER);
107     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
108 
109     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 23, g_testCount); // 23, here assert the result.
110     g_testCount++;
111     return;
112 }
113 
TaskMisc10Func(VOID)114 static VOID TaskMisc10Func(VOID)
115 {
116     UINT32 ret;
117 
118     g_testCount++;
119 
120     ret = LOS_MuxLock(&g_testMux2, LOS_WAIT_FOREVER);
121     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
122 
123     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 2, g_testCount); // 2, here assert the result.
124     g_testCount++;
125 
126     ret = LOS_MuxLock(&g_testMux3, LOS_WAIT_FOREVER);
127     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
128 
129     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 3, g_testCount); // 3, here assert the result.
130     g_testCount++;
131 
132     ret = LOS_MuxLock(&g_testMux4, LOS_WAIT_FOREVER);
133     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
134 
135     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 4, g_testCount); // 4, here assert the result.
136     g_testCount++;
137 
138     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 5, g_testCount); // 5, here assert the result.
139     g_testCount++;
140 
141     ret = LOS_MuxLock(&g_testMux2, LOS_WAIT_FOREVER);
142     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
143 
144     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 6, g_testCount); // 6, here assert the result.
145     g_testCount++;
146 
147     ret = LOS_MuxLock(&g_testMux3, LOS_WAIT_FOREVER);
148     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
149 
150     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 7, g_testCount); // 7, here assert the result.
151     g_testCount++;
152 
153     ret = LOS_MuxLock(&g_testMux3, LOS_WAIT_FOREVER);
154     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
155 
156     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 8, g_testCount); // 8, here assert the result.
157     g_testCount++;
158 
159     ret = LOS_MuxLock(&g_testMux3, LOS_WAIT_FOREVER);
160     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
161 
162     ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 9, g_testCount); // 9, here assert the result.
163     g_testCount++;
164 
165     ret = LOS_MuxLock(&g_testMux1, LOS_WAIT_FOREVER);
166     ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
167 
168     g_testCount++;
169     return;
170 }
171 
172 
Testcase(VOID)173 static UINT32 Testcase(VOID)
174 {
175     UINT32 ret;
176     TSK_INIT_PARAM_S task = {0};
177     g_testCount = 0;
178 
179     ret = LosMuxCreate(&g_testMux1);
180     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
181 
182     ret = LosMuxCreate(&g_testMux2);
183     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
184 
185     ret = LosMuxCreate(&g_testMux3);
186     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
187 
188     ret = LosMuxCreate(&g_testMux4);
189     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
190 
191     ret = LOS_MuxLock(&g_testMux1, LOS_WAIT_FOREVER);
192     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
193 
194     g_testCount++;
195 
196     task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskMisc10Func;
197     task.usTaskPrio = 10; // 10, set reasonable priority.
198     task.pcName = "TaskMisc_10";
199     task.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
200     task.uwResved = LOS_TASK_STATUS_DETACHED;
201 #ifdef LOSCFG_KERNEL_SMP
202     task.usCpuAffiMask = CPUID_TO_AFFI_MASK(ArchCurrCpuid());
203 #endif
204 
205     ret = LOS_TaskCreate(&g_testTaskID01, &task);
206     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
207 
208     ICUNIT_GOTO_EQUAL(g_testCount, 10, g_testCount, EXIT); // 10, here assert the result.
209     g_testCount++;
210 
211     task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskFe9Func;
212     task.usTaskPrio = 9; // 9, set reasonable priority.
213     task.pcName = "TaskFe_9";
214     task.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
215     task.uwResved = LOS_TASK_STATUS_DETACHED;
216 #ifdef LOSCFG_KERNEL_SMP
217     task.usCpuAffiMask = CPUID_TO_AFFI_MASK(ArchCurrCpuid());
218 #endif
219 
220     ret = LOS_TaskCreate(&g_testTaskID02, &task);
221     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
222 
223     ICUNIT_GOTO_EQUAL(g_testCount, 12, g_testCount, EXIT); // 12, here assert the result.
224     g_testCount++;
225 
226     task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskFe8Func;
227     task.usTaskPrio = 8; // 8, set reasonable priority.
228     task.pcName = "TaskFe_8";
229     task.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
230     task.uwResved = LOS_TASK_STATUS_DETACHED;
231 #ifdef LOSCFG_KERNEL_SMP
232     task.usCpuAffiMask = CPUID_TO_AFFI_MASK(ArchCurrCpuid());
233 #endif
234 
235     ret = LOS_TaskCreate(&g_testTaskID03, &task);
236     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
237 
238     ICUNIT_GOTO_EQUAL(g_testCount, 14, g_testCount, EXIT); // 14, here assert the result.
239     g_testCount++;
240 
241     task.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskFe7Func;
242     task.usTaskPrio = 7; // 7, set reasonable priority.
243     task.pcName = "TaskFe_7";
244     task.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;
245     task.uwResved = LOS_TASK_STATUS_DETACHED;
246 #ifdef LOSCFG_KERNEL_SMP
247     task.usCpuAffiMask = CPUID_TO_AFFI_MASK(ArchCurrCpuid());
248 #endif
249 
250     ret = LOS_TaskCreate(&g_testTaskID04, &task);
251     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
252 
253     ICUNIT_GOTO_EQUAL(g_testCount, 16, g_testCount, EXIT); // 16, here assert the result.
254     g_testCount++;
255 
256     ret = LOS_TaskDelete(g_testTaskID01);
257     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
258 
259     ICUNIT_GOTO_EQUAL(g_testCount, 20, g_testCount, EXIT); // 20, here assert the result.
260     g_testCount++;
261 
262     ret = LOS_MuxUnlock(&g_testMux1);
263     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
264 
265     ICUNIT_ASSERT_EQUAL(g_testCount, 24, g_testCount); // 24, here assert the result.
266 
267     ret = LOS_MuxLock(&g_testMux2, LOS_WAIT_FOREVER);
268     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
269 
270     ret = LOS_MuxLock(&g_testMux3, LOS_WAIT_FOREVER);
271     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
272 
273     ret = LOS_MuxLock(&g_testMux4, LOS_WAIT_FOREVER);
274     ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
275 
276     ICUNIT_GOTO_EQUAL(g_testCount, 24, g_testCount, EXIT); // 24, here assert the result.
277 
278 EXIT:
279     ret = LOS_MuxUnlock(&g_testMux2);
280     ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
281 
282     ret = LOS_MuxUnlock(&g_testMux3);
283     ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
284 
285     ret = LOS_MuxUnlock(&g_testMux4);
286     ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
287 
288     UINT16 priority = LOS_TaskPriGet(OsCurrTaskGet()->taskID);
289     ICUNIT_ASSERT_EQUAL(priority, TASK_PRIO_TEST_TASK, priority);
290 
291     ret = LOS_MuxDestroy(&g_testMux1);
292     ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
293 
294     ret = LOS_MuxDestroy(&g_testMux2);
295     ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
296 
297     ret = LOS_MuxDestroy(&g_testMux3);
298     ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
299 
300     ret = LOS_MuxDestroy(&g_testMux4);
301     ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
302 
303     return LOS_OK;
304 }
305 
ItLosMux040(void)306 VOID ItLosMux040(void)
307 {
308     TEST_ADD_CASE("ItLosMux040", Testcase, TEST_LOS, TEST_MUX, TEST_LEVEL2, TEST_FUNCTION);
309 }
310 
311 #ifdef __cplusplus
312 #if __cplusplus
313 }
314 #endif /* __cplusplus */
315 #endif /* __cplusplus */
316