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