1 /*
2  * Copyright (c) 2024 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 "utils/constant.h"
18 #include <nlohmann/json.hpp>
19 #include "bootstrap.h"
20 #include "kvstore_meta_manager.h"
21 #include "metadata/appid_meta_data.h"
22 #include "metadata/corrupted_meta_data.h"
23 #include "metadata/capability_range.h"
24 #include "metadata/meta_data.h"
25 #include "metadata/meta_data_manager.h"
26 #include "metadata/secret_key_meta_data.h"
27 #include "metadata/store_meta_data.h"
28 #include "metadata/store_meta_data_local.h"
29 #include "metadata/strategy_meta_data.h"
30 #include "metadata/capability_meta_data.h"
31 #include "metadata/user_meta_data.h"
32 #include "metadata/matrix_meta_data.h"
33 using namespace testing::ext;
34 using namespace OHOS;
35 using namespace OHOS::DistributedKv;
36 using namespace OHOS::DistributedData;
37 namespace OHOS::Test {
38 class ServiceMetaDataTest : public testing::Test {
39 public:
40     static constexpr size_t NUM_MIN = 1;
41     static constexpr size_t NUM_MAX = 2;
42     static constexpr uint32_t USER_ID1 = 101;
43     static constexpr uint32_t USER_ID2 = 100;
44     static constexpr uint32_t TEST_CURRENT_VERSION = 0x03000002;
SetUpTestCase()45     static void SetUpTestCase()
46     {
47         std::shared_ptr<ExecutorPool> executors = std::make_shared<ExecutorPool>(NUM_MAX, NUM_MIN);
48         Bootstrap::GetInstance().LoadDirectory();
49         Bootstrap::GetInstance().LoadCheckers();
50         KvStoreMetaManager::GetInstance().BindExecutor(executors);
51         KvStoreMetaManager::GetInstance().InitMetaParameter();
52         KvStoreMetaManager::GetInstance().InitMetaListener();
53     }
TearDownTestCase(void)54     static void TearDownTestCase(void) {};
SetUp()55     void SetUp() {};
TearDown()56     void TearDown() {};
57 };
58 
59 /**
60 * @tc.name: AppIDMetaData
61 * @tc.desc:
62 * @tc.type: FUNC
63 * @tc.require:
64 * @tc.author: SQL
65 */
66 HWTEST_F(ServiceMetaDataTest, AppIDMetaData, TestSize.Level1)
67 {
68     AppIDMetaData appIdMetaData("appid", "ohos.test.demo");
69     AppIDMetaData appIdMeta;
70 
71     std::string key = appIdMetaData.GetKey();
72     EXPECT_EQ(key, "appid");
73     auto result = MetaDataManager::GetInstance().SaveMeta(key, appIdMetaData, true);
74     EXPECT_TRUE(result);
75     result = MetaDataManager::GetInstance().LoadMeta(key, appIdMeta, true);
76     EXPECT_TRUE(result);
77     EXPECT_EQ(appIdMetaData.appId, appIdMeta.appId);
78     EXPECT_EQ(appIdMetaData.bundleName, appIdMeta.bundleName);
79     EXPECT_EQ(appIdMetaData.GetKey(), appIdMeta.GetKey());
80     result = MetaDataManager::GetInstance().DelMeta(key, true);
81     EXPECT_TRUE(result);
82 
83     result = MetaDataManager::GetInstance().SaveMeta(key, appIdMetaData);
84     EXPECT_TRUE(result);
85     result = MetaDataManager::GetInstance().LoadMeta(key, appIdMeta);
86     EXPECT_TRUE(result);
87     EXPECT_EQ(appIdMetaData.appId, appIdMeta.appId);
88     EXPECT_EQ(appIdMetaData.bundleName, appIdMeta.bundleName);
89     EXPECT_EQ(appIdMetaData.GetKey(), appIdMeta.GetKey());
90     result = MetaDataManager::GetInstance().DelMeta(key);
91     EXPECT_TRUE(result);
92 }
93 
94 /**
95 * @tc.name: corruptedMeta
96 * @tc.desc:
97 * @tc.type: FUNC
98 * @tc.require:
99 * @tc.author: SQL
100 */
101 HWTEST_F(ServiceMetaDataTest, corruptedMeta, TestSize.Level1)
102 {
103     CorruptedMetaData corruptedMeta("appid", "ohos.test.demo", "test_store");
104     CorruptedMetaData corruptedMetaData;
105     corruptedMeta.isCorrupted = true;
106     std::string key = corruptedMeta.GetKey();
107     EXPECT_EQ(key, "CorruptedMetaData###appid###ohos.test.demo###test_store");
108 
109     auto result = MetaDataManager::GetInstance().SaveMeta(key, corruptedMeta, true);
110     EXPECT_TRUE(result);
111     result = MetaDataManager::GetInstance().LoadMeta(key, corruptedMetaData, true);
112     EXPECT_TRUE(result);
113     EXPECT_EQ(corruptedMeta.appId, corruptedMetaData.appId);
114     EXPECT_EQ(corruptedMeta.bundleName, corruptedMetaData.bundleName);
115     EXPECT_EQ(corruptedMeta.storeId, corruptedMetaData.storeId);
116     EXPECT_EQ(corruptedMeta.GetKey(), corruptedMetaData.GetKey());
117     result = MetaDataManager::GetInstance().DelMeta(key, true);
118     EXPECT_TRUE(result);
119 
120     result = MetaDataManager::GetInstance().SaveMeta(key, corruptedMeta);
121     EXPECT_TRUE(result);
122     result = MetaDataManager::GetInstance().LoadMeta(key, corruptedMetaData);
123     EXPECT_TRUE(result);
124     EXPECT_EQ(corruptedMeta.appId, corruptedMetaData.appId);
125     EXPECT_EQ(corruptedMeta.bundleName, corruptedMetaData.bundleName);
126     EXPECT_EQ(corruptedMeta.storeId, corruptedMetaData.storeId);
127     EXPECT_EQ(corruptedMeta.GetKey(), corruptedMetaData.GetKey());
128     result = MetaDataManager::GetInstance().DelMeta(key);
129     EXPECT_TRUE(result);
130 }
131 
132 /**
133 * @tc.name: SecretKeyMetaData
134 * @tc.desc:
135 * @tc.type: FUNC
136 * @tc.require:
137 * @tc.author: SQL
138 */
139 HWTEST_F(ServiceMetaDataTest, SecretKeyMetaData001, TestSize.Level1)
140 {
141     SecretKeyMetaData secretKeyMeta;
142     SecretKeyMetaData secretKeyMetaData;
143     secretKeyMeta.storeType = 1;
144     std::initializer_list<std::string> fields = {"time", "skey"};
145 
146     std::string key = secretKeyMeta.GetKey(fields);
147     EXPECT_EQ(key, "SecretKey###time###skey###SINGLE_KEY");
148     std::string backupkey = secretKeyMeta.GetBackupKey(fields);
149     EXPECT_EQ(backupkey, "BackupSecretKey###time###skey###");
150 
151     auto result = MetaDataManager::GetInstance().SaveMeta(key, secretKeyMeta, true);
152     EXPECT_TRUE(result);
153     result = MetaDataManager::GetInstance().LoadMeta(key, secretKeyMetaData, true);
154     EXPECT_TRUE(result);
155     EXPECT_EQ(secretKeyMeta.GetKey(fields), secretKeyMetaData.GetKey(fields));
156     EXPECT_EQ(secretKeyMeta.GetBackupKey(fields), secretKeyMetaData.GetBackupKey(fields));
157 
158     result = MetaDataManager::GetInstance().DelMeta(key, true);
159     EXPECT_TRUE(result);
160 
161     result = MetaDataManager::GetInstance().SaveMeta(key, secretKeyMeta);
162     EXPECT_TRUE(result);
163     result = MetaDataManager::GetInstance().LoadMeta(key, secretKeyMetaData);
164     EXPECT_TRUE(result);
165     EXPECT_EQ(secretKeyMeta.GetKey(fields), secretKeyMetaData.GetKey(fields));
166     EXPECT_EQ(secretKeyMeta.GetBackupKey(fields), secretKeyMetaData.GetBackupKey(fields));
167 
168     result = MetaDataManager::GetInstance().DelMeta(key);
169     EXPECT_TRUE(result);
170 }
171 
172 /**
173 * @tc.name: SecretKeyMetaData
174 * @tc.desc:
175 * @tc.type: FUNC
176 * @tc.require:
177 * @tc.author: SQL
178 */
179 HWTEST_F(ServiceMetaDataTest, SecretKeyMetaData002, TestSize.Level1)
180 {
181     SecretKeyMetaData secretKeyMeta;
182     SecretKeyMetaData secretKeyMetaData;
183     secretKeyMeta.storeType = 1;
184     std::initializer_list<std::string> fields = {"time", "skey"};
185 
186     std::string prefix = secretKeyMeta.GetPrefix(fields);
187     EXPECT_EQ(prefix, "SecretKey###time###skey###");
188     std::string backupprefix = secretKeyMeta.GetBackupPrefix(fields);
189     EXPECT_EQ(backupprefix, "BackupSecretKey###time###skey###");
190 
191     auto result = MetaDataManager::GetInstance().SaveMeta(prefix, secretKeyMeta, true);
192     EXPECT_TRUE(result);
193     result = MetaDataManager::GetInstance().LoadMeta(prefix, secretKeyMetaData, true);
194     EXPECT_TRUE(result);
195     EXPECT_EQ(secretKeyMeta.GetPrefix(fields), secretKeyMetaData.GetPrefix(fields));
196     EXPECT_EQ(secretKeyMeta.GetBackupPrefix(fields), secretKeyMetaData.GetBackupPrefix(fields));
197 
198     result = MetaDataManager::GetInstance().DelMeta(prefix, true);
199     EXPECT_TRUE(result);
200 
201     result = MetaDataManager::GetInstance().SaveMeta(prefix, secretKeyMeta);
202     EXPECT_TRUE(result);
203     result = MetaDataManager::GetInstance().LoadMeta(prefix, secretKeyMetaData);
204     EXPECT_TRUE(result);
205     EXPECT_EQ(secretKeyMeta.GetPrefix(fields), secretKeyMetaData.GetPrefix(fields));
206     EXPECT_EQ(secretKeyMeta.GetBackupPrefix(fields), secretKeyMetaData.GetBackupPrefix(fields));
207 
208     result = MetaDataManager::GetInstance().DelMeta(prefix);
209     EXPECT_TRUE(result);
210 }
211 
212 /**
213 * @tc.name: StoreMetaData
214 * @tc.desc:
215 * @tc.type: FUNC
216 * @tc.require:
217 * @tc.author: SQL
218 */
219 HWTEST_F(ServiceMetaDataTest, StoreMetaData001, TestSize.Level1)
220 {
221     StoreMetaData storeMetaData("100", "appid", "test_store");
222     StoreMetaData storeMeta;
223 
224     std::string key = storeMetaData.GetKey();
225     EXPECT_EQ(key, "KvStoreMetaData######100###default######test_store");
226     std::string keylocal = storeMetaData.GetKeyLocal();
227     EXPECT_EQ(keylocal, "KvStoreMetaDataLocal######100###default######test_store");
228     std::initializer_list<std::string> fields = {"100", "appid", "test_store"};
229     std::string keyfields = storeMetaData.GetKey(fields);
230     EXPECT_EQ(keyfields, "KvStoreMetaData###100###appid###test_store");
231 
232     auto result = MetaDataManager::GetInstance().SaveMeta(key, storeMetaData, true);
233     EXPECT_TRUE(result);
234     result = MetaDataManager::GetInstance().LoadMeta(key, storeMeta, true);
235     EXPECT_TRUE(result);
236     EXPECT_EQ(storeMetaData.GetKey(), storeMeta.GetKey());
237     EXPECT_EQ(storeMetaData.GetKeyLocal(), storeMeta.GetKeyLocal());
238     EXPECT_EQ(storeMetaData.GetKey(fields), storeMeta.GetKey(fields));
239 
240     result = MetaDataManager::GetInstance().DelMeta(key, true);
241     EXPECT_TRUE(result);
242 
243     result = MetaDataManager::GetInstance().SaveMeta(key, storeMetaData);
244     EXPECT_TRUE(result);
245     result = MetaDataManager::GetInstance().LoadMeta(key, storeMeta);
246     EXPECT_TRUE(result);
247     EXPECT_EQ(storeMetaData.GetKey(), storeMeta.GetKey());
248     EXPECT_EQ(storeMetaData.GetKeyLocal(), storeMeta.GetKeyLocal());
249     EXPECT_EQ(storeMetaData.GetKey(fields), storeMeta.GetKey(fields));
250 
251     result = MetaDataManager::GetInstance().DelMeta(key);
252     EXPECT_TRUE(result);
253 }
254 
255 /**
256 * @tc.name: StoreMetaData
257 * @tc.desc:
258 * @tc.type: FUNC
259 * @tc.require:
260 * @tc.author: SQL
261 */
262 HWTEST_F(ServiceMetaDataTest, StoreMetaData002, TestSize.Level1)
263 {
264     StoreMetaData storeMetaData("100", "appid", "test_store");
265     StoreMetaData storeMeta;
266 
267     std::string secretkey = storeMetaData.GetSecretKey();
268     EXPECT_EQ(secretkey, "SecretKey###100###default######test_store###0###SINGLE_KEY");
269     std::string backupsecretkey = storeMetaData.GetBackupSecretKey();
270     EXPECT_EQ(backupsecretkey, "BackupSecretKey###100###default######test_store###0###");
271 
272     auto result = MetaDataManager::GetInstance().SaveMeta(secretkey, storeMetaData, true);
273     EXPECT_TRUE(result);
274     result = MetaDataManager::GetInstance().LoadMeta(secretkey, storeMeta, true);
275     EXPECT_TRUE(result);
276     EXPECT_EQ(storeMetaData.GetSecretKey(), storeMeta.GetSecretKey());
277     EXPECT_EQ(storeMetaData.GetBackupSecretKey(), storeMeta.GetBackupSecretKey());
278 
279     result = MetaDataManager::GetInstance().DelMeta(secretkey, true);
280     EXPECT_TRUE(result);
281 
282     result = MetaDataManager::GetInstance().SaveMeta(secretkey, storeMetaData);
283     EXPECT_TRUE(result);
284     result = MetaDataManager::GetInstance().LoadMeta(secretkey, storeMeta);
285     EXPECT_TRUE(result);
286     EXPECT_EQ(storeMetaData.GetSecretKey(), storeMeta.GetSecretKey());
287     EXPECT_EQ(storeMetaData.GetBackupSecretKey(), storeMeta.GetBackupSecretKey());
288 
289     result = MetaDataManager::GetInstance().DelMeta(secretkey);
290     EXPECT_TRUE(result);
291 }
292 
293 /**
294 * @tc.name: StoreMetaData
295 * @tc.desc:
296 * @tc.type: FUNC
297 * @tc.require:
298 * @tc.author: SQL
299 */
300 HWTEST_F(ServiceMetaDataTest, StoreMetaData003, TestSize.Level1)
301 {
302     StoreMetaData storeMetaData("100", "appid", "test_store");
303     StoreMetaData storeMeta;
304 
305     auto storealias = storeMetaData.GetStoreAlias();
306     EXPECT_EQ(storealias, "tes***ore");
307     std::string strategykey = storeMetaData.GetStrategyKey();
308     EXPECT_EQ(strategykey, "StrategyMetaData######100###default######test_store");
309     std::initializer_list<std::string> fields = {"100", "appid", "test_store"};
310     std::string prefix = storeMetaData.GetPrefix(fields);
311     EXPECT_EQ(prefix, "KvStoreMetaData###100###appid###test_store###");
312 
313     auto result = MetaDataManager::GetInstance().SaveMeta(strategykey, storeMetaData, true);
314     EXPECT_TRUE(result);
315     result = MetaDataManager::GetInstance().LoadMeta(strategykey, storeMeta, true);
316     EXPECT_TRUE(result);
317     EXPECT_EQ(storeMetaData.GetStrategyKey(), storeMeta.GetStrategyKey());
318     EXPECT_EQ(storeMetaData.GetStoreAlias(), storeMeta.GetStoreAlias());
319     EXPECT_EQ(storeMetaData.GetPrefix(fields), storeMeta.GetPrefix(fields));
320 
321     result = MetaDataManager::GetInstance().DelMeta(strategykey, true);
322     EXPECT_TRUE(result);
323 
324     result = MetaDataManager::GetInstance().SaveMeta(strategykey, storeMetaData);
325     EXPECT_TRUE(result);
326     result = MetaDataManager::GetInstance().LoadMeta(strategykey, storeMeta);
327     EXPECT_TRUE(result);
328     EXPECT_EQ(storeMetaData.GetStrategyKey(), storeMeta.GetStrategyKey());
329     EXPECT_EQ(storeMetaData.GetStoreAlias(), storeMeta.GetStoreAlias());
330     EXPECT_EQ(storeMetaData.GetPrefix(fields), storeMeta.GetPrefix(fields));
331 
332     result = MetaDataManager::GetInstance().DelMeta(strategykey);
333     EXPECT_TRUE(result);
334 }
335 
336 /**
337 * @tc.name: StoreMetaData
338 * @tc.desc:
339 * @tc.type: FUNC
340 * @tc.require:
341 * @tc.author: SQL
342 */
343 HWTEST_F(ServiceMetaDataTest, StoreMetaData004, TestSize.Level1)
344 {
345     StoreMetaData storeMetaData("100", "appid", "test_store");
346     storeMetaData.version = TEST_CURRENT_VERSION;
347     storeMetaData.instanceId = 1;
348     StoreMetaData storeMeta;
349 
350     std::string key = storeMetaData.GetKey();
351     EXPECT_EQ(key, "KvStoreMetaData######100###default######test_store###1");
352     std::string keylocal = storeMetaData.GetKeyLocal();
353     EXPECT_EQ(keylocal, "KvStoreMetaDataLocal######100###default######test_store###1");
354 
355     auto result = MetaDataManager::GetInstance().SaveMeta(key, storeMetaData, true);
356     EXPECT_TRUE(result);
357     result = MetaDataManager::GetInstance().LoadMeta(key, storeMeta, true);
358     EXPECT_TRUE(result);
359     EXPECT_EQ(storeMetaData.GetKey(), storeMeta.GetKey());
360     EXPECT_EQ(storeMetaData.GetKeyLocal(), storeMeta.GetKeyLocal());
361 
362     result = MetaDataManager::GetInstance().DelMeta(key, true);
363     EXPECT_TRUE(result);
364 
365     result = MetaDataManager::GetInstance().SaveMeta(key, storeMetaData);
366     EXPECT_TRUE(result);
367     result = MetaDataManager::GetInstance().LoadMeta(key, storeMeta);
368     EXPECT_TRUE(result);
369     EXPECT_EQ(storeMetaData.GetKey(), storeMeta.GetKey());
370     EXPECT_EQ(storeMetaData.GetKeyLocal(), storeMeta.GetKeyLocal());
371 
372     result = MetaDataManager::GetInstance().DelMeta(key);
373     EXPECT_TRUE(result);
374 }
375 
376 /**
377 * @tc.name: StoreMetaData
378 * @tc.desc:
379 * @tc.type: FUNC
380 * @tc.require:
381 * @tc.author: SQL
382 */
383 HWTEST_F(ServiceMetaDataTest, StoreMetaData005, TestSize.Level1)
384 {
385     StoreMetaData storeMetaData("100", "appid", "test_store");
386     storeMetaData.version = TEST_CURRENT_VERSION;
387     storeMetaData.instanceId = 1;
388     StoreMetaData storeMeta;
389 
390     std::string secretkey = storeMetaData.GetSecretKey();
391     EXPECT_EQ(secretkey, "SecretKey###100###default######test_store###SINGLE_KEY");
392     std::string backupsecretkey = storeMetaData.GetBackupSecretKey();
393     EXPECT_EQ(backupsecretkey, "BackupSecretKey###100###default######test_store###");
394     std::string strategykey = storeMetaData.GetStrategyKey();
395     EXPECT_EQ(strategykey, "StrategyMetaData######100###default######test_store###1");
396 
397     auto result = MetaDataManager::GetInstance().SaveMeta(secretkey, storeMetaData, true);
398     EXPECT_TRUE(result);
399     result = MetaDataManager::GetInstance().LoadMeta(secretkey, storeMeta, true);
400     EXPECT_TRUE(result);
401     EXPECT_EQ(storeMetaData.GetSecretKey(), storeMeta.GetSecretKey());
402     EXPECT_EQ(storeMetaData.GetBackupSecretKey(), storeMeta.GetBackupSecretKey());
403     EXPECT_EQ(storeMetaData.GetStrategyKey(), storeMeta.GetStrategyKey());
404 
405     result = MetaDataManager::GetInstance().DelMeta(secretkey, true);
406     EXPECT_TRUE(result);
407 
408     result = MetaDataManager::GetInstance().SaveMeta(secretkey, storeMetaData);
409     EXPECT_TRUE(result);
410     result = MetaDataManager::GetInstance().LoadMeta(secretkey, storeMeta);
411     EXPECT_TRUE(result);
412     EXPECT_EQ(storeMetaData.GetSecretKey(), storeMeta.GetSecretKey());
413     EXPECT_EQ(storeMetaData.GetBackupSecretKey(), storeMeta.GetBackupSecretKey());
414     EXPECT_EQ(storeMetaData.GetStrategyKey(), storeMeta.GetStrategyKey());
415 
416     result = MetaDataManager::GetInstance().DelMeta(secretkey);
417     EXPECT_TRUE(result);
418 }
419 
420 /**
421 * @tc.name: StoreMetaData
422 * @tc.desc:
423 * @tc.type: FUNC
424 * @tc.require:
425 * @tc.author: SQL
426 */
427 HWTEST_F(ServiceMetaDataTest, StoreMetaData006, TestSize.Level1)
428 {
429     StoreMetaData storemetaData1("100", "appid", "test_store");
430     StoreMetaData storemetaData2("100", "appid", "test_store");
431     StoreMetaData storemetaData3("10", "appid1", "storeid");
432     EXPECT_TRUE(storemetaData1 == storemetaData2);
433     EXPECT_FALSE(storemetaData1 == storemetaData3);
434 
435     storemetaData1.isAutoSync = true;
436     EXPECT_FALSE(storemetaData1 == storemetaData2);
437     storemetaData2.isAutoSync = true;
438     EXPECT_TRUE(storemetaData1 == storemetaData2);
439 
440     storemetaData1.isBackup = true;
441     EXPECT_FALSE(storemetaData1 == storemetaData2);
442     storemetaData2.isBackup = true;
443     EXPECT_TRUE(storemetaData1 == storemetaData2);
444 
445     storemetaData1.isDirty = true;
446     EXPECT_FALSE(storemetaData1 == storemetaData2);
447     storemetaData2.isDirty = true;
448     EXPECT_TRUE(storemetaData1 == storemetaData2);
449 
450     storemetaData1.isEncrypt = true;
451     EXPECT_FALSE(storemetaData1 == storemetaData2);
452     storemetaData2.isEncrypt = true;
453     EXPECT_TRUE(storemetaData1 == storemetaData2);
454 
455     storemetaData1.isSearchable = true;
456     EXPECT_FALSE(storemetaData1 == storemetaData2);
457     storemetaData2.isSearchable = true;
458     EXPECT_TRUE(storemetaData1 == storemetaData2);
459 
460     storemetaData1.isNeedCompress = true;
461     EXPECT_FALSE(storemetaData1 == storemetaData2);
462     storemetaData2.isNeedCompress = true;
463     EXPECT_TRUE(storemetaData1 == storemetaData2);
464 
465     storemetaData1.enableCloud = true;
466     EXPECT_FALSE(storemetaData1 == storemetaData2);
467     storemetaData2.enableCloud = true;
468     EXPECT_TRUE(storemetaData1 == storemetaData2);
469 
470     storemetaData1.cloudAutoSync = true;
471     EXPECT_FALSE(storemetaData1 == storemetaData2);
472     storemetaData2.cloudAutoSync = true;
473     EXPECT_TRUE(storemetaData1 == storemetaData2);
474 }
475 
476 /**
477 * @tc.name: StoreMetaData
478 * @tc.desc:
479 * @tc.type: FUNC
480 * @tc.require:
481 * @tc.author: SQL
482 */
483 HWTEST_F(ServiceMetaDataTest, StoreMetaData007, TestSize.Level1)
484 {
485     StoreMetaData storemetaData1("100", "appid", "test_store");
486     StoreMetaData storemetaData2("100", "appid", "test_store");
487     StoreMetaData storemetaData3("10", "appid1", "storeid");
488     EXPECT_TRUE(storemetaData1 != storemetaData3);
489     EXPECT_FALSE(storemetaData1 != storemetaData2);
490 
491     storemetaData1.isAutoSync = true;
492     EXPECT_TRUE(storemetaData1 != storemetaData2);
493     storemetaData2.isAutoSync = true;
494     EXPECT_FALSE(storemetaData1 != storemetaData2);
495 
496     storemetaData1.isBackup = true;
497     EXPECT_TRUE(storemetaData1 != storemetaData2);
498     storemetaData2.isBackup = true;
499     EXPECT_FALSE(storemetaData1 != storemetaData2);
500 
501     storemetaData1.isDirty = true;
502     EXPECT_TRUE(storemetaData1 != storemetaData2);
503     storemetaData2.isDirty = true;
504     EXPECT_FALSE(storemetaData1 != storemetaData2);
505 
506     storemetaData1.isEncrypt = true;
507     EXPECT_TRUE(storemetaData1 != storemetaData2);
508     storemetaData2.isEncrypt = true;
509     EXPECT_FALSE(storemetaData1 != storemetaData2);
510 
511     storemetaData1.isSearchable = true;
512     EXPECT_TRUE(storemetaData1 != storemetaData2);
513     storemetaData2.isSearchable = true;
514     EXPECT_FALSE(storemetaData1 != storemetaData2);
515 
516     storemetaData1.isNeedCompress = true;
517     EXPECT_TRUE(storemetaData1 != storemetaData2);
518     storemetaData2.isNeedCompress = true;
519     EXPECT_FALSE(storemetaData1 != storemetaData2);
520 
521     storemetaData1.enableCloud = true;
522     EXPECT_TRUE(storemetaData1 != storemetaData2);
523     storemetaData2.enableCloud = true;
524     EXPECT_FALSE(storemetaData1 != storemetaData2);
525 
526     storemetaData1.cloudAutoSync = true;
527     EXPECT_TRUE(storemetaData1 != storemetaData2);
528     storemetaData2.cloudAutoSync = true;
529     EXPECT_FALSE(storemetaData1 != storemetaData2);
530 }
531 
532 /**
533 * @tc.name: GetStoreInfo
534 * @tc.desc: test StoreMetaData GetStoreInfo function
535 * @tc.type: FUNC
536 * @tc.require:
537 * @tc.author: SQL
538 */
539 HWTEST_F(ServiceMetaDataTest, GetStoreInfo, TestSize.Level1)
540 {
541     StoreMetaData storeMetaData("100", "appid", "test_store");
542     storeMetaData.version = TEST_CURRENT_VERSION;
543     storeMetaData.instanceId = 1;
544 
545     auto result = storeMetaData.GetStoreInfo();
546     EXPECT_EQ(result.instanceId, storeMetaData.instanceId);
547     EXPECT_EQ(result.bundleName, storeMetaData.bundleName);
548     EXPECT_EQ(result.storeName, storeMetaData.storeId);
549 }
550 
551 /**
552 * @tc.name: StrategyMeta001
553 * @tc.desc:
554 * @tc.type: FUNC
555 * @tc.require:
556 * @tc.author: SQL
557 */
558 HWTEST_F(ServiceMetaDataTest, StrategyMeta001, TestSize.Level1)
559 {
560     auto deviceId = "deviceId";
561     StrategyMeta strategyMeta(deviceId, "100", "ohos.test.demo", "test_store");
562     std::vector<std::string> local = {"local1"};
563     std::vector<std::string> remote = {"remote1"};
564     strategyMeta.capabilityRange.localLabel = local;
565     strategyMeta.capabilityRange.remoteLabel = remote;
566     strategyMeta.capabilityEnabled = true;
567     auto result = strategyMeta.IsEffect();
568     EXPECT_TRUE(result);
569     StrategyMeta strategyMetaData(deviceId, "200", "ohos.test.test", "test_stores");
570 
571     std::string key = strategyMeta.GetKey();
572     EXPECT_EQ(key, "StrategyMetaData###deviceId###100###default###ohos.test.demo###test_store");
573     std::initializer_list<std::string> fields = { deviceId, "100", "default", "ohos.test.demo", "test_store" };
574     std::string prefix = strategyMeta.GetPrefix(fields);
575     EXPECT_EQ(prefix, "StrategyMetaData###deviceId###100###default###ohos.test.demo###test_store");
576 
577     result = MetaDataManager::GetInstance().SaveMeta(key, strategyMeta, true);
578     EXPECT_TRUE(result);
579     result = MetaDataManager::GetInstance().LoadMeta(key, strategyMetaData, true);
580     EXPECT_TRUE(result);
581     EXPECT_EQ(strategyMeta.GetKey(), strategyMetaData.GetKey());
582     EXPECT_EQ(strategyMeta.GetPrefix(fields), strategyMetaData.GetPrefix(fields));
583 
584     result = MetaDataManager::GetInstance().DelMeta(key, true);
585     EXPECT_TRUE(result);
586 
587     result = MetaDataManager::GetInstance().SaveMeta(key, strategyMeta);
588     EXPECT_TRUE(result);
589     result = MetaDataManager::GetInstance().LoadMeta(key, strategyMetaData);
590     EXPECT_TRUE(result);
591     EXPECT_EQ(strategyMeta.GetKey(), strategyMetaData.GetKey());
592     EXPECT_EQ(strategyMeta.GetPrefix(fields), strategyMetaData.GetPrefix(fields));
593 
594     result = MetaDataManager::GetInstance().DelMeta(key);
595     EXPECT_TRUE(result);
596 }
597 
598 /**
599 * @tc.name: StrategyMeta
600 * @tc.desc:
601 * @tc.type: FUNC
602 * @tc.require:
603 * @tc.author: SQL
604 */
605 HWTEST_F(ServiceMetaDataTest, StrategyMeta002, TestSize.Level1)
606 {
607     auto deviceId = "deviceId";
608     StrategyMeta strategyMeta(deviceId, "100", "ohos.test.demo", "test_store");
609     std::vector<std::string> local = {"local1"};
610     std::vector<std::string> remote = {"remote1"};
611     strategyMeta.capabilityRange.localLabel = local;
612     strategyMeta.capabilityRange.remoteLabel = remote;
613     strategyMeta.capabilityEnabled = true;
614     auto result = strategyMeta.IsEffect();
615     EXPECT_TRUE(result);
616     strategyMeta.instanceId = 1;
617     StrategyMeta strategyMetaData(deviceId, "200", "ohos.test.test", "test_stores");
618 
619     std::string key = strategyMeta.GetKey();
620     EXPECT_EQ(key, "StrategyMetaData###deviceId###100###default###ohos.test.demo###test_store###1");
621 
622     result = MetaDataManager::GetInstance().SaveMeta(key, strategyMeta, true);
623     EXPECT_TRUE(result);
624     result = MetaDataManager::GetInstance().LoadMeta(key, strategyMetaData, true);
625     EXPECT_TRUE(result);
626     EXPECT_EQ(strategyMeta.GetKey(), strategyMetaData.GetKey());
627     result = MetaDataManager::GetInstance().DelMeta(key, true);
628     EXPECT_TRUE(result);
629 
630     result = MetaDataManager::GetInstance().SaveMeta(key, strategyMeta);
631     EXPECT_TRUE(result);
632     result = MetaDataManager::GetInstance().LoadMeta(key, strategyMetaData);
633     EXPECT_TRUE(result);
634     EXPECT_EQ(strategyMeta.GetKey(), strategyMetaData.GetKey());
635     result = MetaDataManager::GetInstance().DelMeta(key);
636     EXPECT_TRUE(result);
637 }
638 
639 /**
640 * @tc.name: MetaData
641 * @tc.desc:
642 * @tc.type: FUNC
643 * @tc.require:
644 * @tc.author: SQL
645 */
646 HWTEST_F(ServiceMetaDataTest, MetaData, TestSize.Level1)
647 {
648     StoreMetaData storeMetaData("100", "appid", "test_store");
649     SecretKeyMetaData secretKeyMetaData;
650     MetaData metaData;
651     MetaData metaDataLoad;
652     metaData.storeMetaData = storeMetaData;
653     metaData.secretKeyMetaData = secretKeyMetaData;
654     metaData.storeType = 1;
655     std::initializer_list<std::string> fields = {"time", "skey"};
656     std::string key = metaData.storeMetaData.GetKey();
657     std::string secretkey = metaData.secretKeyMetaData.GetKey(fields);
658 
659     auto result = MetaDataManager::GetInstance().SaveMeta(key, metaData, true);
660     EXPECT_TRUE(result);
661     result = MetaDataManager::GetInstance().LoadMeta(key, metaDataLoad, true);
662     EXPECT_TRUE(result);
663     EXPECT_EQ(key, metaDataLoad.storeMetaData.GetKey());
664     EXPECT_EQ(secretkey, metaDataLoad.secretKeyMetaData.GetKey(fields));
665     result = MetaDataManager::GetInstance().DelMeta(key, true);
666     EXPECT_TRUE(result);
667 
668     result = MetaDataManager::GetInstance().SaveMeta(key, metaData);
669     EXPECT_TRUE(result);
670     result = MetaDataManager::GetInstance().LoadMeta(key, metaDataLoad);
671     EXPECT_TRUE(result);
672     EXPECT_EQ(key, metaDataLoad.storeMetaData.GetKey());
673     EXPECT_EQ(secretkey, metaDataLoad.secretKeyMetaData.GetKey(fields));
674     result = MetaDataManager::GetInstance().DelMeta(key);
675     EXPECT_TRUE(result);
676 }
677 
678 /**
679 * @tc.name: CapMetaData
680 * @tc.desc: test CapMetaData function
681 * @tc.type: FUNC
682 * @tc.require:
683 * @tc.author: SQL
684 */
685 HWTEST_F(ServiceMetaDataTest, CapMetaData, TestSize.Level1)
686 {
687     CapMetaData capMetaData;
688     capMetaData.version = CapMetaData::CURRENT_VERSION;
689     Serializable::json node1;
690     capMetaData.Marshal(node1);
691     EXPECT_EQ(node1["version"], CapMetaData::CURRENT_VERSION);
692 
693     CapMetaData capMeta;
694     capMeta.Unmarshal(node1);
695     EXPECT_EQ(capMeta.version, CapMetaData::CURRENT_VERSION);
696 
697     CapMetaRow capMetaRow;
698     auto key = capMetaRow.GetKeyFor("PEER_DEVICE_ID");
699     std::string str = "CapabilityMeta###PEER_DEVICE_ID";
700     std::vector<uint8_t> testKey = { str.begin(), str.end() };
701     EXPECT_EQ(key, testKey);
702 }
703 
704 /**
705 * @tc.name: UserMetaData
706 * @tc.desc: test UserMetaData function
707 * @tc.type: FUNC
708 * @tc.require:
709 * @tc.author: SQL
710 */
711 HWTEST_F(ServiceMetaDataTest, UserMetaData, TestSize.Level1)
712 {
713     UserMetaData userMetaData;
714     userMetaData.deviceId = "PEER_DEVICE_ID";
715 
716     UserStatus userStatus;
717     userStatus.isActive = true;
718     userStatus.id = USER_ID1;
719     userMetaData.users = { userStatus };
720     userStatus.id = USER_ID2;
721     userMetaData.users.emplace_back(userStatus);
722 
723     Serializable::json node1;
724     userMetaData.Marshal(node1);
725     EXPECT_EQ(node1["deviceId"], "PEER_DEVICE_ID");
726 
727     UserMetaData userMeta;
728     userMeta.Unmarshal(node1);
729     EXPECT_EQ(userMeta.deviceId, "PEER_DEVICE_ID");
730 
731     Serializable::json node2;
732     userStatus.Marshal(node2);
733     EXPECT_EQ(node2["isActive"], true);
734     EXPECT_EQ(node2["id"], USER_ID2);
735 
736     UserStatus userUnmarshal;
737     userUnmarshal.Unmarshal(node2);
738     EXPECT_EQ(userUnmarshal.isActive, true);
739     EXPECT_EQ(userUnmarshal.id, USER_ID2);
740 
741     UserMetaRow userMetaRow;
742     auto key = userMetaRow.GetKeyFor(userMetaData.deviceId);
743     EXPECT_EQ(key, "UserMeta###PEER_DEVICE_ID");
744 }
745 
746 /**
747 * @tc.name: CapabilityRange
748 * @tc.desc: test CapabilityRange function
749 * @tc.type: FUNC
750 * @tc.require:
751 * @tc.author: SQL
752 */
753 HWTEST_F(ServiceMetaDataTest, CapabilityRange, TestSize.Level1)
754 {
755     CapabilityRange capabilityRange;
756     std::vector<std::string> local = {"local1"};
757     std::vector<std::string> remote = {"remote1"};
758     capabilityRange.localLabel = local;
759     capabilityRange.remoteLabel = remote;
760     Serializable::json node1;
761     capabilityRange.Marshal(node1);
762     EXPECT_EQ(node1["localLabel"], local);
763     EXPECT_EQ(node1["remoteLabel"], remote);
764 
765     CapabilityRange capRange;
766     capRange.Unmarshal(node1);
767     EXPECT_EQ(capRange.localLabel, local);
768     EXPECT_EQ(capRange.remoteLabel, remote);
769 }
770 
771 /**
772 * @tc.name: MatrixMetaData
773 * @tc.desc: test MatrixMetaData operator!= function
774 * @tc.type: FUNC
775 * @tc.require:
776 * @tc.author: nhj
777 */
778 HWTEST_F(ServiceMetaDataTest, MatrixMetaData, TestSize.Level1)
779 {
780     MatrixMetaData matrixMetaData1;
781     matrixMetaData1.version = 0;
782     matrixMetaData1.deviceId = "PEER_DEVICE_ID";
783 
784     MatrixMetaData matrixMetaData2;
785     matrixMetaData2.version = 0;
786     matrixMetaData2.deviceId = "PEER_DEVICE_ID";
787 
788     MatrixMetaData matrixMetaData3;
789     matrixMetaData3.version = 1;
790     matrixMetaData3.deviceId = "DEVICE_ID";
791     EXPECT_TRUE(matrixMetaData1 != matrixMetaData3);
792     EXPECT_FALSE(matrixMetaData1 != matrixMetaData2);
793 
794     std::string key = matrixMetaData3.GetConsistentKey();
795     EXPECT_EQ(key, "MatrixMeta###DEVICE_ID###Consistent");
796 }
797 } // namespace OHOS::Test