• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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