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: GetStorageMetaPath 196 * @tc.desc: test get meta store dir 197 * @tc.type: FUNC 198 * @tc.require: 199 * @tc.author: Sven Wang 200 */ 201 HWTEST_F(DirectoryManagerTest, GetStorageMetaPath, TestSize.Level0) 202 { 203 auto path = DirectoryManager::GetInstance().GetMetaStorePath(); 204 EXPECT_EQ(path, "/data/service/el1/public/database/distributeddata/meta"); 205 } 206 207 /** 208 * @tc.name: GetSecretKeyPath 209 * @tc.desc: test get secret key path 210 * @tc.type: FUNC 211 * @tc.require: 212 * @tc.author: 213 */ 214 HWTEST_F(DirectoryManagerTest, GetSecretKeyPath, TestSize.Level0) 215 { 216 StoreMetaData metaData; 217 metaData.user = "0"; 218 metaData.bundleName = "bundle_manager_service"; 219 metaData.appId = "bundle_manager_service"; 220 metaData.dataDir = "/data/service/el1/public/database/bundle_manager_service/kvdb"; 221 metaData.securityLevel = SecurityLevel::S2; 222 metaData.area = 1; 223 metaData.tokenId = GetAccessTokenId(&tokenParam_); 224 metaData.storeType = KvStoreType::SINGLE_VERSION; 225 auto version = DirectoryManager::GetInstance().GetVersions(); 226 EXPECT_NE(sizeof(version), 0); 227 auto path = DirectoryManager::GetInstance().GetSecretKeyPath(metaData); 228 EXPECT_EQ(path, "/data/service/el1/public/database/bundle_manager_service/kvdb/secret"); 229 } 230 231 /** 232 * @tc.name: DeleteDirectory 233 * @tc.desc: test delete dir 234 * @tc.type: FUNC 235 * @tc.require: 236 * @tc.author: 237 */ 238 HWTEST_F(DirectoryManagerTest, DeleteDirectory, TestSize.Level0) 239 { 240 std::string path = "/data/service/el1/public/database/bundle_manager_service/kvdb/100/data"; 241 bool ret = DirectoryManager::GetInstance().CreateDirectory(path); 242 EXPECT_TRUE(ret); 243 std::ofstream file( 244 "/data/service/el1/public/database/bundle_manager_service/kvdb/100/data/test.txt", std::ios::out); 245 if (file.is_open()) { 246 file << "test content" << std::endl; 247 file.close(); 248 } 249 std::ofstream file1("/data/service/el1/public/database/bundle_manager_service/kvdb/100/test.txt", std::ios::out); 250 if (file1.is_open()) { 251 file1 << "test content" << std::endl; 252 file1.close(); 253 } 254 std::string deleteDir = "/data/service/el1/public/database/bundle_manager_service/kvdb/100"; 255 bool ret1 = DirectoryManager::GetInstance().DeleteDirectory(deleteDir.c_str()); 256 EXPECT_TRUE(ret1); 257 EXPECT_EQ(access(deleteDir.c_str(), F_OK), -1); 258 }