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
16 #include "directory/directory_manager.h"
17
18 #include <fstream>
19 #include <gtest/gtest.h>
20
21 #include "accesstoken_kit.h"
22 #include "bootstrap.h"
23 #include "nativetoken_kit.h"
24 #include "types.h"
25
26 using namespace testing::ext;
27 using namespace OHOS::DistributedData;
28 using namespace OHOS::DistributedKv;
29 using namespace OHOS;
30 using namespace OHOS::Security::AccessToken;
31
32 class DirectoryManagerTest : public testing::Test {
33 public:
SetUpTestCase()34 static void SetUpTestCase()
35 {
36 HapInfoParams info = {
37 .userID = 100, .bundleName = "ohos.test.demo", .instIndex = 0, .appIDDesc = "ohos.test.demo_09AEF01D"
38 };
39 HapPolicyParams policy = {
40 .apl = APL_NORMAL,
41 .domain = "test.domain",
42 .permList = {
43 {
44 .permissionName = "ohos.permission.test",
45 .bundleName = "ohos.test.demo",
46 .grantMode = 1,
47 .availableLevel = APL_NORMAL,
48 .label = "label",
49 .labelId = 1,
50 .description = "open the door",
51 .descriptionId = 1
52 }
53 },
54 .permStateList = {
55 {
56 .permissionName = "ohos.permission.test",
57 .isGeneral = true,
58 .resDeviceID = { "local" },
59 .grantStatus = { PermissionState::PERMISSION_GRANTED },
60 .grantFlags = { 1 }
61 }
62 }
63 };
64 AccessTokenKit::AllocHapToken(info, policy);
65 }
TearDownTestCase()66 static void TearDownTestCase()
67 {
68 auto tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo", 0);
69 AccessTokenKit::DeleteToken(tokenId);
70 }
SetUp()71 void SetUp()
72 {
73 tokenParam_.processName = "DirectoryManagerTest";
74 tokenParam_.aplStr = "system_core";
75
76 Bootstrap::GetInstance().LoadDirectory();
77 }
TearDown()78 void TearDown() {}
79
80 protected:
81 NativeTokenInfoParams tokenParam_ {0};
82 };
83
84 /**
85 * @tc.name: GetBundleStorePath
86 * @tc.desc: test get kv db dir
87 * @tc.type: FUNC
88 * @tc.require:
89 * @tc.author: Sven Wang
90 */
HWTEST_F(DirectoryManagerTest, GetBundleStorePath, TestSize.Level0)91 HWTEST_F(DirectoryManagerTest, GetBundleStorePath, TestSize.Level0)
92 {
93 StoreMetaData metaData;
94 metaData.user = "100";
95 metaData.bundleName = "ohos.test.demo";
96 metaData.dataDir = "/data/app/el1/100/database/ohos.test.demo/kvdb";
97 metaData.securityLevel = SecurityLevel::S2;
98 metaData.area = 1;
99 metaData.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo", 0);
100 metaData.storeType = KvStoreType::SINGLE_VERSION;
101 HapTokenInfo tokenInfo;
102 AccessTokenKit::GetHapTokenInfo(metaData.tokenId, tokenInfo);
103 metaData.appId = tokenInfo.appID;
104 auto path = DirectoryManager::GetInstance().GetStorePath(metaData);
105 EXPECT_EQ(path, metaData.dataDir);
106 }
107
108 /**
109 * @tc.name: GetHapStorePath
110 * @tc.desc: test get kv db dir
111 * @tc.type: FUNC
112 * @tc.require:
113 * @tc.author: Sven Wang
114 */
HWTEST_F(DirectoryManagerTest, GetHapStorePath, TestSize.Level0)115 HWTEST_F(DirectoryManagerTest, GetHapStorePath, TestSize.Level0)
116 {
117 StoreMetaData metaData;
118 metaData.user = "100";
119 metaData.bundleName = "com.sample.helloworld";
120 metaData.hapName = "example.hap";
121 metaData.dataDir = "/data/app/el2/100/database/com.sample.helloworld/example.hap/kvdb";
122 metaData.securityLevel = SecurityLevel::S2;
123 metaData.area = 2;
124 metaData.storeType = KvStoreType::SINGLE_VERSION;
125 auto path = DirectoryManager::GetInstance().GetStorePath(metaData);
126 EXPECT_EQ(path, metaData.dataDir);
127 }
128
129 /**
130 * @tc.name: GetSaStorePath
131 * @tc.desc: test get kv db dir
132 * @tc.type: FUNC
133 * @tc.require:
134 * @tc.author: Sven Wang
135 */
HWTEST_F(DirectoryManagerTest, GetSaStorePath, TestSize.Level0)136 HWTEST_F(DirectoryManagerTest, GetSaStorePath, TestSize.Level0)
137 {
138 StoreMetaData metaData;
139 metaData.user = "0";
140 metaData.bundleName = "bundle_manager_service";
141 metaData.appId = "bundle_manager_service";
142 metaData.dataDir = "/data/service/el1/public/database/bundle_manager_service/kvdb";
143 metaData.securityLevel = SecurityLevel::S2;
144 metaData.area = 1;
145 metaData.tokenId = GetAccessTokenId(&tokenParam_);
146 metaData.storeType = KvStoreType::SINGLE_VERSION;
147 auto path = DirectoryManager::GetInstance().GetStorePath(metaData);
148 EXPECT_EQ(path, metaData.dataDir);
149 }
150
151 /**
152 * @tc.name: GetRdbBackupPath
153 * @tc.desc: test get rdb backup dir
154 * @tc.type: FUNC
155 * @tc.require:
156 * @tc.author: Sven Wang
157 */
HWTEST_F(DirectoryManagerTest, GetRDBBackupPath, TestSize.Level0)158 HWTEST_F(DirectoryManagerTest, GetRDBBackupPath, TestSize.Level0)
159 {
160 StoreMetaData metaData;
161 metaData.user = "10";
162 metaData.bundleName = "ohos.test.demo";
163 metaData.dataDir = "/data/app/el1/10/database/ohos.test.demo";
164 metaData.securityLevel = SecurityLevel::S2;
165 metaData.area = 1;
166 metaData.storeType = 10;
167 metaData.tokenId = AccessTokenKit::GetHapTokenID(10, "ohos.test.demo", 0);
168 HapTokenInfo tokenInfo;
169 AccessTokenKit::GetHapTokenInfo(metaData.tokenId, tokenInfo);
170 metaData.appId = tokenInfo.appID;
171 metaData.storeId = "testStpre";
172 auto path = DirectoryManager::GetInstance().GetStoreBackupPath(metaData);
173 EXPECT_EQ(path, metaData.dataDir + "/rdb/backup/testStpre");
174 }
175 /**
176 * @tc.name: GetKVDBBackupPath
177 * @tc.desc: test get kv db backup dir
178 * @tc.type: FUNC
179 * @tc.require:
180 * @tc.author: baoyayong
181 */
HWTEST_F(DirectoryManagerTest, GetKVDBBackupPath, TestSize.Level0)182 HWTEST_F(DirectoryManagerTest, GetKVDBBackupPath, TestSize.Level0)
183 {
184 StoreMetaData metaData;
185 metaData.user = "10";
186 metaData.bundleName = "ohos.test.demo";
187 metaData.dataDir = "/data/app/el1/10/database/ohos.test.demo/kvdb";
188 metaData.securityLevel = SecurityLevel::S2;
189 metaData.area = 1;
190 metaData.storeType = 0;
191 metaData.tokenId = AccessTokenKit::GetHapTokenID(10, "ohos.test.demo", 0);
192 HapTokenInfo tokenInfo;
193 AccessTokenKit::GetHapTokenInfo(metaData.tokenId, tokenInfo);
194 metaData.appId = tokenInfo.appID;
195 metaData.storeId = "testStpre";
196 auto path = DirectoryManager::GetInstance().GetStoreBackupPath(metaData);
197 EXPECT_EQ(path, metaData.dataDir + "/backup/testStpre");
198 }
199
200 /**
201 * @tc.name: GetStorageMetaPath
202 * @tc.desc: test get meta store dir
203 * @tc.type: FUNC
204 * @tc.require:
205 * @tc.author: Sven Wang
206 */
HWTEST_F(DirectoryManagerTest, GetStorageMetaPath, TestSize.Level0)207 HWTEST_F(DirectoryManagerTest, GetStorageMetaPath, TestSize.Level0)
208 {
209 auto path = DirectoryManager::GetInstance().GetMetaStorePath();
210 EXPECT_EQ(path, "/data/service/el1/public/database/distributeddata/meta");
211 }
212
213 /**
214 * @tc.name: GetSecretKeyPath
215 * @tc.desc: test get secret key path
216 * @tc.type: FUNC
217 * @tc.require:
218 * @tc.author:
219 */
HWTEST_F(DirectoryManagerTest, GetSecretKeyPath, TestSize.Level0)220 HWTEST_F(DirectoryManagerTest, GetSecretKeyPath, TestSize.Level0)
221 {
222 StoreMetaData metaData;
223 metaData.user = "0";
224 metaData.bundleName = "bundle_manager_service";
225 metaData.appId = "bundle_manager_service";
226 metaData.dataDir = "/data/service/el1/public/database/bundle_manager_service/kvdb";
227 metaData.securityLevel = SecurityLevel::S2;
228 metaData.area = 1;
229 metaData.tokenId = GetAccessTokenId(&tokenParam_);
230 metaData.storeType = KvStoreType::SINGLE_VERSION;
231 auto version = DirectoryManager::GetInstance().GetVersions();
232 EXPECT_NE(sizeof(version), 0);
233 auto path = DirectoryManager::GetInstance().GetSecretKeyPath(metaData);
234 EXPECT_EQ(path, "/data/service/el1/public/database/bundle_manager_service/kvdb/secret");
235 }
236
237 /**
238 * @tc.name: DeleteDirectory
239 * @tc.desc: test delete dir
240 * @tc.type: FUNC
241 * @tc.require:
242 * @tc.author:
243 */
HWTEST_F(DirectoryManagerTest, DeleteDirectory, TestSize.Level0)244 HWTEST_F(DirectoryManagerTest, DeleteDirectory, TestSize.Level0)
245 {
246 std::string path = "/data/service/el1/public/database/bundle_manager_service/kvdb/100/data";
247 bool ret = DirectoryManager::GetInstance().CreateDirectory(path);
248 EXPECT_TRUE(ret);
249 std::ofstream file(
250 "/data/service/el1/public/database/bundle_manager_service/kvdb/100/data/test.txt", std::ios::out);
251 if (file.is_open()) {
252 file << "test content" << std::endl;
253 file.close();
254 }
255 std::ofstream file1("/data/service/el1/public/database/bundle_manager_service/kvdb/100/test.txt", std::ios::out);
256 if (file1.is_open()) {
257 file1 << "test content" << std::endl;
258 file1.close();
259 }
260 std::string deleteDir = "/data/service/el1/public/database/bundle_manager_service/kvdb/100";
261 bool ret1 = DirectoryManager::GetInstance().DeleteDirectory(deleteDir.c_str());
262 EXPECT_TRUE(ret1);
263 EXPECT_EQ(access(deleteDir.c_str(), F_OK), -1);
264 }