• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 #include <gtest/gtest.h>
16 #include <memory>
17 #include <algorithm>
18 #include <functional>
19 #include "uri.h"
20 #define private public
21 #include "data_ability_observer_proxy.h"
22 #include "dataobs_mgr_inner.h"
23 #include "dataobs_mgr_errors.h"
24 #include "mock_data_ability_observer_stub.h"
25 
26 using namespace OHOS;
27 using namespace testing::ext;
28 using namespace testing;
29 
30 using Uri = OHOS::Uri;
31 using ObsListType = OHOS::AAFwk::DataObsMgrInner::ObsListType;
32 using ObsRecipientMapType = OHOS::AAFwk::DataObsMgrInner::ObsRecipientMapType;
33 
34 namespace OHOS {
35 namespace AAFwk {
36 class DataObsMgrInnerTest : public testing::Test {
37 public:
38     static void SetUpTestCase(void);
39     static void TearDownTestCase(void);
40     void SetUp();
41     void TearDown();
42     std::shared_ptr<DataObsMgrInner> dataObsMgrInner_ = nullptr;
43 };
SetUpTestCase(void)44 void DataObsMgrInnerTest::SetUpTestCase(void)
45 {}
TearDownTestCase(void)46 void DataObsMgrInnerTest::TearDownTestCase(void)
47 {}
SetUp()48 void DataObsMgrInnerTest::SetUp()
49 {
50     std::shared_ptr<DataObsMgrInner> dataObsMgrInner_ = std::make_shared<DataObsMgrInner>();
51 }
TearDown()52 void DataObsMgrInnerTest::TearDown()
53 {}
54 
55 /*
56  * Feature: DataObsMgrInner
57  * Function: Register and unregister function test
58  * SubFunction: HandleRegisterObserver/HandleRegisterObserver
59  * FunctionPoints: NA
60  * EnvConditions: NA
61  * CaseDescription:NA
62  */
63 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_HandleRegisterObserver_0100, TestSize.Level1)
64 {
65     if (dataObsMgrInner_ == nullptr) {
66         return;
67     }
68 
69     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
70     sptr<MockDataAbilityObserverStub> observer(new (std::nothrow) MockDataAbilityObserverStub());
71 
72     const sptr<IDataAbilityObserver> callback(new (std::nothrow) DataAbilityObserverProxy(observer));
73     dataObsMgrInner_->HandleRegisterObserver(uri, callback);
74 
75     EXPECT_EQ(dataObsMgrInner_->ObsExistInMap(callback), true);
76     dataObsMgrInner_->HandleUnregisterObserver(uri, callback);
77     EXPECT_EQ(dataObsMgrInner_->ObsExistInMap(callback), false);
78 }
79 
80 /*
81  * Feature: DataObsMgrInner
82  * Function: Register function test
83  * SubFunction: HandleRegisterObserver
84  * FunctionPoints: NA
85  * EnvConditions: NA
86  * CaseDescription:NA
87  */
88 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_HandleRegisterObserver_0200, TestSize.Level1)
89 {
90     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
91     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
92     sptr<MockDataAbilityObserverStub> observer(new (std::nothrow) MockDataAbilityObserverStub());
93     const sptr<IDataAbilityObserver> callback(new (std::nothrow) DataAbilityObserverProxy(observer));
94     ObsListType obsList;
95     obsList.push_back(callback);
96     dataObsMgrInner->obsmap_.emplace(uri.ToString(), obsList);
97     int res = dataObsMgrInner->HandleRegisterObserver(uri, callback);
98     EXPECT_EQ(res, OBS_EXIST);
99 }
100 
101 /*
102  * Feature: DataObsMgrInner
103  * Function: Register function test
104  * SubFunction: HandleRegisterObserver
105  * FunctionPoints: NA
106  * EnvConditions: NA
107  * CaseDescription:NA
108  */
109 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_HandleRegisterObserver_0300, TestSize.Level1)
110 {
111     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
112     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
113     sptr<MockDataAbilityObserverStub> observer(new (std::nothrow) MockDataAbilityObserverStub());
114     const sptr<IDataAbilityObserver> callback(new (std::nothrow) DataAbilityObserverProxy(observer));
115     const sptr<IDataAbilityObserver> callback1(new (std::nothrow) DataAbilityObserverProxy(observer));
116     ObsListType obsList;
117     obsList.push_back(callback1);
118     dataObsMgrInner->obsmap_.emplace(uri.ToString(), obsList);
119     int res = dataObsMgrInner->HandleRegisterObserver(uri, callback);
120     EXPECT_EQ(res, OBS_EXIST);
121 }
122 
123 /*
124  * Feature: DataObsMgrInner
125  * Function: Unregister function test
126  * SubFunction: HandleUnregisterObserver
127  * FunctionPoints: NA
128  * EnvConditions: NA
129  * CaseDescription:NA
130  */
131 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_HandleUnregisterObserver_0100, TestSize.Level1)
132 {
133     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
134     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
135     sptr<MockDataAbilityObserverStub> observer(new (std::nothrow) MockDataAbilityObserverStub());
136     const sptr<IDataAbilityObserver> callback(new (std::nothrow) DataAbilityObserverProxy(observer));
137     dataObsMgrInner->obsmap_.clear();
138     int res = dataObsMgrInner->HandleUnregisterObserver(uri, callback);
139     EXPECT_EQ(res, NO_OBS_FOR_URI);
140 }
141 
142 /*
143  * Feature: DataObsMgrInner
144  * Function: Unregister function test
145  * SubFunction: HandleUnregisterObserver
146  * FunctionPoints: NA
147  * EnvConditions: NA
148  * CaseDescription:NA
149  */
150 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_HandleUnregisterObserver_0200, TestSize.Level1)
151 {
152     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
153     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
154     sptr<MockDataAbilityObserverStub> observer(new (std::nothrow) MockDataAbilityObserverStub());
155     const sptr<IDataAbilityObserver> callback(new (std::nothrow) DataAbilityObserverProxy(observer));
156     ObsListType obsList;
157     obsList.push_back(callback);
158     dataObsMgrInner->obsmap_.emplace(uri.ToString(), obsList);
159     int res = dataObsMgrInner->HandleUnregisterObserver(uri, callback);
160     EXPECT_EQ(res, NO_ERROR);
161 }
162 
163 /*
164  * Feature: DataObsMgrInner
165  * Function: Unregister function test
166  * SubFunction: HandleUnregisterObserver
167  * FunctionPoints: NA
168  * EnvConditions: NA
169  * CaseDescription:NA
170  */
171 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_HandleUnregisterObserver_0300, TestSize.Level1)
172 {
173     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
174     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
175     sptr<MockDataAbilityObserverStub> observer(new (std::nothrow) MockDataAbilityObserverStub());
176     const sptr<IDataAbilityObserver> callback(new (std::nothrow) DataAbilityObserverProxy(observer));
177     const sptr<IDataAbilityObserver> callback2(new (std::nothrow) DataAbilityObserverProxy(observer));
178     ObsListType obsList;
179     obsList.push_back(callback);
180     obsList.push_back(callback2);
181     dataObsMgrInner->obsmap_.emplace(uri.ToString(), obsList);
182     dataObsMgrInner->obsmap_.emplace("exit", obsList);
183     int res = dataObsMgrInner->HandleUnregisterObserver(uri, callback);
184     EXPECT_EQ(res, NO_ERROR);
185 }
186 
187 /*
188  * Feature: DataObsMgrInner
189  * Function: Register and unregister function test
190  * SubFunction: OnChange
191  * FunctionPoints: When the data changes, call the OnChange function of the registered dataabilityobserver
192  * EnvConditions: NA
193  * CaseDescription:NA
194  */
195 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_HandleNotifyChange_0100, TestSize.Level1)
196 {
197     if (dataObsMgrInner_ == nullptr) {
198         return;
199     }
200     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
201     sptr<MockDataAbilityObserverStub> mockDataAbilityObserverStub(new (std::nothrow) MockDataAbilityObserverStub());
202 
203     EXPECT_CALL(*mockDataAbilityObserverStub, OnChange()).Times(1);
204 
205     const sptr<IDataAbilityObserver> callback(new (std::nothrow) DataAbilityObserverProxy(mockDataAbilityObserverStub));
206     dataObsMgrInner_->HandleRegisterObserver(uri, callback);
207     dataObsMgrInner_->HandleNotifyChange(uri);
208 }
209 
210 /*
211  * Feature: DataObsMgrInner
212  * Function: Unregister function test
213  * SubFunction: HandleUnregisterObserver
214  * FunctionPoints: NA
215  * EnvConditions: NA
216  * CaseDescription:NA
217  */
218 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_HandleNotifyChange_0200, TestSize.Level1)
219 {
220     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
221     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
222     dataObsMgrInner->obsmap_.clear();
223     int res = dataObsMgrInner->HandleNotifyChange(uri);
224     EXPECT_EQ(res, NO_OBS_FOR_URI);
225 }
226 
227 /*
228  * Feature: DataObsMgrInner
229  * Function: Unregister function test
230  * SubFunction: HandleUnregisterObserver
231  * FunctionPoints: NA
232  * EnvConditions: NA
233  * CaseDescription:NA
234  */
235 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_HandleNotifyChange_0300, TestSize.Level1)
236 {
237     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
238     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
239     ObsListType obsList;
240     obsList.push_back(nullptr);
241     dataObsMgrInner->obsmap_.emplace(uri.ToString(), obsList);
242     int res = dataObsMgrInner->HandleNotifyChange(uri);
243     EXPECT_EQ(res, NO_ERROR);
244 }
245 
246 /*
247  * Feature: DataObsMgrInner
248  * Function: Unregister function test
249  * SubFunction: CheckRegisteFull
250  * FunctionPoints: NA
251  * EnvConditions: NA
252  * CaseDescription:NA
253  */
254 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_CheckRegisteFull_0100, TestSize.Level1)
255 {
256     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
257     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
258     ObsListType obsList;
259     while (obsList.size() < dataObsMgrInner->obs_max_) {
260         obsList.push_back(nullptr);
261     }
262     dataObsMgrInner->obsmap_.emplace(uri.ToString(), obsList);
263     bool res = dataObsMgrInner->CheckRegisteFull(uri);
264     EXPECT_TRUE(res);
265 }
266 
267 /*
268  * Feature: DataObsMgrInner
269  * Function: Unregister function test
270  * SubFunction: CheckRegisteFull
271  * FunctionPoints: NA
272  * EnvConditions: NA
273  * CaseDescription:NA
274  */
275 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_CheckRegisteFull_0200, TestSize.Level1)
276 {
277     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
278     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
279     sptr<MockDataAbilityObserverStub> observer(new (std::nothrow) MockDataAbilityObserverStub());
280     sptr<IDataAbilityObserver> callback(new (std::nothrow) DataAbilityObserverProxy(observer));
281     ObsListType obsList;
282     obsList.push_back(callback);
283     dataObsMgrInner->obsmap_.emplace(uri.ToString(), obsList);
284     bool res = dataObsMgrInner->CheckRegisteFull(uri);
285     EXPECT_FALSE(res);
286 }
287 
288 /*
289  * Feature: DataObsMgrInner
290  * Function: GetObsListFromMap/RemoveObsFromMap/ObsExistInMap function test
291  * SubFunction: NA
292  * FunctionPoints: NA
293  * EnvConditions: NA
294  * CaseDescription:NA
295  */
296 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_GetRemoveObsListFromMap_ObsExistInMap_0100, TestSize.Level1)
297 {
298     if (dataObsMgrInner_ == nullptr) {
299         return;
300     }
301     Uri uri("dataability://device_id/com.domainname.dataability.persondata/person/10");
302     sptr<MockDataAbilityObserverStub> mockDataAbilityObserverStub(new (std::nothrow) MockDataAbilityObserverStub());
303     const sptr<IDataAbilityObserver> callback(new (std::nothrow) DataAbilityObserverProxy(mockDataAbilityObserverStub));
304     dataObsMgrInner_->HandleRegisterObserver(uri, callback);
305 
306     sptr<MockDataAbilityObserverStub> mockDataAbilityObserverStub2(new (std::nothrow) MockDataAbilityObserverStub());
307     const sptr<IDataAbilityObserver> callback2(
308         new (std::nothrow) DataAbilityObserverProxy(mockDataAbilityObserverStub2));
309 
310     dataObsMgrInner_->HandleRegisterObserver(uri, callback2);
311     ObsListType obslist;
312     dataObsMgrInner_->GetObsListFromMap(uri, obslist);
313     EXPECT_EQ((std::size_t)2, obslist.size());
314     EXPECT_EQ(true, dataObsMgrInner_->ObsExistInMap(callback));
315     EXPECT_EQ(true, dataObsMgrInner_->ObsExistInMap(callback2));
316 
317     dataObsMgrInner_->RemoveObsFromMap(callback->AsObject());
318     EXPECT_EQ(false, dataObsMgrInner_->ObsExistInMap(callback));
319     obslist.clear();
320     dataObsMgrInner_->GetObsListFromMap(uri, obslist);
321     EXPECT_EQ((std::size_t)1, obslist.size());
322     EXPECT_EQ(false, dataObsMgrInner_->ObsExistInMap(callback));
323 
324     dataObsMgrInner_->RemoveObsFromMap(callback2->AsObject());
325     EXPECT_EQ(false, dataObsMgrInner_->ObsExistInMap(callback2));
326     obslist.clear();
327     dataObsMgrInner_->GetObsListFromMap(uri, obslist);
328     EXPECT_EQ((std::size_t)0, obslist.size());
329     EXPECT_EQ(false, dataObsMgrInner_->ObsExistInMap(callback2));
330 }
331 
332 /*
333  * Feature: DataObsMgrInner
334  * Function: AddObsDeathRecipient/RemoveObsDeathRecipient function test
335  * SubFunction: NA
336  * FunctionPoints: NA
337  * EnvConditions: NA
338  * CaseDescription:NA
339  */
340 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_AddRemove_ObsDeathRecipient_0100, TestSize.Level1)
341 {
342     if (dataObsMgrInner_ == nullptr) {
343         return;
344     }
345 
346     sptr<IRemoteObject> observer(new (std::nothrow) MockDataAbilityObserverStub());
347     sptr<IDataAbilityObserver> callback(new (std::nothrow) DataAbilityObserverProxy(observer));
348     dataObsMgrInner_->AddObsDeathRecipient(callback);
349     dataObsMgrInner_->AddObsDeathRecipient(nullptr);
350 
351     ObsRecipientMapType::const_iterator it;
352     it = dataObsMgrInner_->recipientMap_.find(observer);
353     EXPECT_EQ(true, it != dataObsMgrInner_->recipientMap_.end());
354 
355     dataObsMgrInner_->RemoveObsDeathRecipient(callback->AsObject());
356     dataObsMgrInner_->RemoveObsDeathRecipient(nullptr);
357     it = dataObsMgrInner_->recipientMap_.find(observer);
358     EXPECT_EQ(false, it != dataObsMgrInner_->recipientMap_.end());
359 
360     dataObsMgrInner_->recipientMap_.clear();
361     dataObsMgrInner_->RemoveObsDeathRecipient(callback->AsObject());
362 }
363 
364 /*
365  * Feature: DataObsMgrInner
366  * Function: Unregister function test
367  * SubFunction: OnCallBackDied
368  * FunctionPoints: NA
369  * EnvConditions: NA
370  * CaseDescription:NA
371  */
372 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_OnCallBackDied_0100, TestSize.Level1)
373 {
374     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
375     dataObsMgrInner->OnCallBackDied(nullptr);
376 
377     sptr<IRemoteObject> remoteObject;
378     wptr<IRemoteObject> remote(remoteObject);
379     dataObsMgrInner->SetHandler(nullptr);
380     dataObsMgrInner->OnCallBackDied(remote);
381 
382     auto handler = std::make_shared<EventHandler>(AppExecFwk::EventRunner::Create());
383     dataObsMgrInner->SetHandler(handler);
384     dataObsMgrInner->OnCallBackDied(remote);
385 }
386 
387 /*
388  * Feature: DataObsMgrInner
389  * Function: Unregister function test
390  * SubFunction: HandleCallBackDiedTask
391  * FunctionPoints: NA
392  * EnvConditions: NA
393  * CaseDescription:NA
394  */
395 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_HandleCallBackDiedTask_0100, TestSize.Level1)
396 {
397     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
398     dataObsMgrInner->HandleCallBackDiedTask(nullptr);
399 
400     sptr<MockDataAbilityObserverStub> observer(new (std::nothrow) MockDataAbilityObserverStub());
401     dataObsMgrInner->OnCallBackDied(observer);
402 }
403 
404 /*
405  * Feature: DataObsMgrInner
406  * Function: Unregister function test
407  * SubFunction: RemoveObsFromMap
408  * FunctionPoints: NA
409  * EnvConditions: NA
410  * CaseDescription:NA
411  */
412 HWTEST_F(DataObsMgrInnerTest, DataObsMgrInner_RemoveObsFromMap_0100, TestSize.Level1)
413 {
414     std::shared_ptr<DataObsMgrInner> dataObsMgrInner = std::make_shared<DataObsMgrInner>();
415     std::string uri1 = "uri1";
416     std::string uri2 = "uri2";
417     sptr<MockDataAbilityObserverStub> observer(new (std::nothrow) MockDataAbilityObserverStub());
418     const sptr<IDataAbilityObserver> callback1(new (std::nothrow) DataAbilityObserverProxy(observer));
419     const sptr<IDataAbilityObserver> callback2(new (std::nothrow) DataAbilityObserverProxy(observer));
420     ObsListType obsList1;
421     ObsListType obsList2;
422     ObsListType obsList3;
423     obsList1.push_back(callback1);
424     obsList2.push_back(callback1);
425     obsList2.push_back(callback2);
426     dataObsMgrInner->obsmap_.emplace(uri1, obsList1);
427     dataObsMgrInner->obsmap_.emplace(uri2, obsList2);
428     dataObsMgrInner->RemoveObsFromMap(callback2->AsObject());
429 }
430 }  // namespace AAFwk
431 }  // namespace OHOS
432