• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #define LOG_TAG "ObjectManagerTest"
17 
18 #include "object_manager.h"
19 
20 #include <gtest/gtest.h>
21 #include <ipc_skeleton.h>
22 
23 #include "executor_pool.h"
24 #include "kv_store_nb_delegate_mock.h"
25 #include "object_types.h"
26 #include "snapshot/machine_status.h"
27 
28 using namespace testing::ext;
29 using namespace OHOS::DistributedObject;
30 using AssetValue = OHOS::CommonType::AssetValue;
31 using RestoreStatus = OHOS::DistributedObject::ObjectStoreManager::RestoreStatus;
32 namespace OHOS::Test {
33 
34 class ObjectManagerTest : public testing::Test {
35 public:
36     void SetUp();
37     void TearDown();
38 
39 protected:
40     Asset asset_;
41     std::string uri_;
42     std::string appId_ = "objectManagerTest_appid_1";
43     std::string sessionId_ = "123";
44     std::vector<uint8_t> data_;
45     std::string deviceId_ = "7001005458323933328a258f413b3900";
46     uint64_t sequenceId_ = 10;
47     uint64_t sequenceId_2 = 20;
48     uint64_t sequenceId_3 = 30;
49     std::string userId_ = "100";
50     std::string bundleName_ = "com.examples.hmos.notepad";
51     OHOS::ObjectStore::AssetBindInfo assetBindInfo_;
52     pid_t pid_ = 10;
53     uint32_t tokenId_ = 100;
54     AssetValue assetValue_;
55 };
56 
SetUp()57 void ObjectManagerTest::SetUp()
58 {
59     uri_ = "file:://com.examples.hmos.notepad/data/storage/el2/distributedfiles/dir/asset1.jpg";
60     Asset asset{
61         .name = "test_name",
62         .uri = uri_,
63         .modifyTime = "modifyTime",
64         .size = "size",
65         .hash = "modifyTime_size",
66     };
67     asset_ = asset;
68 
69     AssetValue assetValue{
70         .id = "test_name",
71         .name = uri_,
72         .uri = uri_,
73         .createTime = "2024.07.23",
74         .modifyTime = "modifyTime",
75         .size = "size",
76         .hash = "modifyTime_size",
77         .path = "/data/storage/el2",
78     };
79     assetValue_ = assetValue;
80 
81     data_.push_back(10); // 10 is for testing
82     data_.push_back(20); // 20 is for testing
83     data_.push_back(30); // 30 is for testing
84 
85     OHOS::ObjectStore::AssetBindInfo AssetBindInfo{
86         .storeName = "store_test",
87         .tableName = "table_test",
88         .field = "attachment",
89         .assetName = "asset1.jpg",
90     };
91     assetBindInfo_ = AssetBindInfo;
92 }
93 
TearDown()94 void ObjectManagerTest::TearDown() {}
95 
96 /**
97 * @tc.name: DeleteNotifier001
98 * @tc.desc: DeleteNotifier test.
99 * @tc.type: FUNC
100 * @tc.require:
101 * @tc.author: wangbin
102 */
103 HWTEST_F(ObjectManagerTest, DeleteNotifier001, TestSize.Level0)
104 {
105     auto syncManager = SequenceSyncManager::GetInstance();
106     auto result = syncManager->DeleteNotifier(sequenceId_, userId_);
107     ASSERT_EQ(result, SequenceSyncManager::ERR_SID_NOT_EXIST);
108 }
109 
110 /**
111 * @tc.name: Process001
112 * @tc.desc: Process test.
113 * @tc.type: FUNC
114 * @tc.require:
115 * @tc.author: wangbin
116 */
117 HWTEST_F(ObjectManagerTest, Process001, TestSize.Level0)
118 {
119     auto syncManager = SequenceSyncManager::GetInstance();
120     std::map<std::string, DistributedDB::DBStatus> results;
121     results = {{ "test_cloud", DistributedDB::DBStatus::OK }};
122 
123     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb2be85e00102(const std::map<std::string, int32_t> &results) 124     func = [](const std::map<std::string, int32_t> &results) {
125         return results;
126     };
127     auto result = syncManager->Process(sequenceId_, results, userId_);
128     ASSERT_EQ(result, SequenceSyncManager::ERR_SID_NOT_EXIST);
129     syncManager->seqIdCallbackRelations_.emplace(sequenceId_, func);
130     result = syncManager->Process(sequenceId_, results, userId_);
131     ASSERT_EQ(result, SequenceSyncManager::SUCCESS_USER_HAS_FINISHED);
132 }
133 
134 /**
135 * @tc.name: DeleteNotifierNoLock001
136 * @tc.desc: DeleteNotifierNoLock test.
137 * @tc.type: FUNC
138 * @tc.require:
139 * @tc.author: wangbin
140 */
141 HWTEST_F(ObjectManagerTest, DeleteNotifierNoLock001, TestSize.Level0)
142 {
143     auto syncManager = SequenceSyncManager::GetInstance();
144     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb2be85e00202(const std::map<std::string, int32_t> &results) 145     func = [](const std::map<std::string, int32_t> &results) {
146         return results;
147     };
148     syncManager->seqIdCallbackRelations_.emplace(sequenceId_, func);
149     std::vector<uint64_t> seqIds = {sequenceId_, sequenceId_2, sequenceId_3};
150     std::string userId = "user_1";
151     auto result = syncManager->DeleteNotifierNoLock(sequenceId_, userId_);
152     ASSERT_EQ(result, SequenceSyncManager::SUCCESS_USER_HAS_FINISHED);
153     syncManager->userIdSeqIdRelations_[userId] = seqIds;
154     result = syncManager->DeleteNotifierNoLock(sequenceId_, userId_);
155     ASSERT_EQ(result, SequenceSyncManager::SUCCESS_USER_IN_USE);
156 }
157 
158 /**
159 * @tc.name: Clear001
160 * @tc.desc: Clear test.
161 * @tc.type: FUNC
162 * @tc.require:
163 * @tc.author: wangbin
164 */
165 HWTEST_F(ObjectManagerTest, Clear001, TestSize.Level0)
166 {
167     auto manager = ObjectStoreManager::GetInstance();
168     auto result = manager->Clear();
169     ASSERT_EQ(result, OHOS::DistributedObject::OBJECT_STORE_NOT_FOUND);
170 }
171 
172 /**
173 * @tc.name: registerAndUnregisterRemoteCallback001
174 * @tc.desc: test RegisterRemoteCallback and UnregisterRemoteCallback.
175 * @tc.type: FUNC
176 * @tc.require:
177 * @tc.author: wangbin
178 */
179 HWTEST_F(ObjectManagerTest, registerAndUnregisterRemoteCallback001, TestSize.Level0)
180 {
181     auto manager = ObjectStoreManager::GetInstance();
182     sptr<IRemoteObject> callback;
183     manager->RegisterRemoteCallback(bundleName_, sessionId_, pid_, tokenId_, callback);
184     ObjectStoreManager::CallbackInfo callbackInfo = manager->callbacks_.Find(tokenId_).second;
185     std::string prefix = bundleName_ + sessionId_;
186     ASSERT_NE(callbackInfo.observers_.find(prefix), callbackInfo.observers_.end());
187     manager->UnregisterRemoteCallback(bundleName_, pid_, tokenId_, sessionId_);
188     callbackInfo = manager->callbacks_.Find(tokenId_).second;
189     ASSERT_EQ(callbackInfo.observers_.find(prefix), callbackInfo.observers_.end());
190 }
191 
192 /**
193 * @tc.name: registerAndUnregisterRemoteCallback002
194 * @tc.desc: abnormal use cases.
195 * @tc.type: FUNC
196 * @tc.require:
197 * @tc.author: wangbin
198 */
199 HWTEST_F(ObjectManagerTest, registerAndUnregisterRemoteCallback002, TestSize.Level0)
200 {
201     auto manager = ObjectStoreManager::GetInstance();
202     sptr<IRemoteObject> callback;
203     uint32_t tokenId = 101;
204     manager->RegisterRemoteCallback("", sessionId_, pid_, tokenId, callback);
205     manager->RegisterRemoteCallback(bundleName_, "", pid_, tokenId, callback);
206     manager->RegisterRemoteCallback("", "", pid_, tokenId, callback);
207     ASSERT_EQ(manager->callbacks_.Find(tokenId).first, false);
208     manager->UnregisterRemoteCallback("", pid_, tokenId, sessionId_);
209 }
210 
211 /**
212 * @tc.name: NotifyDataChanged001
213 * @tc.desc: NotifyDataChanged test.
214 * @tc.type: FUNC
215 * @tc.require:
216 * @tc.author: wangbin
217 */
218 HWTEST_F(ObjectManagerTest, NotifyDataChanged001, TestSize.Level0)
219 {
220     auto manager = ObjectStoreManager::GetInstance();
221     std::string bundleName1_ = "com.examples.ophm.notepad";
222     std::string objectKey = bundleName1_ + sessionId_;
223     std::map<std::string, std::map<std::string, std::vector<uint8_t>>> data;
224     std::map<std::string, std::vector<uint8_t>> data1;
225     std::vector<uint8_t> data1_;
226     data1_.push_back(RestoreStatus::DATA_READY);
227     data1_.push_back(RestoreStatus::ASSETS_READY);
228     data1_.push_back(RestoreStatus::ALL_READY);
229     data1 = {{ "objectKey", data1_ }};
230     data = {{ objectKey, data1 }};
231     std::shared_ptr<ExecutorPool> executors = std::make_shared<ExecutorPool>(5, 3); // executor pool
232     manager->SetThreadPool(executors);
233     ASSERT_EQ(manager->restoreStatus_.Find(objectKey).first, false);
234     manager->NotifyDataChanged(data, {});
235     ASSERT_EQ(manager->restoreStatus_.Find(objectKey).second, RestoreStatus::DATA_READY);
236 }
237 
238 /**
239 * @tc.name: NotifyAssetsReady001
240 * @tc.desc: NotifyAssetsReady test.
241 * @tc.type: FUNC
242 * @tc.require:
243 * @tc.author: wangbin
244 */
245 HWTEST_F(ObjectManagerTest, NotifyAssetsReady001, TestSize.Level0)
246 {
247     auto manager = ObjectStoreManager::GetInstance();
248     std::string objectKey = bundleName_ + sessionId_;
249     std::string srcNetworkId = "1";
250     ASSERT_EQ(manager->restoreStatus_.Find(objectKey).first, false);
251     manager->NotifyAssetsReady(objectKey, srcNetworkId);
252     ASSERT_EQ(manager->restoreStatus_.Find(objectKey).second, RestoreStatus::ASSETS_READY);
253     manager->restoreStatus_.Clear();
254     manager->restoreStatus_.Insert(objectKey, RestoreStatus::DATA_READY);
255     manager->NotifyAssetsReady(objectKey, srcNetworkId);
256     ASSERT_EQ(manager->restoreStatus_.Find(objectKey).second, RestoreStatus::ALL_READY);
257 }
258 
259 /**
260  * @tc.name: NotifyAssetsReady002
261  * @tc.desc: NotifyAssetsReady test.
262  * @tc.type: FUNC
263  */
264 HWTEST_F(ObjectManagerTest, NotifyAssetsReady002, TestSize.Level0)
265 {
266     auto manager = ObjectStoreManager::GetInstance();
267     std::string objectKey="com.example.myapplicaiton123456";
268     std::string srcNetworkId = "654321";
269 
270     manager->restoreStatus_.Clear();
271     manager->NotifyAssetsStart(objectKey, srcNetworkId);
272     auto [has0, value0] = manager->restoreStatus_.Find(objectKey);
273     EXPECT_TRUE(has0);
274     EXPECT_EQ(value0, RestoreStatus::NONE);
275 
276     manager->restoreStatus_.Clear();
277     manager->NotifyAssetsReady(objectKey, srcNetworkId);
278     auto [has1, value1] = manager->restoreStatus_.Find(objectKey);
279     EXPECT_TRUE(has1);
280     EXPECT_EQ(value1, RestoreStatus::ASSETS_READY);
281 
282     manager->restoreStatus_.Clear();
283     manager->restoreStatus_.Insert(objectKey, RestoreStatus::DATA_NOTIFIED);
284     manager->NotifyAssetsReady(objectKey, srcNetworkId);
285     auto [has2, value2] = manager->restoreStatus_.Find(objectKey);
286     EXPECT_TRUE(has2);
287     EXPECT_EQ(value2, RestoreStatus::ALL_READY);
288 
289     manager->restoreStatus_.Clear();
290     manager->restoreStatus_.Insert(objectKey, RestoreStatus::DATA_READY);
291     manager->NotifyAssetsReady(objectKey, srcNetworkId);
292     auto [has3, value3] = manager->restoreStatus_.Find(objectKey);
293     EXPECT_TRUE(has3);
294     EXPECT_EQ(value3, RestoreStatus::ALL_READY);
295     manager->restoreStatus_.Clear();
296 }
297 
298 /**
299 * @tc.name: NotifyChange001
300 * @tc.desc: NotifyChange test.
301 * @tc.type: FUNC
302 * @tc.require:
303 * @tc.author: wangbin
304 */
305 HWTEST_F(ObjectManagerTest, NotifyChange001, TestSize.Level0)
306 {
307     auto manager = ObjectStoreManager::GetInstance();
308     std::map<std::string, std::vector<uint8_t>> data;
309     std::map<std::string, std::vector<uint8_t>> data1;
310     std::vector<uint8_t> data1_;
311     data1_.push_back(RestoreStatus::DATA_READY);
312     data_.push_back(RestoreStatus::ALL_READY);
313     data = {{ "test_cloud", data_ }};
314     data1 = {{ "p_###SAVEINFO###001", data1_ }};
315     manager->NotifyChange(data1);
316     EXPECT_FALSE(manager->restoreStatus_.Find("p_###SAVEINFO###001").first);
317     manager->NotifyChange(data);
318     EXPECT_FALSE(manager->restoreStatus_.Find("test_cloud").first);
319 }
320 
321 /**
322  * @tc.name: NotifyChange002
323  * @tc.desc: NotifyChange test.
324  * @tc.type: FUNC
325  */
326 HWTEST_F(ObjectManagerTest, NotifyChange002, TestSize.Level0)
327 {
328     auto manager = ObjectStoreManager::GetInstance();
329     std::shared_ptr<ExecutorPool> executor = std::make_shared<ExecutorPool>(1, 0);
330     manager->SetThreadPool(executor);
331     std::map<std::string, std::vector<uint8_t>> data{};
332     std::vector<uint8_t> value{0};
333     std::string bundleName = "com.example.myapplication";
334     std::string sessionId = "123456";
335     std::string source = "source";
336     std::string target = "target";
337     std::string timestamp = "1234567890";
338     ObjectStoreManager::SaveInfo saveInfo(bundleName, sessionId, source, target, timestamp);
339     std::string saveInfoStr = DistributedData::Serializable::Marshall(saveInfo);
340     auto saveInfoValue = std::vector<uint8_t>(saveInfoStr.begin(), saveInfoStr.end());
341     std::string prefix = saveInfo.ToPropertyPrefix();
342     std::string assetPrefix = prefix + "p_asset";
343     data.insert_or_assign(prefix + "p_###SAVEINFO###", saveInfoValue);
344     data.insert_or_assign(prefix + "p_data", value);
345     data.insert_or_assign(assetPrefix + ObjectStore::NAME_SUFFIX, value);
346     data.insert_or_assign(assetPrefix + ObjectStore::URI_SUFFIX, value);
347     data.insert_or_assign(assetPrefix + ObjectStore::PATH_SUFFIX, value);
348     data.insert_or_assign(assetPrefix + ObjectStore::CREATE_TIME_SUFFIX, value);
349     data.insert_or_assign(assetPrefix + ObjectStore::MODIFY_TIME_SUFFIX, value);
350     data.insert_or_assign(assetPrefix + ObjectStore::SIZE_SUFFIX, value);
351     data.insert_or_assign("testkey", value);
352     manager->NotifyChange(data);
353     EXPECT_TRUE(manager->restoreStatus_.Contains(bundleName+sessionId));
354     auto [has, taskId] = manager->objectTimer_.Find(bundleName+sessionId);
355     EXPECT_TRUE(has);
356     manager->restoreStatus_.Clear();
357     manager->executors_->Remove(taskId);
358     manager->objectTimer_.Clear();
359 }
360 
361 /**
362  * @tc.name: ComputeStatus001
363  * @tc.desc: ComputeStatus.test
364  * @tc.type: FUNC
365  */
366 HWTEST_F(ObjectManagerTest, ComputeStatus001, TestSize.Level0)
367 {
368     auto manager = ObjectStoreManager::GetInstance();
369     std::shared_ptr<ExecutorPool> executor = std::make_shared<ExecutorPool>(1, 0);
370     manager->SetThreadPool(executor);
371     std::string objectKey="com.example.myapplicaiton123456";
372     std::map<std::string, std::map<std::string, std::vector<uint8_t>>> data{};
373     manager->restoreStatus_.Clear();
374     manager->ComputeStatus(objectKey, {}, data);
375     auto [has0, value0] = manager->restoreStatus_.Find(objectKey);
376     EXPECT_TRUE(has0);
377     EXPECT_EQ(value0, RestoreStatus::DATA_READY);
378     auto [has1, taskId1] = manager->objectTimer_.Find(objectKey);
379     EXPECT_TRUE(has1);
380     manager->executors_->Remove(taskId1);
381     manager->objectTimer_.Clear();
382     manager->restoreStatus_.Clear();
383 
384     manager->restoreStatus_.Insert(objectKey, RestoreStatus::ASSETS_READY);
385     manager->ComputeStatus(objectKey, {}, data);
386     auto [has2, value2] = manager->restoreStatus_.Find(objectKey);
387     EXPECT_TRUE(has2);
388     EXPECT_EQ(value2, RestoreStatus::ALL_READY);
389     auto [has3, taskId3] = manager->objectTimer_.Find(objectKey);
390     EXPECT_FALSE(has3);
391     manager->restoreStatus_.Clear();
392 }
393 
394 /**
395 * @tc.name: Open001
396 * @tc.desc: Open test.
397 * @tc.type: FUNC
398 * @tc.require:
399 * @tc.author: wangbin
400 */
401 HWTEST_F(ObjectManagerTest, Open001, TestSize.Level0)
402 {
403     auto manager = ObjectStoreManager::GetInstance();
404     manager->kvStoreDelegateManager_ = nullptr;
405     auto result = manager->Open();
406     ASSERT_EQ(result, DistributedObject::OBJECT_INNER_ERROR);
407     std::string dataDir = "/data/app/el2/100/database";
408     manager->SetData(dataDir, userId_);
409     manager->delegate_ = nullptr;
410     result = manager->Open();
411     ASSERT_EQ(result, DistributedObject::OBJECT_SUCCESS);
412     manager->delegate_ = manager->OpenObjectKvStore();
413     result = manager->Open();
414     ASSERT_EQ(result, DistributedObject::OBJECT_SUCCESS);
415 }
416 
417 /**
418 * @tc.name: OnAssetChanged001
419 * @tc.desc: OnAssetChanged test.
420 * @tc.type: FUNC
421 * @tc.require:
422 * @tc.author: wangbin
423 */
424 HWTEST_F(ObjectManagerTest, OnAssetChanged001, TestSize.Level0)
425 {
426     auto manager = ObjectStoreManager::GetInstance();
427     std::shared_ptr<Snapshot> snapshot = std::make_shared<ObjectSnapshot>();
428     auto snapshotKey = appId_ + "_" + sessionId_;
429     auto result = manager->OnAssetChanged(tokenId_, appId_, sessionId_, deviceId_, assetValue_);
430     ASSERT_EQ(result, DistributedObject::OBJECT_INNER_ERROR);
431     manager->snapshots_.Insert(snapshotKey, snapshot);
432     result = manager->OnAssetChanged(tokenId_, appId_, sessionId_, deviceId_, assetValue_);
433     ASSERT_EQ(result, DistributedObject::OBJECT_SUCCESS);
434 }
435 
436 /**
437 * @tc.name: DeleteSnapshot001
438 * @tc.desc: DeleteSnapshot test.
439 * @tc.type: FUNC
440 * @tc.require:
441 * @tc.author: wangbin
442 */
443 HWTEST_F(ObjectManagerTest, DeleteSnapshot001, TestSize.Level0)
444 {
445     auto manager = ObjectStoreManager::GetInstance();
446     std::shared_ptr<Snapshot> snapshot = std::make_shared<ObjectSnapshot>();
447     auto snapshotKey = bundleName_ + "_" + sessionId_;
448     auto snapshots = manager->snapshots_.Find(snapshotKey).second;
449     ASSERT_EQ(snapshots, nullptr);
450     manager->DeleteSnapshot(bundleName_, sessionId_);
451 
452     manager->snapshots_.Insert(snapshotKey, snapshot);
453     snapshots = manager->snapshots_.Find(snapshotKey).second;
454     ASSERT_NE(snapshots, nullptr);
455     manager->DeleteSnapshot(bundleName_, sessionId_);
456 }
457 
458 /**
459 * @tc.name: OpenObjectKvStore001
460 * @tc.desc: OpenObjectKvStore test.
461 * @tc.type: FUNC
462 * @tc.require:
463 * @tc.author: wangbin
464 */
465 HWTEST_F(ObjectManagerTest, OpenObjectKvStore001, TestSize.Level0)
466 {
467     auto manager = ObjectStoreManager::GetInstance();
468     manager->objectDataListener_ = nullptr;
469     ASSERT_EQ(manager->objectDataListener_, nullptr);
470     manager->OpenObjectKvStore();
471     ASSERT_NE(manager->objectDataListener_, nullptr);
472     manager->OpenObjectKvStore();
473 }
474 
475 /**
476 * @tc.name: FlushClosedStore001
477 * @tc.desc: FlushClosedStore test.
478 * @tc.type: FUNC
479 * @tc.require:
480 * @tc.author: wangbin
481 */
482 HWTEST_F(ObjectManagerTest, FlushClosedStore001, TestSize.Level0)
483 {
484     auto manager = ObjectStoreManager::GetInstance();
485     manager->isSyncing_ = true;
486     manager->syncCount_ = 10; // test syncCount_
487     manager->delegate_ = nullptr;
488     manager->FlushClosedStore();
489     manager->isSyncing_ = false;
490     manager->FlushClosedStore();
491     manager->syncCount_ = 0; // test syncCount_
492     manager->FlushClosedStore();
493     manager->delegate_ = manager->OpenObjectKvStore();
494     ASSERT_NE(manager->delegate_, nullptr);
495     manager->FlushClosedStore();
496     ASSERT_EQ(manager->delegate_, nullptr);
497 }
498 
499 /**
500 * @tc.name: Close001
501 * @tc.desc: Close test.
502 * @tc.type: FUNC
503 * @tc.require:
504 * @tc.author: wangbin
505 */
506 HWTEST_F(ObjectManagerTest, Close001, TestSize.Level0)
507 {
508     auto manager = ObjectStoreManager::GetInstance();
509     manager->syncCount_ = 1; // test syncCount_
510     manager->Close();
511     ASSERT_EQ(manager->syncCount_, 1); // 1 is for testing
512     manager->delegate_ = manager->OpenObjectKvStore();
513     manager->Close();
514     ASSERT_EQ(manager->syncCount_, 0); // 0 is for testing
515 }
516 
517 /**
518 * @tc.name: SyncOnStore001
519 * @tc.desc: SyncOnStore test.
520 * @tc.type: FUNC
521 * @tc.require:
522 * @tc.author: wangbin
523 */
524 HWTEST_F(ObjectManagerTest, SyncOnStore001, TestSize.Level0)
525 {
526     auto manager = ObjectStoreManager::GetInstance();
527     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb2be85e00302(const std::map<std::string, int32_t> &results) 528     func = [](const std::map<std::string, int32_t> &results) {
529         return results;
530     };
531     std::string prefix = "ObjectManagerTest";
532     std::vector<std::string> deviceList;
533     deviceList.push_back("local");
534     deviceList.push_back("local1");
535     auto result = manager->SyncOnStore(prefix, deviceList, func);
536     ASSERT_EQ(result, OBJECT_SUCCESS);
537 }
538 
539 /**
540 * @tc.name: RetrieveFromStore001
541 * @tc.desc: RetrieveFromStore test.
542 * @tc.type: FUNC
543 * @tc.require:
544 * @tc.author: wangbin
545 */
546 HWTEST_F(ObjectManagerTest, RetrieveFromStore001, TestSize.Level0)
547 {
548     auto manager = ObjectStoreManager::GetInstance();
549     DistributedDB::KvStoreNbDelegateMock mockDelegate;
550     manager->delegate_ = &mockDelegate;
551     std::vector<uint8_t> id;
552     id.push_back(1);  // for testing
553     id.push_back(2);  // for testing
554     std::map<std::string, std::vector<uint8_t>> results;
555     results = {{ "test_cloud", id }};
556     auto result = manager->RetrieveFromStore(appId_, sessionId_, results);
557     ASSERT_EQ(result, OBJECT_SUCCESS);
558 }
559 
560 /**
561 * @tc.name: SyncCompleted001
562 * @tc.desc: SyncCompleted test.
563 * @tc.type: FUNC
564 * @tc.require:
565 * @tc.author: wangbin
566 */
567 HWTEST_F(ObjectManagerTest, SyncCompleted001, TestSize.Level0)
568 {
569     auto manager = ObjectStoreManager::GetInstance();
570     auto syncManager = SequenceSyncManager::GetInstance();
571     std::map<std::string, DistributedDB::DBStatus> results;
572     results = {{ "test_cloud", DistributedDB::DBStatus::OK }};
573     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb2be85e00402(const std::map<std::string, int32_t> &results) 574     func = [](const std::map<std::string, int32_t> &results) {
575         return results;
576     };
577     manager->userId_ = "99";
578     std::vector<uint64_t> userId;
579     userId.push_back(99);
580     userId.push_back(100);
581     manager->SyncCompleted(results, sequenceId_);
582     syncManager->userIdSeqIdRelations_ = {{ "test_cloud", userId }};
583     manager->SyncCompleted(results, sequenceId_);
584     userId.clear();
585     syncManager->seqIdCallbackRelations_.emplace(sequenceId_, func);
586     manager->SyncCompleted(results, sequenceId_);
587     userId.push_back(99);
588     userId.push_back(100);
589     manager->SyncCompleted(results, sequenceId_);
590     EXPECT_FALSE(manager->isSyncing_);
591 }
592 
593 /**
594 * @tc.name: SplitEntryKey001
595 * @tc.desc: SplitEntryKey test.
596 * @tc.type: FUNC
597 * @tc.require:
598 * @tc.author: wangbin
599 */
600 HWTEST_F(ObjectManagerTest, SplitEntryKey001, TestSize.Level0)
601 {
602     auto manager = ObjectStoreManager::GetInstance();
603     std::string key1 = "";
604     std::string key2 = "ObjectManagerTest";
605     auto result = manager->SplitEntryKey(key1);
606     ASSERT_EQ(result.empty(), true);
607     result = manager->SplitEntryKey(key2);
608     ASSERT_EQ(result.empty(), true);
609 }
610 
611 /**
612 * @tc.name: SplitEntryKey002
613 * @tc.desc: SplitEntryKey test.
614 * @tc.type: FUNC
615 */
616 HWTEST_F(ObjectManagerTest, SplitEntryKey002, TestSize.Level0)
617 {
618     auto manager = ObjectStoreManager::GetInstance();
619     std::string key1 = "com.example.myapplication_sessionId_source_target_1234567890_p_propertyName";
620     auto res = manager->SplitEntryKey(key1);
621     EXPECT_EQ(res[0], "com.example.myapplication");
622     EXPECT_EQ(res[1], "sessionId");
623     EXPECT_EQ(res[2], "source");
624     EXPECT_EQ(res[3], "target");
625     EXPECT_EQ(res[4], "1234567890");
626     EXPECT_EQ(res[5], "p_propertyName");
627 
628     std::string key2 = "com.example.myapplication_sessionId_source_target_000_p_propertyName";
629     res = manager->SplitEntryKey(key2);
630     EXPECT_TRUE(res.empty());
631 
632     std::string key3 = "com.example.myapplicationsessionIdsourcetarget_1234567890_p_propertyName";
633     res = manager->SplitEntryKey(key3);
634     EXPECT_TRUE(res.empty());
635 
636     std::string key4 = "com.example.myapplicationsessionIdsource_target_1234567890_p_propertyName";
637     res = manager->SplitEntryKey(key4);
638     EXPECT_TRUE(res.empty());
639 
640     std::string key5 = "com.example.myapplicationsessionId_source_target_1234567890_p_propertyName";
641     res = manager->SplitEntryKey(key5);
642     EXPECT_TRUE(res.empty());
643 }
644 
645 /**
646 * @tc.name: ProcessOldEntry001
647 * @tc.desc: ProcessOldEntry test.
648 * @tc.type: FUNC
649 * @tc.require:
650 * @tc.author: wangbin
651 */
652 HWTEST_F(ObjectManagerTest, ProcessOldEntry001, TestSize.Level0)
653 {
654     auto manager = ObjectStoreManager::GetInstance();
655     manager->delegate_ = manager->OpenObjectKvStore();
656     std::vector<DistributedDB::Entry> entries;
657     auto status = manager->delegate_->GetEntries(std::vector<uint8_t>(appId_.begin(), appId_.end()), entries);
658     ASSERT_EQ(status, DistributedDB::DBStatus::NOT_FOUND);
659     manager->ProcessOldEntry(appId_);
660 
661     DistributedDB::KvStoreNbDelegateMock mockDelegate;
662     manager->delegate_ = &mockDelegate;
663     status = manager->delegate_->GetEntries(std::vector<uint8_t>(appId_.begin(), appId_.end()), entries);
664     ASSERT_EQ(status, DistributedDB::DBStatus::OK);
665     manager->ProcessOldEntry(appId_);
666 }
667 
668 /**
669 * @tc.name: ProcessSyncCallback001
670 * @tc.desc: ProcessSyncCallback test.
671 * @tc.type: FUNC
672 * @tc.require:
673 * @tc.author: wangbin
674 */
675 HWTEST_F(ObjectManagerTest, ProcessSyncCallback001, TestSize.Level0)
676 {
677     auto manager = ObjectStoreManager::GetInstance();
678     std::map<std::string, int32_t> results;
679     manager->ProcessSyncCallback(results, appId_, sessionId_, deviceId_);
680     results.insert({"local", 1}); // for testing
681     ASSERT_EQ(results.empty(), false);
682     ASSERT_NE(results.find("local"), results.end());
683     manager->ProcessSyncCallback(results, appId_, sessionId_, deviceId_);
684 }
685 
686 /**
687 * @tc.name: IsAssetComplete001
688 * @tc.desc: IsAssetComplete test.
689 * @tc.type: FUNC
690 * @tc.require:
691 * @tc.author: wangbin
692 */
693 HWTEST_F(ObjectManagerTest, IsAssetComplete001, TestSize.Level0)
694 {
695     auto manager = ObjectStoreManager::GetInstance();
696     std::map<std::string, std::vector<uint8_t>> results;
697     std::vector<uint8_t> completes;
698     completes.push_back(1); // for testing
699     completes.push_back(2); // for testing
700     std::string assetPrefix = "IsAssetComplete_test";
701     results.insert({assetPrefix, completes});
702     auto result = manager->IsAssetComplete(results, assetPrefix);
703     ASSERT_EQ(result, false);
704     results.insert({assetPrefix + ObjectStore::NAME_SUFFIX, completes});
705     result = manager->IsAssetComplete(results, assetPrefix);
706     ASSERT_EQ(result, false);
707     results.insert({assetPrefix + ObjectStore::URI_SUFFIX, completes});
708     result = manager->IsAssetComplete(results, assetPrefix);
709     ASSERT_EQ(result, false);
710     results.insert({assetPrefix + ObjectStore::PATH_SUFFIX, completes});
711     result = manager->IsAssetComplete(results, assetPrefix);
712     ASSERT_EQ(result, false);
713     results.insert({assetPrefix + ObjectStore::CREATE_TIME_SUFFIX, completes});
714     result = manager->IsAssetComplete(results, assetPrefix);
715     ASSERT_EQ(result, false);
716     results.insert({assetPrefix + ObjectStore::MODIFY_TIME_SUFFIX, completes});
717     result = manager->IsAssetComplete(results, assetPrefix);
718     ASSERT_EQ(result, false);
719     results.insert({assetPrefix + ObjectStore::SIZE_SUFFIX, completes});
720     result = manager->IsAssetComplete(results, assetPrefix);
721     ASSERT_EQ(result, true);
722 }
723 
724 /**
725 * @tc.name: GetAssetsFromDBRecords001
726 * @tc.desc: GetAssetsFromDBRecords test.
727 * @tc.type: FUNC
728 * @tc.require:
729 * @tc.author: wangbin
730 */
731 HWTEST_F(ObjectManagerTest, GetAssetsFromDBRecords001, TestSize.Level0)
732 {
733     auto manager = ObjectStoreManager::GetInstance();
734     std::map<std::string, std::vector<uint8_t>> results;
735     std::vector<uint8_t> completes;
736     completes.push_back(1); // for testing
737     completes.push_back(2); // for testing
738     std::string assetPrefix = "IsAssetComplete_test";
739     results.insert({assetPrefix, completes});
740     results.insert({assetPrefix + ObjectStore::NAME_SUFFIX, completes});
741     results.insert({assetPrefix + ObjectStore::URI_SUFFIX, completes});
742     results.insert({assetPrefix + ObjectStore::MODIFY_TIME_SUFFIX, completes});
743     results.insert({assetPrefix + ObjectStore::SIZE_SUFFIX, completes});
744     auto result = manager->GetAssetsFromDBRecords(results);
745     ASSERT_EQ(result.empty(), false);
746 }
747 
748 /**
749 * @tc.name: GetAssetsFromDBRecords002
750 * @tc.desc: GetAssetsFromDBRecords test.
751 * @tc.type: FUNC
752 */
753 HWTEST_F(ObjectManagerTest, GetAssetsFromDBRecords002, TestSize.Level0)
754 {
755     auto manager = ObjectStoreManager::GetInstance();
756     std::map<std::string, std::vector<uint8_t>> result;
757 
758     std::vector<uint8_t> value0{0};
759     std::string data0 = "[STRING]test";
760     value0.insert(value0.end(), data0.begin(), data0.end());
761 
762     std::vector<uint8_t> value1{0};
763     std::string data1 = "(string)test";
764     value1.insert(value1.end(), data1.begin(), data1.end());
765 
766     std::string prefix = "bundleName_sessionId_source_target_timestamp";
767     std::string dataKey = prefix + "_p_data";
768     std::string assetPrefix0 = prefix + "_p_asset0";
769     std::string assetPrefix1 = prefix + "_p_asset1";
770 
771     result.insert({dataKey, value0});
772     auto assets = manager->GetAssetsFromDBRecords(result);
773     EXPECT_TRUE(assets.empty());
774 
775     result.clear();
776     result.insert({assetPrefix0 + ObjectStore::URI_SUFFIX, value0});
777     assets = manager->GetAssetsFromDBRecords(result);
778     EXPECT_TRUE(assets.empty());
779 
780     result.clear();
781     result.insert({assetPrefix1 + ObjectStore::NAME_SUFFIX, value1});
782     assets = manager->GetAssetsFromDBRecords(result);
783     EXPECT_TRUE(assets.empty());
784 
785     result.clear();
786     result.insert({assetPrefix0 + ObjectStore::NAME_SUFFIX, value0});
787     result.insert({assetPrefix0 + ObjectStore::URI_SUFFIX, value0});
788     result.insert({assetPrefix0 + ObjectStore::MODIFY_TIME_SUFFIX, value0});
789     result.insert({assetPrefix0 + ObjectStore::SIZE_SUFFIX, value0});
790     assets = manager->GetAssetsFromDBRecords(result);
791     ASSERT_EQ(assets.size(), 1);
792     EXPECT_EQ(assets[0].name, "test");
793     EXPECT_EQ(assets[0].uri, "test");
794     EXPECT_EQ(assets[0].modifyTime, "test");
795     EXPECT_EQ(assets[0].size, "test");
796     EXPECT_EQ(assets[0].hash, "test_test");
797 
798     result.clear();
799     result.insert({assetPrefix1 + ObjectStore::NAME_SUFFIX, value1});
800     result.insert({assetPrefix1 + ObjectStore::URI_SUFFIX, value1});
801     result.insert({assetPrefix1 + ObjectStore::MODIFY_TIME_SUFFIX, value1});
802     result.insert({assetPrefix1 + ObjectStore::SIZE_SUFFIX, value1});
803     assets = manager->GetAssetsFromDBRecords(result);
804     ASSERT_EQ(assets.size(), 1);
805     EXPECT_EQ(assets[0].name, "(string)test");
806     EXPECT_EQ(assets[0].uri, "(string)test");
807     EXPECT_EQ(assets[0].modifyTime, "(string)test");
808     EXPECT_EQ(assets[0].size, "(string)test");
809     EXPECT_EQ(assets[0].hash, "(string)test_(string)test");
810 }
811 
812 /**
813 * @tc.name: RegisterAssetsLister001
814 * @tc.desc: RegisterAssetsLister test.
815 * @tc.type: FUNC
816 * @tc.require:
817 * @tc.author: wangbin
818 */
819 HWTEST_F(ObjectManagerTest, RegisterAssetsLister001, TestSize.Level0)
820 {
821     auto manager = ObjectStoreManager::GetInstance();
822     manager->objectAssetsSendListener_ = nullptr;
823     manager->objectAssetsRecvListener_ = nullptr;
824     auto result = manager->RegisterAssetsLister();
825     ASSERT_EQ(result, true);
826     manager->objectAssetsSendListener_ = new ObjectAssetsSendListener();
827     manager->objectAssetsRecvListener_ = new ObjectAssetsRecvListener();;
828     result = manager->RegisterAssetsLister();
829     ASSERT_EQ(result, true);
830 }
831 
832 /**
833 * @tc.name: RegisterAssetsLister001
834 * @tc.desc: PushAssets test.
835 * @tc.type: FUNC
836 * @tc.require:
837 * @tc.author: wangbin
838 */
839 HWTEST_F(ObjectManagerTest, PushAssets001, TestSize.Level0)
840 {
841     auto manager = ObjectStoreManager::GetInstance();
842     std::map<std::string, std::vector<uint8_t>> data;
843     std::string assetPrefix = "PushAssets_test";
844     std::vector<uint8_t> completes;
845     completes.push_back(1); // for testing
846     completes.push_back(2); // for testing
847     data.insert({assetPrefix, completes});
848     auto result = manager->PushAssets(appId_, appId_, sessionId_, data, deviceId_);
849     ASSERT_EQ(result, DistributedObject::OBJECT_SUCCESS);
850 }
851 
852 /**
853 * @tc.name: AddNotifier001
854 * @tc.desc: AddNotifie and DeleteNotifier test.
855 * @tc.type: FUNC
856 */
857 HWTEST_F(ObjectManagerTest, AddNotifier001, TestSize.Level0)
858 {
859     auto syncManager = SequenceSyncManager::GetInstance();
860     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb2be85e00502(const std::map<std::string, int32_t> &results) 861     func = [](const std::map<std::string, int32_t> &results) {
862         return results;
863     };
864     auto sequenceId_ = syncManager->AddNotifier(userId_, func);
865     auto result = syncManager->DeleteNotifier(sequenceId_, userId_);
866     ASSERT_EQ(result, SequenceSyncManager::SUCCESS_USER_HAS_FINISHED);
867 }
868 
869 /**
870 * @tc.name: AddNotifier002
871 * @tc.desc: AddNotifie and DeleteNotifier test.
872 * @tc.type: FUNC
873 */
874 HWTEST_F(ObjectManagerTest, AddNotifier002, TestSize.Level0)
875 {
876     auto syncManager = SequenceSyncManager::GetInstance();
877     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb2be85e00602(const std::map<std::string, int32_t> &results) 878     func = [](const std::map<std::string, int32_t> &results) {
879         return results;
880     };
881     auto sequenceId = syncManager->AddNotifier(userId_, func);
882     ASSERT_NE(sequenceId, sequenceId_);
883     auto result = syncManager->DeleteNotifier(sequenceId_, userId_);
884     ASSERT_EQ(result, SequenceSyncManager::ERR_SID_NOT_EXIST);
885 }
886 
887 /**
888 * @tc.name: BindAsset 001
889 * @tc.desc: BindAsset test.
890 * @tc.type: FUNC
891 */
892 HWTEST_F(ObjectManagerTest, BindAsset001, TestSize.Level0)
893 {
894     auto manager = ObjectStoreManager::GetInstance();
895     std::string bundleName = "BindAsset";
896     uint32_t tokenId = IPCSkeleton::GetCallingTokenID();
897     auto result = manager->BindAsset(tokenId, bundleName, sessionId_, assetValue_, assetBindInfo_);
898     ASSERT_EQ(result, DistributedObject::OBJECT_DBSTATUS_ERROR);
899 }
900 } // namespace OHOS::Test
901