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