• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
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     metaData.appId = "ohos.test.demo_09AEF01D";
102     auto path = DirectoryManager::GetInstance().GetStorePath(metaData);
103     EXPECT_EQ(path, metaData.dataDir);
104 }
105 
106 /**
107 * @tc.name: GetHapStorePath
108 * @tc.desc: test get kv db dir
109 * @tc.type: FUNC
110 * @tc.require:
111 * @tc.author: Sven Wang
112 */
113 HWTEST_F(DirectoryManagerTest, GetHapStorePath, TestSize.Level0)
114 {
115     StoreMetaData metaData;
116     metaData.user = "100";
117     metaData.bundleName = "com.sample.helloworld";
118     metaData.hapName = "example.hap";
119     metaData.dataDir = "/data/app/el2/100/database/com.sample.helloworld/example.hap/kvdb";
120     metaData.securityLevel = SecurityLevel::S2;
121     metaData.area = 2;
122     metaData.storeType = KvStoreType::SINGLE_VERSION;
123     auto path = DirectoryManager::GetInstance().GetStorePath(metaData);
124     EXPECT_EQ(path, metaData.dataDir);
125 }
126 
127 /**
128 * @tc.name: GetSaStorePath
129 * @tc.desc: test get kv db dir
130 * @tc.type: FUNC
131 * @tc.require:
132 * @tc.author: Sven Wang
133 */
134 HWTEST_F(DirectoryManagerTest, GetSaStorePath, TestSize.Level0)
135 {
136     StoreMetaData metaData;
137     metaData.user = "0";
138     metaData.bundleName = "bundle_manager_service";
139     metaData.appId = "bundle_manager_service";
140     metaData.dataDir = "/data/service/el1/public/database/bundle_manager_service/kvdb";
141     metaData.securityLevel = SecurityLevel::S2;
142     metaData.area = 1;
143     metaData.tokenId = GetAccessTokenId(&tokenParam_);
144     metaData.storeType = KvStoreType::SINGLE_VERSION;
145     auto path = DirectoryManager::GetInstance().GetStorePath(metaData);
146     EXPECT_EQ(path, metaData.dataDir);
147 }
148 
149 /**
150 * @tc.name: GetRdbBackupPath
151 * @tc.desc: test get rdb backup dir
152 * @tc.type: FUNC
153 * @tc.require:
154 * @tc.author: Sven Wang
155 */
156 HWTEST_F(DirectoryManagerTest, GetRDBBackupPath, TestSize.Level0)
157 {
158     StoreMetaData metaData;
159     metaData.user = "10";
160     metaData.bundleName = "ohos.test.demo";
161     metaData.dataDir = "/data/app/el1/10/database/ohos.test.demo";
162     metaData.securityLevel = SecurityLevel::S2;
163     metaData.area = 1;
164     metaData.storeType = 10;
165     metaData.tokenId = AccessTokenKit::GetHapTokenID(10, "ohos.test.demo", 0);
166     metaData.appId = "ohos.test.demo_09AEF01D";
167     metaData.storeId = "testStpre";
168     auto path = DirectoryManager::GetInstance().GetStoreBackupPath(metaData);
169     EXPECT_EQ(path, metaData.dataDir + "/rdb/backup/testStpre");
170 }
171 /**
172 * @tc.name: GetKVDBBackupPath
173 * @tc.desc: test get kv db backup dir
174 * @tc.type: FUNC
175 * @tc.require:
176 * @tc.author: baoyayong
177 */
178 HWTEST_F(DirectoryManagerTest, GetKVDBBackupPath, TestSize.Level0)
179 {
180     StoreMetaData metaData;
181     metaData.user = "10";
182     metaData.bundleName = "ohos.test.demo";
183     metaData.dataDir = "/data/app/el1/10/database/ohos.test.demo/kvdb";
184     metaData.securityLevel = SecurityLevel::S2;
185     metaData.area = 1;
186     metaData.storeType = 0;
187     metaData.tokenId = AccessTokenKit::GetHapTokenID(10, "ohos.test.demo", 0);
188     metaData.appId = "ohos.test.demo_09AEF01D";
189     metaData.storeId = "testStpre";
190     auto path = DirectoryManager::GetInstance().GetStoreBackupPath(metaData);
191     EXPECT_EQ(path, metaData.dataDir + "/backup/testStpre");
192 }
193 
194 /**
195 * @tc.name: GetUdmfPath
196 * @tc.desc: test get udmf store path
197 * @tc.type: FUNC
198 * @tc.require:
199 */
200 HWTEST_F(DirectoryManagerTest, GetUdmfStorePath, TestSize.Level0)
201 {
202     StoreMetaData metaData;
203     metaData.user = "100";
204     metaData.bundleName = DistributedData::Bootstrap::GetInstance().GetProcessLabel();
205     metaData.appId = DistributedData::Bootstrap::GetInstance().GetProcessLabel();
206     metaData.storeId = "drag";
207     metaData.securityLevel = SecurityLevel::S2;
208     metaData.tokenId = GetAccessTokenId(&tokenParam_);
209     metaData.area = DistributedKv::Area::EL2;
210     metaData.uid = static_cast<int32_t>(getuid());
211     metaData.storeType = DistributedKv::KvStoreType::SINGLE_VERSION;
212     metaData.dataType = DistributedKv::DataType::TYPE_DYNAMICAL;
213     metaData.authType = DistributedKv::AuthType::IDENTICAL_ACCOUNT;
214     metaData.dataDir = "/data/service/el2/100/database/distributeddata/kvdb";
215     auto path = DirectoryManager::GetInstance().GetStorePath(metaData);
216     EXPECT_EQ(path, metaData.dataDir);
217     auto res = DistributedData::DirectoryManager::GetInstance().CreateDirectory(path);
218     EXPECT_EQ(res, true);
219 }
220 
221 /**
222 * @tc.name: GetStorageMetaPath
223 * @tc.desc: test get meta store dir
224 * @tc.type: FUNC
225 * @tc.require:
226 * @tc.author: Sven Wang
227 */
228 HWTEST_F(DirectoryManagerTest, GetStorageMetaPath, TestSize.Level0)
229 {
230     auto path = DirectoryManager::GetInstance().GetMetaStorePath();
231     EXPECT_EQ(path, "/data/service/el1/public/database/distributeddata/meta");
232 }
233 
234 /**
235 * @tc.name: GetSecretKeyPath
236 * @tc.desc: test get secret key path
237 * @tc.type: FUNC
238 * @tc.require:
239 * @tc.author:
240 */
241 HWTEST_F(DirectoryManagerTest, GetSecretKeyPath, TestSize.Level0)
242 {
243     StoreMetaData metaData;
244     metaData.user = "0";
245     metaData.bundleName = "bundle_manager_service";
246     metaData.appId = "bundle_manager_service";
247     metaData.dataDir = "/data/service/el1/public/database/bundle_manager_service/kvdb";
248     metaData.securityLevel = SecurityLevel::S2;
249     metaData.area = 1;
250     metaData.tokenId = GetAccessTokenId(&tokenParam_);
251     metaData.storeType = KvStoreType::SINGLE_VERSION;
252     auto version = DirectoryManager::GetInstance().GetVersions();
253     EXPECT_NE(sizeof(version), 0);
254     auto path = DirectoryManager::GetInstance().GetSecretKeyPath(metaData);
255     EXPECT_EQ(path, "/data/service/el1/public/database/bundle_manager_service/kvdb/secret");
256 }
257 
258 /**
259 * @tc.name: GetStoreTypePath
260 * @tc.desc: test get db dir
261 * @tc.type: FUNC
262 */
263 HWTEST_F(DirectoryManagerTest, GetStoreTypePath, TestSize.Level0)
264 {
265     StoreMetaData metaData;
266     metaData.user = "100";
267     metaData.bundleName = "ohos.test.demo";
268     metaData.securityLevel = SecurityLevel::S2;
269     metaData.area = 1;
270     metaData.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo", 0);
271     metaData.appId = "ohos.test.demo_09AEF01D";
272 
273     metaData.storeType = StoreMetaData::StoreType::STORE_KV_BEGIN;
274     metaData.dataDir = "/data/app/el1/100/database/ohos.test.demo/kvdb";
275     auto path = DirectoryManager::GetInstance().GetStorePath(metaData);
276     EXPECT_EQ(path, metaData.dataDir);
277 
278     metaData.storeType = StoreMetaData::StoreType::STORE_RELATIONAL_BEGIN;
279     metaData.dataDir = "/data/app/el1/100/database/ohos.test.demo/rdb";
280     path = DirectoryManager::GetInstance().GetStorePath(metaData);
281     EXPECT_EQ(path, metaData.dataDir);
282 
283     metaData.storeType = StoreMetaData::StoreType::STORE_BUTT;
284     metaData.dataDir = "/data/app/el1/100/database/ohos.test.demo/other";
285     path = DirectoryManager::GetInstance().GetStorePath(metaData);
286     EXPECT_EQ(path, metaData.dataDir);
287 }