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