1 /* 2 * Copyright (c) 2025-2025 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 <cstdio> 17 #include <tuple> 18 19 #include <fcntl.h> 20 21 #include <file_ex.h> 22 #include <gtest/gtest.h> 23 24 #include "b_utils/scan_file_singleton.h" 25 #include "test_manager.h" 26 27 namespace OHOS::FileManagement::Backup { 28 using namespace std; 29 30 class ScanFileSingletonTest : public testing::Test { 31 public: SetUpTestCase(void)32 static void SetUpTestCase(void) {}; TearDownTestCase()33 static void TearDownTestCase() {}; SetUp()34 void SetUp() {}; TearDown()35 void TearDown() {}; 36 }; 37 38 /** 39 * @brief 测试ScanFileSingleton的单例特性 40 * @tc.number: SUB_scan_file_singleton_GetInstance_0100 41 * @tc.name: scan_file_singleton_GetInstance_0100 42 * @tc.desc: 测试ScanFileSingleton是否为单例,即多次获取实例返回相同对象 43 * @tc.size: SMALL 44 * @tc.type: FUNC 45 * @tc.level Level 1 46 */ 47 HWTEST_F(ScanFileSingletonTest, scan_file_singleton_GetInstance_0100, testing::ext::TestSize.Level1) 48 { 49 auto& instance1 = ScanFileSingleton::GetInstance(); 50 auto& instance2 = ScanFileSingleton::GetInstance(); 51 EXPECT_EQ(&instance1, &instance2) << "ScanFileSingleton should be a singleton, but it's not."; 52 } 53 54 /** 55 * @brief 测试获取所有大文件 56 * @tc.number: SUB_scan_file_singleton_GetAllBigfiles_0100 57 * @tc.name: scan_file_singleton_GetAllBigfiles_0100 58 * @tc.desc: 测试ScanFileSingleton的GetAllBigfiles方法是否能正确获取所有文件信息 59 * @tc.size: MEDIUM 60 * @tc.type: FUNC 61 * @tc.level Level 1 62 */ 63 HWTEST_F(ScanFileSingletonTest, scan_file_singleton_GetAllBigfiles_0100, testing::ext::TestSize.Level1) 64 { 65 auto& instance = ScanFileSingleton::GetInstance(); 66 struct stat fileStat = {}; 67 // 假设文件大小为2048字节 68 fileStat.st_size = 2048; 69 instance.AddBigFile("/path/to/another_file", fileStat); 70 71 auto allBigFiles = instance.GetAllBigFiles(); 72 73 EXPECT_EQ(allBigFiles.size(), 1) << "There should be one big file in queue."; 74 EXPECT_EQ(allBigFiles["/path/to/another_file"].st_size, 2048) << "the file size should be 2048 bytes."; 75 } 76 77 /** 78 * @brief 测试设置和获取完成标志 79 * @tc.number: SUB_scan_file_singleton_SetGetCompletedFlag_0100 80 * @tc.name: scan_file_singleton_SetGetCompletedFlag_0100 81 * @tc.desc: 测试ScanFileSingleton的SetCompletedFlag和GetCompletedFlag方法是否能正确设置和获取完成标志 82 * @tc.size: MEDIUM 83 * @tc.type: FUNC 84 * @tc.level Level 1 85 */ 86 HWTEST_F(ScanFileSingletonTest, scan_file_singleton_SetGetCompletedFlag_0100, testing::ext::TestSize.Level1) 87 { 88 auto& instance = ScanFileSingleton::GetInstance(); 89 instance.SetCompletedFlag(true); 90 EXPECT_TRUE(instance.GetCompletedFlag()) << "The completed flag should be true."; 91 92 instance.SetCompletedFlag(false); 93 EXPECT_FALSE(instance.GetCompletedFlag()) << "The completed flag should be false."; 94 } 95 96 /** 97 * @brief 测试添加和获取小文件信息 98 * @tc.number: SUB_scan_file_singleton_GetAllSmallFiles_0100 99 * @tc.name: scan_file_singleton_GetAllSmallFiles_0100 100 * @tc.desc: 测试ScanFileSingleton的GetAllSmallFiles方法是否能正确添加和获取小文件信息 101 * @tc.size: MEDIUM 102 * @tc.type: FUNC 103 * @tc.level Level 1 104 */ 105 HWTEST_F(ScanFileSingletonTest, scan_file_singleton_GetAllSmallFiles_0100, testing::ext::TestSize.Level1) 106 { 107 auto& instance = ScanFileSingleton::GetInstance(); 108 109 instance.AddSmallFile("/path/to/small_file.txt", 512); 110 auto allSmallFiles = instance.GetAllSmallFiles(); 111 112 EXPECT_EQ(allSmallFiles.size(), 1) << "There should be one small file in queue."; 113 EXPECT_EQ(allSmallFiles["/path/to/small_file.txt"], 512) << "The file size should be 512 bytes."; 114 } 115 116 /** 117 * @brief 测试设置和获取includeSize 118 * @tc.number: SUB_scan_file_singleton_SetGetIncludeSize_0100 119 * @tc.name: scan_file_singleton_SetGetIncludeSize_0100 120 * @tc.desc: 测试ScanFileSingleton的SetIncludeSize和GetIncludeSize方法是否能正确设置和获取includeSize 121 * @tc.size: MEDIUM 122 * @tc.type: FUNC 123 * @tc.level Level 1 124 */ 125 HWTEST_F(ScanFileSingletonTest, scan_file_singleton_SetGetIncludeSize_0100, testing::ext::TestSize.Level1) 126 { 127 auto& instance = ScanFileSingleton::GetInstance(); 128 129 instance.SetIncludeSize(100); 130 EXPECT_EQ(instance.GetIncludeSize(), 100) << "The include size should be 100."; 131 } 132 133 /** 134 * @brief 测试设置和获取excludeSize 135 * @tc.number: SUB_scan_file_singleton_SetGetExcludeSize_0100 136 * @tc.name: scan_file_singleton_SetGetExcludeSize_0100 137 * @tc.desc: 测试ScanFileSingleton的SetExcludeSize和GetExcludeSize方法是否能正确设置和获取excludeSize 138 * @tc.size: MEDIUM 139 * @tc.type: FUNC 140 * @tc.level Level 1 141 */ 142 HWTEST_F(ScanFileSingletonTest, scan_file_singleton_SetGetExcludeSize_0100, testing::ext::TestSize.Level1) 143 { 144 auto& instance = ScanFileSingleton::GetInstance(); 145 146 instance.SetExcludeSize(100); 147 EXPECT_EQ(instance.GetExcludeSize(), 100) << "The exclude size should be 100."; 148 } 149 } // namespace OHOS::FileManagement::Backup