• 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 "bootstrap.h"
24 #include "device_manager_adapter_mock.h"
25 #include "executor_pool.h"
26 #include "kv_store_nb_delegate_mock.h"
27 #include "kvstore_meta_manager.h"
28 #include "metadata/object_user_meta_data.h"
29 #include "object_types.h"
30 #include "snapshot/machine_status.h"
31 
32 using namespace testing::ext;
33 using namespace OHOS::DistributedObject;
34 using namespace OHOS::DistributedData;
35 using namespace std;
36 using namespace testing;
37 using AssetValue = OHOS::CommonType::AssetValue;
38 using RestoreStatus = OHOS::DistributedObject::ObjectStoreManager::RestoreStatus;
39 namespace OHOS::Test {
40 class IObjectSaveCallback {
41 public:
42     virtual void Completed(const std::map<std::string, int32_t> &results) = 0;
43 };
44 class IObjectRevokeSaveCallback {
45 public:
46     virtual void Completed(int32_t status) = 0;
47 };
48 class IObjectRetrieveCallback {
49 public:
50     virtual void Completed(const std::map<std::string, std::vector<uint8_t>> &results, bool allReady) = 0;
51 };
52 class IObjectChangeCallback {
53 public:
54     virtual void Completed(const std::map<std::string, std::vector<uint8_t>> &results, bool allReady) = 0;
55 };
56 
57 class IObjectProgressCallback {
58 public:
59     virtual void Completed(int32_t progress) = 0;
60 };
61 
62 class ObjectSaveCallbackBroker : public IObjectSaveCallback, public IRemoteBroker {
63 public:
64     DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.DistributedObject.IObjectSaveCallback");
65 };
66 class ObjectSaveCallbackStub : public IRemoteStub<ObjectSaveCallbackBroker> {
67 public:
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)68     int OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override
69     {
70         return 0;
71     }
72 };
73 class ObjectRevokeSaveCallbackBroker : public IObjectRevokeSaveCallback, public IRemoteBroker {
74 public:
75     DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.DistributedObject.IObjectRevokeSaveCallback");
76 };
77 class ObjectRevokeSaveCallbackStub : public IRemoteStub<ObjectRevokeSaveCallbackBroker> {
78 public:
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)79     int OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override
80     {
81         return 0;
82     }
83 };
84 class ObjectRetrieveCallbackBroker : public IObjectRetrieveCallback, public IRemoteBroker {
85 public:
86     DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.DistributedObject.IObjectRetrieveCallback");
87 };
88 class ObjectRetrieveCallbackStub : public IRemoteStub<ObjectRetrieveCallbackBroker> {
89 public:
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)90     int OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override
91     {
92         return 0;
93     }
94 };
95 
96 class ObjectChangeCallbackBroker : public IObjectChangeCallback, public IRemoteBroker {
97 public:
98     DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.DistributedObject.IObjectChangeCallback");
99 };
100 
101 class ObjectChangeCallbackStub : public IRemoteStub<ObjectChangeCallbackBroker> {
102 public:
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)103     int OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override
104     {
105         return 0;
106     }
107 };
108 
109 class ObjectProgressCallbackBroker : public IObjectProgressCallback, public IRemoteBroker {
110 public:
111     DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.DistributedObject.IObjectProgressCallback");
112 };
113 
114 class ObjectProgressCallbackStub : public IRemoteStub<ObjectProgressCallbackBroker> {
115 public:
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)116     int OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) override
117     {
118         return 0;
119     }
120 };
121 
122 class ObjectSaveCallback : public ObjectSaveCallbackStub {
123 public:
ObjectSaveCallback(const std::function<void (const std::map<std::string,int32_t> &)> & callback)124     explicit ObjectSaveCallback(const std::function<void(const std::map<std::string, int32_t> &)> &callback)
125         : callback_(callback)
126     {
127     }
Completed(const std::map<std::string,int32_t> & results)128     void Completed(const std::map<std::string, int32_t> &results) override
129     {
130     }
131 
132 private:
133     const std::function<void(const std::map<std::string, int32_t> &)> callback_;
134 };
135 class ObjectRevokeSaveCallback : public ObjectRevokeSaveCallbackStub {
136 public:
ObjectRevokeSaveCallback(const std::function<void (int32_t)> & callback)137     explicit ObjectRevokeSaveCallback(const std::function<void(int32_t)> &callback) : callback_(callback)
138     {
139     }
Completed(int32_t)140     void Completed(int32_t) override
141     {
142     }
143 
144 private:
145     const std::function<void(int32_t status)> callback_;
146 };
147 class ObjectRetrieveCallback : public ObjectRetrieveCallbackStub {
148 public:
ObjectRetrieveCallback(const std::function<void (const std::map<std::string,std::vector<uint8_t>> &,bool)> & callback)149     explicit ObjectRetrieveCallback(
150         const std::function<void(const std::map<std::string, std::vector<uint8_t>> &, bool)> &callback)
151         : callback_(callback)
152     {
153     }
Completed(const std::map<std::string,std::vector<uint8_t>> & results,bool allReady)154     void Completed(const std::map<std::string, std::vector<uint8_t>> &results, bool allReady) override
155     {
156     }
157 
158 private:
159     const std::function<void(const std::map<std::string, std::vector<uint8_t>> &, bool)> callback_;
160 };
161 
162 class ObjectChangeCallback : public ObjectChangeCallbackStub {
163 public:
ObjectChangeCallback(const std::function<void (const std::map<std::string,std::vector<uint8_t>> &,bool)> & callback)164     explicit ObjectChangeCallback(
165         const std::function<void(const std::map<std::string, std::vector<uint8_t>> &, bool)> &callback)
166         : callback_(callback)
167     {
168     }
Completed(const std::map<std::string,std::vector<uint8_t>> & results,bool allReady)169     void Completed(const std::map<std::string, std::vector<uint8_t>> &results, bool allReady) override
170     {
171     }
172 
173 private:
174     const std::function<void(const std::map<std::string, std::vector<uint8_t>> &, bool)> callback_;
175 };
176 
177 class ObjectProgressCallback : public ObjectProgressCallbackStub {
178 public:
ObjectProgressCallback(const std::function<void (int32_t)> & callback)179     explicit ObjectProgressCallback(const std::function<void(int32_t)> &callback) : callback_(callback)
180     {
181     }
Completed(int32_t progress)182     void Completed(int32_t progress) override
183     {
184     }
185 
186 private:
187     const std::function<void(int32_t)> callback_;
188 };
189 
190 class ObjectManagerTest : public testing::Test {
191 public:
192     void SetUp();
193     void TearDown();
194     static void SetUpTestCase(void);
195     static void TearDownTestCase(void);
196 
197 protected:
198     Asset asset_;
199     std::string uri_;
200     std::string appId_ = "objectManagerTest_appid_1";
201     std::string sessionId_ = "123";
202     std::vector<uint8_t> data_;
203     std::string deviceId_ = "7001005458323933328a258f413b3900";
204     uint64_t sequenceId_ = 10;
205     uint64_t sequenceId_2 = 20;
206     uint64_t sequenceId_3 = 30;
207     std::string userId_ = "100";
208     std::string bundleName_ = "com.examples.notepad";
209     OHOS::ObjectStore::AssetBindInfo assetBindInfo_;
210     pid_t pid_ = 10;
211     uint32_t tokenId_ = 100;
212     AssetValue assetValue_;
213     static inline std::shared_ptr<DeviceManagerAdapterMock> devMgrAdapterMock = nullptr;
214 };
215 
SetUp()216 void ObjectManagerTest::SetUp()
217 {
218     uri_ = "file:://com.examples.notepad/data/storage/el2/distributedfiles/dir/asset1.jpg";
219     Asset asset{
220         .name = "test_name",
221         .uri = uri_,
222         .modifyTime = "modifyTime",
223         .size = "size",
224         .hash = "modifyTime_size",
225     };
226     asset_ = asset;
227 
228     AssetValue assetValue{
229         .id = "test_name",
230         .name = uri_,
231         .uri = uri_,
232         .createTime = "2024.07.23",
233         .modifyTime = "modifyTime",
234         .size = "size",
235         .hash = "modifyTime_size",
236         .path = "/data/storage/el2",
237     };
238     assetValue_ = assetValue;
239 
240     data_.push_back(10); // 10 is for testing
241     data_.push_back(20); // 20 is for testing
242     data_.push_back(30); // 30 is for testing
243 
244     OHOS::ObjectStore::AssetBindInfo AssetBindInfo{
245         .storeName = "store_test",
246         .tableName = "table_test",
247         .field = "attachment",
248         .assetName = "asset1.jpg",
249     };
250     assetBindInfo_ = AssetBindInfo;
251 }
252 
SetUpTestCase(void)253 void ObjectManagerTest::SetUpTestCase(void)
254 {
255     devMgrAdapterMock = make_shared<DeviceManagerAdapterMock>();
256     BDeviceManagerAdapter::deviceManagerAdapter = devMgrAdapterMock;
257     std::shared_ptr<ExecutorPool> executors = std::make_shared<ExecutorPool>(1, 0);
258     Bootstrap::GetInstance().LoadDirectory();
259     Bootstrap::GetInstance().LoadCheckers();
260     DistributedKv::KvStoreMetaManager::GetInstance().BindExecutor(executors);
261     DistributedKv::KvStoreMetaManager::GetInstance().InitMetaParameter();
262     DistributedKv::KvStoreMetaManager::GetInstance().InitMetaListener();
263 }
264 
TearDownTestCase(void)265 void ObjectManagerTest::TearDownTestCase(void)
266 {
267     BDeviceManagerAdapter::deviceManagerAdapter = nullptr;
268     devMgrAdapterMock = nullptr;
269 }
270 
TearDown()271 void ObjectManagerTest::TearDown()
272 {
273 }
274 
275 /**
276 * @tc.name: DeleteNotifier001
277 * @tc.desc: DeleteNotifier test.
278 * @tc.type: FUNC
279 * @tc.require:
280 * @tc.author: wangbin
281 */
282 HWTEST_F(ObjectManagerTest, DeleteNotifier001, TestSize.Level0)
283 {
284     auto syncManager = SequenceSyncManager::GetInstance();
285     auto result = syncManager->DeleteNotifier(sequenceId_, userId_);
286     ASSERT_EQ(result, SequenceSyncManager::ERR_SID_NOT_EXIST);
287 }
288 
289 /**
290 * @tc.name: Process001
291 * @tc.desc: Process test.
292 * @tc.type: FUNC
293 * @tc.require:
294 * @tc.author: wangbin
295 */
296 HWTEST_F(ObjectManagerTest, Process001, TestSize.Level0)
297 {
298     auto syncManager = SequenceSyncManager::GetInstance();
299     std::map<std::string, DistributedDB::DBStatus> results;
300     results = { { "test_cloud", DistributedDB::DBStatus::OK } };
301 
302     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb6a6c3420102(const std::map<std::string, int32_t> &results) 303     func = [](const std::map<std::string, int32_t> &results) { return results; };
304     auto result = syncManager->Process(sequenceId_, results, userId_);
305     ASSERT_EQ(result, SequenceSyncManager::ERR_SID_NOT_EXIST);
306     syncManager->seqIdCallbackRelations_.emplace(sequenceId_, func);
307     result = syncManager->Process(sequenceId_, results, userId_);
308     ASSERT_EQ(result, SequenceSyncManager::SUCCESS_USER_HAS_FINISHED);
309 }
310 
311 /**
312 * @tc.name: DeleteNotifierNoLock001
313 * @tc.desc: DeleteNotifierNoLock test.
314 * @tc.type: FUNC
315 * @tc.require:
316 * @tc.author: wangbin
317 */
318 HWTEST_F(ObjectManagerTest, DeleteNotifierNoLock001, TestSize.Level0)
319 {
320     auto syncManager = SequenceSyncManager::GetInstance();
321     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb6a6c3420202(const std::map<std::string, int32_t> &results) 322     func = [](const std::map<std::string, int32_t> &results) { return results; };
323     syncManager->seqIdCallbackRelations_.emplace(sequenceId_, func);
324     std::vector<uint64_t> seqIds = { sequenceId_, sequenceId_2, sequenceId_3 };
325     std::string userId = "user_1";
326     auto result = syncManager->DeleteNotifierNoLock(sequenceId_, userId_);
327     ASSERT_EQ(result, SequenceSyncManager::SUCCESS_USER_HAS_FINISHED);
328     syncManager->userIdSeqIdRelations_[userId] = seqIds;
329     result = syncManager->DeleteNotifierNoLock(sequenceId_, userId_);
330     ASSERT_EQ(result, SequenceSyncManager::SUCCESS_USER_IN_USE);
331 }
332 
333 /**
334 * @tc.name: SaveToStoreTest
335 * @tc.desc: SaveToStore test.
336 * @tc.type: FUNC
337 */
338 HWTEST_F(ObjectManagerTest, SaveToStoreTest, TestSize.Level1)
339 {
340     auto &manager = ObjectStoreManager::GetInstance();
341     std::string dataDir = "/data/app/el2/100/database";
342     manager.SetData(dataDir, userId_);
343     auto result = manager.Open();
344     ASSERT_EQ(result, DistributedObject::OBJECT_SUCCESS);
345     ASSERT_NE(manager.delegate_, nullptr);
346     ObjectRecord data{};
347     result = manager.SaveToStore("appId", "sessionId", "toDeviceId", data);
348     ASSERT_EQ(result, DistributedObject::OBJECT_SUCCESS);
349 
350     manager.ForceClose();
351     ASSERT_EQ(manager.delegate_, nullptr);
352     result = manager.SaveToStore("appId", "sessionId", "toDeviceId", data);
353     ASSERT_NE(result, DistributedObject::OBJECT_SUCCESS);
354 }
355 
356 /**
357 * @tc.name: Clear001
358 * @tc.desc: Clear test.
359 * @tc.type: FUNC
360 * @tc.require:
361 * @tc.author: wangbin
362 */
363 HWTEST_F(ObjectManagerTest, Clear001, TestSize.Level0)
364 {
365     ObjectUserMetaData userMeta;
366     MetaDataManager::GetInstance().SaveMeta(ObjectUserMetaData::GetKey(), userMeta, true);
367     auto &manager = ObjectStoreManager::GetInstance();
368     std::string dataDir = "/data/app/el2/100/database";
369     manager.SetData(dataDir, userId_);
370     auto result = manager.Clear();
371     ASSERT_EQ(result, OHOS::DistributedObject::OBJECT_SUCCESS);
372     auto size = manager.callbacks_.Size();
373     ASSERT_EQ(size, 0);
374 }
375 
376 /**
377 * @tc.name: registerAndUnregisterRemoteCallback001
378 * @tc.desc: test RegisterRemoteCallback and UnregisterRemoteCallback.
379 * @tc.type: FUNC
380 * @tc.require:
381 * @tc.author: wangbin
382 */
383 HWTEST_F(ObjectManagerTest, registerAndUnregisterRemoteCallback001, TestSize.Level0)
384 {
385     auto &manager = ObjectStoreManager::GetInstance();
386     std::function<void(const std::map<std::string, std::vector<uint8_t>> &, bool)> cb =
__anonb6a6c3420302(const std::map<std::string, std::vector<uint8_t>> &, bool) 387         [](const std::map<std::string, std::vector<uint8_t>> &, bool) {};
388     sptr<ObjectChangeCallbackBroker> objectRemoteResumeCallback = new (std::nothrow) ObjectChangeCallback(cb);
389     ASSERT_NE(objectRemoteResumeCallback, nullptr);
390     manager.RegisterRemoteCallback(bundleName_, sessionId_, pid_, tokenId_, objectRemoteResumeCallback->AsObject());
391     ObjectStoreManager::CallbackInfo callbackInfo = manager.callbacks_.Find(tokenId_).second;
392     std::string prefix = bundleName_ + sessionId_;
393     ASSERT_NE(callbackInfo.observers_.find(prefix), callbackInfo.observers_.end());
394     manager.UnregisterRemoteCallback(bundleName_, pid_, tokenId_, sessionId_);
395     callbackInfo = manager.callbacks_.Find(tokenId_).second;
396     ASSERT_EQ(callbackInfo.observers_.find(prefix), callbackInfo.observers_.end());
397 }
398 
399 /**
400 * @tc.name: registerAndUnregisterRemoteCallback002
401 * @tc.desc: abnormal use cases.
402 * @tc.type: FUNC
403 * @tc.require:
404 * @tc.author: wangbin
405 */
406 HWTEST_F(ObjectManagerTest, registerAndUnregisterRemoteCallback002, TestSize.Level0)
407 {
408     auto &manager = ObjectStoreManager::GetInstance();
409     sptr<IRemoteObject> callback;
410     uint32_t tokenId = 101;
411     manager.RegisterRemoteCallback("", sessionId_, pid_, tokenId, callback);
412     manager.RegisterRemoteCallback(bundleName_, "", pid_, tokenId, callback);
413     manager.RegisterRemoteCallback("", "", pid_, tokenId, callback);
414     manager.RegisterRemoteCallback(bundleName_, sessionId_, pid_, tokenId, nullptr);
415     ASSERT_EQ(manager.callbacks_.Find(tokenId).first, false);
416     manager.UnregisterRemoteCallback("", pid_, tokenId, sessionId_);
417 }
418 
419 /**
420 * @tc.name: NotifyDataChanged001
421 * @tc.desc: NotifyDataChanged test.
422 * @tc.type: FUNC
423 * @tc.require:
424 * @tc.author: wangbin
425 */
426 HWTEST_F(ObjectManagerTest, NotifyDataChanged001, TestSize.Level0)
427 {
428     auto &manager = ObjectStoreManager::GetInstance();
429     std::string bundleName1_ = "com.examples.ophm.notepad";
430     std::string objectKey = bundleName1_ + sessionId_;
431     std::map<std::string, std::map<std::string, std::vector<uint8_t>>> data;
432     std::map<std::string, std::vector<uint8_t>> data1;
433     std::vector<uint8_t> data1_;
434     data1_.push_back(RestoreStatus::DATA_READY);
435     data1_.push_back(RestoreStatus::ASSETS_READY);
436     data1_.push_back(RestoreStatus::ALL_READY);
437     data1 = { { "objectKey", data1_ } };
438     data = { { objectKey, data1 } };
439     std::shared_ptr<ExecutorPool> executors = std::make_shared<ExecutorPool>(5, 3); // executor pool
440     manager.SetThreadPool(executors);
441     ASSERT_EQ(manager.restoreStatus_.Find(objectKey).first, false);
442     manager.NotifyDataChanged(data, {});
443     ASSERT_EQ(manager.restoreStatus_.Find(objectKey).second, RestoreStatus::DATA_READY);
444 }
445 
446 /**
447 * @tc.name: NotifyAssetsReady001
448 * @tc.desc: NotifyAssetsReady test.
449 * @tc.type: FUNC
450 * @tc.require:
451 * @tc.author: wangbin
452 */
453 HWTEST_F(ObjectManagerTest, NotifyAssetsReady001, TestSize.Level0)
454 {
455     auto &manager = ObjectStoreManager::GetInstance();
456     std::string objectKey = bundleName_ + sessionId_;
457     std::string srcNetworkId = "1";
458     ASSERT_EQ(manager.restoreStatus_.Find(objectKey).first, false);
459     manager.NotifyAssetsReady(objectKey, srcNetworkId);
460     ASSERT_EQ(manager.restoreStatus_.Find(objectKey).second, RestoreStatus::ASSETS_READY);
461     manager.restoreStatus_.Clear();
462     manager.restoreStatus_.Insert(objectKey, RestoreStatus::DATA_READY);
463     manager.NotifyAssetsReady(objectKey, srcNetworkId);
464     ASSERT_EQ(manager.restoreStatus_.Find(objectKey).second, RestoreStatus::ALL_READY);
465 }
466 
467 /**
468  * @tc.name: NotifyAssetsReady002
469  * @tc.desc: NotifyAssetsReady test.
470  * @tc.type: FUNC
471  */
472 HWTEST_F(ObjectManagerTest, NotifyAssetsReady002, TestSize.Level0)
473 {
474     auto &manager = ObjectStoreManager::GetInstance();
475     std::string objectKey = "com.example.myapplicaiton123456";
476     std::string srcNetworkId = "654321";
477 
478     manager.restoreStatus_.Clear();
479     manager.NotifyAssetsStart(objectKey, srcNetworkId);
480     auto [has0, value0] = manager.restoreStatus_.Find(objectKey);
481     EXPECT_TRUE(has0);
482     EXPECT_EQ(value0, RestoreStatus::NONE);
483 
484     manager.restoreStatus_.Clear();
485     manager.NotifyAssetsReady(objectKey, srcNetworkId);
486     auto [has1, value1] = manager.restoreStatus_.Find(objectKey);
487     EXPECT_TRUE(has1);
488     EXPECT_EQ(value1, RestoreStatus::ASSETS_READY);
489 
490     manager.restoreStatus_.Clear();
491     manager.restoreStatus_.Insert(objectKey, RestoreStatus::DATA_NOTIFIED);
492     manager.NotifyAssetsReady(objectKey, srcNetworkId);
493     auto [has2, value2] = manager.restoreStatus_.Find(objectKey);
494     EXPECT_TRUE(has2);
495     EXPECT_EQ(value2, RestoreStatus::ALL_READY);
496 
497     manager.restoreStatus_.Clear();
498     manager.restoreStatus_.Insert(objectKey, RestoreStatus::DATA_READY);
499     manager.NotifyAssetsReady(objectKey, srcNetworkId);
500     auto [has3, value3] = manager.restoreStatus_.Find(objectKey);
501     EXPECT_TRUE(has3);
502     EXPECT_EQ(value3, RestoreStatus::ALL_READY);
503     manager.restoreStatus_.Clear();
504 }
505 
506 /**
507 * @tc.name: NotifyChange001
508 * @tc.desc: NotifyChange test.
509 * @tc.type: FUNC
510 * @tc.require:
511 * @tc.author: wangbin
512 */
513 HWTEST_F(ObjectManagerTest, NotifyChange001, TestSize.Level0)
514 {
515     auto &manager = ObjectStoreManager::GetInstance();
516     std::map<std::string, std::vector<uint8_t>> data;
517     std::map<std::string, std::vector<uint8_t>> data1;
518     std::vector<uint8_t> data1_;
519     data1_.push_back(RestoreStatus::DATA_READY);
520     data_.push_back(RestoreStatus::ALL_READY);
521     data = { { "test_cloud", data_ } };
522     data1 = { { "p_###SAVEINFO###001", data1_ } };
523     manager.NotifyChange(data1);
524     EXPECT_FALSE(manager.restoreStatus_.Find("p_###SAVEINFO###001").first);
525     manager.NotifyChange(data);
526     EXPECT_FALSE(manager.restoreStatus_.Find("test_cloud").first);
527 }
528 
529 /**
530  * @tc.name: NotifyChange002
531  * @tc.desc: NotifyChange test.
532  * @tc.type: FUNC
533  */
534 HWTEST_F(ObjectManagerTest, NotifyChange002, TestSize.Level0)
535 {
536     auto &manager = ObjectStoreManager::GetInstance();
537     std::shared_ptr<ExecutorPool> executor = std::make_shared<ExecutorPool>(1, 0);
538     manager.SetThreadPool(executor);
539     std::map<std::string, std::vector<uint8_t>> data{};
540     std::vector<uint8_t> value{ 0 };
541     std::string bundleName = "com.example.myapplication";
542     std::string sessionId = "123456";
543     std::string source = "source";
544     std::string target = "target";
545     std::string timestamp = "1234567890";
546     ObjectStoreManager::SaveInfo saveInfo(bundleName, sessionId, source, target, timestamp);
547     std::string saveInfoStr = DistributedData::Serializable::Marshall(saveInfo);
548     auto saveInfoValue = std::vector<uint8_t>(saveInfoStr.begin(), saveInfoStr.end());
549     std::string prefix = saveInfo.ToPropertyPrefix();
550     std::string assetPrefix = prefix + "p_asset";
551     data.insert_or_assign(prefix + "p_###SAVEINFO###", saveInfoValue);
552     data.insert_or_assign(prefix + "p_data", value);
553     data.insert_or_assign(assetPrefix + ObjectStore::NAME_SUFFIX, value);
554     data.insert_or_assign(assetPrefix + ObjectStore::URI_SUFFIX, value);
555     data.insert_or_assign(assetPrefix + ObjectStore::PATH_SUFFIX, value);
556     data.insert_or_assign(assetPrefix + ObjectStore::CREATE_TIME_SUFFIX, value);
557     data.insert_or_assign(assetPrefix + ObjectStore::MODIFY_TIME_SUFFIX, value);
558     data.insert_or_assign(assetPrefix + ObjectStore::SIZE_SUFFIX, value);
559     data.insert_or_assign("testkey", value);
560     EXPECT_CALL(*devMgrAdapterMock, IsSameAccount(_)).WillOnce(Return(true));
561     manager.NotifyChange(data);
562     EXPECT_TRUE(manager.restoreStatus_.Contains(bundleName + sessionId));
563     auto [has, taskId] = manager.objectTimer_.Find(bundleName + sessionId);
564     EXPECT_TRUE(has);
565     manager.restoreStatus_.Clear();
566     manager.executors_->Remove(taskId);
567     manager.objectTimer_.Clear();
568 }
569 
570 /**
571  * @tc.name: ComputeStatus001
572  * @tc.desc: ComputeStatus.test
573  * @tc.type: FUNC
574  */
575 HWTEST_F(ObjectManagerTest, ComputeStatus001, TestSize.Level0)
576 {
577     auto &manager = ObjectStoreManager::GetInstance();
578     std::shared_ptr<ExecutorPool> executor = std::make_shared<ExecutorPool>(1, 0);
579     manager.SetThreadPool(executor);
580     std::string objectKey = "com.example.myapplicaiton123456";
581     std::map<std::string, std::map<std::string, std::vector<uint8_t>>> data{};
582     manager.restoreStatus_.Clear();
583     manager.ComputeStatus(objectKey, {}, data);
584     auto [has0, value0] = manager.restoreStatus_.Find(objectKey);
585     EXPECT_TRUE(has0);
586     EXPECT_EQ(value0, RestoreStatus::DATA_READY);
587     auto [has1, taskId1] = manager.objectTimer_.Find(objectKey);
588     EXPECT_TRUE(has1);
589     manager.executors_->Remove(taskId1);
590     manager.objectTimer_.Clear();
591     manager.restoreStatus_.Clear();
592 
593     manager.restoreStatus_.Insert(objectKey, RestoreStatus::ASSETS_READY);
594     manager.ComputeStatus(objectKey, {}, data);
595     auto [has2, value2] = manager.restoreStatus_.Find(objectKey);
596     EXPECT_TRUE(has2);
597     EXPECT_EQ(value2, RestoreStatus::ALL_READY);
598     auto [has3, taskId3] = manager.objectTimer_.Find(objectKey);
599     EXPECT_FALSE(has3);
600     manager.restoreStatus_.Clear();
601 }
602 
603 /**
604 * @tc.name: Open001
605 * @tc.desc: Open test.
606 * @tc.type: FUNC
607 * @tc.require:
608 * @tc.author: wangbin
609 */
610 HWTEST_F(ObjectManagerTest, Open001, TestSize.Level0)
611 {
612     auto &manager = ObjectStoreManager::GetInstance();
613     manager.kvStoreDelegateManager_ = nullptr;
614     auto result = manager.Open();
615     ASSERT_EQ(result, DistributedObject::OBJECT_INNER_ERROR);
616     std::string dataDir = "/data/app/el2/100/database";
617     manager.SetData(dataDir, userId_);
618     manager.delegate_ = nullptr;
619     result = manager.Open();
620     ASSERT_EQ(result, DistributedObject::OBJECT_SUCCESS);
621     manager.delegate_ = manager.OpenObjectKvStore();
622     result = manager.Open();
623     ASSERT_EQ(result, DistributedObject::OBJECT_SUCCESS);
624     manager.ForceClose();
625     ASSERT_EQ(manager.delegate_, nullptr);
626 }
627 
628 /**
629 * @tc.name: OnAssetChanged001
630 * @tc.desc: OnAssetChanged test.
631 * @tc.type: FUNC
632 * @tc.require:
633 * @tc.author: wangbin
634 */
635 HWTEST_F(ObjectManagerTest, OnAssetChanged001, TestSize.Level0)
636 {
637     auto &manager = ObjectStoreManager::GetInstance();
638     std::shared_ptr<Snapshot> snapshot = std::make_shared<ObjectSnapshot>();
639     auto snapshotKey = appId_ + "_" + sessionId_;
640     auto result = manager.OnAssetChanged(tokenId_, appId_, sessionId_, deviceId_, assetValue_);
641     ASSERT_EQ(result, DistributedObject::OBJECT_INNER_ERROR);
642     manager.snapshots_.Insert(snapshotKey, snapshot);
643     result = manager.OnAssetChanged(tokenId_, appId_, sessionId_, deviceId_, assetValue_);
644     ASSERT_EQ(result, DistributedObject::OBJECT_SUCCESS);
645 }
646 
647 /**
648 * @tc.name: DeleteSnapshot001
649 * @tc.desc: DeleteSnapshot test.
650 * @tc.type: FUNC
651 * @tc.require:
652 * @tc.author: wangbin
653 */
654 HWTEST_F(ObjectManagerTest, DeleteSnapshot001, TestSize.Level0)
655 {
656     auto &manager = ObjectStoreManager::GetInstance();
657     std::shared_ptr<Snapshot> snapshot = std::make_shared<ObjectSnapshot>();
658     auto snapshotKey = bundleName_ + "_" + sessionId_;
659     auto snapshots = manager.snapshots_.Find(snapshotKey).second;
660     ASSERT_EQ(snapshots, nullptr);
661     manager.DeleteSnapshot(bundleName_, sessionId_);
662 
663     manager.snapshots_.Insert(snapshotKey, snapshot);
664     snapshots = manager.snapshots_.Find(snapshotKey).second;
665     ASSERT_NE(snapshots, nullptr);
666     manager.DeleteSnapshot(bundleName_, sessionId_);
667 }
668 
669 /**
670 * @tc.name: FlushClosedStore001
671 * @tc.desc: FlushClosedStore test.
672 * @tc.type: FUNC
673 * @tc.require:
674 * @tc.author: wangbin
675 */
676 HWTEST_F(ObjectManagerTest, FlushClosedStore001, TestSize.Level0)
677 {
678     auto &manager = ObjectStoreManager::GetInstance();
679     manager.isSyncing_ = true;
680     manager.syncCount_ = 10; // test syncCount_
681     manager.delegate_ = nullptr;
682     manager.FlushClosedStore();
683     manager.isSyncing_ = false;
684     manager.FlushClosedStore();
685     manager.syncCount_ = 0; // test syncCount_
686     manager.FlushClosedStore();
687     manager.delegate_ = manager.OpenObjectKvStore();
688     ASSERT_NE(manager.delegate_, nullptr);
689     manager.FlushClosedStore();
690     ASSERT_EQ(manager.delegate_, nullptr);
691 }
692 
693 /**
694 * @tc.name: Close001
695 * @tc.desc: Close test.
696 * @tc.type: FUNC
697 * @tc.require:
698 * @tc.author: wangbin
699 */
700 HWTEST_F(ObjectManagerTest, Close001, TestSize.Level0)
701 {
702     auto &manager = ObjectStoreManager::GetInstance();
703     manager.syncCount_ = 1; // test syncCount_
704     manager.Close();
705     ASSERT_EQ(manager.syncCount_, 1); // 1 is for testing
706     manager.delegate_ = manager.OpenObjectKvStore();
707     manager.Close();
708     ASSERT_EQ(manager.syncCount_, 0); // 0 is for testing
709 }
710 
711 /**
712 * @tc.name: RetrieveFromStore001
713 * @tc.desc: RetrieveFromStore test.
714 * @tc.type: FUNC
715 * @tc.require:
716 * @tc.author: wangbin
717 */
718 HWTEST_F(ObjectManagerTest, RetrieveFromStore001, TestSize.Level0)
719 {
720     auto &manager = ObjectStoreManager::GetInstance();
721     DistributedDB::KvStoreNbDelegateMock mockDelegate;
722     manager.delegate_ = &mockDelegate;
723     std::vector<uint8_t> id;
724     id.push_back(1); // for testing
725     id.push_back(2); // for testing
726     std::map<std::string, std::vector<uint8_t>> results;
727     results = { { "test_cloud", id } };
728     auto result = manager.RetrieveFromStore(appId_, sessionId_, results);
729     ASSERT_EQ(result, OBJECT_SUCCESS);
730 }
731 
732 /**
733 * @tc.name: SyncCompleted001
734 * @tc.desc: SyncCompleted test.
735 * @tc.type: FUNC
736 * @tc.require:
737 * @tc.author: wangbin
738 */
739 HWTEST_F(ObjectManagerTest, SyncCompleted001, TestSize.Level0)
740 {
741     auto &manager = ObjectStoreManager::GetInstance();
742     auto syncManager = SequenceSyncManager::GetInstance();
743     std::map<std::string, DistributedDB::DBStatus> results;
744     results = { { "test_cloud", DistributedDB::DBStatus::OK } };
745     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb6a6c3420402(const std::map<std::string, int32_t> &results) 746     func = [](const std::map<std::string, int32_t> &results) { return results; };
747     manager.userId_ = "99";
748     std::vector<uint64_t> userId;
749     userId.push_back(99);
750     userId.push_back(100);
751     manager.SyncCompleted(results, sequenceId_);
752     syncManager->userIdSeqIdRelations_ = { { "test_cloud", userId } };
753     manager.SyncCompleted(results, sequenceId_);
754     userId.clear();
755     syncManager->seqIdCallbackRelations_.emplace(sequenceId_, func);
756     manager.SyncCompleted(results, sequenceId_);
757     userId.push_back(99);
758     userId.push_back(100);
759     manager.SyncCompleted(results, sequenceId_);
760     EXPECT_FALSE(manager.isSyncing_);
761 }
762 
763 /**
764 * @tc.name: SplitEntryKey001
765 * @tc.desc: SplitEntryKey test.
766 * @tc.type: FUNC
767 * @tc.require:
768 * @tc.author: wangbin
769 */
770 HWTEST_F(ObjectManagerTest, SplitEntryKey001, TestSize.Level0)
771 {
772     auto &manager = ObjectStoreManager::GetInstance();
773     std::string key1 = "";
774     std::string key2 = "ObjectManagerTest";
775     auto result = manager.SplitEntryKey(key1);
776     ASSERT_EQ(result.empty(), true);
777     result = manager.SplitEntryKey(key2);
778     ASSERT_EQ(result.empty(), true);
779 }
780 
781 /**
782 * @tc.name: SplitEntryKey002
783 * @tc.desc: SplitEntryKey test.
784 * @tc.type: FUNC
785 */
786 HWTEST_F(ObjectManagerTest, SplitEntryKey002, TestSize.Level0)
787 {
788     auto &manager = ObjectStoreManager::GetInstance();
789     std::string key1 = "com.example.myapplication_sessionId_source_target_1234567890_p_propertyName";
790     auto res = manager.SplitEntryKey(key1);
791     EXPECT_EQ(res[0], "com.example.myapplication");
792     EXPECT_EQ(res[1], "sessionId");
793     EXPECT_EQ(res[2], "source");
794     EXPECT_EQ(res[3], "target");
795     EXPECT_EQ(res[4], "1234567890");
796     EXPECT_EQ(res[5], "p_propertyName");
797 
798     std::string key2 = "com.example.myapplication_sessionId_source_target_000_p_propertyName";
799     res = manager.SplitEntryKey(key2);
800     EXPECT_TRUE(res.empty());
801 
802     std::string key3 = "com.example.myapplicationsessionIdsourcetarget_1234567890_p_propertyName";
803     res = manager.SplitEntryKey(key3);
804     EXPECT_TRUE(res.empty());
805 
806     std::string key4 = "com.example.myapplicationsessionIdsource_target_1234567890_p_propertyName";
807     res = manager.SplitEntryKey(key4);
808     EXPECT_TRUE(res.empty());
809 
810     std::string key5 = "com.example.myapplicationsessionId_source_target_1234567890_p_propertyName";
811     res = manager.SplitEntryKey(key5);
812     EXPECT_TRUE(res.empty());
813 }
814 
815 /**
816 * @tc.name: ProcessOldEntry001
817 * @tc.desc: ProcessOldEntry test.
818 * @tc.type: FUNC
819 * @tc.require:
820 * @tc.author: wangbin
821 */
822 HWTEST_F(ObjectManagerTest, ProcessOldEntry001, TestSize.Level0)
823 {
824     auto &manager = ObjectStoreManager::GetInstance();
825     manager.delegate_ = manager.OpenObjectKvStore();
826     std::vector<DistributedDB::Entry> entries;
827     auto status = manager.delegate_->GetEntries(std::vector<uint8_t>(appId_.begin(), appId_.end()), entries);
828     ASSERT_EQ(status, DistributedDB::DBStatus::NOT_FOUND);
829     manager.ProcessOldEntry(appId_);
830 
831     DistributedDB::KvStoreNbDelegateMock mockDelegate;
832     manager.delegate_ = &mockDelegate;
833     status = manager.delegate_->GetEntries(std::vector<uint8_t>(appId_.begin(), appId_.end()), entries);
834     ASSERT_EQ(status, DistributedDB::DBStatus::OK);
835     manager.ProcessOldEntry(appId_);
836 }
837 
838 /**
839 * @tc.name: ProcessSyncCallback001
840 * @tc.desc: ProcessSyncCallback test.
841 * @tc.type: FUNC
842 * @tc.require:
843 * @tc.author: wangbin
844 */
845 HWTEST_F(ObjectManagerTest, ProcessSyncCallback001, TestSize.Level0)
846 {
847     auto &manager = ObjectStoreManager::GetInstance();
848     std::map<std::string, int32_t> results;
849     manager.ProcessSyncCallback(results, appId_, sessionId_, deviceId_);
850     results.insert({ "local", 1 }); // for testing
851     ASSERT_EQ(results.empty(), false);
852     ASSERT_NE(results.find("local"), results.end());
853     manager.ProcessSyncCallback(results, appId_, sessionId_, deviceId_);
854 }
855 
856 /**
857 * @tc.name: ProcessSyncCallback002
858 * @tc.desc: ProcessSyncCallback test.
859 * @tc.type: FUNC
860 */
861 HWTEST_F(ObjectManagerTest, ProcessSyncCallback002, TestSize.Level0)
862 {
863     std::string dataDir = "/data/app/el2/100/database";
864     auto &manager = ObjectStoreManager::GetInstance();
865     std::map<std::string, int32_t> results;
866 
867     results.insert({ "remote", 1 }); // for testing
868     ASSERT_EQ(results.empty(), false);
869     ASSERT_EQ(results.find("local"), results.end());
870 
871     manager.kvStoreDelegateManager_ = nullptr;
872     // open store failed -> success
873     manager.ProcessSyncCallback(results, appId_, sessionId_, deviceId_);
874 
875     // open store success -> success
876     manager.SetData(dataDir, userId_);
877     ASSERT_NE(manager.kvStoreDelegateManager_, nullptr);
878     manager.delegate_ = manager.OpenObjectKvStore();
879     ASSERT_NE(manager.delegate_, nullptr);
880     manager.ProcessSyncCallback(results, appId_, sessionId_, deviceId_);
881 }
882 
883 /**
884 * @tc.name: IsAssetComplete001
885 * @tc.desc: IsAssetComplete test.
886 * @tc.type: FUNC
887 * @tc.require:
888 * @tc.author: wangbin
889 */
890 HWTEST_F(ObjectManagerTest, IsAssetComplete001, TestSize.Level0)
891 {
892     auto &manager = ObjectStoreManager::GetInstance();
893     std::map<std::string, std::vector<uint8_t>> results;
894     std::vector<uint8_t> completes;
895     completes.push_back(1); // for testing
896     completes.push_back(2); // for testing
897     std::string assetPrefix = "IsAssetComplete_test";
898     results.insert({ assetPrefix, completes });
899     auto result = manager.IsAssetComplete(results, assetPrefix);
900     ASSERT_EQ(result, false);
901     results.insert({ assetPrefix + ObjectStore::NAME_SUFFIX, completes });
902     result = manager.IsAssetComplete(results, assetPrefix);
903     ASSERT_EQ(result, false);
904     results.insert({ assetPrefix + ObjectStore::URI_SUFFIX, completes });
905     result = manager.IsAssetComplete(results, assetPrefix);
906     ASSERT_EQ(result, false);
907     results.insert({ assetPrefix + ObjectStore::PATH_SUFFIX, completes });
908     result = manager.IsAssetComplete(results, assetPrefix);
909     ASSERT_EQ(result, false);
910     results.insert({ assetPrefix + ObjectStore::CREATE_TIME_SUFFIX, completes });
911     result = manager.IsAssetComplete(results, assetPrefix);
912     ASSERT_EQ(result, false);
913     results.insert({ assetPrefix + ObjectStore::MODIFY_TIME_SUFFIX, completes });
914     result = manager.IsAssetComplete(results, assetPrefix);
915     ASSERT_EQ(result, false);
916     results.insert({ assetPrefix + ObjectStore::SIZE_SUFFIX, completes });
917     result = manager.IsAssetComplete(results, assetPrefix);
918     ASSERT_EQ(result, true);
919 }
920 
921 /**
922 * @tc.name: GetAssetsFromDBRecords001
923 * @tc.desc: GetAssetsFromDBRecords test.
924 * @tc.type: FUNC
925 * @tc.require:
926 * @tc.author: wangbin
927 */
928 HWTEST_F(ObjectManagerTest, GetAssetsFromDBRecords001, TestSize.Level0)
929 {
930     auto &manager = ObjectStoreManager::GetInstance();
931     std::map<std::string, std::vector<uint8_t>> results;
932     std::vector<uint8_t> completes;
933     completes.push_back(1); // for testing
934     completes.push_back(2); // for testing
935     std::string assetPrefix = "IsAssetComplete_test";
936     results.insert({ assetPrefix, completes });
937     results.insert({ assetPrefix + ObjectStore::NAME_SUFFIX, completes });
938     results.insert({ assetPrefix + ObjectStore::URI_SUFFIX, completes });
939     results.insert({ assetPrefix + ObjectStore::MODIFY_TIME_SUFFIX, completes });
940     results.insert({ assetPrefix + ObjectStore::SIZE_SUFFIX, completes });
941     auto result = manager.GetAssetsFromDBRecords(results);
942     ASSERT_EQ(result.empty(), false);
943 }
944 
945 /**
946 * @tc.name: GetAssetsFromDBRecords002
947 * @tc.desc: GetAssetsFromDBRecords test.
948 * @tc.type: FUNC
949 */
950 HWTEST_F(ObjectManagerTest, GetAssetsFromDBRecords002, TestSize.Level0)
951 {
952     auto &manager = ObjectStoreManager::GetInstance();
953     std::map<std::string, std::vector<uint8_t>> result;
954 
955     std::vector<uint8_t> value0{ 0 };
956     std::string data0 = "[STRING]test";
957     value0.insert(value0.end(), data0.begin(), data0.end());
958 
959     std::vector<uint8_t> value1{ 0 };
960     std::string data1 = "(string)test";
961     value1.insert(value1.end(), data1.begin(), data1.end());
962 
963     std::string prefix = "bundleName_sessionId_source_target_timestamp";
964     std::string dataKey = prefix + "_p_data";
965     std::string assetPrefix0 = prefix + "_p_asset0";
966     std::string assetPrefix1 = prefix + "_p_asset1";
967 
968     result.insert({ dataKey, value0 });
969     auto assets = manager.GetAssetsFromDBRecords(result);
970     EXPECT_TRUE(assets.empty());
971 
972     result.clear();
973     result.insert({ assetPrefix0 + ObjectStore::URI_SUFFIX, value0 });
974     assets = manager.GetAssetsFromDBRecords(result);
975     EXPECT_TRUE(assets.empty());
976 
977     result.clear();
978     result.insert({ assetPrefix1 + ObjectStore::NAME_SUFFIX, value1 });
979     assets = manager.GetAssetsFromDBRecords(result);
980     EXPECT_TRUE(assets.empty());
981 
982     result.clear();
983     result.insert({ assetPrefix0 + ObjectStore::NAME_SUFFIX, value0 });
984     result.insert({ assetPrefix0 + ObjectStore::URI_SUFFIX, value0 });
985     result.insert({ assetPrefix0 + ObjectStore::MODIFY_TIME_SUFFIX, value0 });
986     result.insert({ assetPrefix0 + ObjectStore::SIZE_SUFFIX, value0 });
987     assets = manager.GetAssetsFromDBRecords(result);
988     ASSERT_EQ(assets.size(), 1);
989     EXPECT_EQ(assets[0].name, "test");
990     EXPECT_EQ(assets[0].uri, "test");
991     EXPECT_EQ(assets[0].modifyTime, "test");
992     EXPECT_EQ(assets[0].size, "test");
993     EXPECT_EQ(assets[0].hash, "test_test");
994 
995     result.clear();
996     result.insert({ assetPrefix1 + ObjectStore::NAME_SUFFIX, value1 });
997     result.insert({ assetPrefix1 + ObjectStore::URI_SUFFIX, value1 });
998     result.insert({ assetPrefix1 + ObjectStore::MODIFY_TIME_SUFFIX, value1 });
999     result.insert({ assetPrefix1 + ObjectStore::SIZE_SUFFIX, value1 });
1000     assets = manager.GetAssetsFromDBRecords(result);
1001     ASSERT_EQ(assets.size(), 1);
1002     EXPECT_EQ(assets[0].name, "(string)test");
1003     EXPECT_EQ(assets[0].uri, "(string)test");
1004     EXPECT_EQ(assets[0].modifyTime, "(string)test");
1005     EXPECT_EQ(assets[0].size, "(string)test");
1006     EXPECT_EQ(assets[0].hash, "(string)test_(string)test");
1007 }
1008 
1009 /**
1010 * @tc.name: RegisterAssetsLister001
1011 * @tc.desc: RegisterAssetsLister test.
1012 * @tc.type: FUNC
1013 * @tc.require:
1014 * @tc.author: wangbin
1015 */
1016 HWTEST_F(ObjectManagerTest, RegisterAssetsLister001, TestSize.Level0)
1017 {
1018     auto &manager = ObjectStoreManager::GetInstance();
1019     manager.objectAssetsSendListener_ = nullptr;
1020     manager.objectAssetsRecvListener_ = nullptr;
1021     auto result = manager.RegisterAssetsLister();
1022     ASSERT_EQ(result, true);
1023     manager.objectAssetsSendListener_ = new ObjectAssetsSendListener();
1024     manager.objectAssetsRecvListener_ = new ObjectAssetsRecvListener();
1025     result = manager.RegisterAssetsLister();
1026     ASSERT_EQ(result, true);
1027 }
1028 
1029 /**
1030 * @tc.name: PushAssets001
1031 * @tc.desc: PushAssets test.
1032 * @tc.type: FUNC
1033 * @tc.require:
1034 * @tc.author: wangbin
1035 */
1036 HWTEST_F(ObjectManagerTest, PushAssets001, TestSize.Level0)
1037 {
1038     auto &manager = ObjectStoreManager::GetInstance();
1039     std::map<std::string, std::vector<uint8_t>> data;
1040     std::string assetPrefix = "PushAssets_test";
1041     std::vector<uint8_t> completes;
1042     completes.push_back(1); // for testing
1043     completes.push_back(2); // for testing
1044     data.insert({ assetPrefix, completes });
1045     auto result = manager.PushAssets(appId_, appId_, sessionId_, data, deviceId_);
1046     ASSERT_EQ(result, DistributedObject::OBJECT_SUCCESS);
1047 }
1048 
1049 /**
1050 * @tc.name: PushAssets002
1051 * @tc.desc: PushAssets test.
1052 * @tc.type: FUNC
1053 */
1054 HWTEST_F(ObjectManagerTest, PushAssets002, TestSize.Level0)
1055 {
1056     auto &manager = ObjectStoreManager::GetInstance();
1057     std::map<std::string, std::vector<uint8_t>> data;
1058     std::vector<uint8_t> value{ 0 };
1059     std::string data0 = "[STRING]test";
1060     value.insert(value.end(), data0.begin(), data0.end());
1061 
1062     std::string prefix = "bundleName_sessionId_source_target_timestamp";
1063     std::string dataKey = prefix + "_p_data";
1064     std::string assetPrefix = prefix + "_p_asset0";
1065     std::string fieldsPrefix = "p_";
1066     std::string deviceIdKey = "__deviceId";
1067 
1068     data.insert({ assetPrefix + ObjectStore::NAME_SUFFIX, value });
1069     data.insert({ assetPrefix + ObjectStore::URI_SUFFIX, value });
1070     data.insert({ assetPrefix + ObjectStore::MODIFY_TIME_SUFFIX, value });
1071     data.insert({ assetPrefix + ObjectStore::SIZE_SUFFIX, value });
1072     data.insert({ fieldsPrefix + deviceIdKey, value });
1073 
1074     manager.objectAssetsSendListener_ = nullptr;
1075     int32_t ret = manager.PushAssets(appId_, appId_, sessionId_, data, deviceId_);
1076     EXPECT_NE(ret, DistributedObject::OBJECT_SUCCESS);
1077 
1078     manager.objectAssetsSendListener_ = new ObjectAssetsSendListener();
1079     ASSERT_NE(manager.objectAssetsSendListener_, nullptr);
1080     ret = manager.PushAssets(appId_, appId_, sessionId_, data, deviceId_);
1081     EXPECT_NE(ret, DistributedObject::OBJECT_SUCCESS);
1082 }
1083 
1084 /**
1085 * @tc.name: AddNotifier001
1086 * @tc.desc: AddNotifie and DeleteNotifier test.
1087 * @tc.type: FUNC
1088 */
1089 HWTEST_F(ObjectManagerTest, AddNotifier001, TestSize.Level0)
1090 {
1091     auto syncManager = SequenceSyncManager::GetInstance();
1092     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb6a6c3420502(const std::map<std::string, int32_t> &results) 1093     func = [](const std::map<std::string, int32_t> &results) { return results; };
1094     auto sequenceId_ = syncManager->AddNotifier(userId_, func);
1095     auto result = syncManager->DeleteNotifier(sequenceId_, userId_);
1096     ASSERT_EQ(result, SequenceSyncManager::SUCCESS_USER_HAS_FINISHED);
1097 }
1098 
1099 /**
1100 * @tc.name: AddNotifier002
1101 * @tc.desc: AddNotifie and DeleteNotifier test.
1102 * @tc.type: FUNC
1103 */
1104 HWTEST_F(ObjectManagerTest, AddNotifier002, TestSize.Level0)
1105 {
1106     auto syncManager = SequenceSyncManager::GetInstance();
1107     std::function<void(const std::map<std::string, int32_t> &results)> func;
__anonb6a6c3420602(const std::map<std::string, int32_t> &results) 1108     func = [](const std::map<std::string, int32_t> &results) { return results; };
1109     auto sequenceId = syncManager->AddNotifier(userId_, func);
1110     ASSERT_NE(sequenceId, sequenceId_);
1111     auto result = syncManager->DeleteNotifier(sequenceId_, userId_);
1112     ASSERT_EQ(result, SequenceSyncManager::ERR_SID_NOT_EXIST);
1113 }
1114 
1115 /**
1116 * @tc.name: BindAsset 001
1117 * @tc.desc: BindAsset test.
1118 * @tc.type: FUNC
1119 */
1120 HWTEST_F(ObjectManagerTest, BindAsset001, TestSize.Level0)
1121 {
1122     auto &manager = ObjectStoreManager::GetInstance();
1123     std::string bundleName = "BindAsset";
1124     uint32_t tokenId = IPCSkeleton::GetCallingTokenID();
1125     auto result = manager.BindAsset(tokenId, bundleName, sessionId_, assetValue_, assetBindInfo_);
1126     ASSERT_EQ(result, DistributedObject::OBJECT_DBSTATUS_ERROR);
1127 }
1128 
1129 /**
1130 * @tc.name: OnFinished001
1131 * @tc.desc: OnFinished test.
1132 * @tc.type: FUNC
1133 */
1134 HWTEST_F(ObjectManagerTest, OnFinished001, TestSize.Level1)
1135 {
1136     std::string srcNetworkId = "srcNetworkId";
1137     sptr<AssetObj> assetObj = nullptr;
1138     int32_t result = 100;
1139     ObjectAssetsRecvListener listener;
1140     int32_t ret = listener.OnFinished(srcNetworkId, assetObj, result);
1141     EXPECT_NE(ret, DistributedObject::OBJECT_SUCCESS);
1142 
1143     sptr<AssetObj> assetObj_1 = new AssetObj();
1144     assetObj_1->dstBundleName_ = bundleName_;
1145     assetObj_1->srcBundleName_ = bundleName_;
1146     assetObj_1->dstNetworkId_ = "1";
1147     assetObj_1->sessionId_ = "123";
1148     ret = listener.OnFinished(srcNetworkId, assetObj_1, result);
1149     EXPECT_EQ(ret, DistributedObject::OBJECT_SUCCESS);
1150 }
1151 
1152 /**
1153 * @tc.name: GetObjectData001
1154 * @tc.desc: GetObjectData test.
1155 * @tc.type: FUNC
1156 */
1157 HWTEST_F(ObjectManagerTest, GetObjectData001, TestSize.Level1)
1158 {
1159     auto &manager = ObjectStoreManager::GetInstance();
1160 
1161     std::string bundleName = bundleName_;
1162     std::string sessionId = sessionId_;
1163     std::string source = "sourceDeviceId";
1164     std::string target = "targetDeviceId";
1165     std::string timestamp = "1234567890";
1166     ObjectStoreManager::SaveInfo saveInfo(bundleName, sessionId, source, target, timestamp);
1167     std::string prefix = saveInfo.ToPropertyPrefix();
1168     EXPECT_FALSE(prefix.empty());
1169 
1170     // p_name not asset key
1171     std::string p_name = "p_namejpg";
1172     std::string key = bundleName + "_" + sessionId + "_" + source + "_" + target + "_" + timestamp + "_" + p_name;
1173     std::map<std::string, std::vector<uint8_t>> changedData = { { key, data_ } };
1174     bool hasAsset = false;
1175     auto ret = manager.GetObjectData(changedData, saveInfo, hasAsset);
1176     EXPECT_FALSE(ret.empty());
1177     EXPECT_FALSE(hasAsset);
1178 }
1179 
1180 /**
1181 * @tc.name: GetObjectData002
1182 * @tc.desc: GetObjectData test.
1183 * @tc.type: FUNC
1184 */
1185 HWTEST_F(ObjectManagerTest, GetObjectData002, TestSize.Level1)
1186 {
1187     auto &manager = ObjectStoreManager::GetInstance();
1188 
1189     std::string bundleName = "";
1190     std::string sessionId = "";
1191     std::string source = "";
1192     std::string target = "";
1193     std::string timestamp = "";
1194     ObjectStoreManager::SaveInfo saveInfo(bundleName, sessionId, source, target, timestamp);
1195     std::string prefix = saveInfo.ToPropertyPrefix();
1196     EXPECT_TRUE(prefix.empty());
1197 
1198     // saveInfo.bundleName, sourceDeviceId, targetDeviceId empty
1199     saveInfo.sessionId = sessionId_;
1200     saveInfo.timestamp = "1234567890";
1201 
1202     bundleName = bundleName_;
1203     sessionId = sessionId_;
1204     source = "sourceDeviceId";
1205     target = "targetDeviceId";
1206     timestamp = "1234567890";
1207     std::string p_name = "p_name.jpg";
1208     std::string key = bundleName + "_" + sessionId + "_" + source + "_" + target + "_" + timestamp + "_" + p_name;
1209     std::map<std::string, std::vector<uint8_t>> changedData = { { key, data_ } };
1210     bool hasAsset = false;
1211     auto ret = manager.GetObjectData(changedData, saveInfo, hasAsset);
1212     EXPECT_FALSE(ret.empty());
1213     EXPECT_EQ(saveInfo.bundleName, bundleName);
1214     EXPECT_TRUE(hasAsset);
1215 
1216     // only targetDeviceId empty
1217     saveInfo.bundleName = "test_bundleName";
1218     saveInfo.sourceDeviceId = "test_source";
1219     // p_name not asset key
1220     p_name = "p_namejpg";
1221     std::string key_1 = bundleName + "_" + sessionId + "_" + source + "_" + target + "_" + timestamp + "_" + p_name;
1222     std::map<std::string, std::vector<uint8_t>> changedData_1 = { { key_1, data_ } };
1223     hasAsset = false;
1224     ret = manager.GetObjectData(changedData_1, saveInfo, hasAsset);
1225     EXPECT_FALSE(ret.empty());
1226     EXPECT_NE(saveInfo.bundleName, bundleName);
1227     EXPECT_FALSE(hasAsset);
1228 }
1229 
1230 /**
1231 * @tc.name: InitUserMeta001
1232 * @tc.desc: test clear old user meta.
1233 * @tc.type: FUNC
1234 */
1235 HWTEST_F(ObjectManagerTest, InitUserMeta001, TestSize.Level1)
1236 {
1237     auto &manager = ObjectStoreManager::GetInstance();
1238     auto status = manager.InitUserMeta();
1239     ASSERT_EQ(status, DistributedObject::OBJECT_SUCCESS);
1240 }
1241 
1242 /**
1243 * @tc.name: registerAndUnregisterProgressObserverCallback001
1244 * @tc.desc: test RegisterProgressObserverCallback and UnregisterProgressObserverCallback.
1245 * @tc.type: FUNC
1246 * @tc.require:
1247 * @tc.author:
1248 */
1249 HWTEST_F(ObjectManagerTest, registerAndUnregisterProgressObserverCallback001, TestSize.Level0)
1250 {
1251     auto &manager = ObjectStoreManager::GetInstance();
__anonb6a6c3420702(int32_t progress) 1252     std::function<void(int32_t)> cb = [](int32_t progress) {};
1253     sptr<ObjectProgressCallbackBroker> objectRemoteResumeCallback = new (std::nothrow) ObjectProgressCallback(cb);
1254     ASSERT_NE(objectRemoteResumeCallback, nullptr);
1255     manager.RegisterProgressObserverCallback(bundleName_, sessionId_, pid_, tokenId_,
1256         objectRemoteResumeCallback->AsObject());
1257     ObjectStoreManager::ProgressCallbackInfo progressCallbackInfo = manager.processCallbacks_.Find(tokenId_).second;
1258     std::string objectKey = bundleName_ + sessionId_;
1259     ASSERT_NE(progressCallbackInfo.observers_.find(objectKey), progressCallbackInfo.observers_.end());
1260     manager.UnregisterProgressObserverCallback(bundleName_, pid_, tokenId_, sessionId_);
1261     progressCallbackInfo = manager.processCallbacks_.Find(tokenId_).second;
1262     ASSERT_EQ(progressCallbackInfo.observers_.find(objectKey), progressCallbackInfo.observers_.end());
1263 }
1264 
1265 /**
1266 * @tc.name: registerAndUnregisterProgressObserverCallback002
1267 * @tc.desc: abnormal use cases.
1268 * @tc.type: FUNC
1269 * @tc.require:
1270 * @tc.author:
1271 */
1272 HWTEST_F(ObjectManagerTest, registerAndUnregisterProgressObserverCallback002, TestSize.Level0)
1273 {
1274     auto &manager = ObjectStoreManager::GetInstance();
1275     sptr<IRemoteObject> callback;
1276     uint32_t tokenId = 101;
1277     manager.RegisterProgressObserverCallback("", sessionId_, pid_, tokenId, callback);
1278     manager.RegisterProgressObserverCallback(bundleName_, "", pid_, tokenId, callback);
1279     manager.RegisterProgressObserverCallback("", "", pid_, tokenId, callback);
1280     ObjectStoreManager::ProgressCallbackInfo progressCallbackInfo = manager.processCallbacks_.Find(tokenId_).second;
1281     progressCallbackInfo.pid = pid_;
1282     manager.RegisterProgressObserverCallback(bundleName_, sessionId_, pid_, tokenId_, callback);
1283     ASSERT_EQ(manager.processCallbacks_.Find(tokenId).first, false);
1284     manager.UnregisterProgressObserverCallback("", pid_, tokenId, sessionId_);
1285     manager.UnregisterProgressObserverCallback("", pid_, tokenId, "");
1286     manager.UnregisterProgressObserverCallback(bundleName_, pid_, tokenId, "");
1287 }
1288 
1289 /**
1290 * @tc.name: NotifyAssetsRecvProgress001
1291 * @tc.desc: NotifyAssetsRecvProgress test.
1292 * @tc.type: FUNC
1293 * @tc.require:
1294 * @tc.author:
1295 */
1296 HWTEST_F(ObjectManagerTest, NotifyAssetsRecvProgress001, TestSize.Level0)
1297 {
1298     auto &manager = ObjectStoreManager::GetInstance();
1299     std::string objectKey = bundleName_ + sessionId_;
1300     std::string errProgress = "errProgress";
1301     int32_t progress = 99;
1302     ObjectStoreManager::ProgressCallbackInfo progressCallbackInfo = manager.processCallbacks_.Find(tokenId_).second;
1303     manager.NotifyAssetsRecvProgress(objectKey, progress);
1304     ASSERT_EQ(manager.assetsRecvProgress_.Find(objectKey).first, true);
1305     manager.assetsRecvProgress_.Clear();
1306     manager.assetsRecvProgress_.Insert(objectKey, progress);
1307     manager.NotifyAssetsRecvProgress(errProgress, progress);
1308     progressCallbackInfo.observers_.clear();
1309 }
1310 
1311 /**
1312 * @tc.name: OnRecvProgress001
1313 * @tc.desc: OnRecvProgress test.
1314 * @tc.type: FUNC
1315 */
1316 HWTEST_F(ObjectManagerTest, OnRecvProgress001, TestSize.Level1)
1317 {
1318     std::string srcNetworkId = "srcNetworkId";
1319     sptr<AssetObj> assetObj = nullptr;
1320     uint64_t totalBytes = 100;
1321     uint64_t processBytes = 100;
1322     ObjectAssetsRecvListener listener;
1323     int32_t ret = listener.OnRecvProgress(srcNetworkId, assetObj, totalBytes, processBytes);
1324     EXPECT_EQ(ret, DistributedObject::OBJECT_INNER_ERROR);
1325     uint64_t totalBytes_01 = 0;
1326     ret = listener.OnRecvProgress(srcNetworkId, assetObj, totalBytes_01, processBytes);
1327     EXPECT_EQ(ret, DistributedObject::OBJECT_INNER_ERROR);
1328     sptr<AssetObj> assetObj_1 = new AssetObj();
1329     ret = listener.OnRecvProgress(srcNetworkId, assetObj_1, totalBytes_01, processBytes);
1330     EXPECT_EQ(ret, DistributedObject::OBJECT_INNER_ERROR);
1331     ret = listener.OnRecvProgress(srcNetworkId, assetObj_1, totalBytes, processBytes);
1332     EXPECT_EQ(ret, DistributedObject::OBJECT_SUCCESS);
1333 }
1334 
1335 /**
1336 * @tc.name: OnFinished002
1337 * @tc.desc: OnFinished test.
1338 * @tc.type: FUNC
1339 */
1340 HWTEST_F(ObjectManagerTest, OnFinished002, TestSize.Level1)
1341 {
1342     std::string srcNetworkId = "srcNetworkId";
1343     ObjectAssetsRecvListener listener;
1344     sptr<AssetObj> assetObj_1 = new AssetObj();
1345     assetObj_1->dstBundleName_ = bundleName_;
1346     assetObj_1->srcBundleName_ = bundleName_;
1347     assetObj_1->dstNetworkId_ = "1";
1348     assetObj_1->sessionId_ = "123";
1349     int32_t result = 100;
1350     auto ret = listener.OnFinished(srcNetworkId, assetObj_1, result);
1351     int32_t result_1 = 0;
1352     ret = listener.OnFinished(srcNetworkId, assetObj_1, result_1);
1353     EXPECT_EQ(ret, DistributedObject::OBJECT_SUCCESS);
1354 }
1355 
1356 /**
1357 * @tc.name: Save001
1358 * @tc.desc: Save test.
1359 * @tc.type: FUNC
1360 */
1361 HWTEST_F(ObjectManagerTest, Save001, TestSize.Level1)
1362 {
1363     auto &manager = ObjectStoreManager::GetInstance();
1364     std::string appId = "appId";
1365     std::string sessionId = "sessionId";
1366     ObjectRecord data;
1367     std::string deviceId = "deviceId";
1368     auto ret = manager.Save(appId, sessionId, data, deviceId, nullptr);
1369     EXPECT_EQ(ret, DistributedKv::INVALID_ARGUMENT);
1370 }
1371 
1372 /**
1373 * @tc.name: Save002
1374 * @tc.desc: Save test.
1375 * @tc.type: FUNC
1376 */
1377 HWTEST_F(ObjectManagerTest, Save002, TestSize.Level1)
1378 {
1379     auto &manager = ObjectStoreManager::GetInstance();
1380     std::string appId = "appId";
1381     std::string sessionId = "sessionId";
1382     ObjectRecord data;
1383     std::string deviceId = "";
__anonb6a6c3420802(const std::map<std::string, int32_t> &) 1384     std::function<void(const std::map<std::string, int32_t> &)> cb = [](const std::map<std::string, int32_t> &) {};
1385     sptr<ObjectSaveCallbackBroker> objectSaveCallback = new (std::nothrow) ObjectSaveCallback(cb);
1386     ASSERT_NE(objectSaveCallback, nullptr);
1387     auto ret = manager.Save(appId, sessionId, data, deviceId, objectSaveCallback->AsObject());
1388     EXPECT_EQ(ret, DistributedKv::INVALID_ARGUMENT);
1389 }
1390 
1391 /**
1392 * @tc.name: RevokeSave001
1393 * @tc.desc: RevokeSave test.
1394 * @tc.type: FUNC
1395 */
1396 HWTEST_F(ObjectManagerTest, RevokeSave001, TestSize.Level1)
1397 {
1398     auto &manager = ObjectStoreManager::GetInstance();
1399     std::string appId = "appId";
1400     std::string sessionId = "sessionId";
1401     auto ret = manager.RevokeSave(appId, sessionId, nullptr);
1402     EXPECT_EQ(ret, DistributedKv::INVALID_ARGUMENT);
1403 }
1404 
1405 /**
1406 * @tc.name: RevokeSave002
1407 * @tc.desc: RevokeSave test.
1408 * @tc.type: FUNC
1409 */
1410 HWTEST_F(ObjectManagerTest, RevokeSave002, TestSize.Level1)
1411 {
1412     auto &manager = ObjectStoreManager::GetInstance();
1413     std::string appId = "appId";
1414     std::string sessionId = "sessionId";
__anonb6a6c3420902(int32_t) 1415     std::function<void(int32_t status)> cb = [](int32_t) {};
1416     sptr<ObjectRevokeSaveCallbackBroker> objectRevokeSaveCallback = new (std::nothrow) ObjectRevokeSaveCallback(cb);
1417     ASSERT_NE(objectRevokeSaveCallback, nullptr);
1418     auto ret = manager.RevokeSave(appId, sessionId, objectRevokeSaveCallback->AsObject());
1419     EXPECT_EQ(ret, DistributedObject::OBJECT_SUCCESS);
1420 }
1421 
1422 /**
1423 * @tc.name: Retrieve001
1424 * @tc.desc: Retrieve test.
1425 * @tc.type: FUNC
1426 */
1427 HWTEST_F(ObjectManagerTest, Retrieve001, TestSize.Level1)
1428 {
1429     auto &manager = ObjectStoreManager::GetInstance();
1430     std::string bundleName = "bundleName";
1431     std::string sessionId = "sessionId";
1432     uint32_t tokenId = 0;
1433     auto ret = manager.Retrieve(bundleName, sessionId, nullptr, tokenId);
1434     EXPECT_EQ(ret, DistributedKv::INVALID_ARGUMENT);
1435 }
1436 
1437 /**
1438 * @tc.name: Retrieve002
1439 * @tc.desc: Retrieve test.
1440 * @tc.type: FUNC
1441 */
1442 HWTEST_F(ObjectManagerTest, Retrieve002, TestSize.Level1)
1443 {
1444     auto &manager = ObjectStoreManager::GetInstance();
1445     std::string bundleName = "bundleName";
1446     std::string sessionId = "sessionId";
1447     uint32_t tokenId = 0;
1448     std::function<void(const std::map<std::string, std::vector<uint8_t>> &, bool)> cb =
__anonb6a6c3420a02(const std::map<std::string, std::vector<uint8_t>> &, bool) 1449         [](const std::map<std::string, std::vector<uint8_t>> &, bool) {};
1450     sptr<ObjectRetrieveCallbackBroker> objectRetrieveCallback = new (std::nothrow) ObjectRetrieveCallback(cb);
1451     ASSERT_NE(objectRetrieveCallback, nullptr);
1452     auto ret = manager.Retrieve(bundleName, sessionId, objectRetrieveCallback->AsObject(), tokenId);
1453     EXPECT_EQ(ret, DistributedKv::KEY_NOT_FOUND);
1454 }
1455 
1456 /**
1457 * @tc.name: GetSnapShots001
1458 * @tc.desc: ObjectStoreManager get snapShots test.
1459 * @tc.type: FUNC
1460 */
1461 HWTEST_F(ObjectManagerTest, GetSnapShots001, TestSize.Level1)
1462 {
1463     auto &manager = ObjectStoreManager::GetInstance();
1464     std::string bundleName = "bundleA";
1465     std::string storeName = "storeA";
1466 
1467     auto ptr1 = manager.GetSnapShots(bundleName, storeName);
1468     ASSERT_NE(ptr1, nullptr);
1469     EXPECT_TRUE(ptr1->empty());
1470     auto snapshot = std::make_shared<ObjectSnapshot>();
1471     (*ptr1)["snap1"] = snapshot;
1472 
1473     auto ptr2 = manager.GetSnapShots(bundleName, storeName);
1474     EXPECT_EQ(ptr1, ptr2);
1475     EXPECT_EQ((*ptr2)["snap1"], snapshot);
1476 }
1477 } // namespace OHOS::Test
1478