• 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     Topic noExistTopic = -200;
224     result = subscriber->Subscribe((IUnknown *)fapi, &noExistTopic, &c1);
225     TEST_ASSERT_EQUAL_INT(result != 0, TRUE);
226 
227     CASE_ReleaseIUnknown(fapi);
228 }
229 
230 /**
231  * @tc.number    : DMSLite_SAMGR_Subscribe_0030
232  * @tc.name      : Consumer which is NULL can not subscribe to a topic
233  * @tc.desc      : [C- SOFTWARE -0200]
234  */
235 LITE_TEST_CASE(Broadcast01TestSuite, testSubscribe0030, Function | MediumTest | Level2)
236 {
237     PubSubInterface *fapi = CASE_GetIUnknown();
238     if (fapi == NULL) {
239         TEST_FAIL();
240     }
241     Subscriber *subscriber = &fapi->subscriber;
242     if (subscriber == NULL) {
243         TEST_FAIL();
244     }
245     Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
246 
247     Topic topic0 = 0;
248     subscriber->AddTopic((IUnknown *)fapi, &topic0);
249     int result = subscriber->Subscribe((IUnknown *)fapi, &topic0, NULL);
250     TEST_ASSERT_EQUAL_INT(result != 0, TRUE);
251 
252     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
253 
254     CASE_ReleaseIUnknown(fapi);
255 }
256 
257 /**
258  * @tc.number    : DMSLite_SAMGR_Subscribe_0040
259  * @tc.name      : Consumer can not subscribe to the same topic twice
260  * @tc.desc      : [C- SOFTWARE -0200]
261  */
262 LITE_TEST_CASE(Broadcast01TestSuite, testSubscribe0040, Function | MediumTest | Level2)
263 {
264     PubSubInterface *fapi = CASE_GetIUnknown();
265     if (fapi == NULL) {
266         TEST_FAIL();
267     }
268     Subscriber *subscriber = &fapi->subscriber;
269     if (subscriber == NULL) {
270         TEST_FAIL();
271     }
272     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
273 
274     Topic topic0 = 0;
275     subscriber->AddTopic((IUnknown *)fapi, &topic0);
276     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
277     int result = subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
278     TEST_ASSERT_EQUAL_INT(result != 0, TRUE);
279 
280     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
281 
282     CASE_ReleaseIUnknown(fapi);
283 }
284 
285 /**
286  * @tc.number    : DMSLite_SAMGR_UnSubscribe_0010
287  * @tc.name      : Consumer can unsubscribe a topic
288  * @tc.desc      : [C- SOFTWARE -0200]
289  */
290 LITE_TEST_CASE(Broadcast01TestSuite, testUnsubscribe0010, Function | MediumTest | Level1)
291 {
292     PubSubInterface *fapi = CASE_GetIUnknown();
293     if (fapi == NULL) {
294         TEST_FAIL();
295     }
296     Subscriber *subscriber = &fapi->subscriber;
297     if (subscriber == NULL) {
298         TEST_FAIL();
299     }
300 
301     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
302 
303     Topic topic0 = 0;
304     subscriber->AddTopic((IUnknown *)fapi, &topic0);
305     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
306 
307     Consumer *result = subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
308     TEST_ASSERT_EQUAL_INT(result != NULL, TRUE);
309 
310     CASE_ReleaseIUnknown(fapi);
311 }
312 
313 /**
314  * @tc.number    : DMSLite_SAMGR_UnSubscribe_0020
315  * @tc.name      : Consumer can not unsubscribe a topic if the specified topic-comsumer relationship is NULL
316  * @tc.desc      : [C- SOFTWARE -0200]
317  */
318 LITE_TEST_CASE(Broadcast01TestSuite, testUnsubscribe0020, Function | MediumTest | Level2)
319 {
320     PubSubInterface *fapi = CASE_GetIUnknown();
321     if (fapi == NULL) {
322         TEST_FAIL();
323     }
324     Subscriber *subscriber = &fapi->subscriber;
325     if (subscriber == NULL) {
326         TEST_FAIL();
327     }
328     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
329 
330     Topic topic0 = 0;
331     subscriber->AddTopic((IUnknown *)fapi, &topic0);
332     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
333 
334     Consumer *result = subscriber->Unsubscribe((IUnknown *)fapi, NULL, &c1);
335     TEST_ASSERT_EQUAL_INT(result==NULL, TRUE);  // failed
336 
337     result = subscriber->Unsubscribe((IUnknown *)fapi, &topic0, NULL);
338     TEST_ASSERT_EQUAL_INT(result==NULL, TRUE);
339 
340     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
341     CASE_ReleaseIUnknown(fapi);
342 }
343 
344 /**
345  * @tc.number    : DMSLite_SAMGR_UnSubscribe_0030
346  * @tc.name      : Consumer can not unsubscribe a topic if the specified topic-comsumer relationship not exist
347  * @tc.desc      : [C- SOFTWARE -0200]
348  */
349 LITE_TEST_CASE(Broadcast01TestSuite, testUnsubscribe0030, Function | MediumTest | Level2)
350 {
351     PubSubInterface *fapi = CASE_GetIUnknown();
352     if (fapi == NULL) {
353         TEST_FAIL();
354     }
355     Subscriber *subscriber = &fapi->subscriber;
356     if (subscriber == NULL) {
357         TEST_FAIL();
358     }
359     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
360     static Consumer c2 = {.identity = &g_identity, .Notify = C2Callback, .Equal = Equal};
361 
362     Topic topic0 = 0;
363     subscriber->AddTopic((IUnknown *)fapi, &topic0);
364     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
365 
366     Consumer *result = subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c2);
367     TEST_ASSERT_EQUAL_INT(result==NULL, TRUE);
368 
369     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
370     CASE_ReleaseIUnknown(fapi);
371 }
372 
373 /**
374  * @tc.number    : DMSLite_SAMGR_ModifyConsumer_0010
375  * @tc.name      : Consumer can modify subscription relationship
376  * @tc.desc      : [C- SOFTWARE -0200]
377  */
378 LITE_TEST_CASE(Broadcast01TestSuite, testModifyConsumer0010, Function | MediumTest | Level2)
379 {
380     PubSubInterface *fapi = CASE_GetIUnknown();
381     if (fapi == NULL) {
382         TEST_FAIL();
383     }
384     Subscriber *subscriber = &fapi->subscriber;
385     if (subscriber == NULL) {
386         TEST_FAIL();
387     }
388     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
389     static Consumer c2 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
390 
391     Topic topic0 = 0;
392     subscriber->AddTopic((IUnknown *)fapi, &topic0);
393     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
394 
395     Consumer *result = subscriber->ModifyConsumer((IUnknown *)fapi, &topic0, &c1, &c2);
396     TEST_ASSERT_EQUAL_INT(result != NULL, TRUE);
397 
398     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
399 
400     CASE_ReleaseIUnknown(fapi);
401 }
402 
403 /**
404  * @tc.number    : DMSLite_SAMGR_ModifyConsumer_0020
405  * @tc.name      : Consumer can not modify subscription relationship if the input parameter is NULL
406  * @tc.desc      : [C- SOFTWARE -0200]
407  */
408 LITE_TEST_CASE(Broadcast01TestSuite, testModifyConsumer0020, Function | MediumTest | Level2)
409 {
410     PubSubInterface *fapi = CASE_GetIUnknown();
411     if (fapi == NULL) {
412         TEST_FAIL();
413     }
414     Subscriber *subscriber = &fapi->subscriber;
415     if (subscriber == NULL) {
416         TEST_FAIL();
417     }
418     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
419     static Consumer c2 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
420 
421     Topic topic0 = 0;
422     subscriber->AddTopic((IUnknown *)fapi, &topic0);
423     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
424 
425     Consumer *result = subscriber->ModifyConsumer((IUnknown *)fapi, NULL, &c1, &c2);
426     TEST_ASSERT_EQUAL_INT(result!=NULL, 0);
427 
428     result = subscriber->ModifyConsumer((IUnknown *)fapi, &topic0, NULL, &c2);
429     TEST_ASSERT_EQUAL_INT(result!=NULL, 0);
430 
431     result = subscriber->ModifyConsumer((IUnknown *)fapi, &topic0, &c1, NULL);
432     TEST_ASSERT_EQUAL_INT(result!=NULL, 0);
433 
434     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
435 
436     CASE_ReleaseIUnknown(fapi);
437 }
438 
439 /**
440  * @tc.number    : DMSLite_SAMGR_ModifyConsumer_0030
441  * @tc.name      : Consumer can not modify subscription relationship if the specified topic not exist
442  * @tc.desc      : [C- SOFTWARE -0200]
443  */
444 LITE_TEST_CASE(Broadcast01TestSuite, testModifyConsumer0030, Function | MediumTest | Level2)
445 {
446     PubSubInterface *fapi = CASE_GetIUnknown();
447     if (fapi == NULL) {
448         TEST_FAIL();
449     }
450     Subscriber *subscriber = &fapi->subscriber;
451     if (subscriber == NULL) {
452         TEST_FAIL();
453     }
454     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
455     static Consumer c2 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
456 
457     Topic topic0 = 0;
458     subscriber->AddTopic((IUnknown *)fapi, &topic0);
459     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
460 
461     Topic noExistTopic = 99;
462     Consumer *result = subscriber->ModifyConsumer((IUnknown *)fapi, &noExistTopic, &c1, &c2);
463     TEST_ASSERT_EQUAL_INT(result==NULL, 1);
464 
465     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
466 
467     CASE_ReleaseIUnknown(fapi);
468 }
469 
470 /**
471  * @tc.number    : DMSLite_SAMGR_ModifyConsumer_0040
472  * @tc.name      : Consumer can not modify subscription relationship if the specified old consumer not exist
473  * @tc.desc      : [C- SOFTWARE -0200]
474  */
475 LITE_TEST_CASE(Broadcast01TestSuite, testModifyConsumer0040, Function | MediumTest | Level2)
476 {
477     PubSubInterface *fapi = CASE_GetIUnknown();
478     if (fapi == NULL) {
479         TEST_FAIL();
480     }
481     Subscriber *subscriber = &fapi->subscriber;
482     if (subscriber == NULL) {
483         TEST_FAIL();
484     }
485     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
486     static Consumer c2 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
487 
488     Topic topic0 = 0;
489     subscriber->AddTopic((IUnknown *)fapi, &topic0);
490     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
491 
492     Topic noExistTopic = 99;
493     Consumer *result = subscriber->ModifyConsumer((IUnknown *)fapi, &noExistTopic, &c2, &c2);
494     TEST_ASSERT_EQUAL_INT(result==NULL, 1);
495 
496     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
497 
498     CASE_ReleaseIUnknown(fapi);
499 }
500 
501 /**
502  * @tc.number    : DMSLite_SAMGR_ModifyConsumer_0050
503  * @tc.name      : Consumer can modify subscription relationship if the new consumer is the same as old consumer
504  * @tc.desc      : [C- SOFTWARE -0200]
505  */
506 LITE_TEST_CASE(Broadcast01TestSuite, testModifyConsumer0050, Function | MediumTest | Level2)
507 {
508     PubSubInterface *fapi = CASE_GetIUnknown();
509     if (fapi == NULL) {
510         TEST_FAIL();
511     }
512     Subscriber *subscriber = &fapi->subscriber;
513     if (subscriber == NULL) {
514         TEST_FAIL();
515     }
516     static Consumer c1 = {.identity = &g_identity, .Notify = C1Callback, .Equal = Equal};
517 
518     Topic topic0 = 0;
519     subscriber->AddTopic((IUnknown *)fapi, &topic0);
520     subscriber->Subscribe((IUnknown *)fapi, &topic0, &c1);
521 
522     Consumer *result = subscriber->ModifyConsumer((IUnknown *)fapi, &topic0, &c1, &c1);
523     TEST_ASSERT_EQUAL_INT(result != NULL, TRUE);
524 
525     subscriber->Unsubscribe((IUnknown *)fapi, &topic0, &c1);
526 
527     CASE_ReleaseIUnknown(fapi);
528 }
529 
530 RUN_TEST_SUITE(Broadcast01TestSuite);