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 "ObjectSnapshotTest"
17 
18 #include "object_snapshot.h"
19 
20 #include <gtest/gtest.h>
21 
22 #include "executor_pool.h"
23 #include "snapshot/machine_status.h"
24 
25 using namespace testing::ext;
26 using namespace OHOS::DistributedObject;
27 using namespace OHOS::DistributedData;
28 namespace OHOS::Test {
29 
30 class ObjectSnapshotTest : public testing::Test {
31 public:
32     void SetUp();
33     void TearDown();
34 
35 protected:
36     AssetBindInfo AssetBindInfo_;
37     Asset asset_;
38     std::string uri_;
39     StoreInfo storeInfo_;
40 };
41 
SetUp()42 void ObjectSnapshotTest::SetUp()
43 {
44     uri_ = "file:://com.example.hmos.notepad/data/storage/el2/distributedfiles/dir/asset1.jpg";
45     Asset asset{
46         .name = "test_name",
47         .uri = uri_,
48         .modifyTime = "modifyTime",
49         .size = "size",
50         .hash = "modifyTime_size",
51     };
52     asset_ = asset;
53 
54     VBucket vBucket{ { "11", 111 } };
55     AssetBindInfo AssetBindInfo{
56         .storeName = "store_test",
57         .tableName = "table_test",
58         .primaryKey = vBucket,
59         .field = "attachment",
60         .assetName = "asset1.jpg",
61     };
62     AssetBindInfo_ = AssetBindInfo;
63     StoreInfo storeInfo {
64         .tokenId = 0,
65         .bundleName = "bundleName_test",
66         .storeName = "store_test",
67         .instanceId = 1,
68         .user = 100,
69     };
70     storeInfo_ = storeInfo;
71     ChangedAssetInfo changedAssetInfo(asset, AssetBindInfo, storeInfo);
72 }
73 
TearDown()74 void ObjectSnapshotTest::TearDown() {}
75 
76 /**
77 * @tc.name: UploadTest001
78 * @tc.desc: Upload test.
79 * @tc.type: FUNC
80 * @tc.require:
81 * @tc.author: wangbin
82 */
HWTEST_F(ObjectSnapshotTest, UploadTest001, TestSize.Level0)83 HWTEST_F(ObjectSnapshotTest, UploadTest001, TestSize.Level0)
84 {
85     auto snapshot = std::make_shared<ObjectSnapshot>();
86     Asset asset{
87         .name = "test_name",
88         .uri = "file:://com.example.hmos.notepad/data/storage/el2/distributedfiles/dir/asset2.jpg",
89         .modifyTime = "modifyTime1",
90         .size = "size1",
91         .hash = "modifyTime1_size1",
92     };
93     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
94     ASSERT_EQ(snapshot->IsBoundAsset(asset), false);
95     auto upload = snapshot->Upload(asset);
96     ASSERT_EQ(upload, 0);
97 }
98 
99 /**
100 * @tc.name: UploadTest002
101 * @tc.desc: Upload test.
102 * @tc.type: FUNC
103 * @tc.require:
104 * @tc.author: wangbin
105 */
HWTEST_F(ObjectSnapshotTest, UploadTest002, TestSize.Level0)106 HWTEST_F(ObjectSnapshotTest, UploadTest002, TestSize.Level0)
107 {
108     auto snapshot = std::make_shared<ObjectSnapshot>();
109     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
110     ASSERT_EQ(snapshot->IsBoundAsset(asset_), true);
111     auto upload = snapshot->Upload(asset_);
112     ASSERT_EQ(upload, 0);
113 }
114 
115 /**
116 * @tc.name: DownloadTest001
117 * @tc.desc: Download test.
118 * @tc.type: FUNC
119 * @tc.require:
120 * @tc.author: wangbin
121 */
HWTEST_F(ObjectSnapshotTest, DownloadTest001, TestSize.Level0)122 HWTEST_F(ObjectSnapshotTest, DownloadTest001, TestSize.Level0)
123 {
124     auto snapshot = std::make_shared<ObjectSnapshot>();
125     Asset asset{
126         .name = "test_name",
127         .uri = "file:://com.example.hmos.notepad/data/storage/el2/distributedfiles/dir/asset2.jpg",
128         .modifyTime = "modifyTime1",
129         .size = "size1",
130         .hash = "modifyTime1_size1",
131     };
132     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
133     ASSERT_EQ(snapshot->IsBoundAsset(asset), false);
134     auto upload = snapshot->Download(asset);
135     ASSERT_EQ(upload, 0);
136 }
137 
138 /**
139 * @tc.name: DownloadTest002
140 * @tc.desc: Download test.
141 * @tc.type: FUNC
142 * @tc.require:
143 * @tc.author: wangbin
144 */
HWTEST_F(ObjectSnapshotTest, DownloadTest002, TestSize.Level0)145 HWTEST_F(ObjectSnapshotTest, DownloadTest002, TestSize.Level0)
146 {
147     auto snapshot = std::make_shared<ObjectSnapshot>();
148     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
149     ASSERT_EQ(snapshot->IsBoundAsset(asset_), true);
150     auto upload = snapshot->Download(asset_);
151     ASSERT_EQ(upload, 0);
152 }
153 
154 /**
155 * @tc.name: GetAssetStatusTest001
156 * @tc.desc: GetAssetStatus test.
157 * @tc.type: FUNC
158 * @tc.require:
159 * @tc.author: wangbin
160 */
HWTEST_F(ObjectSnapshotTest, GetAssetStatusTest001, TestSize.Level0)161 HWTEST_F(ObjectSnapshotTest, GetAssetStatusTest001, TestSize.Level0)
162 {
163     auto snapshot = std::make_shared<ObjectSnapshot>();
164     Asset asset{
165         .name = "test_name",
166         .uri = "file:://com.example.hmos.notepad/data/storage/el2/distributedfiles/dir/asset2.jpg",
167         .modifyTime = "modifyTime1",
168         .size = "size1",
169         .hash = "modifyTime1_size1",
170     };
171     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
172     ASSERT_EQ(snapshot->IsBoundAsset(asset), false);
173     auto upload = snapshot->GetAssetStatus(asset);
174     ASSERT_EQ(upload, STATUS_BUTT);
175 }
176 
177 /**
178 * @tc.name: GetAssetStatusTest002
179 * @tc.desc: GetAssetStatus test.
180 * @tc.type: FUNC
181 * @tc.require:
182 * @tc.author: wangbin
183 */
HWTEST_F(ObjectSnapshotTest, GetAssetStatusTest002, TestSize.Level0)184 HWTEST_F(ObjectSnapshotTest, GetAssetStatusTest002, TestSize.Level0)
185 {
186     auto snapshot = std::make_shared<ObjectSnapshot>();
187     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
188     ASSERT_EQ(snapshot->IsBoundAsset(asset_), true);
189     auto upload = snapshot->GetAssetStatus(asset_);
190     ASSERT_EQ(upload, STATUS_STABLE);
191 }
192 
193 /**
194 * @tc.name: UploadedTest001
195 * @tc.desc: Uploaded test.
196 * @tc.type: FUNC
197 * @tc.require:
198 * @tc.author: wangbin
199 */
HWTEST_F(ObjectSnapshotTest, UploadedTest001, TestSize.Level0)200 HWTEST_F(ObjectSnapshotTest, UploadedTest001, TestSize.Level0)
201 {
202     auto snapshot = std::make_shared<ObjectSnapshot>();
203     Asset asset{
204         .name = "test_name",
205         .uri = "file:://com.example.hmos.notepad/data/storage/el2/distributedfiles/dir/asset2.jpg",
206         .modifyTime = "modifyTime1",
207         .size = "size1",
208         .hash = "modifyTime1_size1",
209     };
210     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
211     ASSERT_EQ(snapshot->IsBoundAsset(asset), false);
212     auto upload = snapshot->Uploaded(asset);
213     ASSERT_EQ(upload, E_OK);
214 }
215 
216 /**
217 * @tc.name: UploadedTest002
218 * @tc.desc: Uploaded test.
219 * @tc.type: FUNC
220 * @tc.require:
221 * @tc.author: wangbin
222 */
HWTEST_F(ObjectSnapshotTest, UploadedTest002, TestSize.Level0)223 HWTEST_F(ObjectSnapshotTest, UploadedTest002, TestSize.Level0)
224 {
225     auto snapshot = std::make_shared<ObjectSnapshot>();
226     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
227     ASSERT_EQ(snapshot->IsBoundAsset(asset_), true);
228     auto upload = snapshot->Uploaded(asset_);
229     ASSERT_EQ(upload, E_OK);
230 }
231 
232 /**
233 * @tc.name: DownloadedTest001
234 * @tc.desc: Downloaded test.
235 * @tc.type: FUNC
236 * @tc.require:
237 * @tc.author: wangbin
238 */
HWTEST_F(ObjectSnapshotTest, DownloadedTest001, TestSize.Level0)239 HWTEST_F(ObjectSnapshotTest, DownloadedTest001, TestSize.Level0)
240 {
241     auto snapshot = std::make_shared<ObjectSnapshot>();
242     Asset asset{
243         .name = "test_name",
244         .uri = "file:://com.example.hmos.notepad/data/storage/el2/distributedfiles/dir/asset2.jpg",
245         .modifyTime = "modifyTime1",
246         .size = "size1",
247         .hash = "modifyTime1_size1",
248     };
249     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
250     ASSERT_EQ(snapshot->IsBoundAsset(asset), false);
251     auto upload = snapshot->Downloaded(asset);
252     ASSERT_EQ(upload, E_OK);
253 }
254 
255 /**
256 * @tc.name: DownloadedTest002
257 * @tc.desc: Downloaded test.
258 * @tc.type: FUNC
259 * @tc.require:
260 * @tc.author: wangbin
261 */
HWTEST_F(ObjectSnapshotTest, DownloadedTest002, TestSize.Level0)262 HWTEST_F(ObjectSnapshotTest, DownloadedTest002, TestSize.Level0)
263 {
264     auto snapshot = std::make_shared<ObjectSnapshot>();
265     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
266     ASSERT_EQ(snapshot->IsBoundAsset(asset_), true);
267     auto upload = snapshot->Downloaded(asset_);
268     ASSERT_EQ(upload, E_OK);
269 }
270 
271 /**
272 * @tc.name: TransferredTest001
273 * @tc.desc: Transferred test.
274 * @tc.type: FUNC
275 * @tc.require:
276 * @tc.author: wangbin
277 */
HWTEST_F(ObjectSnapshotTest, TransferredTest001, TestSize.Level0)278 HWTEST_F(ObjectSnapshotTest, TransferredTest001, TestSize.Level0)
279 {
280     auto snapshot = std::make_shared<ObjectSnapshot>();
281     Asset asset{
282         .name = "test_name",
283         .uri = "file:://com.example.hmos.notepad/data/storage/el2/distributedfiles/dir/asset2.jpg",
284         .modifyTime = "modifyTime1",
285         .size = "size1",
286         .hash = "modifyTime1_size1",
287     };
288     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
289     ASSERT_EQ(snapshot->IsBoundAsset(asset), false);
290     auto upload = snapshot->Transferred(asset);
291     ASSERT_EQ(upload, E_OK);
292 }
293 
294 /**
295 * @tc.name: TransferredTest002
296 * @tc.desc: Transferred test.
297 * @tc.type: FUNC
298 * @tc.require:
299 * @tc.author: wangbin
300 */
HWTEST_F(ObjectSnapshotTest, TransferredTest002, TestSize.Level0)301 HWTEST_F(ObjectSnapshotTest, TransferredTest002, TestSize.Level0)
302 {
303     auto snapshot = std::make_shared<ObjectSnapshot>();
304     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
305     ASSERT_EQ(snapshot->IsBoundAsset(asset_), true);
306     auto upload = snapshot->Transferred(asset_);
307     ASSERT_EQ(upload, E_OK);
308 }
309 
310 /**
311 * @tc.name: OnDataChangedTest001
312 * @tc.desc: OnDataChanged test.
313 * @tc.type: FUNC
314 * @tc.require:
315 * @tc.author: wangbin
316 */
HWTEST_F(ObjectSnapshotTest, OnDataChangedTest001, TestSize.Level0)317 HWTEST_F(ObjectSnapshotTest, OnDataChangedTest001, TestSize.Level0)
318 {
319     auto snapshot = std::make_shared<ObjectSnapshot>();
320     std::string deviceId = "object_snapshot_test_1";
321     Asset asset{
322         .name = "test_name",
323         .uri = "file:://com.example.hmos.notepad/data/storage/el2/distributedfiles/dir/asset2.jpg",
324         .modifyTime = "modifyTime1",
325         .size = "size1",
326         .hash = "modifyTime1_size1",
327     };
328     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
329     ASSERT_EQ(snapshot->IsBoundAsset(asset), false);
330     auto upload = snapshot->OnDataChanged(asset, deviceId);
331     ASSERT_EQ(upload, E_OK);
332 }
333 
334 /**
335 * @tc.name: OnDataChangedTest002
336 * @tc.desc: OnDataChanged test.
337 * @tc.type: FUNC
338 * @tc.require:
339 * @tc.author: wangbin
340 */
HWTEST_F(ObjectSnapshotTest, OnDataChangedTest002, TestSize.Level0)341 HWTEST_F(ObjectSnapshotTest, OnDataChangedTest002, TestSize.Level0)
342 {
343     auto snapshot = std::make_shared<ObjectSnapshot>();
344     std::string deviceId = "object_snapshot_test_1";
345     snapshot->BindAsset(asset_, AssetBindInfo_, storeInfo_);
346     ASSERT_EQ(snapshot->IsBoundAsset(asset_), true);
347     auto upload = snapshot->OnDataChanged(asset_, deviceId);
348     ASSERT_EQ(upload, E_OK);
349 }
350 
351 /**
352 * @tc.name: BindAsset001
353 * @tc.desc: BindAsset test.
354 * @tc.type: FUNC
355 * @tc.require:
356 * @tc.author: wangbin
357 */
HWTEST_F(ObjectSnapshotTest, BindAsset001, TestSize.Level0)358 HWTEST_F(ObjectSnapshotTest, BindAsset001, TestSize.Level0)
359 {
360     auto snapshot = std::make_shared<ObjectSnapshot>();
361     Asset asset{
362         .name = "test_name",
363         .uri = "file:://com.example.hmos.notepad/data/storage/el2/distributedfiles/dir/asset2.jpg",
364         .modifyTime = "modifyTime1",
365         .size = "size1",
366         .hash = "modifyTime1_size1",
367     };
368     ASSERT_EQ(snapshot->IsBoundAsset(asset), false);
369     snapshot->BindAsset(asset, AssetBindInfo_, storeInfo_);
370     ASSERT_EQ(snapshot->IsBoundAsset(asset), true);
371     snapshot->BindAsset(asset, AssetBindInfo_, storeInfo_);
372 }
373 } // namespace OHOS::Test