• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-2022 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 <unistd.h>
17 #include <vector>
18 
19 #include "accesstoken_kit.h"
20 #include "data_ability_observer_stub.h"
21 #include "datashare_helper.h"
22 #include "datashare_log.h"
23 #include "hap_token_info.h"
24 #include "iservice_registry.h"
25 #include "system_ability_definition.h"
26 #include "token_setproc.h"
27 
28 namespace OHOS {
29 namespace DataShare {
30 using namespace testing::ext;
31 using namespace OHOS::Security::AccessToken;
32 constexpr int STORAGE_MANAGER_MANAGER_ID = 5003;
33 static int USER_100 = 100;
34 std::string DATA_SHARE_URI = "datashare:///com.acts.datasharetest";
35 std::string DATA_SHARE_ERROR_URI = "datashare:///com.acts.datasharetest000";
36 std::string SLIENT_ACCESS_URI = "datashare:///com.acts.datasharetest/entry/DB00/TBL00?Proxy=true";
37 std::string SLIENT_ERROR_URI = "datashare:///com.acts.datashare/entry/DB00/TBL00?Proxy=true";
38 std::string SLIENT_ERROR_DATABASE_URI = "datashare:///com.acts.datasharetest/entry/DB6666/TBL00?Proxy=true";
39 std::string SLIENT_REGISTER_URI = "datashare:///com.acts.datasharetest/entry/DB00/TBL02?Proxy=true";
40 std::string SLIENT_ACCESS_PERMISSION1_URI = "datashare:///com.acts.datasharetest/entry/DB00/permission1?Proxy=true";
41 std::string SLIENT_PROXY_PERMISSION1_URI = "datashareproxy://com.acts.datasharetest/entry/DB00/permission1";
42 std::string SLIENT_ACCESS_PERMISSION2_URI = "datashare:///com.acts.datasharetest/entry/DB00/permission2?Proxy=true";
43 std::string SLIENT_PROXY_PERMISSION2_URI = "datashareproxy://com.acts.datasharetest/entry/DB00/permission2";
44 std::string TBL_STU_NAME = "name";
45 std::string TBL_STU_AGE = "age";
46 std::shared_ptr<DataShare::DataShareHelper> g_slientAccessHelper;
47 
48 template <typename T>
49 class ConditionLock {
50 public:
ConditionLock()51     explicit ConditionLock() {}
~ConditionLock()52     ~ConditionLock() {}
53 public:
Notify()54     void Notify()
55     {
56         std::lock_guard<std::mutex> lock(mutex_);
57         isSet_ = true;
58         cv_.notify_one();
59     }
60 
Wait()61     void Wait()
62     {
63         std::unique_lock<std::mutex> lock(mutex_);
64         cv_.wait_for(lock, std::chrono::seconds(INTERVAL), [this]() { return isSet_; });
65         cv_.notify_one();
66         return;
67     }
68 
Clear()69     void Clear()
70     {
71         std::lock_guard<std::mutex> lock(mutex_);
72         isSet_ = false;
73         cv_.notify_one();
74     }
75 
76 private:
77     bool isSet_ = false;
78     T data_;
79     std::mutex mutex_;
80     std::condition_variable cv_;
81     static constexpr int64_t INTERVAL = 2;
82 };
83 
84 class SlientAccessTest : public testing::Test {
85 public:
86     static void SetUpTestCase(void);
87     static void TearDownTestCase(void);
88     void SetUp();
89     void TearDown();
90 };
91 
92 class IDataShareAbilityObserverTest : public AAFwk::DataAbilityObserverStub {
93 public:
94     IDataShareAbilityObserverTest() =  default;
95 
~IDataShareAbilityObserverTest()96     ~IDataShareAbilityObserverTest()
97     {}
98 
OnChange()99     void OnChange()
100     {
101         name = "OnChangeName";
102         data.Notify();
103     }
104 
GetName()105     std::string GetName()
106     {
107         return name;
108     }
109 
SetName(std::string name)110     void SetName(std::string name)
111     {
112         this->name = name;
113     }
114 
Clear()115     void Clear()
116     {
117         data.Clear();
118     }
119     ConditionLock<std::string> data;
120 private:
121     std::string name;
122 };
123 
CreateDataShareHelper(int32_t systemAbilityId,std::string uri)124 std::shared_ptr<DataShare::DataShareHelper> CreateDataShareHelper(int32_t systemAbilityId, std::string uri)
125 {
126     LOG_INFO("CreateDataShareHelper start");
127     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
128     if (saManager == nullptr) {
129         LOG_ERROR("GetSystemAbilityManager get samgr failed.");
130         return nullptr;
131     }
132     auto remoteObj = saManager->GetSystemAbility(systemAbilityId);
133     if (remoteObj == nullptr) {
134         LOG_ERROR("GetSystemAbility service failed.");
135         return nullptr;
136     }
137     return DataShare::DataShareHelper::Creator(remoteObj, uri);
138 }
139 
GetPermissionStateFulls()140 std::vector<PermissionStateFull> GetPermissionStateFulls()
141 {
142     std::vector<PermissionStateFull> permissionStateFulls = {
143         {
144             .permissionName = "ohos.permission.WRITE_CONTACTS",
145             .isGeneral = true,
146             .resDeviceID = { "local" },
147             .grantStatus = { PermissionState::PERMISSION_GRANTED },
148             .grantFlags = { 1 }
149         },
150         {
151             .permissionName = "ohos.permission.WRITE_CALL_LOG",
152             .isGeneral = true,
153             .resDeviceID = { "local" },
154             .grantStatus = { PermissionState::PERMISSION_GRANTED },
155             .grantFlags = { 1 }
156         },
157         {
158             .permissionName = "ohos.permission.GET_BUNDLE_INFO",
159             .isGeneral = true,
160             .resDeviceID = { "local" },
161             .grantStatus = { PermissionState::PERMISSION_GRANTED },
162             .grantFlags = { 1 }
163         }
164     };
165     return permissionStateFulls;
166 }
167 
SetUpTestCase(void)168 void SlientAccessTest::SetUpTestCase(void)
169 {
170     LOG_INFO("SetUpTestCase invoked");
171     auto dataShareHelper = CreateDataShareHelper(STORAGE_MANAGER_MANAGER_ID, DATA_SHARE_URI);
172     ASSERT_TRUE(dataShareHelper != nullptr);
173     int sleepTime = 3;
174     sleep(sleepTime);
175 
176     HapInfoParams info = {
177         .userID = 100,
178         .bundleName = "ohos.datashareclienttest.demo",
179         .instIndex = 0,
180         .appIDDesc = "ohos.datashareclienttest.demo"
181     };
182     auto permStateList = GetPermissionStateFulls();
183     HapPolicyParams policy = {
184         .apl = APL_NORMAL,
185         .domain = "test.domain",
186         .permList = {
187             {
188                 .permissionName = "ohos.permission.test",
189                 .bundleName = "ohos.datashareclienttest.demo",
190                 .grantMode = 1,
191                 .availableLevel = APL_NORMAL,
192                 .label = "label",
193                 .labelId = 1,
194                 .description = "ohos.datashareclienttest.demo",
195                 .descriptionId = 1
196             }
197         },
198         .permStateList = permStateList
199     };
200     AccessTokenKit::AllocHapToken(info, policy);
201     auto testTokenId = Security::AccessToken::AccessTokenKit::GetHapTokenIDEx(
202         info.userID, info.bundleName, info.instIndex);
203     SetSelfTokenID(testTokenId.tokenIDEx);
204 
205     g_slientAccessHelper = CreateDataShareHelper(STORAGE_MANAGER_MANAGER_ID, SLIENT_ACCESS_URI);
206     ASSERT_TRUE(g_slientAccessHelper != nullptr);
207     LOG_INFO("SetUpTestCase end");
208 }
209 
TearDownTestCase(void)210 void SlientAccessTest::TearDownTestCase(void)
211 {
212     auto tokenId = AccessTokenKit::GetHapTokenIDEx(100, "ohos.datashareclienttest.demo", 0);
213     AccessTokenKit::DeleteToken(tokenId.tokenIDEx);
214     g_slientAccessHelper = nullptr;
215 }
216 
SetUp(void)217 void SlientAccessTest::SetUp(void) {}
TearDown(void)218 void SlientAccessTest::TearDown(void) {}
219 
220 HWTEST_F(SlientAccessTest, SlientAccess_Creator_Errorcode_Test_001, TestSize.Level0)
221 {
222     LOG_INFO("SlientAccess_Creator_Errorcode_Test_001::Start");
223     std::string uriStr1(SLIENT_ACCESS_URI);
224     std::string uriStr2 (DATA_SHARE_URI);
225     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
226     if (saManager == nullptr) {
227         LOG_ERROR("GetSystemAbilityManager get samgr failed.");
228     }
229     auto remoteObj = saManager->GetSystemAbility(STORAGE_MANAGER_MANAGER_ID);
230     if (remoteObj == nullptr) {
231         LOG_ERROR("GetSystemAbility service failed.");
232     }
233     auto [ret, helper] = DataShare::DataShareHelper::Create(remoteObj, uriStr1, uriStr2);
234     EXPECT_EQ(ret, DataShare::E_OK);
235     EXPECT_NE(helper, nullptr);
236     helper = nullptr;
237     LOG_INFO("SlientAccess_Creator_Errorcode_Test_001::End");
238 }
239 
240 HWTEST_F(SlientAccessTest, SlientAccess_Creator_Errorcode_Test_002, TestSize.Level0)
241 {
242     LOG_INFO("SlientAccess_Creator_Errorcode_Test_002::Start");
243     std::string uriStr1(SLIENT_ACCESS_URI);
244     std::string uriStr2 (DATA_SHARE_URI);
245     auto [ret, helper] = DataShare::DataShareHelper::Create(nullptr, uriStr1, uriStr2);
246     EXPECT_EQ(ret, DataShare::E_TOKEN_EMPTY);
247     EXPECT_EQ(helper, nullptr);
248     LOG_INFO("SlientAccess_Creator_Errorcode_Test_002::End");
249 }
250 
251 HWTEST_F(SlientAccessTest, SlientAccess_Creator_Errorcode_Test_003, TestSize.Level0)
252 {
253     LOG_INFO("SlientAccess_Creator_Errorcode_Test_003::Start");
254     std::string uriStr1(SLIENT_ERROR_URI);
255     std::string uriStr2 ("");
256     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
257     if (saManager == nullptr) {
258         LOG_ERROR("GetSystemAbilityManager get samgr failed.");
259     }
260     auto remoteObj = saManager->GetSystemAbility(STORAGE_MANAGER_MANAGER_ID);
261     if (remoteObj == nullptr) {
262         LOG_ERROR("GetSystemAbility service failed.");
263     }
264     // slientUri is error bundle name, extUri is empty, slient access can't find the bundle name
265     auto [ret, helper] = DataShare::DataShareHelper::Create(remoteObj, uriStr1, uriStr2);
266     EXPECT_EQ(ret, DataShare::E_EXT_URI_INVALID);
267     EXPECT_EQ(helper, nullptr);
268     helper = nullptr;
269     LOG_INFO("SlientAccess_Creator_Errorcode_Test_003::End");
270 }
271 
272 HWTEST_F(SlientAccessTest, SlientAccess_Creator_Errorcode_Test_004, TestSize.Level0)
273 {
274     LOG_INFO("SlientAccess_Creator_Errorcode_Test_004::Start");
275     std::string uriStr1(DATA_SHARE_URI);
276     std::string uriStr2 (DATA_SHARE_URI);
277     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
278     if (saManager == nullptr) {
279         LOG_ERROR("GetSystemAbilityManager get samgr failed.");
280     }
281     auto remoteObj = saManager->GetSystemAbility(STORAGE_MANAGER_MANAGER_ID);
282     if (remoteObj == nullptr) {
283         LOG_ERROR("GetSystemAbility service failed.");
284     }
285     auto [ret, helper] = DataShare::DataShareHelper::Create(remoteObj, uriStr1, uriStr2);
286     EXPECT_EQ(ret, DataShare::E_OK);
287     EXPECT_NE(helper, nullptr);
288     helper = nullptr;
289     LOG_INFO("SlientAccess_Creator_Errorcode_Test_004::End");
290 }
291 
292 HWTEST_F(SlientAccessTest, SlientAccess_InsertEx_Test_001, TestSize.Level0)
293 {
294     LOG_INFO("SlientAccess_InsertEx_Test_001::Start");
295     auto helper = g_slientAccessHelper;
296     Uri uri(SLIENT_ACCESS_URI);
297     DataShare::DataShareValuesBucket valuesBucket;
298     std::string value = "lisi";
299     valuesBucket.Put(TBL_STU_NAME, value);
300     int age = 25;
301     valuesBucket.Put(TBL_STU_AGE, age);
302 
303     auto [errCode, retVal] = helper->InsertEx(uri, valuesBucket);
304     EXPECT_EQ((errCode == 0), true);
305     EXPECT_EQ((retVal > 0), true);
306     LOG_INFO("SlientAccess_InsertEx_Test_001::End");
307 }
308 
309 HWTEST_F(SlientAccessTest, SlientAccess_InsertEx_Test_002, TestSize.Level0)
310 {
311     LOG_INFO("SilentAccess_InsertEx_Test_002::Start");
312     auto helper = g_slientAccessHelper;
313     Uri uri(SLIENT_ACCESS_URI);
314     DataShare::DataShareValuesBucket valuesBucket;
315     std::string value = "lisi";
316     valuesBucket.Put(TBL_STU_NAME, value);
317     int age = 25;
318     valuesBucket.Put(TBL_STU_AGE, age);
319 
320     EXPECT_EQ(helper->DataShareHelper::InsertEx(uri, valuesBucket), std::make_pair(0, 0));
321     LOG_INFO("SilentAccess_InsertEx_Test_002::End");
322 }
323 
324 HWTEST_F(SlientAccessTest, SlientAccess_UpdateEx_Test_001, TestSize.Level0)
325 {
326     LOG_INFO("SlientAccess_UpdateEx_Test_001::Start");
327     auto helper = g_slientAccessHelper;
328     Uri uri(SLIENT_ACCESS_URI);
329     DataShare::DataShareValuesBucket valuesBucket;
330     int value = 50;
331     valuesBucket.Put(TBL_STU_AGE, value);
332     DataShare::DataSharePredicates predicates;
333     std::string selections = TBL_STU_NAME + " = 'lisi'";
334     predicates.SetWhereClause(selections);
335     auto [errCode, retVal] = helper->UpdateEx(uri, predicates, valuesBucket);
336     EXPECT_EQ((errCode == 0), true);
337     EXPECT_EQ((retVal > 0), true);
338     LOG_INFO("SlientAccess_UpdateEx_Test_001::End");
339 }
340 
341 HWTEST_F(SlientAccessTest, SlientAccess_UpdateEx_Test_002, TestSize.Level0)
342 {
343     LOG_INFO("SilentAccess_UpdateEx_Test_002::Start");
344     auto helper = g_slientAccessHelper;
345     Uri uri(SLIENT_ACCESS_URI);
346     DataShare::DataShareValuesBucket valuesBucket;
347     int value = 50;
348     valuesBucket.Put(TBL_STU_AGE, value);
349     DataShare::DataSharePredicates predicates;
350     std::string selections = TBL_STU_NAME + " = 'lisi'";
351     predicates.SetWhereClause(selections);
352 
353     EXPECT_EQ(helper->DataShareHelper::UpdateEx(uri, predicates, valuesBucket), std::make_pair(0, 0));
354     LOG_INFO("SilentAccess_UpdateEx_Test_002::End");
355 }
356 
357 HWTEST_F(SlientAccessTest, SlientAccess_DeleteEx_Test_001, TestSize.Level0)
358 {
359     LOG_INFO("SlientAccess_DeleteEx_Test_001::Start");
360     auto helper = g_slientAccessHelper;
361     Uri uri(SLIENT_ACCESS_URI);
362 
363     DataShare::DataSharePredicates deletePredicates;
364     std::string selections = TBL_STU_NAME + " = 'lisi'";
365     deletePredicates.SetWhereClause(selections);
366     auto [errCode, retVal] = helper->DeleteEx(uri, deletePredicates);
367     EXPECT_EQ((errCode == 0), true);
368     EXPECT_EQ((retVal > 0), true);
369     LOG_INFO("SlientAccess_DeleteEx_Test_001::End");
370 }
371 
372 HWTEST_F(SlientAccessTest, SlientAccess_DeleteEx_Test_002, TestSize.Level0)
373 {
374     LOG_INFO("SilentAccess_DeleteEx_Test_002::Start");
375     auto helper = g_slientAccessHelper;
376     Uri uri(SLIENT_ACCESS_URI);
377     DataShare::DataSharePredicates deletePredicates;
378     std::string selections = TBL_STU_NAME + " = 'lisi'";
379     deletePredicates.SetWhereClause(selections);
380 
381     EXPECT_EQ(helper->DataShareHelper::DeleteEx(uri, deletePredicates), std::make_pair(0, 0));
382     LOG_INFO("SilentAccess_DeleteEx_Test_002::End");
383 }
384 
385 HWTEST_F(SlientAccessTest, SlientAccess_Insert_Test_001, TestSize.Level0)
386 {
387     LOG_INFO("SlientAccess_Insert_Test_001::Start");
388     auto helper = g_slientAccessHelper;
389     Uri uri(SLIENT_ACCESS_URI);
390     DataShare::DataShareValuesBucket valuesBucket;
391     std::string value = "lisi";
392     valuesBucket.Put(TBL_STU_NAME, value);
393     int age = 25;
394     valuesBucket.Put(TBL_STU_AGE, age);
395 
396     int retVal = helper->Insert(uri, valuesBucket);
397     EXPECT_EQ((retVal > 0), true);
398     LOG_INFO("SlientAccess_Insert_Test_001::End");
399 }
400 
401 HWTEST_F(SlientAccessTest, SlientAccess_Update_Test_001, TestSize.Level0)
402 {
403     LOG_INFO("SlientAccess_Update_Test_001::Start");
404     auto helper = g_slientAccessHelper;
405     Uri uri(SLIENT_ACCESS_URI);
406     DataShare::DataShareValuesBucket valuesBucket;
407     int value = 50;
408     valuesBucket.Put(TBL_STU_AGE, value);
409     DataShare::DataSharePredicates predicates;
410     std::string selections = TBL_STU_NAME + " = 'lisi'";
411     predicates.SetWhereClause(selections);
412     int retVal = helper->Update(uri, predicates, valuesBucket);
413     EXPECT_EQ((retVal > 0), true);
414     LOG_INFO("SlientAccess_Update_Test_001::End");
415 }
416 
417 HWTEST_F(SlientAccessTest, SlientAccess_Query_Test_001, TestSize.Level0)
418 {
419     LOG_INFO("SlientAccess_Query_Test_001::Start");
420     auto helper = g_slientAccessHelper;
421     Uri uri(SLIENT_ACCESS_URI);
422     DataShare::DataSharePredicates predicates;
423     predicates.EqualTo(TBL_STU_NAME, "lisi");
424     vector<string> columns;
425     auto resultSet = helper->Query(uri, predicates, columns);
426     int result = 0;
427     if (resultSet != nullptr) {
428         resultSet->GetRowCount(result);
429     }
430     EXPECT_EQ(result, 1);
431     LOG_INFO("SlientAccess_Query_Test_001::End");
432 }
433 
434 HWTEST_F(SlientAccessTest, SlientAccess_Delete_Test_001, TestSize.Level0)
435 {
436     LOG_INFO("SlientAccess_Delete_Test_001::Start");
437     auto helper = g_slientAccessHelper;
438     Uri uri(SLIENT_ACCESS_URI);
439 
440     DataShare::DataSharePredicates deletePredicates;
441     std::string selections = TBL_STU_NAME + " = 'lisi'";
442     deletePredicates.SetWhereClause(selections);
443     int retVal = helper->Delete(uri, deletePredicates);
444     EXPECT_EQ((retVal > 0), true);
445     LOG_INFO("SlientAccess_Delete_Test_001::End");
446 }
447 
448 HWTEST_F(SlientAccessTest, SlientAccess_Register_Test_001, TestSize.Level0)
449 {
450     LOG_INFO("SlientAccess_Register_Test_001::Start");
451     auto helper = g_slientAccessHelper;
452     Uri uri(SLIENT_ACCESS_URI);
453     sptr<IDataShareAbilityObserverTest> dataObserver(new (std::nothrow) IDataShareAbilityObserverTest());
454     dataObserver->SetName("zhangsan");
455     helper->RegisterObserver(uri, dataObserver);
456     EXPECT_EQ(dataObserver->GetName(), "zhangsan");
457     DataShare::DataShareValuesBucket valuesBucket;
458     std::string value = "lisi";
459     valuesBucket.Put(TBL_STU_NAME, value);
460     int age = 25;
461     valuesBucket.Put(TBL_STU_AGE, age);
462     int retVal = helper->Insert(uri, valuesBucket);
463     EXPECT_EQ((retVal > 0), true);
464     dataObserver->data.Wait();
465     EXPECT_EQ(dataObserver->GetName(), "OnChangeName");
466     dataObserver->Clear();
467 
468     DataShare::DataSharePredicates deletePredicates;
469     deletePredicates.EqualTo(TBL_STU_NAME, "lisi")->And()->EqualTo(TBL_STU_NAME, 25);
470     retVal = helper->Delete(uri, deletePredicates);
471     EXPECT_EQ((retVal >= 0), true);
472     helper->UnregisterObserver(uri, dataObserver);
473     LOG_INFO("SlientAccess_Register_Test_001::End");
474 }
475 
476 HWTEST_F(SlientAccessTest, SlientAccess_RegisterErrorUri_Test_001, TestSize.Level0)
477 {
478     LOG_INFO("SlientAccess_RegisterErrorUri_Test_001::Start");
479     auto helper = g_slientAccessHelper;
480     Uri uri(SLIENT_ACCESS_URI);
481     sptr<IDataShareAbilityObserverTest> dataObserver(new (std::nothrow) IDataShareAbilityObserverTest());
482     dataObserver->SetName("zhangsan");
483     Uri uriRegister(SLIENT_REGISTER_URI);
484     helper->RegisterObserver(uriRegister, dataObserver);
485     EXPECT_EQ(dataObserver->GetName(), "zhangsan");
486     DataShare::DataShareValuesBucket valuesBucket;
487     std::string value = "lisi";
488     valuesBucket.Put(TBL_STU_NAME, value);
489     int age = 25;
490     valuesBucket.Put(TBL_STU_AGE, age);
491     int retVal = helper->Insert(uri, valuesBucket);
492     EXPECT_EQ((retVal > 0), true);
493     EXPECT_NE(dataObserver->GetName(), "OnChangeName");
494 
495     DataShare::DataSharePredicates deletePredicates;
496     deletePredicates.EqualTo(TBL_STU_NAME, "lisi")->And()->EqualTo(TBL_STU_NAME, 25);
497     retVal = helper->Delete(uri, deletePredicates);
498     EXPECT_EQ((retVal >= 0), true);
499     helper->UnregisterObserver(uriRegister, dataObserver);
500     LOG_INFO("SlientAccess_RegisterErrorUri_Test_001::End");
501 }
502 
503 HWTEST_F(SlientAccessTest, SlientAccess_NoRegister_Test_001, TestSize.Level0)
504 {
505     LOG_INFO("SlientAccess_NoRegister_Test_001::Start");
506     auto helper = g_slientAccessHelper;
507     Uri uri(SLIENT_ACCESS_URI);
508     sptr<IDataShareAbilityObserverTest> dataObserver(new (std::nothrow) IDataShareAbilityObserverTest());
509     dataObserver->SetName("zhangsan");
510     EXPECT_EQ(dataObserver->GetName(), "zhangsan");
511     DataShare::DataShareValuesBucket valuesBucket;
512     std::string value = "lisi";
513     valuesBucket.Put(TBL_STU_NAME, value);
514     int age = 25;
515     valuesBucket.Put(TBL_STU_AGE, age);
516     int retVal = helper->Insert(uri, valuesBucket);
517     EXPECT_EQ((retVal > 0), true);
518     EXPECT_NE(dataObserver->GetName(), "OnChangeName");
519 
520     DataShare::DataSharePredicates deletePredicates;
521     deletePredicates.EqualTo(TBL_STU_NAME, "lisi")->And()->EqualTo(TBL_STU_NAME, 25);
522     retVal = helper->Delete(uri, deletePredicates);
523     EXPECT_EQ((retVal >= 0), true);
524     helper->UnregisterObserver(uri, dataObserver);
525     LOG_INFO("SlientAccess_NoRegister_Test_001::End");
526 }
527 
528 HWTEST_F(SlientAccessTest, SlientAccess_NoRegister_Test_002, TestSize.Level0)
529 {
530     LOG_INFO("SlientAccess_NoRegister_Test_002::Start");
531     auto helper = g_slientAccessHelper;
532     Uri uri(SLIENT_ACCESS_URI);
533     sptr<IDataShareAbilityObserverTest> dataObserver(new (std::nothrow) IDataShareAbilityObserverTest());
534     dataObserver->SetName("zhangsan");
535     helper->RegisterObserver(uri, dataObserver);
536     helper->UnregisterObserver(uri, dataObserver);
537     EXPECT_EQ(dataObserver->GetName(), "zhangsan");
538     DataShare::DataShareValuesBucket valuesBucket;
539     std::string value = "lisi";
540     valuesBucket.Put(TBL_STU_NAME, value);
541     int age = 25;
542     valuesBucket.Put(TBL_STU_AGE, age);
543     int retVal = helper->Insert(uri, valuesBucket);
544     EXPECT_EQ((retVal > 0), true);
545     EXPECT_NE(dataObserver->GetName(), "OnChangeName");
546 
547     DataShare::DataSharePredicates deletePredicates;
548     deletePredicates.EqualTo(TBL_STU_NAME, "lisi")->And()->EqualTo(TBL_STU_NAME, 25);
549     retVal = helper->Delete(uri, deletePredicates);
550     EXPECT_EQ((retVal >= 0), true);
551     LOG_INFO("SlientAccess_NoRegister_Test_002::End");
552 }
553 
554 HWTEST_F(SlientAccessTest, SlientAccess_Permission_Insert_Test_001, TestSize.Level0)
555 {
556     LOG_INFO("SlientAccess_Permission_Insert_Test_001::Start");
557     auto helper = g_slientAccessHelper;
558     Uri uri(SLIENT_ACCESS_URI);
559     DataShare::DataShareValuesBucket valuesBucket;
560     std::string value = "lisi";
561     valuesBucket.Put(TBL_STU_NAME, value);
562     int age = 25;
563     valuesBucket.Put(TBL_STU_AGE, age);
564 
565     int retVal = helper->Insert(uri, valuesBucket);
566     EXPECT_EQ((retVal > 0), true);
567     LOG_INFO("SlientAccess_Permission_Insert_Test_001::End");
568 }
569 
570 HWTEST_F(SlientAccessTest, SlientAccess_Permission_Insert_Test_003, TestSize.Level0)
571 {
572     LOG_INFO("SlientAccess_Permission_Insert_Test_003::Start");
573     auto helper = g_slientAccessHelper;
574     Uri uri(SLIENT_PROXY_PERMISSION1_URI);
575     DataShare::DataShareValuesBucket valuesBucket;
576     std::string value = "lisi";
577     valuesBucket.Put(TBL_STU_NAME, value);
578     int age = 25;
579     valuesBucket.Put(TBL_STU_AGE, age);
580 
581     int retVal = helper->Insert(uri, valuesBucket);
582     EXPECT_EQ((retVal > 0), true);
583     LOG_INFO("SlientAccess_Permission_Insert_Test_003::End");
584 }
585 
586 HWTEST_F(SlientAccessTest, SlientAccess_Permission_Update_Test_001, TestSize.Level0)
587 {
588     LOG_INFO("SlientAccess_Permission_Update_Test_001::Start");
589     auto helper = g_slientAccessHelper;
590     Uri uri(SLIENT_PROXY_PERMISSION1_URI);
591     DataShare::DataShareValuesBucket valuesBucket;
592     int value = 50;
593     valuesBucket.Put(TBL_STU_AGE, value);
594     DataShare::DataSharePredicates predicates;
595     std::string selections = TBL_STU_NAME + " = 'lisi'";
596     predicates.SetWhereClause(selections);
597     int retVal = helper->Update(uri, predicates, valuesBucket);
598     EXPECT_EQ((retVal > 0), true);
599     LOG_INFO("SlientAccess_Permission_Update_Test_001::End");
600 }
601 
602 HWTEST_F(SlientAccessTest, SlientAccess_Permission_Query_Test_002, TestSize.Level0)
603 {
604     LOG_INFO("SlientAccess_Permission_Query_Test_002::Start");
605     auto helper = g_slientAccessHelper;
606     Uri uri(SLIENT_PROXY_PERMISSION2_URI);
607     DataShare::DataShareValuesBucket valuesBucket;
608     std::string value = "lisi";
609     valuesBucket.Put(TBL_STU_NAME, value);
610     int age = 25;
611     valuesBucket.Put(TBL_STU_AGE, age);
612 
613     int retVal = helper->Insert(uri, valuesBucket);
614     EXPECT_EQ((retVal > 0), true);
615 
616     DataShare::DataSharePredicates predicates;
617     predicates.EqualTo(TBL_STU_NAME, "lisi");
618     vector<string> columns;
619     DatashareBusinessError businessError;
620     auto resultSet = helper->Query(uri, predicates, columns, &businessError);
621     int result = 0;
622     if (resultSet != nullptr) {
623         resultSet->GetRowCount(result);
624     }
625     EXPECT_EQ(result, 1);
626     EXPECT_EQ(businessError.GetCode(), 0);
627     LOG_INFO("SlientAccess_Permission_Query_Test_002::End");
628 }
629 
630 HWTEST_F(SlientAccessTest, SlientAccess_Permission_Delete_Test_001, TestSize.Level0)
631 {
632     LOG_INFO("SlientAccess_Permission_Delete_Test_001::Start");
633     auto helper = g_slientAccessHelper;
634     Uri uri(SLIENT_PROXY_PERMISSION2_URI);
635 
636     DataShare::DataSharePredicates deletePredicates;
637     std::string selections = TBL_STU_NAME + " = 'lisi'";
638     deletePredicates.SetWhereClause(selections);
639     int retVal = helper->Delete(uri, deletePredicates);
640     EXPECT_EQ(retVal, 1);
641     LOG_INFO("SlientAccess_Permission_Delete_Test_001::End");
642 }
643 
644 HWTEST_F(SlientAccessTest, SlientAccess_Permission_Insert_Test_002, TestSize.Level0)
645 {
646     LOG_INFO("SlientAccess_Permission_Insert_Test_002::Start");
647     HapInfoParams info = {
648         .userID = USER_100,
649         .bundleName = "ohos.permission.write.demo",
650         .instIndex = 0,
651         .isSystemApp = true,
652         .apiVersion = 8,
653         .appIDDesc = "ohos.permission.write.demo"
654     };
655     HapPolicyParams policy = {
656         .apl = APL_SYSTEM_CORE,
657         .domain = "test.domain",
658         .permStateList = {
659             {
660                 .permissionName = "ohos.permission.WRITE_CONTACTS",
661                 .isGeneral = true,
662                 .resDeviceID = { "local" },
663                 .grantStatus = { PermissionState::PERMISSION_GRANTED },
664                 .grantFlags = { 1 }
665             }
666         }
667     };
668     AccessTokenKit::AllocHapToken(info, policy);
669     auto testTokenId = Security::AccessToken::AccessTokenKit::GetHapTokenIDEx(
670         info.userID, info.bundleName, info.instIndex);
671     SetSelfTokenID(testTokenId.tokenIDEx);
672 
673     auto helper = CreateDataShareHelper(STORAGE_MANAGER_MANAGER_ID, SLIENT_ACCESS_URI);
674     Uri uri(SLIENT_ACCESS_PERMISSION1_URI);
675     DataShare::DataShareValuesBucket valuesBucket;
676     std::string value = "lisi";
677     valuesBucket.Put(TBL_STU_NAME, value);
678     int age = 25;
679     valuesBucket.Put(TBL_STU_AGE, age);
680     int retVal = helper->Insert(uri, valuesBucket);
681     EXPECT_EQ(retVal, -2);
682     helper = nullptr;
683     AccessTokenKit::DeleteToken(testTokenId.tokenIDEx);
684     LOG_INFO("SlientAccess_Permission_Insert_Test_002::End");
685 }
686 
687 HWTEST_F(SlientAccessTest, SlientAccess_Permission_Update_Test_002, TestSize.Level0)
688 {
689     LOG_INFO("SlientAccess_Permission_Update_Test_002::Start");
690     HapInfoParams info = {
691         .userID = USER_100,
692         .bundleName = "ohos.permission.write.demo",
693         .instIndex = 0,
694         .isSystemApp = true,
695         .apiVersion = 8,
696         .appIDDesc = "ohos.permission.write.demo"
697     };
698     HapPolicyParams policy = {
699         .apl = APL_SYSTEM_CORE,
700         .domain = "test.domain",
701         .permStateList = {
702             {
703                 .permissionName = "ohos.permission.WRITE_CONTACTS",
704                 .isGeneral = true,
705                 .resDeviceID = { "local" },
706                 .grantStatus = { PermissionState::PERMISSION_GRANTED },
707                 .grantFlags = { 1 }
708             }
709         }
710     };
711     AccessTokenKit::AllocHapToken(info, policy);
712     auto testTokenId = Security::AccessToken::AccessTokenKit::GetHapTokenIDEx(
713         info.userID, info.bundleName, info.instIndex);
714     SetSelfTokenID(testTokenId.tokenIDEx);
715 
716     auto helper = CreateDataShareHelper(STORAGE_MANAGER_MANAGER_ID, SLIENT_ACCESS_URI);
717     Uri uri(SLIENT_ACCESS_PERMISSION1_URI);
718     DataShare::DataShareValuesBucket valuesBucket;
719     int value = 50;
720     valuesBucket.Put(TBL_STU_AGE, value);
721     DataShare::DataSharePredicates predicates;
722     std::string selections = TBL_STU_NAME + " = 'lisi'";
723     predicates.SetWhereClause(selections);
724     int retVal = helper->Update(uri, predicates, valuesBucket);
725     EXPECT_EQ(retVal, -2);
726     helper = nullptr;
727     AccessTokenKit::DeleteToken(testTokenId.tokenIDEx);
728     LOG_INFO("SlientAccess_Permission_Update_Test_002::End");
729 }
730 
731 HWTEST_F(SlientAccessTest, SlientAccess_Permission_Query_Test_001, TestSize.Level0)
732 {
733     LOG_INFO("SlientAccess_Permission_Query_Test_001::Start");
734     HapInfoParams info = {
735         .userID = USER_100,
736         .bundleName = "ohos.permission.write.demo",
737         .instIndex = 0,
738         .isSystemApp = true,
739         .apiVersion = 8,
740         .appIDDesc = "ohos.permission.write.demo"
741     };
742     HapPolicyParams policy = {
743         .apl = APL_SYSTEM_CORE,
744         .domain = "test.domain",
745         .permStateList = {
746             {
747                 .permissionName = "ohos.permission.WRITE_CONTACTS",
748                 .isGeneral = true,
749                 .resDeviceID = { "local" },
750                 .grantStatus = { PermissionState::PERMISSION_GRANTED },
751                 .grantFlags = { 1 }
752             }
753         }
754     };
755     AccessTokenKit::AllocHapToken(info, policy);
756     auto testTokenId = Security::AccessToken::AccessTokenKit::GetHapTokenIDEx(
757         info.userID, info.bundleName, info.instIndex);
758     SetSelfTokenID(testTokenId.tokenIDEx);
759 
760     auto helper = CreateDataShareHelper(STORAGE_MANAGER_MANAGER_ID, SLIENT_ACCESS_URI);
761     Uri uri(SLIENT_ACCESS_PERMISSION2_URI);
762     DataShare::DataSharePredicates predicates;
763     predicates.EqualTo(TBL_STU_NAME, "lisi");
764     vector<string> columns;
765     DatashareBusinessError businessError;
766     auto resultSet = helper->Query(uri, predicates, columns, &businessError);
767     int result = 0;
768     if (resultSet != nullptr) {
769         resultSet->GetRowCount(result);
770     }
771     EXPECT_EQ(result, 0);
772     EXPECT_EQ(resultSet, nullptr);
773     EXPECT_EQ(businessError.GetCode(), -2);
774     helper = nullptr;
775     AccessTokenKit::DeleteToken(testTokenId.tokenIDEx);
776     LOG_INFO("SlientAccess_Permission_Query_Test_001::End");
777 }
778 
779 HWTEST_F(SlientAccessTest, SlientAccess_Access_When_Uri_Error_Test_001, TestSize.Level0)
780 {
781     LOG_INFO("SlientAccess_Permission_Access_When_URI_ERROR_Test_001::Begin");
782     auto helper = g_slientAccessHelper;
783     Uri uri(SLIENT_ERROR_URI);
784     DataShare::DataShareValuesBucket valuesBucket;
785     std::string value = "lisi";
786     valuesBucket.Put(TBL_STU_NAME, value);
787     int age = 25;
788     valuesBucket.Put(TBL_STU_AGE, age);
789 
790     int retVal = helper->Insert(uri, valuesBucket);
791     EXPECT_EQ((retVal < 0), true);
792     LOG_INFO("SlientAccess_Permission_Access_When_URI_ERROR_Test_001::End");
793 }
794 
795 HWTEST_F(SlientAccessTest, SlientAccess_Access_With_Uncreated_DataBase_Test_001, TestSize.Level0)
796 {
797     LOG_INFO("SlientAccess_Access_With_Uncreated_DataBase_Test_001::Begin");
798     auto helper = g_slientAccessHelper;
799     Uri uri(SLIENT_ERROR_DATABASE_URI);
800     DataShare::DataShareValuesBucket valuesBucket;
801     std::string value = "lisi";
802     valuesBucket.Put(TBL_STU_NAME, value);
803     int age = 25;
804     valuesBucket.Put(TBL_STU_AGE, age);
805 
806     int retVal = helper->Insert(uri, valuesBucket);
807     EXPECT_EQ((retVal < 0), true);
808     LOG_INFO("SlientAccess_Access_With_Uncreated_DataBase_Test_001::End");
809 }
810 
811 HWTEST_F(SlientAccessTest, SlientAccess_Creator_With_Uri_Error_Test_001, TestSize.Level0)
812 {
813     LOG_INFO("SlientAccess_Creator_With_Uri_Error_Test_001::Begin");
814     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
815     if (saManager == nullptr) {
816         LOG_ERROR("GetSystemAbilityManager get samgr failed.");
817     }
818     auto remoteObj = saManager->GetSystemAbility(STORAGE_MANAGER_MANAGER_ID);
819     if (remoteObj == nullptr) {
820         LOG_ERROR("GetSystemAbility service failed.");
821     }
822     std::string uriStr(DATA_SHARE_ERROR_URI);
823     auto helper = DataShare::DataShareHelper::Creator(remoteObj, uriStr, uriStr, 2);
824     EXPECT_EQ(helper, nullptr);
825     LOG_INFO("SlientAccess_Creator_With_Uri_Error_Test_001::End");
826 }
827 
828 HWTEST_F(SlientAccessTest, SlientAccess_Creator_When_TimeOut_Test_001, TestSize.Level0)
829 {
830     LOG_INFO("SlientAccess_Creator_With_Uri_Error_Test_001::Begin");
831     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
832     if (saManager == nullptr) {
833         LOG_ERROR("GetSystemAbilityManager get samgr failed.");
834     }
835     auto remoteObj = saManager->GetSystemAbility(STORAGE_MANAGER_MANAGER_ID);
836     if (remoteObj == nullptr) {
837         LOG_ERROR("GetSystemAbility service failed.");
838     }
839     std::string uriStr(DATA_SHARE_URI);
840     auto helper = DataShare::DataShareHelper::Creator(remoteObj, uriStr, uriStr, 0);
841     EXPECT_EQ(helper, nullptr);
842     LOG_INFO("SlientAccess_Creator_With_Uri_Error_Test_001::End");
843 }
844 
845 /*
846 * @tc.desc: test UserDefineFunc
847 * @tc.require: Null
848 */
849 HWTEST_F(SlientAccessTest, SlientAccess_UserDefineFunc_Test_001, TestSize.Level0)
850 {
851     LOG_INFO("SilentAccess_UserDefineFunc_Test_001::Start");
852     auto helper = g_slientAccessHelper;
853     MessageParcel data;
854     MessageParcel reply;
855     MessageOption option;
856     auto result = helper->DataShareHelper::UserDefineFunc(data, reply, option);
857     EXPECT_EQ(result, 0);
858     LOG_INFO("SilentAccess_UserDefineFunc_Test_001::End");
859 }
860 
861 HWTEST_F(SlientAccessTest, SlientAccess_Creator_ErrorBundle_Test_001, TestSize.Level0)
862 {
863     LOG_INFO("SlientAccess_Creator_ErrorBundle_Test_001::Start");
864     std::string uriStr1("datashareproxy://com.acts.error.bundleName/test");
865     // slientUri is error bundle name, slient access can't find the bundle name, return nullptr
866     auto helperSilent = CreateDataShareHelper(STORAGE_MANAGER_MANAGER_ID, uriStr1);
867     EXPECT_EQ(helperSilent, nullptr);
868     LOG_INFO("SlientAccess_Creator_ErrorBundle_Test_001::End");
869 }
870 
871 HWTEST_F(SlientAccessTest, SlientAccess_Creator_ErrorBundle_ExtSuccess_Test_001, TestSize.Level0)
872 {
873     LOG_INFO("SlientAccess_Creator_ErrorBundle_ExtSuccess_Test_001::Start");
874     std::string uriStr1(SLIENT_ERROR_URI);
875     std::string uriStr2 (DATA_SHARE_URI);
876     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
877     if (saManager == nullptr) {
878         LOG_ERROR("GetSystemAbilityManager get samgr failed.");
879     }
880     auto remoteObj = saManager->GetSystemAbility(STORAGE_MANAGER_MANAGER_ID);
881     if (remoteObj == nullptr) {
882         LOG_ERROR("GetSystemAbility service failed.");
883     }
884     // slientUri is error bundleName, extUri is effective, slient access can't find the bundleName, but ext success
885     auto [ret, helper] = DataShare::DataShareHelper::Create(remoteObj, uriStr1, uriStr2);
886     EXPECT_EQ(ret, DataShare::E_OK);
887     EXPECT_NE(helper, nullptr);
888     helper = nullptr;
889     LOG_INFO("SlientAccess_Creator_ErrorBundle_ExtSuccess_Test_001::End");
890 }
891 } // namespace DataShare
892 } // namespace OHOS