• 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 
16 #include "cmsis_os.h"
17 #include "hctest.h"
18 #include "samgr_lite.h"
19 
20 #define PRESSURE_BASE (1024 * 10)
21 
22 typedef struct DemoApi {
23     INHERIT_IUNKNOWN;
24 } DemoApi;
25 
26 typedef struct DemoFeature {
27     INHERIT_FEATURE;
28     INHERIT_IUNKNOWNENTRY(DemoApi);
29     Identity identity;
30 } DemoFeature;
31 
GetName(Service * service)32 static const char *GetName(Service *service)
33 {
34     (void)service;
35     return "serviceName401";
36 }
37 
38 typedef struct ExampleService {
39     INHERIT_SERVICE;
40     Identity identity;
41 } ExampleService;
42 
Initialize(Service * service,Identity identity)43 static BOOL Initialize(Service *service, Identity identity)
44 {
45     ExampleService *example = (ExampleService *)service;
46     example->identity = identity;
47     return TRUE;
48 }
49 
MessageHandle(Service * service,Request * msg)50 static BOOL MessageHandle(Service *service, Request *msg)
51 {
52     (void)service;
53     (void)msg;
54     return FALSE;
55 }
56 
GetTaskConfig(Service * service)57 static TaskConfig GetTaskConfig(Service *service)
58 {
59     (void)service;
60     TaskConfig config = {
61         LEVEL_HIGH,
62         PRI_ABOVE_NORMAL,
63         0x800,
64         20,
65         SHARED_TASK
66         };
67     return config;
68 }
69 
70 static ExampleService g_service = {
71     .GetName = GetName,
72     .Initialize = Initialize,
73     .MessageHandle = MessageHandle,
74     .GetTaskConfig = GetTaskConfig,
75     .identity = {-1, -1, NULL},
76 };
77 
FEATURE_GetName(Feature * feature)78 static const char *FEATURE_GetName(Feature *feature)
79 {
80     (void)feature;
81     return "featureName401";
82 }
FEATURE_OnInitialize(Feature * feature,Service * parent,Identity identity)83 static void FEATURE_OnInitialize(Feature *feature, Service *parent, Identity identity)
84 {
85     (void)parent;
86     DemoFeature *demoFeature = (DemoFeature *)feature;
87     demoFeature->identity = identity;
88 }
FEATURE_OnStop(Feature * feature,Identity identity)89 static void FEATURE_OnStop(Feature *feature, Identity identity)
90 {
91     (void)feature;
92     (void)identity;
93 }
94 
FEATURE_OnMessage(Feature * feature,Request * request)95 static BOOL FEATURE_OnMessage(Feature *feature, Request *request)
96 {
97     (void)feature;
98     (void)request;
99     return TRUE;
100 }
101 
102 static DemoFeature g_feature = {
103     .GetName = FEATURE_GetName,
104     .OnInitialize = FEATURE_OnInitialize,
105     .OnStop = FEATURE_OnStop,
106     .OnMessage = FEATURE_OnMessage,
107     .ref = 1,
108     .iUnknown = {
109         DEFAULT_IUNKNOWN_IMPL,
110     },
111     .identity = {-1, -1, NULL},
112 };
113 
114 LITE_TEST_SUIT(test, samgr, FeatureApiTestSuite);
115 
FeatureApiTestSuiteSetUp(void)116 static BOOL FeatureApiTestSuiteSetUp(void)
117 {
118     return TRUE;
119 }
120 
FeatureApiTestSuiteTearDown(void)121 static BOOL FeatureApiTestSuiteTearDown(void)
122 {
123     return TRUE;
124 }
125 
126 /**
127  * @tc.number    : DMSLite_SAMGR_RegisterFeatureApi_0010
128  * @tc.name      : Api can be registered under a feature
129  * @tc.desc      : [C- SOFTWARE -0200]
130  */
131 LITE_TEST_CASE(FeatureApiTestSuite, testRegisterFeatureApi0010, Function | MediumTest | Level2)
132 {
133     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
134     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
135 
136     BOOL result = SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401",
137                                                           GET_IUNKNOWN(g_feature));
138     TEST_ASSERT_EQUAL_INT(result, TRUE);
139 
140     SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
141     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
142     SAMGR_GetInstance()->UnregisterService("serviceName401");
143 }
144 
145 /**
146  * @tc.number    : DMSLite_SAMGR_RegisterFeatureApi_0020
147  * @tc.name      : API failed to register if the specified service name is null or space
148  * @tc.desc      : [C- SOFTWARE -0200]
149  */
150 LITE_TEST_CASE(FeatureApiTestSuite, testRegisterFeatureApi0020, Function | MediumTest | Level2)
151 {
152     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
153     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
154 
155     BOOL result = SAMGR_GetInstance()->RegisterFeatureApi(NULL, "featureName401", GET_IUNKNOWN(g_feature));
156     TEST_ASSERT_EQUAL_INT(result, FALSE);
157 
158     result = SAMGR_GetInstance()->RegisterFeatureApi("", "featureName401", GET_IUNKNOWN(g_feature));
159     TEST_ASSERT_EQUAL_INT(result, FALSE);
160 
161     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
162     SAMGR_GetInstance()->UnregisterService("serviceName401");
163 }
164 
165 /**
166  * @tc.number    : DMSLite_SAMGR_RegisterFeatureApi_0030
167  * @tc.name      : API failed to register if the specified feature is space
168  * @tc.desc      : [C- SOFTWARE -0200]
169  */
170 LITE_TEST_CASE(FeatureApiTestSuite, testRegisterFeatureApi0030, Function | MediumTest | Level2)
171 {
172     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
173     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
174 
175     BOOL result = SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "", GET_IUNKNOWN(g_feature));
176     TEST_ASSERT_EQUAL_INT(result, FALSE);
177 
178     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
179     SAMGR_GetInstance()->UnregisterService("serviceName401");
180 }
181 
182 /**
183  * @tc.number    : DMSLite_SAMGR_RegisterFeatureApi_0040
184  * @tc.name      : API failed to register if the api is null
185  * @tc.desc      : [C- SOFTWARE -0200]
186  */
187 LITE_TEST_CASE(FeatureApiTestSuite, testRegisterFeatureApi0040, Function | MediumTest | Level2)
188 {
189     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
190     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
191 
192     BOOL result = SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", NULL);
193     TEST_ASSERT_EQUAL_INT(result, FALSE);
194 
195     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
196     SAMGR_GetInstance()->UnregisterService("serviceName401");
197 }
198 
199 /**
200  * @tc.number    : DMSLite_SAMGR_RegisterFeatureApi_0050
201  * @tc.name      : If the specified feature is null api will be registered as default feature api
202  * @tc.desc      : [C- SOFTWARE -0200]
203  */
204 LITE_TEST_CASE(FeatureApiTestSuite, testRegisterFeatureApi0050, Function | MediumTest | Level2)
205 {
206     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
207     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
208 
209     // feature is null, handle as default feature api
210     BOOL result = SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", NULL, GET_IUNKNOWN(g_feature));
211     TEST_ASSERT_EQUAL_INT(result, TRUE);
212 
213     IUnknown *resultIUnknown = SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", NULL);
214     TEST_ASSERT_EQUAL_INT(resultIUnknown != NULL, TRUE);
215 
216     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
217     SAMGR_GetInstance()->UnregisterService("serviceName401");
218 }
219 
220 /**
221  * @tc.number    : DMSLite_SAMGR_RegisterFeatureApi_0060
222  * @tc.name      : API failed to register if the specified service name does not exist
223  * @tc.desc      : [C- SOFTWARE -0200]
224  */
225 LITE_TEST_CASE(FeatureApiTestSuite, testRegisterFeatureApi0060, Function | MediumTest | Level2)
226 {
227     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
228     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
229 
230     BOOL result = SAMGR_GetInstance()->RegisterFeatureApi("noExistService", "featureName401", GET_IUNKNOWN(g_feature));
231     TEST_ASSERT_EQUAL_INT(result, FALSE);
232 
233     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
234     SAMGR_GetInstance()->UnregisterService("serviceName401");
235 }
236 
237 /**
238  * @tc.number    : DMSLite_SAMGR_RegisterFeatureApi_0070
239  * @tc.name      : API failed to register if the specified feature name does not exist
240  * @tc.desc      : [C- SOFTWARE -0200]
241  */
242 LITE_TEST_CASE(FeatureApiTestSuite, testRegisterFeatureApi0070, Function | MediumTest | Level2)
243 {
244     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
245     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
246 
247     BOOL result = SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "noExistFeature", GET_IUNKNOWN(g_feature));
248     TEST_ASSERT_EQUAL_INT(result, FALSE);
249 
250     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
251     SAMGR_GetInstance()->UnregisterService("serviceName401");
252 }
253 
254 /**
255  * @tc.number    : DMSLite_SAMGR_RegisterFeatureApi_0080
256  * @tc.name      : feature api can not be registered twice
257  * @tc.desc      : [C- SOFTWARE -0200]
258  */
259 LITE_TEST_CASE(FeatureApiTestSuite, testRegisterFeatureApi0080, Function | MediumTest | Level2)
260 {
261     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
262     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
263     SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
264 
265     BOOL result = SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401",
266                                                           GET_IUNKNOWN(g_feature));
267     TEST_ASSERT_EQUAL_INT(FALSE, result);
268 
269     SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
270     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
271     SAMGR_GetInstance()->UnregisterService("serviceName401");
272 }
273 
274 /**
275  * @tc.number    : DMSLite_SAMGR_GetFeatureApi_0010
276  * @tc.name      : Service can query API by serverName-featureName
277  * @tc.desc      : [C- SOFTWARE -0200]
278  */
279 LITE_TEST_CASE(FeatureApiTestSuite, testGetFeatureApi0010, Function | MediumTest | Level2)
280 {
281     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
282     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
283     SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
284 
285     IUnknown *resultIUnknown = SAMGR_GetInstance()->GetFeatureApi("serviceName401", "featureName401");
286     TEST_ASSERT_EQUAL_INT(resultIUnknown != NULL, TRUE);
287 
288     SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
289     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
290     SAMGR_GetInstance()->UnregisterService("serviceName401");
291 }
292 
293 /**
294  * @tc.number    : DMSLite_SAMGR_GetFeatureApi_0020
295  * @tc.name      : If the specified serviceName is NULL or space GetFeatureApi return NULL
296  * @tc.desc      : [C- SOFTWARE -0200]
297  */
298 LITE_TEST_CASE(FeatureApiTestSuite, testGetFeatureApi0020, Function | MediumTest | Level2)
299 {
300     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
301     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
302     SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
303 
304     IUnknown *resultIUnknown = SAMGR_GetInstance()->GetFeatureApi(NULL, "featureName401");
305     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
306     resultIUnknown = SAMGR_GetInstance()->GetFeatureApi("", "featureName401");
307     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
308 
309     SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
310     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
311     SAMGR_GetInstance()->UnregisterService("serviceName401");
312 }
313 
314 /**
315  * @tc.number    : DMSLite_SAMGR_GetFeatureApi_0030
316  * @tc.name      : If the specified featureName is NULL or space GetFeatureApi return NULL
317  * @tc.desc      : [C- SOFTWARE -0200]
318  */
319 LITE_TEST_CASE(FeatureApiTestSuite, testGetFeatureApi0030, Function | MediumTest | Level2)
320 {
321     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
322     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
323     SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
324 
325     IUnknown *resultIUnknown = SAMGR_GetInstance()->GetFeatureApi("serviceName401", NULL);
326     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
327     resultIUnknown = SAMGR_GetInstance()->GetFeatureApi("serviceName401", "");
328     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
329 
330     SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
331     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
332     SAMGR_GetInstance()->UnregisterService("serviceName401");
333 }
334 
335 /**
336  * @tc.number    : DMSLite_SAMGR_GetFeatureApi_0040
337  * @tc.name      : If the specified featureName does not exist GetFeatureApi return NULL
338  * @tc.desc      : [C- SOFTWARE -0200]
339  */
340 LITE_TEST_CASE(FeatureApiTestSuite, testGetFeatureApi0040, Function | MediumTest | Level2)
341 {
342     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
343     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
344 
345     IUnknown *resultIUnknown = SAMGR_GetInstance()->GetFeatureApi("noExistService", "featureName401");
346     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
347     resultIUnknown = SAMGR_GetInstance()->GetFeatureApi("serviceName401", "noExistFeature");
348     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
349 
350     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
351     SAMGR_GetInstance()->UnregisterService("serviceName401");
352 }
353 
354 /**
355  * @tc.number    : DMSLite_SAMGR_GetFeatureApi_0050
356  * @tc.name      : If no API under the specified feature GetFeatureApi return NULL
357  * @tc.desc      : [C- SOFTWARE -0200]
358  */
359 LITE_TEST_CASE(FeatureApiTestSuite, testGetFeatureApi0050, Function | MediumTest | Level2)
360 {
361     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
362     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
363 
364     IUnknown *resultIUnknown = SAMGR_GetInstance()->GetFeatureApi("serviceName401", "featureName401");
365     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
366 
367     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
368     SAMGR_GetInstance()->UnregisterService("serviceName401");
369 }
370 
371 /**
372  * @tc.number    : DMSLite_SAMGR_GetFeatureApi_0060
373  * @tc.name      : The results of multiple queries are the same for GetFeatureApi
374  * @tc.desc      : [C- SOFTWARE -0200]
375  */
376 LITE_TEST_CASE(FeatureApiTestSuite, testGetFeatureApi0060, Function | MediumTest | Level2)
377 {
378     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
379     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
380     SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
381 
382     IUnknown *resultIUnknown1 = SAMGR_GetInstance()->GetFeatureApi("serviceName401", "featureName401");
383     IUnknown *resultIUnknown2 = SAMGR_GetInstance()->GetFeatureApi("serviceName401", "featureName401");
384     TEST_ASSERT_EQUAL_INT(resultIUnknown1 == resultIUnknown2, TRUE);
385 
386     SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
387     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
388     SAMGR_GetInstance()->UnregisterService("serviceName401");
389 }
390 
391 /**
392  * @tc.number    : DMSLite_SAMGR_UnregisterFeatureApi_0010
393  * @tc.name      : FeatureApi can be unregistered
394  * @tc.desc      : [C- SOFTWARE -0200]
395  */
396 LITE_TEST_CASE(FeatureApiTestSuite, testUnregisterFeatureApi0010, Function | MediumTest | Level2)
397 {
398     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
399     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
400     SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
401 
402     IUnknown *resultIUnknown = SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
403     TEST_ASSERT_EQUAL_INT(resultIUnknown != NULL, TRUE);
404 
405     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
406     SAMGR_GetInstance()->UnregisterService("serviceName401");
407 }
408 
409 /**
410  * @tc.number    : DMSLite_SAMGR_UnregisterFeatureApi_0020
411  * @tc.name      : FeatureApi failed to unregister if the specified serviceName is NULL or space
412  * @tc.desc      : [C- SOFTWARE -0200]
413  */
414 LITE_TEST_CASE(FeatureApiTestSuite, testUnregisterFeatureApi0020, Function | MediumTest | Level2)
415 {
416     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
417     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
418     SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
419 
420     IUnknown *resultIUnknown = SAMGR_GetInstance()->UnregisterFeatureApi(NULL, "featureName401");
421     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
422     resultIUnknown = SAMGR_GetInstance()->UnregisterFeatureApi("", "featureName401");
423     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
424 
425     SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
426     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
427     SAMGR_GetInstance()->UnregisterService("serviceName401");
428 }
429 
430 /**
431  * @tc.number    : DMSLite_SAMGR_UnregisterFeatureApi_0030
432  * @tc.name      : FeatureApi failed to unregister if the specified featureName is space
433  * @tc.desc      : [C- SOFTWARE -0200]
434  */
435 LITE_TEST_CASE(FeatureApiTestSuite, testUnregisterFeatureApi0030, Function | MediumTest | Level2)
436 {
437     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
438     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
439     SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
440 
441     IUnknown *resultIUnknown = SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "");
442     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
443 
444     SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
445     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
446     SAMGR_GetInstance()->UnregisterService("serviceName401");
447 }
448 
449 /**
450  * @tc.number    : DMSLite_SAMGR_UnregisterFeatureApi_0040
451  * @tc.name      : FeatureApi failed to unregister if the specified serviceName does not exist
452  * @tc.desc      : [C- SOFTWARE -0200]
453  */
454 LITE_TEST_CASE(FeatureApiTestSuite, testUnregisterFeatureApi0040, Function | MediumTest | Level2)
455 {
456     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
457     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
458     SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
459 
460     IUnknown *resultIUnknown = SAMGR_GetInstance()->UnregisterFeatureApi("noExistService", "featureName401");
461     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
462 
463     SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
464     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
465     SAMGR_GetInstance()->UnregisterService("serviceName401");
466 }
467 
468 /**
469  * @tc.number    : DMSLite_SAMGR_UnregisterFeatureApi_0050
470  * @tc.name      : FeatureApi failed to unregister if the specified featureName does not exist
471  * @tc.desc      : [C- SOFTWARE -0200]
472  */
473 LITE_TEST_CASE(FeatureApiTestSuite, testUnregisterFeatureApi0050, Function | MediumTest | Level2)
474 {
475     SAMGR_GetInstance()->RegisterService((Service *)&g_service);
476     SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
477     SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
478 
479     IUnknown *resultIUnknown = SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "noExistFeature");
480     TEST_ASSERT_EQUAL_INT(resultIUnknown == NULL, TRUE);
481 
482     SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
483     SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
484     SAMGR_GetInstance()->UnregisterService("serviceName401");
485 }
486 
487 /**
488  * @tc.number    : DMSLite_SAMGR_UnregisterFeatureApi_0060
489  * @tc.name      : Register and unregister feature api repeatedly, no memory leak
490  * @tc.desc      : [C- SOFTWARE -0200]
491  */
492 LITE_TEST_CASE(FeatureApiTestSuite, testUnregisterFeatureApi0060, Function | MediumTest | Level2)
493 {
494     // RegisterService and unregister feature api over and over again, if there is memory leak samgr will crash
495     for (int i = 0; i < PRESSURE_BASE; i++) {
496         BOOL result = SAMGR_GetInstance()->RegisterService((Service *)&g_service);
497         TEST_ASSERT_EQUAL_INT(result, TRUE);
498         result = SAMGR_GetInstance()->RegisterFeature("serviceName401", (Feature *)&g_feature);
499         TEST_ASSERT_EQUAL_INT(result, TRUE);
500         result = SAMGR_GetInstance()->RegisterFeatureApi("serviceName401", "featureName401", GET_IUNKNOWN(g_feature));
501         TEST_ASSERT_EQUAL_INT(result, TRUE);
502 
503         IUnknown *resultIUnknown = SAMGR_GetInstance()->UnregisterFeatureApi("serviceName401", "featureName401");
504         TEST_ASSERT_EQUAL_INT(resultIUnknown != NULL, TRUE);
505         Feature *resultFeature = SAMGR_GetInstance()->UnregisterFeature("serviceName401", "featureName401");
506         TEST_ASSERT_EQUAL_INT(resultFeature != NULL, TRUE);
507         Service *resultService = SAMGR_GetInstance()->UnregisterService("serviceName401");
508         TEST_ASSERT_EQUAL_INT(resultService != NULL, TRUE);
509     }
510 }
511 
512 RUN_TEST_SUITE(FeatureApiTestSuite);