1 /*
2  * Copyright (c) 2022-2023 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 <string>
17 #include <string_view>
18 #include <vector>
19 
20 #include <fcntl.h>
21 #include <sys/stat.h>
22 #include <sys/types.h>
23 
24 #include <file_ex.h>
25 #include <gtest/gtest.h>
26 #include <unique_fd.h>
27 
28 #include "b_error/b_error.h"
29 #include "b_tarball/b_tarball_cmdline.h"
30 #include "test_manager.h"
31 
32 namespace OHOS::FileManagement::Backup {
33 using namespace std;
34 
35 class BTarballCmdlineTest : public testing::Test {
36 public:
SetUpTestCase()37     static void SetUpTestCase() {};
TearDownTestCase()38     static void TearDownTestCase() {};
SetUp()39     void SetUp() {};
TearDown()40     void TearDown() {};
41 };
42 
43 /**
44  * @tc.number: SUB_b_tarball_cmdline_0100
45  * @tc.name: b_tarball_cmdline_0100
46  * @tc.desc: 测试BTarballCmdline类构造函数是否成功
47  * @tc.size: MEDIUM
48  * @tc.type: FUNC
49  * @tc.level Level 1
50  * @tc.require: I6F3GV
51  */
52 HWTEST_F(BTarballCmdlineTest, b_tarball_cmdline_0100, testing::ext::TestSize.Level1)
53 {
54     GTEST_LOG_(INFO) << "BTarballCmdlineTest-begin b_tarball_cmdline_0100";
55     try {
56         TestManager tm("b_tarball_cmdline_0100");
57         string root = tm.GetRootDirCurTest();
58         string_view tarballDir = root;
59         string_view tarballName = "test.tar";
60 
61         BTarballCmdline tarballCmdline(tarballDir, tarballName);
62     } catch (...) {
63         EXPECT_TRUE(false);
64         GTEST_LOG_(INFO) << "BTarballCmdlineTest-an exception occurred by BTarballCmdline.";
65     }
66     GTEST_LOG_(INFO) << "BTarballCmdlineTest-end b_tarball_cmdline_0100";
67 }
68 
69 /**
70  * @tc.number: SUB_b_tarball_cmdline_0101
71  * @tc.name: b_tarball_cmdline_0101
72  * @tc.desc: 测试BTarballCmdline类构造函数是否成功
73  * @tc.size: MEDIUM
74  * @tc.type: FUNC
75  * @tc.level Level 1
76  * @tc.require: I6F3GV
77  */
78 HWTEST_F(BTarballCmdlineTest, b_tarball_cmdline_0101, testing::ext::TestSize.Level1)
79 {
80     GTEST_LOG_(INFO) << "BTarballCmdlineTest-begin b_tarball_cmdline_0101";
81     try {
82         TestManager tm("b_tarball_cmdline_0101");
83         string root = tm.GetRootDirCurTest();
84         string_view tarballDir = root;
85         string_view tarballName = "";
86 
87         BTarballCmdline tarballCmdline(tarballDir, tarballName);
88     } catch (...) {
89         EXPECT_TRUE(false);
90         GTEST_LOG_(INFO) << "BTarballCmdlineTest-an exception occurred by BTarballCmdline.";
91     }
92     GTEST_LOG_(INFO) << "BTarballCmdlineTest-end b_tarball_cmdline_0101";
93 }
94 
95 /**
96  * @tc.number: SUB_b_tarball_cmdline_0200
97  * @tc.name: b_tarball_cmdline_0200
98  * @tc.desc: 测试BTarballCmdline类Tar函数是否成功
99  * @tc.size: MEDIUM
100  * @tc.type: FUNC
101  * @tc.level Level 1
102  * @tc.require: I6F3GV
103  */
104 HWTEST_F(BTarballCmdlineTest, b_tarball_cmdline_0200, testing::ext::TestSize.Level1)
105 {
106     GTEST_LOG_(INFO) << "BTarballCmdlineTest-begin b_tarball_cmdline_0200";
107     try {
108         // 预置文件和目录
109         TestManager tm("b_tarball_cmdline_0200");
110         string root = tm.GetRootDirCurTest();
111         string_view tarballDir = root;
112         string_view tarballName = "test.tar";
113         string testDir = root + "/testdir";
114         if (mkdir(testDir.data(), S_IRWXU) && errno != EEXIST) {
115             GTEST_LOG_(INFO) << "Failed to create directory, errno :" << errno;
116             throw BError(errno);
117         }
118         string strFile = root + tarballName.data();
119         UniqueFd fd(open(strFile.data(), O_RDONLY | O_CREAT, S_IRUSR | S_IWUSR));
120         if (fd < 0) {
121             GTEST_LOG_(INFO) << "Failed to open file, errno :" << errno;
122             throw BError(errno);
123         }
124 
125         string aFile = testDir + "/a.txt";
126         string bFile = testDir + "/b.txt";
127         SaveStringToFile(aFile, "Hello");
128         SaveStringToFile(bFile, "World");
129         vector<string_view> includes {testDir};
130         vector<string_view> excludes {bFile};
131 
132         // 调用tar打包
133         BTarballCmdline tarballCmdline(tarballDir, tarballName);
134         tarballCmdline.Tar(root, includes, excludes);
135     } catch (...) {
136         EXPECT_TRUE(false);
137         GTEST_LOG_(INFO) << "BTarballCmdlineTest-an exception occurred by BTarballCmdline.";
138     }
139     GTEST_LOG_(INFO) << "BTarballCmdlineTest-end b_tarball_cmdline_0200";
140 }
141 
142 /**
143  * @tc.number: SUB_b_tarball_cmdline_0201
144  * @tc.name: b_tarball_cmdline_0201
145  * @tc.desc: 测试BTarballCmdline类Tar函数是否成功
146  * @tc.size: MEDIUM
147  * @tc.type: FUNC
148  * @tc.level Level 1
149  * @tc.require: I6F3GV
150  */
151 HWTEST_F(BTarballCmdlineTest, b_tarball_cmdline_0201, testing::ext::TestSize.Level1)
152 {
153     GTEST_LOG_(INFO) << "BTarballCmdlineTest-begin b_tarball_cmdline_0201";
154     try {
155         // 预置文件和目录
156         TestManager tm("b_tarball_cmdline_0201");
157         string root = tm.GetRootDirCurTest();
158         string_view tarballDir = root;
159         string_view tarballName = "test.tar";
160         string testDir = root + "/testdir";
161         if (mkdir(testDir.data(), S_IRWXU) && errno != EEXIST) {
162             GTEST_LOG_(INFO) << " create directory failed, errno :" << errno;
163             throw BError(errno);
164         }
165         string strFile = root + tarballName.data();
166         UniqueFd fd(open(strFile.data(), O_RDONLY | O_CREAT, S_IRUSR | S_IWUSR));
167         if (fd < 0) {
168             GTEST_LOG_(INFO) << " invoked open failure, errno :" << errno;
169             throw BError(errno);
170         }
171 
172         string aFile = testDir + "";
173         string bFile = testDir + "/b.txt";
174         SaveStringToFile(aFile, "Hello");
175         SaveStringToFile(bFile, "world");
176         vector<string_view> excludes {bFile};
177         vector<string_view> includes {testDir};
178 
179         // 调用tar打包
180         BTarballCmdline tarballCmdline(tarballDir, tarballName);
181         tarballCmdline.Tar(root, includes, excludes);
182     } catch (...) {
183         EXPECT_TRUE(false);
184         GTEST_LOG_(INFO) << "BTarballCmdlineTest-an exception occurred by BTarballCmdline.";
185     }
186     GTEST_LOG_(INFO) << "BTarballCmdlineTest-end b_tarball_cmdline_0201";
187 }
188 
189 /**
190  * @tc.number: SUB_b_tarball_cmdline_0202
191  * @tc.name: b_tarball_cmdline_0202
192  * @tc.desc: 测试BTarballCmdline类Tar函数是否成功
193  * @tc.size: MEDIUM
194  * @tc.type: FUNC
195  * @tc.level Level 1
196  * @tc.require: I6F3GV
197  */
198 HWTEST_F(BTarballCmdlineTest, b_tarball_cmdline_0202, testing::ext::TestSize.Level1)
199 {
200     GTEST_LOG_(INFO) << "BTarballCmdlineTest-begin b_tarball_cmdline_0202";
201     try {
202         // 预置文件和目录
203         TestManager tm("b_tarball_cmdline_0202");
204         string root = tm.GetRootDirCurTest();
205         string_view tarballDir = root;
206         string_view tarballName = "test.tar";
207         string testDir = root + "/testdir";
208         if (mkdir(testDir.data(), S_IRWXU) && errno != EEXIST) {
209             GTEST_LOG_(INFO) << " invoked mkdir failure, errno :" << errno;
210             throw BError(errno);
211         }
212         string strFile = root + tarballName.data();
213         UniqueFd fd(open(strFile.data(), O_RDONLY | O_CREAT, S_IRUSR | S_IWUSR));
214         if (fd < 0) {
215             GTEST_LOG_(INFO) << " invoked open failure, errno :" << errno;
216             throw BError(errno);
217         }
218 
219         string aFile = testDir + "/a.txt";
220         string bFile = testDir + "";
221         SaveStringToFile(aFile, "hello");
222         SaveStringToFile(bFile, "world");
223         vector<string_view> includes {testDir};
224         vector<string_view> excludes {bFile};
225 
226         // 调用tar打包
227         BTarballCmdline tarballCmdline(tarballDir, tarballName);
228         tarballCmdline.Tar(root, includes, excludes);
229     } catch (...) {
230         EXPECT_TRUE(false);
231         GTEST_LOG_(INFO) << "BTarballCmdlineTest-an exception occurred by BTarballCmdline.";
232     }
233     GTEST_LOG_(INFO) << "BTarballCmdlineTest-end b_tarball_cmdline_0202";
234 }
235 
236 /**
237  * @tc.number: SUB_b_tarball_cmdline_0300
238  * @tc.name: b_tarball_cmdline_0300
239  * @tc.desc: 测试BTarballCmdline类Untar函数是否成功
240  * @tc.size: MEDIUM
241  * @tc.type: FUNC
242  * @tc.level Level 1
243  * @tc.require: I6F3GV
244  */
245 HWTEST_F(BTarballCmdlineTest, b_tarball_cmdline_0300, testing::ext::TestSize.Level1)
246 {
247     GTEST_LOG_(INFO) << "BTarballCmdlineTest-begin b_tarball_cmdline_0300";
248     try {
249         // 预置文件和目录
250         TestManager tm("b_tarball_cmdline_0300");
251         string root = tm.GetRootDirCurTest();
252         string_view tarballDir = root;
253         string_view tarballName = "test.tar";
254         string testUntarDir = root + "/untardir";
255         if (mkdir(testUntarDir.data(), S_IRWXU) && errno != EEXIST) {
256             GTEST_LOG_(INFO) << "Failed to create directory, errno :" << errno;
257             throw BError(errno);
258         }
259         // 调用tar打包
260         BTarballCmdline tarballCmdline(tarballDir, tarballName);
261         tarballCmdline.Untar(testUntarDir);
262 
263     } catch (...) {
264         EXPECT_TRUE(false);
265         GTEST_LOG_(INFO) << "BTarballCmdlineTest-an exception occurred by BTarballCmdline.";
266     }
267     GTEST_LOG_(INFO) << "BTarballCmdlineTest-end b_tarball_cmdline_0300";
268 }
269 
270 /**
271  * @tc.number: SUB_b_tarball_cmdline_0301
272  * @tc.name: b_tarball_cmdline_0301
273  * @tc.desc: 测试BTarballCmdline类Untar函数是否成功
274  * @tc.size: MEDIUM
275  * @tc.type: FUNC
276  * @tc.level Level 1
277  * @tc.require: I6F3GV
278  */
279 HWTEST_F(BTarballCmdlineTest, b_tarball_cmdline_0301, testing::ext::TestSize.Level1)
280 {
281     GTEST_LOG_(INFO) << "BTarballCmdlineTest-begin b_tarball_cmdline_0301";
282     try {
283         // 预置文件和目录
284         TestManager tm("b_tarball_cmdline_0301");
285         string root = tm.GetRootDirCurTest();
286         string_view tarballDir = root;
287         string_view tarballName = "test.tar";
288         string testUntarDir = root + "";
289         if (mkdir(testUntarDir.data(), S_IRWXU) && errno != EEXIST) {
290             GTEST_LOG_(INFO) << " invoked mkdir failure, errno :" << errno;
291             throw BError(errno);
292         }
293         // 调用tar打包
294         BTarballCmdline tarballCmdline(tarballDir, tarballName);
295         tarballCmdline.Untar(testUntarDir);
296 
297     } catch (...) {
298         EXPECT_TRUE(false);
299         GTEST_LOG_(INFO) << "BTarballCmdlineTest-an exception occurred by BTarballCmdline.";
300     }
301     GTEST_LOG_(INFO) << "BTarballCmdlineTest-end b_tarball_cmdline_0301";
302 }
303 } // namespace OHOS::FileManagement::Backup