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 }