1 /*
2 * Copyright (c) 2023 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 <memory>
17 #include <vector>
18
19 #include "gtest/gtest.h"
20 #include "bootstrap.h"
21 #include "accesstoken_kit.h"
22 #include "nativetoken_kit.h"
23 #include "token_setproc.h"
24 #include "types.h"
25 #include "device_manager_adapter.h"
26 #include "kvstore_data_service.h"
27 #include "kvstore_client_death_observer.h"
28 #include "metadata/meta_data_manager.h"
29 #include "metadata/store_meta_data.h"
30 #include "metadata/store_meta_data_local.h"
31 #include "metadata/appid_meta_data.h"
32 #include "metadata/secret_key_meta_data.h"
33 #include "feature/feature_system.h"
34 #include "hap_token_info.h"
35
36 using namespace testing::ext;
37 using namespace OHOS;
38 using namespace OHOS::DistributedKv;
39 using namespace OHOS::Security::AccessToken;
40 using DmAdapter = OHOS::DistributedData::DeviceManagerAdapter;
41 using MetaDataManager = OHOS::DistributedData::MetaDataManager;
42 using KvStoreDataService = OHOS::DistributedKv::KvStoreDataService;
43 namespace OHOS::Test {
44 class KvStoreDataServiceClearTest : public testing::Test {
45 public:
46 static void SetUpTestCase(void);
47 static void TearDownTestCase(void);
48 void SetUp();
49 void TearDown();
50 protected:
51 static constexpr const char *TEST_USER = "100";
52 static constexpr const char *TEST_BUNDLE = "ohos.test.demo";
53 static constexpr const char *TEST_STORE = "test_store";
54 static constexpr int32_t TEST_UID = 2000000;
55 static constexpr int32_t TEST_USERID = 100;
56 static constexpr const char *BUNDLE_NAME = "ohos.test.demo";
57 static constexpr int32_t USER_ID = 100;
58 static constexpr int32_t APP_INDEX = 0;
59 DistributedData::StoreMetaData metaData_;
60 DistributedData::StoreMetaDataLocal localMeta_;
61 void InitMetaData();
62 };
63
SetUpTestCase(void)64 void KvStoreDataServiceClearTest::SetUpTestCase(void)
65 {
66 }
67
TearDownTestCase(void)68 void KvStoreDataServiceClearTest::TearDownTestCase(void)
69 {
70 }
71
SetUp(void)72 void KvStoreDataServiceClearTest::SetUp(void)
73 {
74 DistributedData::Bootstrap::GetInstance().LoadDirectory();
75 DistributedData::Bootstrap::GetInstance().LoadCheckers();
76 }
77
TearDown(void)78 void KvStoreDataServiceClearTest::TearDown(void)
79 {
80 }
81
InitMetaData()82 void KvStoreDataServiceClearTest::InitMetaData()
83 {
84 metaData_.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid;
85 metaData_.user = TEST_USER;
86 metaData_.bundleName = TEST_BUNDLE;
87 metaData_.storeId = TEST_STORE;
88 metaData_.appId = TEST_BUNDLE;
89 metaData_.tokenId = AccessTokenKit::GetHapTokenID(TEST_USERID, TEST_BUNDLE, 0);
90 metaData_.uid = TEST_UID;
91 metaData_.storeType = 1;
92 metaData_.area = EL1;
93 metaData_.instanceId = 0;
94 metaData_.isAutoSync = true;
95 metaData_.version = 1;
96 metaData_.appType = "default";
97 metaData_.dataDir = "/data/service/el1/public/database/kvstore_data_service_clear_test";
98
99 DistributedData::PolicyValue value;
100 value.type = OHOS::DistributedKv::PolicyType::IMMEDIATE_SYNC_ON_ONLINE;
101 localMeta_.policies = { std::move(value) };
102 }
103
104 /**
105 * @tc.name: ClearAppStorage001
106 * @tc.desc: The parameters are valid but have no metaData
107 * @tc.type: FUNC
108 * @tc.require:
109 * @tc.author: suoqilong
110 */
111 HWTEST_F(KvStoreDataServiceClearTest, ClearAppStorage001, TestSize.Level1)
112 {
113 auto kvDataService = OHOS::DistributedKv::KvStoreDataService();
114 auto tokenIdOk = AccessTokenKit::GetNativeTokenId("foundation");
115 SetSelfTokenID(tokenIdOk);
116 auto ret = kvDataService.ClearAppStorage(BUNDLE_NAME, USER_ID, APP_INDEX, tokenIdOk);
117 EXPECT_EQ(ret, Status::ERROR);
118 }
119
120 /**
121 * @tc.name: ClearAppStorage002
122 * @tc.desc: Test that the cleanup is implemented
123 * @tc.type: FUNC
124 * @tc.require:
125 * @tc.author: suoqilong
126 */
127 HWTEST_F(KvStoreDataServiceClearTest, ClearAppStorage002, TestSize.Level1)
128 {
129 auto executors = std::make_shared<ExecutorPool>(2, 1);
130 // Create an object of the ExecutorPool class and pass 2 and 1 as arguments to the constructor of the class
131 KvStoreMetaManager::GetInstance().BindExecutor(executors);
132 KvStoreMetaManager::GetInstance().InitMetaParameter();
133 DmAdapter::GetInstance().Init(executors);
134 KvStoreMetaManager::GetInstance().InitMetaListener();
135
136 InitMetaData();
137
138 EXPECT_TRUE(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKey(), metaData_));
139 EXPECT_TRUE(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKey(), metaData_, true));
140 EXPECT_TRUE(MetaDataManager::GetInstance().SaveMeta(metaData_.GetSecretKey(), metaData_, true));
141 EXPECT_TRUE(MetaDataManager::GetInstance().SaveMeta(metaData_.GetStrategyKey(), metaData_));
142 EXPECT_TRUE(MetaDataManager::GetInstance().SaveMeta(metaData_.appId, metaData_, true));
143 EXPECT_TRUE(MetaDataManager::GetInstance().SaveMeta(metaData_.GetKeyLocal(), localMeta_, true));
144
145 EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData_.GetKey(), metaData_));
146 EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData_.GetSecretKey(), metaData_, true));
147 EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData_.GetStrategyKey(), metaData_));
148 EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData_.appId, metaData_, true));
149 EXPECT_TRUE(MetaDataManager::GetInstance().LoadMeta(metaData_.GetKeyLocal(), localMeta_, true));
150
151 auto tokenIdOk = AccessTokenKit::GetNativeTokenId("foundation");
152 SetSelfTokenID(tokenIdOk);
153 auto kvDataService = OHOS::DistributedKv::KvStoreDataService();
154 auto ret = kvDataService.ClearAppStorage(BUNDLE_NAME, USER_ID, APP_INDEX, tokenIdOk);
155 EXPECT_EQ(ret, Status::SUCCESS);
156
157 EXPECT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData_.GetKey(), metaData_));
158 EXPECT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData_.GetSecretKey(), metaData_, true));
159 EXPECT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData_.GetStrategyKey(), metaData_));
160 EXPECT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData_.appId, metaData_, true));
161 EXPECT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData_.GetKeyLocal(), localMeta_, true));
162
163 MetaDataManager::GetInstance().DelMeta(metaData_.GetKey());
164 EXPECT_FALSE(MetaDataManager::GetInstance().LoadMeta(metaData_.GetKey(), metaData_));
165 }
166 } // namespace OHOS::Test