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