1 /*
2  * Copyright (c) 2022-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <iostream>
17 #include <map>
18 #include <sstream>
19 #include <string>
20 #include <sys/stat.h>
21 #include <unistd.h>
22 #include <vector>
23 
24 #include <gtest/gtest.h>
25 
26 #include "b_resources/b_constants.h"
27 #include "tools_op.h"
28 
29 #include "b_error/b_error.h"
30 #include "b_error/b_excep_utils.h"
31 #include "b_file_info.h"
32 #include "tools_op_restore.cpp"
33 
34 namespace OHOS::FileManagement::Backup {
35 using namespace std;
36 
37 namespace {
38 const string BUNDLE_NAME = "com.example.app2backup/";
39 const string MANAGE_JSON = "manage.json";
40 const string FILE_NAME = "1.tar";
41 } // namespace
42 
43 class ToolsOpRestoreTest : public testing::Test {
44 public:
SetUpTestCase(void)45     static void SetUpTestCase(void) {};
TearDownTestCase()46     static void TearDownTestCase() {};
SetUp()47     void SetUp() {};
TearDown()48     void TearDown() {};
49 };
50 
51 /**
52  * @tc.number: SUB_backup_tools_op_restore_0100
53  * @tc.name: SUB_backup_tools_op_restore_0100
54  * @tc.desc: 测试
55  * @tc.size: MEDIUM
56  * @tc.type: FUNC
57  * @tc.level Level 1
58  * @tc.require: I6F3GV
59  */
60 HWTEST_F(ToolsOpRestoreTest, SUB_backup_tools_op_restore_0100, testing::ext::TestSize.Level1)
61 {
62     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin SUB_backup_tools_op_restore_0100";
63     try {
64         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-info";
65         map<string, vector<string>> mapArgToVal;
66         string localCap = string(BConstants::GetSaBundleBackupToolDir(BConstants::DEFAULT_USER_ID).data()) + "/tmp";
67         vector<string> path = {localCap.data()};
68         mapArgToVal.insert(make_pair("pathCapFile", path));
69         vector<string> bundles = {"com.example.app2backup"};
70         mapArgToVal.insert(make_pair("bundles", bundles));
71 
72         // 创建测试路径以及测试环境
73         string cmdMkdir = string("mkdir -p ") + BConstants::BACKUP_TOOL_RECEIVE_DIR.data() + BUNDLE_NAME;
74         system(cmdMkdir.c_str());
75         string cmdTool = string("mkdir -p ") + BConstants::GetSaBundleBackupToolDir(BConstants::DEFAULT_USER_ID).data();
76         system(cmdTool.c_str());
77         string touchTar = string("touch ") + BConstants::BACKUP_TOOL_RECEIVE_DIR.data() + BUNDLE_NAME + FILE_NAME;
78         system(touchTar.c_str());
79         string touchManage = string("touch ") + BConstants::BACKUP_TOOL_RECEIVE_DIR.data() + BUNDLE_NAME + MANAGE_JSON;
80         system(touchManage.c_str());
81         string touchTmp = string("touch ") + localCap;
82         system(touchTmp.c_str());
83 
84         // 尝试匹配当前命令,成功后执行
85         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-restore";
86         vector<string_view> curOp;
87         curOp.emplace_back("restore");
__anon98937daf0202(const ToolsOp &op) 88         auto tryOpSucceed = [&curOp](const ToolsOp &op) { return op.TryMatch(curOp); };
89         auto &&opeartions = ToolsOp::GetAllOperations();
90         auto matchedOp = find_if(opeartions.begin(), opeartions.end(), tryOpSucceed);
91         if (matchedOp != opeartions.end()) {
92             auto ret = matchedOp->Execute(mapArgToVal);
93             EXPECT_EQ(ret, 0);
94         }
95     } catch (...) {
96         EXPECT_TRUE(false);
97         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
98     }
99     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end SUB_backup_tools_op_restore_0100";
100 }
101 
102 /**
103  * @tc.number: SUB_backup_tools_op_restore_0200
104  * @tc.name: SUB_backup_tools_op_restore_0200
105  * @tc.desc: 测试
106  * @tc.size: MEDIUM
107  * @tc.type: FUNC
108  * @tc.level Level 1
109  * @tc.require: I6F3GV
110  */
111 HWTEST_F(ToolsOpRestoreTest, SUB_backup_tools_op_restore_0200, testing::ext::TestSize.Level1)
112 {
113     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin SUB_backup_tools_op_restore_0200";
114     try {
115         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-The pathCapFile field is not contained.";
116         map<string, vector<string>> mapArgToVal;
117         vector<string> bundles = {"com.example.app2backup"};
118         vector<string> path = {"/data/backup/tmp"};
119         mapArgToVal.insert(make_pair("bundles", bundles));
120 
121         vector<string_view> curOp;
122         curOp.emplace_back("restore");
__anon98937daf0302(const ToolsOp &op) 123         auto tryOpSucceed = [&curOp](const ToolsOp &op) { return op.TryMatch(curOp); };
124         auto &&opeartions = ToolsOp::GetAllOperations();
125         auto matchedOperation = find_if(opeartions.begin(), opeartions.end(), tryOpSucceed);
126         int ret = 0;
127         if (matchedOperation != opeartions.end()) {
128             ret = matchedOperation->Execute(mapArgToVal);
129             EXPECT_NE(ret, 0);
130         }
131         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-The bundles field is not contained.";
132         mapArgToVal.clear();
133         mapArgToVal.insert(make_pair("pathCapFile", path));
134         if (matchedOperation != opeartions.end()) {
135             ret = matchedOperation->Execute(mapArgToVal);
136             EXPECT_NE(ret, 0);
137         }
138 
139         mapArgToVal.clear();
140         if (matchedOperation != opeartions.end()) {
141             ret = matchedOperation->Execute(mapArgToVal);
142             EXPECT_NE(ret, 0);
143         }
144     } catch (...) {
145         EXPECT_TRUE(false);
146         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
147     }
148     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end SUB_backup_tools_op_restore_0200";
149 }
150 
151 /**
152  * @tc.number: SUB_backup_tools_op_restore_0300
153  * @tc.name: SUB_backup_tools_op_restore_0300
154  * @tc.desc: 测试
155  * @tc.size: MEDIUM
156  * @tc.type: FUNC
157  * @tc.level Level 1
158  * @tc.require: I6F3GV
159  */
160 HWTEST_F(ToolsOpRestoreTest, SUB_backup_tools_op_restore_0300, testing::ext::TestSize.Level1)
161 {
162     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin SUB_backup_tools_op_restore_0300";
163     try {
164         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-The pathCapFile field is not contained.";
165         map<string, vector<string>> mapArgToVal;
166 
167         vector<string> bundles = {"com.example.app2backup"};
168         vector<string> path = {"/data/backup/tmp"};
169         vector<string> depMode = {"true"};
170         mapArgToVal.insert(make_pair("pathCapFile", path));
171         mapArgToVal.insert(make_pair("bundles", bundles));
172         mapArgToVal.insert(make_pair("depMode", depMode));
173 
174         vector<string_view> curOp;
175         curOp.emplace_back("restore");
__anon98937daf0402(const ToolsOp &op) 176         auto tryOpSucceed = [&curOp](const ToolsOp &op) { return op.TryMatch(curOp); };
177         auto &&opeartions = ToolsOp::GetAllOperations();
178         auto matchedOp = find_if(opeartions.begin(), opeartions.end(), tryOpSucceed);
179         int ret = 0;
180         if (matchedOp != opeartions.end()) {
181             ret = matchedOp->Execute(mapArgToVal);
182             EXPECT_NE(ret, 0);
183         }
184         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-The bundles field is not contained.";
185         mapArgToVal.clear();
186         mapArgToVal.insert(make_pair("pathCapFile", path));
187         if (matchedOp != opeartions.end()) {
188             ret = matchedOp->Execute(mapArgToVal);
189             EXPECT_NE(ret, 0);
190         }
191 
192         mapArgToVal.clear();
193         if (matchedOp != opeartions.end()) {
194             ret = matchedOp->Execute(mapArgToVal);
195             EXPECT_NE(ret, 0);
196         }
197 
198         vector<string> path1 = {"/data/tmp/abdc"};
199         mapArgToVal.insert(make_pair("pathCapFile", path1));
200         if (matchedOp != opeartions.end()) {
201             ret = matchedOp->Execute(mapArgToVal);
202             EXPECT_NE(ret, 0);
203         }
204     } catch (...) {
205         EXPECT_TRUE(false);
206         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
207     }
208     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end SUB_backup_tools_op_restore_0300";
209 }
210 
211 /**
212  * @tc.number: SUB_backup_tools_op_restore_0400
213  * @tc.name: SUB_backup_tools_op_restore_0400
214  * @tc.desc: 测试
215  * @tc.size: MEDIUM
216  * @tc.type: FUNC
217  * @tc.level Level 1
218  * @tc.require: I6F3GV
219  */
220 HWTEST_F(ToolsOpRestoreTest, SUB_backup_tools_op_restore_0400, testing::ext::TestSize.Level1)
221 {
222     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin SUB_backup_tools_op_restore_0400";
223     try {
224         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-The pathCapFile field is not contained.";
225         map<string, vector<string>> mapArgToVal;
226 
227         vector<string> bundles = {"com.example.app2backup"};
228         vector<string> path = {"/data/backup/tmp"};
229         vector<string> depMode = {"false"};
230         mapArgToVal.insert(make_pair("depMode", depMode));
231         mapArgToVal.insert(make_pair("bundles", bundles));
232 
233         vector<string_view> curOp;
234         curOp.emplace_back("restore");
__anon98937daf0502(const ToolsOp &op) 235         auto tryOpSucceed = [&curOp](const ToolsOp &op) { return op.TryMatch(curOp); };
236         auto &&opeartions = ToolsOp::GetAllOperations();
237         auto matchedOpIterator = find_if(opeartions.begin(), opeartions.end(), tryOpSucceed);
238         int ret = 0;
239         if (matchedOpIterator != opeartions.end()) {
240             ret = matchedOpIterator->Execute(mapArgToVal);
241             EXPECT_NE(ret, 0);
242         }
243         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-The bundles field is not contained.";
244         mapArgToVal.clear();
245         mapArgToVal.insert(make_pair("pathCapFile", path));
246         if (matchedOpIterator != opeartions.end()) {
247             ret = matchedOpIterator->Execute(mapArgToVal);
248             EXPECT_NE(ret, 0);
249         }
250 
251         mapArgToVal.clear();
252         if (matchedOpIterator != opeartions.end()) {
253             ret = matchedOpIterator->Execute(mapArgToVal);
254             EXPECT_NE(ret, 0);
255         }
256     } catch (...) {
257         EXPECT_TRUE(false);
258         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
259     }
260     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end SUB_backup_tools_op_restore_0400";
261 }
262 
263 /**
264  * @tc.number: SUB_backup_tools_op_restore_0500
265  * @tc.name: tools_op_restore_OnFileReady_0500
266  * @tc.desc: 测试文件名包含BConstants::EXT_BACKUP_MANAGE,且tmpPath存在
267  * @tc.size: MEDIUM
268  * @tc.type: FUNC
269  * @tc.level Level 1
270  * @tc.require: I9NOPD
271  */
272 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnFileReady_0500, testing::ext::TestSize.Level1)
273 {
274     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnFileReady_0500";
275     try {
276         auto ctx = make_shared<Session>();
277         BFileInfo fileInfo;
278         fileInfo.owner = "test";
279         fileInfo.fileName = "manage.json";
280         fileInfo.sn = 1;
281         UniqueFd fd(open("text.txt", O_RDWR | O_CREAT, 0666));
282         OnFileReady(ctx, fileInfo, move(fd), 0);
283     } catch (BError &e) {
284         EXPECT_EQ(e.GetCode(), BError(BError::Codes::TOOL_INVAL_ARG).GetCode());
285         EXPECT_TRUE(true);
286     } catch (...) {
287         EXPECT_TRUE(false);
288         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
289     }
290     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnFileReady_0500";
291 }
292 
293 /**
294  * @tc.number: SUB_backup_tools_op_restore_0501
295  * @tc.name: tools_op_restore_OnFileReady_0501
296  * @tc.desc: 测试文件名不包含BConstants::EXT_BACKUP_MANAGE,且tmpPath存在
297  * @tc.size: MEDIUM
298  * @tc.type: FUNC
299  * @tc.level Level 1
300  * @tc.require: I9NOPD
301  */
302 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnFileReady_0501, testing::ext::TestSize.Level1)
303 {
304     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnFileReady_0501";
305     try {
306 
307         auto ctx = make_shared<Session>();
308         BFileInfo fileInfo;
309         fileInfo.owner = "test";
310         fileInfo.fileName = "test.json";
311         fileInfo.sn = 1;
312         UniqueFd fd(open("text.txt", O_RDWR | O_CREAT, 0666));
313         OnFileReady(ctx, fileInfo, move(fd), 0);
314     } catch (BError &e) {
315         EXPECT_EQ(e.GetCode(), BError(BError::Codes::TOOL_INVAL_ARG).GetCode());
316         EXPECT_TRUE(true);
317     } catch (...) {
318         EXPECT_TRUE(false);
319         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
320     }
321     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnFileReady_0501";
322 }
323 
324 /**
325  * @tc.number: SUB_backup_tools_op_restore_0502
326  * @tc.name: tools_op_restore_OnFileReady_0502
327  * @tc.desc: 测试文件名包含'/'
328  * @tc.size: MEDIUM
329  * @tc.type: FUNC
330  * @tc.level Level 1
331  * @tc.require: I9NOPD
332  */
333 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnFileReady_0502, testing::ext::TestSize.Level1)
334 {
335     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnFileReady_0502";
336     try {
337         auto ctx = make_shared<Session>();
338         BFileInfo fileInfo;
339         fileInfo.owner = "test";
340         fileInfo.fileName = "/test.json";
341         fileInfo.sn = 1;
342         UniqueFd fd(open("text.txt", O_RDWR | O_CREAT, 0666));
343         OnFileReady(ctx, fileInfo, move(fd), 0);
344     } catch (BError &e) {
345         EXPECT_EQ(e.GetCode(), BError(BError::Codes::TOOL_INVAL_ARG).GetCode());
346         EXPECT_TRUE(true);
347     } catch (...) {
348         EXPECT_TRUE(false);
349         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
350     }
351     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnFileReady_0502";
352 }
353 
354 /**
355  * @tc.number: SUB_backup_tools_op_restore_0503
356  * @tc.name: tools_op_restore_OnFileReady_0503
357  * @tc.desc: 测试tmpPath不存在
358  * @tc.size: MEDIUM
359  * @tc.type: FUNC
360  * @tc.level Level 1
361  * @tc.require: I9NOPD
362  */
363 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnFileReady_0503, testing::ext::TestSize.Level1)
364 {
365     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnFileReady_0503";
366     try {
367         auto ctx = make_shared<Session>();
368         BFileInfo fileInfo;
369         fileInfo.owner = " ";
370         fileInfo.fileName = " ";
371         fileInfo.sn = 1;
372         UniqueFd fd(open("text.txt", O_RDWR | O_CREAT, 0666));
373         OnFileReady(ctx, fileInfo, move(fd), 0);
374     } catch (BError &e) {
375         EXPECT_EQ(e.GetCode(), BError(BError::Codes::TOOL_INVAL_ARG).GetCode());
376         EXPECT_TRUE(true);
377     } catch (...) {
378         EXPECT_TRUE(false);
379         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
380     }
381     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnFileReady_0503";
382 }
383 
384 /**
385  * @tc.number: SUB_backup_tools_op_restore_0600
386  * @tc.name: tools_op_restore_OnBundleStarted_0600
387  * @tc.desc: 测试当err=0时
388  * @tc.size: MEDIUM
389  * @tc.type: FUNC
390  * @tc.level Level 1
391  * @tc.require: I9NOPD
392  */
393 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnBundleStarted_0600, testing::ext::TestSize.Level1)
394 {
395     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnBundleStarted_0600";
396     try {
397         auto ctx = make_shared<Session>();
398         ErrCode err = 0;
399         BundleName name = BUNDLE_NAME;
400         OnBundleStarted(ctx, err, name);
401         EXPECT_TRUE(true);
402     } catch (...) {
403         EXPECT_TRUE(false);
404         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
405     }
406     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnBundleStarted_0600";
407 }
408 
409 /**
410  * @tc.number: SUB_backup_tools_op_restore_0601
411  * @tc.name: tools_op_restore_OnBundleStarted_0601
412  * @tc.desc: 测试当err!=0时调用UpdateBundleFinishedCount()方法
413  * @tc.size: MEDIUM
414  * @tc.type: FUNC
415  * @tc.level Level 1
416  * @tc.require: I9NOPD
417  */
418 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnBundleStarted_0601, testing::ext::TestSize.Level1)
419 {
420     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnBundleStarted_0601";
421     try {
422         auto ctx = make_shared<Session>();
423         ctx->cnt_ = 1;
424         ErrCode err = -1;
425         BundleName name = BUNDLE_NAME;
426         OnBundleStarted(ctx, err, name);
427         EXPECT_EQ(ctx->cnt_, 0);
428     } catch (...) {
429         EXPECT_TRUE(false);
430         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
431     }
432     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnBundleStarted_0601";
433 }
434 
435 /**
436  * @tc.number: SUB_backup_tools_op_restore_0700
437  * @tc.name: tools_op_restore_OnBundleFinished_0700
438  * @tc.desc: test func
439  * @tc.size: MEDIUM
440  * @tc.type: FUNC
441  * @tc.level Level 1
442  * @tc.require: I9NOPD
443  */
444 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnBundleFinished_0700, testing::ext::TestSize.Level1)
445 {
446     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnBundleFinished_0700";
447     try {
448         auto ctx = make_shared<Session>();
449         ctx->cnt_ = 1;
450         ErrCode err = 0;
451         BundleName name = BUNDLE_NAME;
452         OnBundleFinished(ctx, err, name);
453         EXPECT_TRUE(true);
454     } catch (...) {
455         EXPECT_TRUE(false);
456         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
457     }
458     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnBundleFinished_0700";
459 }
460 
461 /**
462  * @tc.number: SUB_backup_tools_op_restore_0701
463  * @tc.name: tools_op_restore_OnBundleFinished_0701
464  * @tc.desc: test func
465  * @tc.size: MEDIUM
466  * @tc.type: FUNC
467  * @tc.level Level 1
468  * @tc.require: I9NOPD
469  */
470 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnBundleFinished_0701, testing::ext::TestSize.Level1)
471 {
472     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnBundleFinished_0701";
473     try {
474         auto ctx = make_shared<Session>();
475         ctx->cnt_ = 1;
476         ErrCode err = -1;
477         BundleName name = BUNDLE_NAME;
478         OnBundleFinished(ctx, err, name);
479         EXPECT_TRUE(true);
480     } catch (...) {
481         EXPECT_TRUE(false);
482         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
483     }
484     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnBundleFinished_0701";
485 }
486 
487 /**
488  * @tc.number: SUB_backup_tools_op_restore_0702
489  * @tc.name: tools_op_restore_OnBundleFinished_0702
490  * @tc.desc: test func
491  * @tc.size: MEDIUM
492  * @tc.type: FUNC
493  * @tc.level Level 1
494  * @tc.require: I9NOPD
495  */
496 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnBundleFinished_0702, testing::ext::TestSize.Level1)
497 {
498     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnBundleFinished_0702";
499     try {
500         auto ctx = make_shared<Session>();
501         ErrCode err = 0;
502         OnAllBundlesFinished(ctx, err);
503         EXPECT_TRUE(true);
504     } catch (...) {
505         EXPECT_TRUE(false);
506         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
507     }
508     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnBundleFinished_0702";
509 }
510 
511 /**
512  * @tc.number: SUB_backup_tools_op_restore_0703
513  * @tc.name: tools_op_restore_OnBundleFinished_0703
514  * @tc.desc: test func
515  * @tc.size: MEDIUM
516  * @tc.type: FUNC
517  * @tc.level Level 1
518  * @tc.require: I9NOPD
519  */
520 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnBundleFinished_0703, testing::ext::TestSize.Level1)
521 {
522     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnBundleFinished_0703";
523     try {
524         auto ctx = make_shared<Session>();
525         ErrCode err = -1;
526         OnAllBundlesFinished(ctx, err);
527         EXPECT_TRUE(true);
528     } catch (...) {
529         EXPECT_TRUE(false);
530         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
531     }
532     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnBundleFinished_0703";
533 }
534 
535 /**
536  * @tc.number: SUB_backup_tools_op_restore_0704
537  * @tc.name: tools_op_restore_OnBundleFinished_0704
538  * @tc.desc: test func
539  * @tc.size: MEDIUM
540  * @tc.type: FUNC
541  * @tc.level Level 1
542  * @tc.require: I9NOPD
543  */
544 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OnBundleFinished_0704, testing::ext::TestSize.Level1)
545 {
546     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OnBundleFinished_0704";
547     try {
548         auto ctx = make_shared<Session>();
549         OnBackupServiceDied(ctx);
550         EXPECT_TRUE(true);
551     } catch (...) {
552         EXPECT_TRUE(false);
553         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
554     }
555     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OnBundleFinished_0704";
556 }
557 
558 /**
559  * @tc.number: SUB_backup_tools_op_restore_0800
560  * @tc.name: tools_op_restore_OnResultReport_0800
561  * @tc.desc: 测试当err=0时
562  * @tc.size: MEDIUM
563  * @tc.type: FUNC
564  * @tc.level Level 1
565  * @tc.require: I9NOPD
566  */
567 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_OOnResultReport_0800, testing::ext::TestSize.Level1)
568 {
569     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_OOnResultReport_0800";
570     try {
571         auto ctx = make_shared<Session>();
572         std::string bundleName = "com.example.app2backup";
573         std::string resultInfo = "result info";
574         OnResultReport(ctx, bundleName, resultInfo);
575         EXPECT_TRUE(true);
576     } catch (...) {
577         EXPECT_TRUE(false);
578         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
579     }
580     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_OOnResultReport_0800";
581 }
582 
583 /**
584  * @tc.number: SUB_backup_tools_op_restore_0900
585  * @tc.name: tools_op_restore_RestoreApp_0900
586  * @tc.desc: 测试当!restore时
587  * @tc.size: MEDIUM
588  * @tc.type: FUNC
589  * @tc.level Level 1
590  * @tc.require: I9NOPD
591  */
592 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_RestoreApp_0900, testing::ext::TestSize.Level1)
593 {
594     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_RestoreApp_0900";
595     try {
596         shared_ptr<Session> restore = nullptr;
597         vector<BundleName> bundleNames = {"com.example.app2backup/"};
598         bool updateSendFiles = false;
599         RestoreApp(restore, bundleNames, updateSendFiles);
600     } catch (BError &e) {
601         EXPECT_EQ(e.GetCode(), BError(BError::Codes::TOOL_INVAL_ARG).GetCode());
602         EXPECT_TRUE(true);
603     } catch (...) {
604         EXPECT_TRUE(false);
605         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
606     }
607     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_RestoreApp_0900";
608 }
609 
610 /**
611  * @tc.number: SUB_backup_tools_op_restore_0901
612  * @tc.name: tools_op_restore_RestoreApp_0901
613  * @tc.desc: 测试当!restore->session_时
614  * @tc.size: MEDIUM
615  * @tc.type: FUNC
616  * @tc.level Level 1
617  * @tc.require: I9NOPD
618  */
619 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_RestoreApp_0901, testing::ext::TestSize.Level1)
620 {
621     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_RestoreApp_0901";
622     try {
623         shared_ptr<Session> restore = make_shared<Session>();
624         restore->session_ = nullptr;
625         vector<BundleName> bundleNames = {"com.example.app2backup/"};
626         bool updateSendFiles = false;
627         RestoreApp(restore, bundleNames, updateSendFiles);
628     } catch (BError &e) {
629         EXPECT_EQ(e.GetCode(), BError(BError::Codes::TOOL_INVAL_ARG).GetCode());
630         EXPECT_TRUE(true);
631     } catch (...) {
632         EXPECT_TRUE(false);
633         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
634     }
635     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_RestoreApp_0901";
636 }
637 
638 /**
639  * @tc.number: SUB_backup_tools_op_restore_0902
640  * @tc.name: tools_op_restore_RestoreApp_0902
641  * @tc.desc: 测试当bundlename 包含'/'时
642  * @tc.size: MEDIUM
643  * @tc.type: FUNC
644  * @tc.level Level 1
645  * @tc.require: I9NOPD
646  */
647 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_RestoreApp_0902, testing::ext::TestSize.Level1)
648 {
649     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_RestoreApp_0902";
650     try {
651         shared_ptr<Session> restore = make_shared<Session>();
652         restore->session_ = {};
653         vector<BundleName> bundleNames = {"com.example.app2backup/"};
654         bool updateSendFiles = false;
655         RestoreApp(restore, bundleNames, updateSendFiles);
656     } catch (BError &e) {
657         EXPECT_EQ(e.GetCode(), BError(BError::Codes::TOOL_INVAL_ARG).GetCode());
658         EXPECT_TRUE(true);
659     } catch (...) {
660         EXPECT_TRUE(false);
661         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
662     }
663     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_RestoreApp_0902";
664 }
665 
666 /**
667  * @tc.number: SUB_backup_tools_op_restore_1000
668  * @tc.name: tools_op_restore_GetRealPath_1000
669  * @tc.desc: 测试当path为空
670  * @tc.size: MEDIUM
671  * @tc.type: FUNC
672  * @tc.level Level 1
673  * @tc.require: I9NOPD
674  */
675 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_GetRealPath_1000, testing::ext::TestSize.Level1)
676 {
677     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_GetRealPath_1000";
678     try {
679         string path = " ";
680         bool ret = GetRealPath(path);
681         EXPECT_EQ(ret, false);
682     } catch (...) {
683         EXPECT_TRUE(false);
684         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
685     }
686     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_GetRealPath_1000";
687 }
688 
689 /**
690  * @tc.number: SUB_backup_tools_op_restore_1001
691  * @tc.name: tools_op_restore_GetRealPath_1001
692  * @tc.desc: 测试当path不存在
693  * @tc.size: MEDIUM
694  * @tc.type: FUNC
695  * @tc.level Level 1
696  * @tc.require: I9NOPD
697  */
698 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_GetRealPath_1001, testing::ext::TestSize.Level1)
699 {
700     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_GetRealPath_1001";
701     try {
702         string cmdMkdir = string("mkdir -p ") + BConstants::BACKUP_TOOL_RECEIVE_DIR.data();
703         system(cmdMkdir.c_str());
704         string path = "/data/backup/no/recived/";
705         bool ret = GetRealPath(path);
706         EXPECT_EQ(ret, false);
707     } catch (...) {
708         EXPECT_TRUE(false);
709         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
710     }
711     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_GetRealPath_1001";
712 }
713 
714 /**
715  * @tc.number: SUB_backup_tools_op_restore_1002
716  * @tc.name: tools_op_restore_GetRealPath_1002
717  * @tc.desc: 测试当path正常
718  * @tc.size: MEDIUM
719  * @tc.type: FUNC
720  * @tc.level Level 1
721  * @tc.require: I9NOPD
722  */
723 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_GetRealPath_1002, testing::ext::TestSize.Level1)
724 {
725     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_GetRealPath_1002";
726     try {
727         string path = string(BConstants::BACKUP_TOOL_RECEIVE_DIR.data()) + "/tmp";
728         int fd = open(path.data(), O_RDWR | O_CREAT, S_IRWXU);
729         EXPECT_GT(fd, 0);
730         close(fd);
731         bool ret = GetRealPath(path);
732         EXPECT_EQ(ret, true);
733     } catch (...) {
734         EXPECT_TRUE(false);
735         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
736     }
737     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_GetRealPath_1002";
738 }
739 
740 /**
741  * @tc.number: SUB_backup_tools_op_restore_1100
742  * @tc.name: tools_op_restore_InitRestoreSession_1100
743  * @tc.desc: 测试当!ctx
744  * @tc.size: MEDIUM
745  * @tc.type: FUNC
746  * @tc.level Level 1
747  * @tc.require: I9NOPD
748  */
749 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_InitRestoreSession_1100, testing::ext::TestSize.Level1)
750 {
751     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_GInitRestoreSession_1100";
752     try {
753         shared_ptr<Session> ctx = nullptr;
754         InitRestoreSession(ctx);
755     } catch (BError &e) {
756         EXPECT_EQ(e.GetCode(), BError(BError::Codes::TOOL_INVAL_ARG).GetCode());
757         EXPECT_TRUE(true);
758     } catch (...) {
759         EXPECT_TRUE(false);
760         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
761     }
762     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_GInitRestoreSession_1100";
763 }
764 
765 /**
766  * @tc.number: SUB_backup_tools_op_restore_1101
767  * @tc.name: tools_op_restore_InitRestoreSession_1101
768  * @tc.desc: 测试当ctx
769  * @tc.size: MEDIUM
770  * @tc.type: FUNC
771  * @tc.level Level 1
772  * @tc.require: I9NOPD
773  */
774 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_InitRestoreSession_1101, testing::ext::TestSize.Level1)
775 {
776     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_InitRestoreSession_1101";
777     try {
778         shared_ptr<Session> ctx = make_shared<Session>();
779         InitRestoreSession(ctx);
780     } catch (BError &e) {
781         EXPECT_EQ(e.GetCode(), BError(BError::Codes::TOOL_INVAL_ARG).GetCode());
782         EXPECT_TRUE(true);
783     } catch (...) {
784         EXPECT_TRUE(false);
785         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
786     }
787     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_InitRestoreSession_1101";
788 }
789 
790 /**
791  * @tc.number: SUB_backup_tools_op_restore_1200
792  * @tc.name: tools_op_restore_InitPathCapFile_1200
793  * @tc.desc: realPath 为空
794  * @tc.size: MEDIUM
795  * @tc.type: FUNC
796  * @tc.level Level 1
797  * @tc.require: I9NOPD
798  */
799 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_InitPathCapFile_1200, testing::ext::TestSize.Level1)
800 {
801     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_InitPathCapFile_1200";
802     try {
803         string pathCapFile = " ";
804         vector<string> bundleNames = {"com.example.app2backup/"};
805         bool depMode = true;
806         int32_t ret = InitPathCapFile(pathCapFile, bundleNames, depMode);
807         EXPECT_LT(ret, 0);
808     } catch (...) {
809         EXPECT_TRUE(false);
810         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
811     }
812     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_InitPathCapFile_1200";
813 }
814 
815 /**
816  * @tc.number: SUB_backup_tools_op_restore_1201
817  * @tc.name: tools_op_restore_InitPathCapFile_1201
818  * @tc.desc: test func
819  * @tc.size: MEDIUM
820  * @tc.type: FUNC
821  * @tc.level Level 1
822  * @tc.require: I9NOPD
823  */
824 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_InitPathCapFile_1201, testing::ext::TestSize.Level1)
825 {
826     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_InitPathCapFile_1201";
827     try {
828         string pathCapFile = "/data/backup/tmp";
829         vector<string> bundleNames = {"com.example.app2backup/"};
830         bool depMode = true;
831         int32_t ret = InitPathCapFile(pathCapFile, bundleNames, depMode);
832         EXPECT_LT(ret, 0);
833     } catch (BError &e) {
834         EXPECT_TRUE(true);
835     } catch (...) {
836         EXPECT_TRUE(false);
837         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
838     }
839     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_InitPathCapFile_1201";
840 }
841 
842 /**
843  * @tc.number: SUB_backup_tools_op_restore_1202
844  * @tc.name: tools_op_restore_InitPathCapFile_1202
845  * @tc.desc: test func
846  * @tc.size: MEDIUM
847  * @tc.type: FUNC
848  * @tc.level Level 1
849  * @tc.require: I9NOPD
850  */
851 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_InitPathCapFile_1202, testing::ext::TestSize.Level1)
852 {
853     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_InitPathCapFile_1202";
854     try {
855         string pathCapFile = "/data/backup/tmp";
856         vector<string> bundleNames = {"com.example.app2backup/"};
857         bool depMode = false;
858         int32_t ret = InitPathCapFile(pathCapFile, bundleNames, depMode);
859         EXPECT_LT(ret, 0);
860     } catch (BError &e) {
861         EXPECT_TRUE(true);
862     } catch (...) {
863         EXPECT_TRUE(false);
864         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
865     }
866     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_InitPathCapFile_1202";
867 }
868 
869 /**
870  * @tc.number: SUB_backup_tools_op_restore_1300
871  * @tc.name: tools_op_restore_Exec_1300
872  * @tc.desc: 测试depMOde =false
873  * @tc.size: MEDIUM
874  * @tc.type: FUNC
875  * @tc.level Level 1
876  * @tc.require: I9NOPD
877  */
878 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_Exec_1300, testing::ext::TestSize.Level1)
879 {
880     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_Exec_1300";
881     try {
882         map<string, vector<string>> mapArgToVal;
883         mapArgToVal["depMode"] = {"true"};
884         Exec(mapArgToVal);
885         EXPECT_EQ(mapArgToVal["depMode"][0], "true");
886     } catch (...) {
887         EXPECT_TRUE(false);
888         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
889     }
890     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_Exec_1300";
891 }
892 
893 /**
894  * @tc.number: SUB_backup_tools_op_restore_1301
895  * @tc.name: tools_op_restore_Exec_1301
896  * @tc.desc: 测试pathCapFile不存在
897  * @tc.size: MEDIUM
898  * @tc.type: FUNC
899  * @tc.level Level 1
900  * @tc.require: I9NOPD
901  */
902 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_Exec_1301, testing::ext::TestSize.Level1)
903 {
904     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_Exec_1301";
905     try {
906         map<string, vector<string>> mapArgToVal;
907         mapArgToVal["depMode"] = {"false"};
908         mapArgToVal["bundles"] = {"com.example.app2backup/"};
909         int ret = Exec(mapArgToVal);
910         EXPECT_LT(ret, 0);
911     } catch (...) {
912         EXPECT_TRUE(false);
913         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
914     }
915     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_Exec_1301";
916 }
917 
918 /**
919  * @tc.number: SUB_backup_tools_op_restore_1302
920  * @tc.name: tools_op_restore_Exec_1302
921  * @tc.desc: 测试bundles不存在
922  * @tc.size: MEDIUM
923  * @tc.type: FUNC
924  * @tc.level Level 1
925  * @tc.require: I9NOPD
926  */
927 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_Exec_1302, testing::ext::TestSize.Level1)
928 {
929     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_Exec_1302";
930     try {
931         string cmdMkdir = string("mkdir -p ") + BConstants::BACKUP_TOOL_RECEIVE_DIR.data() + BUNDLE_NAME;
932         system(cmdMkdir.c_str());
933         map<string, vector<string>> mapArgToVal;
934         mapArgToVal["depMode"] = {"false"};
935         mapArgToVal["pathCapFile"] = {"/data/backup/recived/"};
936         int ret = Exec(mapArgToVal);
937         EXPECT_LT(ret, 0);
938     } catch (...) {
939         EXPECT_TRUE(false);
940         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
941     }
942     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_Exec_1302";
943 }
944 
945 /**
946  * @tc.number: SUB_backup_tools_op_restore_1303
947  * @tc.name: tools_op_restore_Exec_1303
948  * @tc.desc: 测试都存在
949  * @tc.size: MEDIUM
950  * @tc.type: FUNC
951  * @tc.level Level 1
952  * @tc.require: I9NOPD
953  */
954 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_Exec_1303, testing::ext::TestSize.Level1)
955 {
956     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_Exec_1303";
957     try {
958         string cmdMkdir = string("mkdir -p ") + BConstants::BACKUP_TOOL_RECEIVE_DIR.data() + BUNDLE_NAME;
959         system(cmdMkdir.c_str());
960         map<string, vector<string>> mapArgToVal;
961         mapArgToVal["depMode"] = {"false"};
962         mapArgToVal["bundles"] = {"com.example.app2backup/"};
963         mapArgToVal["pathCapFile"] = {"/data/backup/recived/com.example.app2backup/"};
964         int ret = Exec(mapArgToVal);
965         EXPECT_LT(ret, 0);
966     } catch (...) {
967         EXPECT_TRUE(false);
968         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
969     }
970     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_Exec_1303";
971 }
972 
973 /**
974  * @tc.number: SUB_backup_tools_op_restore_1304
975  * @tc.name: tools_op_restore_Exec_1304
976  * @tc.desc: test func
977  * @tc.size: MEDIUM
978  * @tc.type: FUNC
979  * @tc.level Level 1
980  * @tc.require: I9NOPD
981  */
982 HWTEST_F(ToolsOpRestoreTest, tools_op_restore_Exec_1304, testing::ext::TestSize.Level1)
983 {
984     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-begin tools_op_restore_Exec_1304";
985     try {
986         map<string, vector<string>> mapArgToVal;
987         mapArgToVal["pathCapFile"] = {"/data/backup/recived/com.example.app2backup/"};
988         mapArgToVal["bundles"] = {"com.example.app2backup/"};
989         int ret = Exec(mapArgToVal);
990         EXPECT_LT(ret, 0);
991     } catch (...) {
992         EXPECT_TRUE(false);
993         GTEST_LOG_(INFO) << "ToolsOpRestoreTest-an exception occurred by construction.";
994     }
995     GTEST_LOG_(INFO) << "ToolsOpRestoreTest-end tools_op_restore_Exec_1304";
996 }
997 } // namespace OHOS::FileManagement::Backup