diff --git a/tests/unittests/backup_ext/tar_file_test.cpp b/tests/unittests/backup_ext/tar_file_test.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8aaa0f2f16218142d66193691090d1f521ddad72 --- /dev/null +++ b/tests/unittests/backup_ext/tar_file_test.cpp @@ -0,0 +1,399 @@ +/* + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @tc.number: SUB_Tar_File_TraversalFile_0300 + * @tc.name: SUB_Tar_File_TraversalFile_0300 + * @tc.desc: 测试 TraversalFile 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_TraversalFile_0300, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_TraversalFile_0300"; + try { + // 预置文件和目录 + TestManager tm("SUB_Tar_File_TraversalFile_0300"); + string root = tm.GetRootDirCurTest(); + string testDir = root + "/testdir"; + if (mkdir(testDir.data(), S_IRWXU) && errno != EEXIST) { + GTEST_LOG_(INFO) << " invoked mkdir failure, errno :" << errno; + throw BError(errno); + } + string tarFile = root + "test.tar"; + TarFile::GetInstance().currentTarFile_ = fopen(tarFile.c_str(), "wb+"); + ASSERT_TRUE(TarFile::GetInstance().currentTarFile_ != nullptr); + + string filePath(testDir); + bool ret = TarFile::GetInstance().TraversalFile(filePath); + EXPECT_TRUE(ret); + EXPECT_EQ(TarFile::GetInstance().currentFileName_, ""); + EXPECT_EQ(TarFile::GetInstance().fileCount_, 1); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_TraversalFile_0300"; +} + +/** + * @tc.number: SUB_Tar_File_AddFile_0100 + * @tc.name: SUB_Tar_File_AddFile_0100 + * @tc.desc: 测试 AddFile 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_AddFile_0100, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_AddFile_0100"; + try { + CreateTarFile("SUB_Tar_File_AddFile_0100"); + string fileName(""); + struct stat st {}; + bool isSplit = false; + bool ret = TarFile::GetInstance().AddFile(fileName, st, isSplit); + EXPECT_TRUE(ret); + EXPECT_TRUE(TarFile::GetInstance().currentFileName_.empty()); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_AddFile_0100"; +} + +/** + * @tc.number: SUB_Tar_File_AddFile_0300 + * @tc.name: SUB_Tar_File_AddFile_0300 + * @tc.desc: 测试 AddFile 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_AddFile_0300, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_AddFile_0300"; + try { + // 预置文件和目录 + TestManager tm("SUB_Tar_File_AddFile_0300"); + string root = tm.GetRootDirCurTest(); + string testDir = root + "/testdir"; + if (mkdir(testDir.data(), S_IRWXU) && errno != EEXIST) { + GTEST_LOG_(INFO) << " invoked mkdir failure, errno :" << errno; + throw BError(errno); + } + + string fileName(testDir); + struct stat st {}; + if (lstat(fileName.c_str(), &st) != 0) { + GTEST_LOG_(INFO) << " invoked lstat failure, errno :" << errno; + throw BError(errno); + } + + string tarFile = root + "test.tar"; + TarFile::GetInstance().currentTarFile_ = fopen(tarFile.c_str(), "wb+"); + ASSERT_TRUE(TarFile::GetInstance().currentTarFile_ != nullptr); + + bool isSplit = false; + bool ret = TarFile::GetInstance().AddFile(fileName, st, isSplit); + EXPECT_TRUE(ret); + EXPECT_TRUE(TarFile::GetInstance().currentFileName_.empty()); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_AddFile_0300"; +} + +/** + * @tc.number: SUB_Tar_File_WriteFileContent_0100 + * @tc.name: SUB_Tar_File_WriteFileContent_0100 + * @tc.desc: 测试 WriteFileContent 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_WriteFileContent_0100, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_WriteFileContent_0100"; + try { + string fileName(""); + off_t size = 0; + bool ret = TarFile::GetInstance().WriteFileContent(fileName, size); + EXPECT_FALSE(ret); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_WriteFileContent_0100"; +} + +/** + * @tc.number: SUB_Tar_File_WriteFileContent_0200 + * @tc.name: SUB_Tar_File_WriteFileContent_0200 + * @tc.desc: 测试 WriteFileContent 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_WriteFileContent_0200, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_WriteFileContent_0200"; + try { + // 预置文件和目录 + TestManager tm("SUB_Tar_File_WriteFileContent_0200"); + string root = tm.GetRootDirCurTest(); + string testDir = root + "/testdir"; + if (mkdir(testDir.data(), S_IRWXU) && errno != EEXIST) { + GTEST_LOG_(INFO) << " invoked mkdir failure, errno :" << errno; + throw BError(errno); + } + string aFile = testDir + "/a.txt"; + SaveStringToFile(aFile, "hello"); + + string tarFile = root + "test.tar"; + TarFile::GetInstance().currentTarFile_ = fopen(tarFile.c_str(), "wb+"); + ASSERT_TRUE(TarFile::GetInstance().currentTarFile_ != nullptr); + + string fileName(aFile); + struct stat st {}; + if (lstat(fileName.c_str(), &st) != 0) { + GTEST_LOG_(INFO) << " invoked lstat failure, errno :" << errno; + throw BError(errno); + } + off_t size = st.st_size; + TarFile::GetInstance().ioBuffer_.resize(READ_BUFF_SIZE); + bool ret = TarFile::GetInstance().WriteFileContent(fileName, size); + EXPECT_TRUE(ret); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_WriteFileContent_0200"; +} + +/** + * @tc.number: SUB_Tar_File_SplitWriteAll_0100 + * @tc.name: SUB_Tar_File_SplitWriteAll_0100 + * @tc.desc: 测试 SplitWriteAll 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_SplitWriteAll_0100, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_SplitWriteAll_0100"; + try { + vector ioBuffer; + int read = 0; + bool isFilled = false; + int ret = TarFile::GetInstance().SplitWriteAll(ioBuffer, read, isFilled); + EXPECT_EQ(ret, 0); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_SplitWriteAll_0100"; +} + +/** + * @tc.number: SUB_Tar_File_SplitWriteAll_0200 + * @tc.name: SUB_Tar_File_SplitWriteAll_0200 + * @tc.desc: 测试 SplitWriteAll 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_SplitWriteAll_0200, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_SplitWriteAll_0200"; + try { + vector ioBuffer = {0}; + int read = 0; + bool isFilled = false; + int ret = TarFile::GetInstance().SplitWriteAll(ioBuffer, read, isFilled); + EXPECT_EQ(ret, 0); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_SplitWriteAll_0200"; +} + +/** + * @tc.number: SUB_Tar_File_SplitWriteAll_0300 + * @tc.name: SUB_Tar_File_SplitWriteAll_0300 + * @tc.desc: 测试 SplitWriteAll 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_SplitWriteAll_0300, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_SplitWriteAll_0300"; + try { + CreateTarFile("SUB_Tar_File_SplitWriteAll_0300"); + vector ioBuffer = {0}; + int read = 1; + bool isFilled = false; + int ret = TarFile::GetInstance().SplitWriteAll(ioBuffer, read, isFilled); + EXPECT_EQ(ret, 1); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_SplitWriteAll_0300"; +} + +/** + * @tc.number: SUB_Tar_File_SplitWriteAll_0400 + * @tc.name: SUB_Tar_File_SplitWriteAll_0400 + * @tc.desc: 测试 SplitWriteAll 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_SplitWriteAll_0400, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_SplitWriteAll_0400"; + try { + // 预置文件和目录 + TestManager tm("SUB_Tar_File_SplitWriteAll_0400"); + string root = tm.GetRootDirCurTest(); + string testDir = root + "/testdir"; + if (mkdir(testDir.data(), S_IRWXU) && errno != EEXIST) { + GTEST_LOG_(INFO) << " invoked mkdir failure, errno :" << errno; + throw BError(errno); + } + string aFile = testDir + "/a.txt"; + string bFile = testDir + "/b.txt"; + SaveStringToFile(aFile, "hello"); + SaveStringToFile(bFile, "world"); + + string tarFile = root + "test.tar"; + string cmd = "tar -cvf " + tarFile + " " + testDir; + if (system(cmd.c_str()) != 0) { + GTEST_LOG_(INFO) << " execute tar failure, errno :" << errno; + throw BError(errno); + } + TarFile::GetInstance().currentTarFile_ = fopen(tarFile.c_str(), "wb+"); + + vector ioBuffer; + ioBuffer.resize(READ_BUFF_SIZE); + int read = READ_BUFF_SIZE; + bool isFilled = false; + int ret = TarFile::GetInstance().SplitWriteAll(ioBuffer, read, isFilled); + EXPECT_GT(ret, 0); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_SplitWriteAll_0400"; +} + +/** + * @tc.number: SUB_Tar_File_CreateSplitTarFile_0100 + * @tc.name: SUB_Tar_File_CreateSplitTarFile_0100 + * @tc.desc: 测试 CreateSplitTarFile 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_CreateSplitTarFile_0100, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_CreateSplitTarFile_0100"; + try { + bool ret = TarFile::GetInstance().CreateSplitTarFile(); + EXPECT_FALSE(ret); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_CreateSplitTarFile_0100"; +} + +/** + * @tc.number: SUB_Tar_File_CreateSplitTarFile_0200 + * @tc.name: SUB_Tar_File_CreateSplitTarFile_0200 + * @tc.desc: 测试 CreateSplitTarFile 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_CreateSplitTarFile_0200, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_CreateSplitTarFile_0200"; + try { + TestManager tm("SUB_Tar_File_CreateSplitTarFile_0200"); + string root = tm.GetRootDirCurTest(); + TarFile::GetInstance().baseTarName_ = "test"; + TarFile::GetInstance().packagePath_ = root; + bool ret = TarFile::GetInstance().CreateSplitTarFile(); + EXPECT_TRUE(ret); + EXPECT_TRUE(TarFile::GetInstance().currentTarFile_ != nullptr); + EXPECT_EQ(TarFile::GetInstance().currentTarFileSize_, 0); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_CreateSplitTarFile_0200"; +} + +/** + * @tc.number: SUB_Tar_File_CompleteBlock_0100 + * @tc.name: SUB_Tar_File_CompleteBlock_0100 + * @tc.desc: 测试 CompleteBlock 接口 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I6F3GV + */ +HWTEST_F(TarFileTest, SUB_Tar_File_CompleteBlock_0100, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TarFileTest-begin SUB_Tar_File_CompleteBlock_0100"; + try { + off_t size = 0; + bool ret = TarFile::GetInstance().CompleteBlock(size); + EXPECT_TRUE(ret); + ClearCache(); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "TarFileTest-an exception occurred by TarFile."; + } + GTEST_LOG_(INFO) << "TarFileTest-end SUB_Tar_File_CompleteBlock_0100"; +}