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