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 }