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
18 #include "accesstoken_kit.h"
19 #include "datashare_helper.h"
20 #include "datashare_log.h"
21 #include "hap_token_info.h"
22 #include "iservice_registry.h"
23 #include "system_ability_definition.h"
24 #include "token_setproc.h"
25
26 namespace OHOS {
27 namespace DataShare {
28 using namespace testing::ext;
29 using namespace OHOS::Security::AccessToken;
30 constexpr int STORAGE_MANAGER_MANAGER_ID = 5003;
31 std::string DATA_SHARE_URI = "datashare:///com.acts.datasharetest";
32 std::string SLIENT_ACCESS_URI = "datashare:///com.acts.datasharetest/entry/DB00/TBL00?Proxy=true";
33 std::string TBL_STU_NAME = "name";
34 std::string TBL_STU_AGE = "age";
35 std::shared_ptr<DataShare::DataShareHelper> g_slientAccessHelper;
36
37 class SlientAccessTest : public testing::Test {
38 public:
39 static void SetUpTestCase(void);
40 static void TearDownTestCase(void);
41 void SetUp();
42 void TearDown();
43 };
44
CreateDataShareHelper(int32_t systemAbilityId,std::string uri)45 std::shared_ptr<DataShare::DataShareHelper> CreateDataShareHelper(int32_t systemAbilityId, std::string uri)
46 {
47 LOG_INFO("CreateDataShareHelper start");
48 auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
49 if (saManager == nullptr) {
50 LOG_ERROR("GetSystemAbilityManager get samgr failed.");
51 return nullptr;
52 }
53 auto remoteObj = saManager->GetSystemAbility(systemAbilityId);
54 if (remoteObj == nullptr) {
55 LOG_ERROR("GetSystemAbility service failed.");
56 return nullptr;
57 }
58 return DataShare::DataShareHelper::Creator(remoteObj, uri);
59 }
60
SetUpTestCase(void)61 void SlientAccessTest::SetUpTestCase(void)
62 {
63 LOG_INFO("SetUpTestCase invoked");
64 auto dataShareHelper = CreateDataShareHelper(STORAGE_MANAGER_MANAGER_ID, DATA_SHARE_URI);
65 ASSERT_TRUE(dataShareHelper != nullptr);
66 int sleepTime = 3;
67 sleep(sleepTime);
68
69 HapInfoParams info = {
70 .userID = 100,
71 .bundleName = "ohos.datashareclienttest.demo",
72 .instIndex = 0,
73 .appIDDesc = "ohos.datashareclienttest.demo"
74 };
75 HapPolicyParams policy = {
76 .apl = APL_NORMAL,
77 .domain = "test.domain",
78 .permList = {
79 {
80 .permissionName = "ohos.permission.test",
81 .bundleName = "ohos.datashareclienttest.demo",
82 .grantMode = 1,
83 .availableLevel = APL_NORMAL,
84 .label = "label",
85 .labelId = 1,
86 .description = "ohos.datashareclienttest.demo",
87 .descriptionId = 1
88 }
89 },
90 .permStateList = {
91 {
92 .permissionName = "ohos.permission.test",
93 .isGeneral = true,
94 .resDeviceID = { "local" },
95 .grantStatus = { PermissionState::PERMISSION_GRANTED },
96 .grantFlags = { 1 }
97 }
98 }
99 };
100 AccessTokenKit::AllocHapToken(info, policy);
101 auto testTokenId = Security::AccessToken::AccessTokenKit::GetHapTokenID(
102 info.userID, info.bundleName, info.instIndex);
103 SetSelfTokenID(testTokenId);
104
105 g_slientAccessHelper = CreateDataShareHelper(STORAGE_MANAGER_MANAGER_ID, SLIENT_ACCESS_URI);
106 ASSERT_TRUE(g_slientAccessHelper != nullptr);
107 LOG_INFO("SetUpTestCase end");
108 }
109
TearDownTestCase(void)110 void SlientAccessTest::TearDownTestCase(void)
111 {
112 auto tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.datashareclienttest.demo", 0);
113 AccessTokenKit::DeleteToken(tokenId);
114 g_slientAccessHelper = nullptr;
115 }
116
SetUp(void)117 void SlientAccessTest::SetUp(void) {}
TearDown(void)118 void SlientAccessTest::TearDown(void) {}
119
120 HWTEST_F(SlientAccessTest, SlientAccess_Insert_Test_001, TestSize.Level0)
121 {
122 LOG_INFO("SlientAccess_Insert_Test_001::Start");
123 auto helper = g_slientAccessHelper;
124 Uri uri(SLIENT_ACCESS_URI);
125 DataShare::DataShareValuesBucket valuesBucket;
126 std::string value = "lisi";
127 valuesBucket.Put(TBL_STU_NAME, value);
128 int age = 25;
129 valuesBucket.Put(TBL_STU_AGE, age);
130
131 int retVal = helper->Insert(uri, valuesBucket);
132 EXPECT_EQ((retVal > 0), true);
133 LOG_INFO("SlientAccess_Insert_Test_001::End");
134 }
135
136 HWTEST_F(SlientAccessTest, SlientAccess_Update_Test_001, TestSize.Level0)
137 {
138 LOG_INFO("SlientAccess_Update_Test_001::Start");
139 auto helper = g_slientAccessHelper;
140 Uri uri(SLIENT_ACCESS_URI);
141 DataShare::DataShareValuesBucket valuesBucket;
142 int value = 50;
143 valuesBucket.Put(TBL_STU_AGE, value);
144 DataShare::DataSharePredicates predicates;
145 std::string selections = TBL_STU_NAME + " = 'lisi'";
146 predicates.SetWhereClause(selections);
147 int retVal = helper->Update(uri, predicates, valuesBucket);
148 EXPECT_EQ((retVal > 0), true);
149 LOG_INFO("SlientAccess_Update_Test_001::End");
150 }
151
152 HWTEST_F(SlientAccessTest, SlientAccess_Query_Test_001, TestSize.Level0)
153 {
154 LOG_INFO("SlientAccess_Query_Test_001::Start");
155 auto helper = g_slientAccessHelper;
156 Uri uri(SLIENT_ACCESS_URI);
157 DataShare::DataSharePredicates predicates;
158 predicates.EqualTo(TBL_STU_NAME, "lisi");
159 vector<string> columns;
160 auto resultSet = helper->Query(uri, predicates, columns);
161 int result = 0;
162 if (resultSet != nullptr) {
163 resultSet->GetRowCount(result);
164 }
165 EXPECT_EQ(result, 1);
166 LOG_INFO("SlientAccess_Query_Test_001::End");
167 }
168
169 HWTEST_F(SlientAccessTest, SlientAccess_Delete_Test_001, TestSize.Level0)
170 {
171 LOG_INFO("SlientAccess_Delete_Test_001::Start");
172 auto helper = g_slientAccessHelper;
173 Uri uri(SLIENT_ACCESS_URI);
174
175 DataShare::DataSharePredicates deletePredicates;
176 std::string selections = TBL_STU_NAME + " = 'lisi'";
177 deletePredicates.SetWhereClause(selections);
178 int retVal = helper->Delete(uri, deletePredicates);
179 EXPECT_EQ((retVal > 0), true);
180 LOG_INFO("SlientAccess_Delete_Test_001::End");
181 }
182 } // namespace DataShare
183 } // namespace OHOS