• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  * Description : testcases for distributedschedule_lite subsystem
16  * Create      : 2020/04/19
17  */
18 
19 #include "cmsis_os.h"
20 #include "hctest.h"
21 #include "samgr_lite.h"
22 #include "broadcast_interface.h"
23 
24 #define TEST_LEN 10
25 #define OPER_INTERVAL 200
26 #define BROADCASR_TEST_SERVICE "S_broadcast1"
27 
C1Callback(Consumer * consumer,const Topic * topic,const Request * request)28 static void C1Callback(Consumer *consumer, const Topic *topic, const Request *request)
29 {
30     (void)consumer;
31     (void)topic;
32     (void)request;
33 }
C2Callback(Consumer * consumer,const Topic * topic,const Request * request)34 static void C2Callback(Consumer *consumer, const Topic *topic, const Request *request)
35 {
36     (void)consumer;
37     (void)topic;
38     (void)request;
39 }
40 
Equal(const Consumer * current,const Consumer * other)41 static BOOL Equal(const Consumer *current, const Consumer *other)
42 {
43     if (current->Notify == other->Notify) {
44         return TRUE;
45     } else {
46         return FALSE;
47     }
48 }
49 
GetName(Service * service)50 static const char *GetName(Service *service)
51 {
52     (void)service;
53     return BROADCASR_TEST_SERVICE;
54 };
55 
56 static Identity g_identity = { -1, -1, NULL};
Initialize(Service * service,Identity identity)57 static BOOL Initialize(Service *service, Identity identity)
58 {
59     g_identity = identity;
60     (void)service;
61     return TRUE;
62 };
63 
MessageHandle(Service * service,Request * msg)64 static BOOL MessageHandle(Service *service, Request *msg)
65 {
66     (void)service;
67     (void)msg;
68     return FALSE;
69 };
70 
GetTaskConfig(Service * service)71 static TaskConfig GetTaskConfig(Service *service)
72 {
73     TaskConfig config = {LEVEL_HIGH, PRI_NORMAL, 0x800, 20, SHARED_TASK}; // share with broadcast
74     (void)service;
75     return config;
76 };
77 
78 static Service g_service = {GetName, Initialize, MessageHandle, GetTaskConfig};
Init(void)79 static void Init(void)
80 {
81     BOOL result = SAMGR_GetInstance()->RegisterService(&g_service);
82     if (result == FALSE) {
83         printf("[hctest]E RegisterService failed. \n");
84     }
85 }
86 SYSEX_SERVICE_INIT(Init);
87 
CASE_GetIUnknown(void)88 static PubSubInterface *CASE_GetIUnknown(void)
89 {
90     PubSubInterface *fapi = NULL;
91     IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(BROADCAST_SERVICE, PUB_SUB_FEATURE);
92     if (iUnknown == NULL) {
93         printf("[hctest]failed to GetIUnknown ");
94         return NULL;
95     }
96 
97     int result = iUnknown->QueryInterface(iUnknown, 0, (void **)&fapi);
98     if (result != 0 || fapi == NULL) {
99         printf("[hctest]failed to QueryInterface ");
100     }
101     return fapi;
102 }
103 
CASE_ReleaseIUnknown(PubSubInterface * fapi)104 static void CASE_ReleaseIUnknown(PubSubInterface *fapi)
105 {
106     fapi->Release((IUnknown *)fapi);
107 }
108 
109 LITE_TEST_SUIT(test, broadcast, Broadcast01TestSuite);
110 
Broadcast01TestSuiteSetUp(void)111 static BOOL Broadcast01TestSuiteSetUp(void)
112 {
113     osDelay(OPER_INTERVAL);
114 
115     return TRUE;
116 }
117 
Broadcast01TestSuiteTearDown(void)118 static BOOL Broadcast01TestSuiteTearDown(void)
119 {
120     return TRUE;
121 }
122 
123 /**
124  * @tc.number    : DMSLite_SAMGR_AddTopic_0010
125  * @tc.name      : Valid topic can be added successfully
126  * @tc.desc      : [C- SOFTWARE -0200]
127  */
128 LITE_TEST_CASE(Broadcast01TestSuite, testAddTopic0010, Function | MediumTest | Level1)
129 {
130     PubSubInterface *fapi = CASE_GetIUnknown();
131     if (fapi == NULL) {
132         TEST_FAIL();
133     }
134     Subscriber *subscriber = &fapi->subscriber;
135     if (subscriber == NULL) {
136         TEST_FAIL();
137     }
138 
139     Topic topic0 = 11;
140     int result = subscriber->AddTopic((IUnknown *)fapi, &topic0);
141     TEST_ASSERT_EQUAL_INT(result == 0, TRUE);
142 
143     CASE_ReleaseIUnknown(fapi);
144 }
145 
146 /**
147  * @tc.number    : DMSLite_SAMGR_AddTopic_0020
148  * @tc.name      : Topic which is NULL or already existing can not be added
149  * @tc.desc      : [C- SOFTWARE -0200]
150  */
151 LITE_TEST_CASE(Broadcast01TestSuite, testAddTopic0020, Function | MediumTest | Level2)
152 {
153     PubSubInterface *fapi = CASE_GetIUnknown();
154     if (fapi == NULL) {
155         TEST_FAIL();
156     }
157     Subscriber *subscriber = &fapi->subscriber;
158     if (subscriber == NULL) {
159         TEST_FAIL();
160     }
161 
162     Topic topic0 = 0;
163     subscriber->AddTopic((IUnknown *)fapi, &topic0);
164 
165     int result = subscriber->AddTopic((IUnknown *)fapi, NULL);
166     TEST_ASSERT_EQUAL_INT(result != 0, TRUE);
167 
168     result = subscriber->AddTopic((IUnknown *)fapi, &topic0);
169     TEST_ASSERT_EQUAL_INT(result != 0, TRUE);
170 
171     CASE_ReleaseIUnknown(fapi);
172 }
173 
174 /**
175  * @tc.number    : DMSLite_SAMGR_Subscribe_0010
176  * @tc.name      : Consumer can subscribe to a topic
177  * @tc.desc      : [C- SOFTWARE -0200]
178  */
179 LITE_TEST_CASE(Broadcast01TestSuite, testSubscribe0010, Function | MediumTest | Level1)
180 {
181     PubSubInterface *fapi = CASE_GetIUnknown();
182     if (fapi == NULL) {
183         TEST_FAIL();
184     }
185     Subscriber *subscriber = &fapi->subscriber;
186     if (subscriber == NULL) {
187         TEST_FAIL();
188     }
189     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
190 
191     Topic topic0 = 9;
192     subscriber->AddTopic((IUnknown *)fapi, &topic0);
193     int result = subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
194     TEST_ASSERT_EQUAL_INT(result == 0, TRUE);
195 
196     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
197 
198     CASE_ReleaseIUnknown(fapi);
199 }
200 
201 /**
202  * @tc.number    : DMSLite_SAMGR_Subscribe_0020
203  * @tc.name      : Consumer can not subscribe to the topic which is NULL or does not exist
204  * @tc.desc      : [C- SOFTWARE -0200]
205  */
206 LITE_TEST_CASE(Broadcast01TestSuite, testSubscribe0020, Function | MediumTest | Level2)
207 {
208     PubSubInterface *fapi = CASE_GetIUnknown();
209     if (fapi == NULL) {
210         TEST_FAIL();
211     }
212     Subscriber *subscriber = &fapi->subscriber;
213     if (subscriber == NULL) {
214         TEST_FAIL();
215     }
216     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
217 
218     Topic topic0 = 0;
219     subscriber->AddTopic((IUnknown *)fapi, &topic0);
220     int result = subscriber->Subscribe((IUnknown *)fapi, NULL, &c1);
221     TEST_ASSERT_EQUAL_INT(result != 0, TRUE);
222 
223     CASE_ReleaseIUnknown(fapi);
224 }
225 
226 /**
227  * @tc.number    : DMSLite_SAMGR_Subscribe_0030
228  * @tc.name      : Consumer which is NULL can not subscribe to a topic
229  * @tc.desc      : [C- SOFTWARE -0200]
230  */
231 LITE_TEST_CASE(Broadcast01TestSuite, testSubscribe0030, Function | MediumTest | Level2)
232 {
233     PubSubInterface *fapi = CASE_GetIUnknown();
234     if (fapi == NULL) {
235         TEST_FAIL();
236     }
237     Subscriber *subscriber = &fapi->subscriber;
238     if (subscriber == NULL) {
239         TEST_FAIL();
240     }
241     Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
242 
243     Topic topic0 = 0;
244     subscriber->AddTopic((IUnknown *)fapi, &topic0);
245     int result = subscriber->Subscribe((IUnknown *)fapi, &topic0, NULL);
246     TEST_ASSERT_EQUAL_INT(result != 0, TRUE);
247 
248     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
249 
250     CASE_ReleaseIUnknown(fapi);
251 }
252 
253 /**
254  * @tc.number    : DMSLite_SAMGR_Subscribe_0040
255  * @tc.name      : Consumer can not subscribe to the same topic twice
256  * @tc.desc      : [C- SOFTWARE -0200]
257  */
258 LITE_TEST_CASE(Broadcast01TestSuite, testSubscribe0040, Function | MediumTest | Level2)
259 {
260     PubSubInterface *fapi = CASE_GetIUnknown();
261     if (fapi == NULL) {
262         TEST_FAIL();
263     }
264     Subscriber *subscriber = &fapi->subscriber;
265     if (subscriber == NULL) {
266         TEST_FAIL();
267     }
268     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
269 
270     Topic topic0 = 0;
271     subscriber->AddTopic((IUnknown *)fapi, &topic0);
272     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
273     int result = subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
274     TEST_ASSERT_EQUAL_INT(result != 0, TRUE);
275 
276     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
277 
278     CASE_ReleaseIUnknown(fapi);
279 }
280 
281 /**
282  * @tc.number    : DMSLite_SAMGR_UnSubscribe_0010
283  * @tc.name      : Consumer can unsubscribe a topic
284  * @tc.desc      : [C- SOFTWARE -0200]
285  */
286 LITE_TEST_CASE(Broadcast01TestSuite, testUnsubscribe0010, Function | MediumTest | Level1)
287 {
288     PubSubInterface *fapi = CASE_GetIUnknown();
289     if (fapi == NULL) {
290         TEST_FAIL();
291     }
292     Subscriber *subscriber = &fapi->subscriber;
293     if (subscriber == NULL) {
294         TEST_FAIL();
295     }
296 
297     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
298 
299     Topic topic0 = 0;
300     subscriber->AddTopic((IUnknown *)fapi, &topic0);
301     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
302 
303     Consumer *result = subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
304     TEST_ASSERT_EQUAL_INT(result != NULL, TRUE);
305 
306     CASE_ReleaseIUnknown(fapi);
307 }
308 
309 /**
310  * @tc.number    : DMSLite_SAMGR_UnSubscribe_0020
311  * @tc.name      : Consumer can not unsubscribe a topic if the specified topic-comsumer relationship is NULL
312  * @tc.desc      : [C- SOFTWARE -0200]
313  */
314 LITE_TEST_CASE(Broadcast01TestSuite, testUnsubscribe0020, Function | MediumTest | Level2)
315 {
316     PubSubInterface *fapi = CASE_GetIUnknown();
317     if (fapi == NULL) {
318         TEST_FAIL();
319     }
320     Subscriber *subscriber = &fapi->subscriber;
321     if (subscriber == NULL) {
322         TEST_FAIL();
323     }
324     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
325 
326     Topic topic0 = 0;
327     subscriber->AddTopic((IUnknown *)fapi, &topic0);
328     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
329 
330     Consumer *result = subscriber->Unsubscribe((IUnknown *)fapi, NULL, &c1);
331     TEST_ASSERT_EQUAL_INT(result==NULL, TRUE);  // failed
332 
333     result = subscriber->Unsubscribe((IUnknown *)fapi, &topic0, NULL);
334     TEST_ASSERT_EQUAL_INT(result==NULL, TRUE);
335 
336     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
337     CASE_ReleaseIUnknown(fapi);
338 }
339 
340 /**
341  * @tc.number    : DMSLite_SAMGR_UnSubscribe_0030
342  * @tc.name      : Consumer can not unsubscribe a topic if the specified topic-comsumer relationship not exist
343  * @tc.desc      : [C- SOFTWARE -0200]
344  */
345 LITE_TEST_CASE(Broadcast01TestSuite, testUnsubscribe0030, Function | MediumTest | Level2)
346 {
347     PubSubInterface *fapi = CASE_GetIUnknown();
348     if (fapi == NULL) {
349         TEST_FAIL();
350     }
351     Subscriber *subscriber = &fapi->subscriber;
352     if (subscriber == NULL) {
353         TEST_FAIL();
354     }
355     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
356     static Consumer c2 = {.identity = &g_identity, .Notify = C2Callback, .Equal = Equal};
357 
358     Topic topic0 = 0;
359     subscriber->AddTopic((IUnknown *)fapi, &topic0);
360     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
361 
362     Consumer *result = subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c2);
363     TEST_ASSERT_EQUAL_INT(result==NULL, TRUE);
364 
365     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
366     CASE_ReleaseIUnknown(fapi);
367 }
368 
369 /**
370  * @tc.number    : DMSLite_SAMGR_ModifyConsumer_0010
371  * @tc.name      : Consumer can modify subscription relationship
372  * @tc.desc      : [C- SOFTWARE -0200]
373  */
374 LITE_TEST_CASE(Broadcast01TestSuite, testModifyConsumer0010, Function | MediumTest | Level2)
375 {
376     PubSubInterface *fapi = CASE_GetIUnknown();
377     if (fapi == NULL) {
378         TEST_FAIL();
379     }
380     Subscriber *subscriber = &fapi->subscriber;
381     if (subscriber == NULL) {
382         TEST_FAIL();
383     }
384     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
385     static Consumer c2 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
386 
387     Topic topic0 = 0;
388     subscriber->AddTopic((IUnknown *)fapi, &topic0);
389     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
390 
391     Consumer *result = subscriber->ModifyConsumer((IUnknown *)fapi, &topic0, &c1, &c2);
392     TEST_ASSERT_EQUAL_INT(result != NULL, TRUE);
393 
394     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
395 
396     CASE_ReleaseIUnknown(fapi);
397 }
398 
399 /**
400  * @tc.number    : DMSLite_SAMGR_ModifyConsumer_0020
401  * @tc.name      : Consumer can not modify subscription relationship if the input parameter is NULL
402  * @tc.desc      : [C- SOFTWARE -0200]
403  */
404 LITE_TEST_CASE(Broadcast01TestSuite, testModifyConsumer0020, Function | MediumTest | Level2)
405 {
406     PubSubInterface *fapi = CASE_GetIUnknown();
407     if (fapi == NULL) {
408         TEST_FAIL();
409     }
410     Subscriber *subscriber = &fapi->subscriber;
411     if (subscriber == NULL) {
412         TEST_FAIL();
413     }
414     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
415     static Consumer c2 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
416 
417     Topic topic0 = 0;
418     subscriber->AddTopic((IUnknown *)fapi, &topic0);
419     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
420 
421     Consumer *result = subscriber->ModifyConsumer((IUnknown *)fapi, NULL, &c1, &c2);
422     TEST_ASSERT_EQUAL_INT(result!=NULL, 0);
423 
424     result = subscriber->ModifyConsumer((IUnknown *)fapi, &topic0, NULL, &c2);
425     TEST_ASSERT_EQUAL_INT(result!=NULL, 0);
426 
427     result = subscriber->ModifyConsumer((IUnknown *)fapi, &topic0, &c1, NULL);
428     TEST_ASSERT_EQUAL_INT(result!=NULL, 0);
429 
430     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
431 
432     CASE_ReleaseIUnknown(fapi);
433 }
434 
435 /**
436  * @tc.number    : DMSLite_SAMGR_ModifyConsumer_0030
437  * @tc.name      : Consumer can not modify subscription relationship if the specified topic not exist
438  * @tc.desc      : [C- SOFTWARE -0200]
439  */
440 LITE_TEST_CASE(Broadcast01TestSuite, testModifyConsumer0030, Function | MediumTest | Level2)
441 {
442     PubSubInterface *fapi = CASE_GetIUnknown();
443     if (fapi == NULL) {
444         TEST_FAIL();
445     }
446     Subscriber *subscriber = &fapi->subscriber;
447     if (subscriber == NULL) {
448         TEST_FAIL();
449     }
450     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
451     static Consumer c2 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
452 
453     Topic topic0 = 0;
454     subscriber->AddTopic((IUnknown *)fapi, &topic0);
455     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
456 
457     Topic noExistTopic = 99;
458     Consumer *result = subscriber->ModifyConsumer((IUnknown *)fapi, &noExistTopic, &c1, &c2);
459     TEST_ASSERT_EQUAL_INT(result==NULL, 1);
460 
461     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
462 
463     CASE_ReleaseIUnknown(fapi);
464 }
465 
466 /**
467  * @tc.number    : DMSLite_SAMGR_ModifyConsumer_0040
468  * @tc.name      : Consumer can not modify subscription relationship if the specified old consumer not exist
469  * @tc.desc      : [C- SOFTWARE -0200]
470  */
471 LITE_TEST_CASE(Broadcast01TestSuite, testModifyConsumer0040, Function | MediumTest | Level2)
472 {
473     PubSubInterface *fapi = CASE_GetIUnknown();
474     if (fapi == NULL) {
475         TEST_FAIL();
476     }
477     Subscriber *subscriber = &fapi->subscriber;
478     if (subscriber == NULL) {
479         TEST_FAIL();
480     }
481     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
482     static Consumer c2 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
483 
484     Topic topic0 = 0;
485     subscriber->AddTopic((IUnknown *)fapi, &topic0);
486     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
487 
488     Topic noExistTopic = 99;
489     Consumer *result = subscriber->ModifyConsumer((IUnknown *)fapi, &noExistTopic, &c2, &c2);
490     TEST_ASSERT_EQUAL_INT(result==NULL, 1);
491 
492     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
493 
494     CASE_ReleaseIUnknown(fapi);
495 }
496 
497 /**
498  * @tc.number    : DMSLite_SAMGR_ModifyConsumer_0050
499  * @tc.name      : Consumer can modify subscription relationship if the new consumer is the same as old consumer
500  * @tc.desc      : [C- SOFTWARE -0200]
501  */
502 LITE_TEST_CASE(Broadcast01TestSuite, testModifyConsumer0050, Function | MediumTest | Level2)
503 {
504     PubSubInterface *fapi = CASE_GetIUnknown();
505     if (fapi == NULL) {
506         TEST_FAIL();
507     }
508     Subscriber *subscriber = &fapi->subscriber;
509     if (subscriber == NULL) {
510         TEST_FAIL();
511     }
512     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
513 
514     Topic topic0 = 0;
515     subscriber->AddTopic((IUnknown *)fapi, &topic0);
516     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
517 
518     Consumer *result = subscriber->ModifyConsumer((IUnknown *)fapi, &topic0, &c1, &c1);
519     TEST_ASSERT_EQUAL_INT(result != NULL, TRUE);
520 
521     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
522 
523     CASE_ReleaseIUnknown(fapi);
524 }
525 
526 RUN_TEST_SUITE(Broadcast01TestSuite);