1 /*
2 * Copyright (c) 2024 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 <fstream>
17 #include <iostream>
18 #include <sstream>
19 #include <string>
20 #include <sys/stat.h>
21 #include <unistd.h>
22 #include <vector>
23
24 #include "json/value.h"
25 #include <gtest/gtest.h>
26
27 #include "b_error/b_error.h"
28 #include "b_error/b_excep_utils.h"
29 #include "b_json/b_json_service_disposal_config.h"
30 #include "cJsonMock.h"
31
32 namespace OHOS::FileManagement::Backup {
33 using namespace std;
34 using namespace testing;
35
36 namespace {
37 const string PATH = "/data/service/el2/100/backup/";
38 const string CONFIG_NAME = "RestoreDisposalConfig.json";
39 } // namespace
40
41 class BJsonServiceDisposalConfigTest : public testing::Test {
42 public:
43 // 所有测试用例执行之前执行
44 static void SetUpTestCase(void);
45 // 所有测试用例执行之后执行
46 static void TearDownTestCase(void);
47 // 每次测试用例执行之前执行
48 void SetUp();
49 // 每次测试用例执行之后执行
50 void TearDown();
51
52 static inline shared_ptr<CJsonMock> cJsonMock = nullptr;
53 };
54
TearDown()55 void BJsonServiceDisposalConfigTest::TearDown() {}
56
SetUp()57 void BJsonServiceDisposalConfigTest::SetUp()
58 {
59 string filePath = PATH + CONFIG_NAME;
60 bool result = remove(filePath.c_str());
61 if (result) {
62 GTEST_LOG_(INFO) << "delete file success.";
63 } else {
64 GTEST_LOG_(INFO) << "delete file failed.";
65 }
66 }
67
SetUpTestCase()68 void BJsonServiceDisposalConfigTest::SetUpTestCase()
69 {
70 cJsonMock = make_shared<CJsonMock>();
71 CJson::cJsonPtr = cJsonMock;
72 }
73
TearDownTestCase()74 void BJsonServiceDisposalConfigTest::TearDownTestCase()
75 {
76 CJson::cJsonPtr = nullptr;
77 cJsonMock = nullptr;
78 }
79
80 /* *
81 * @tc.number: SUB_Disposal_Config_Test_0102
82 * @tc.name: SUB_Disposal_Config_Test_0102
83 * @tc.desc: 测试print返回空指针情况
84 * @tc.size: MEDIUM
85 * @tc.type: FUNC
86 * @tc.level Level 1
87 * @tc.require: IAAMIK
88 */
89 HWTEST_F(BJsonServiceDisposalConfigTest, SUB_Disposal_Config_Test_0102, testing::ext::TestSize.Level1)
90 {
91 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-begin SUB_Disposal_Config_Test_0102";
92 try {
93 int cjson = 0;
94 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
95 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
96 EXPECT_CALL(*cJsonMock, cJSON_AddItemToObject(_, _, _)).WillOnce(Return(true));
97 EXPECT_CALL(*cJsonMock, cJSON_Print(_)).WillOnce(Return(nullptr));
98 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
99 BJsonDisposalConfig config;
100 } catch (...) {
101 EXPECT_TRUE(false);
102 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-an exception occurred by construction.";
103 }
104 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-end SUB_Disposal_Config_Test_0102";
105 }
106
107 /* *
108 * @tc.number: SUB_Disposal_Config_Test_0103
109 * @tc.name: SUB_Disposal_Config_Test_0103
110 * @tc.desc: 测试配置文件存在的情况
111 * @tc.size: MEDIUM
112 * @tc.type: FUNC
113 * @tc.level Level 1
114 * @tc.require: IAAMIK
115 */
116 HWTEST_F(BJsonServiceDisposalConfigTest, SUB_Disposal_Config_Test_0103, testing::ext::TestSize.Level1)
117 {
118 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-begin SUB_Disposal_Config_Test_0103";
119 try {
120 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(nullptr));
121 BJsonDisposalConfig config;
122 } catch (...) {
123 EXPECT_TRUE(false);
124 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-an exception occurred by construction.";
125 }
126 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-end SUB_Disposal_Config_Test_0103";
127 }
128
129 /* *
130 * @tc.number: SUB_Disposal_Config_Test_0104
131 * @tc.name: SUB_Disposal_Config_Test_0104
132 * @tc.desc: 测试creatArray返回空指针情况
133 * @tc.size: MEDIUM
134 * @tc.type: FUNC
135 * @tc.level Level 1
136 * @tc.require: IAAMIK
137 */
138 HWTEST_F(BJsonServiceDisposalConfigTest, SUB_Disposal_Config_Test_0104, testing::ext::TestSize.Level1)
139 {
140 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-begin SUB_Disposal_Config_Test_0104";
141 try {
142 int cjson = 0;
143 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
144 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(nullptr));
145 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
146 BJsonDisposalConfig config;
147 } catch (...) {
148 EXPECT_TRUE(false);
149 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-an exception occurred by construction.";
150 }
151 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-end SUB_Disposal_Config_Test_0104";
152 }
153
154 /* *
155 * @tc.number: SUB_Disposal_Config_Test_0202
156 * @tc.name: Disposal_Config_Test_0202
157 * @tc.desc: 测试修改config文件时print返回空指针
158 * @tc.size: MEDIUM
159 * @tc.type: FUNC
160 * @tc.level Level 1
161 * @tc.require: IAAMIK
162 */
163 HWTEST_F(BJsonServiceDisposalConfigTest, Disposal_Config_Test_0202, testing::ext::TestSize.Level1)
164 {
165 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-begin Disposal_Config_Test_0202";
166 try {
167 string filePath = PATH + CONFIG_NAME;
168 int cjson = 0;
169 string str = "test";
170 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
171 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
172 EXPECT_CALL(*cJsonMock, cJSON_AddItemToObject(_, _, _)).WillOnce(Return(true));
173 EXPECT_CALL(*cJsonMock, cJSON_Print(_)).WillOnce(Return(nullptr));
174 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
175 BJsonDisposalConfig config;
176 EXPECT_EQ(access(filePath.c_str(), F_OK), 0);
177 const string bundleName = "test1";
178 EXPECT_CALL(*cJsonMock, cJSON_Parse(_)).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
179 EXPECT_CALL(*cJsonMock, cJSON_GetObjectItem(_, _)).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
180 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
181 EXPECT_CALL(*cJsonMock, cJSON_AddStringToObject(_, _, _)).WillOnce(Return(nullptr));
182 EXPECT_CALL(*cJsonMock, cJSON_AddItemToArray(_, _)).WillOnce(Return(true));
183 EXPECT_CALL(*cJsonMock, cJSON_Print(_)).WillOnce(Return(nullptr));
184 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
185 bool retAdd = config.AppendIntoDisposalConfigFile(bundleName);
186 EXPECT_FALSE(retAdd);
187 } catch (...) {
188 EXPECT_TRUE(false);
189 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-an exception occurred by construction.";
190 }
191 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-end Disposal_Config_Test_0202";
192 }
193
194 /* *
195 * @tc.number: SUB_Disposal_Config_Test_0203
196 * @tc.name: Disposal_Config_Test_0203
197 * @tc.desc: 测试修改config文件时parse返回空指针的情况
198 * @tc.size: MEDIUM
199 * @tc.type: FUNC
200 * @tc.level Level 1
201 * @tc.require: IAAMIK
202 */
203 HWTEST_F(BJsonServiceDisposalConfigTest, Disposal_Config_Test_0203, testing::ext::TestSize.Level1)
204 {
205 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-begin Disposal_Config_Test_0203";
206 try {
207 string filePath = PATH + CONFIG_NAME;
208 int cjson = 0;
209 string str = "test";
210 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
211 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
212 EXPECT_CALL(*cJsonMock, cJSON_AddItemToObject(_, _, _)).WillOnce(Return(true));
213 EXPECT_CALL(*cJsonMock, cJSON_Print(_)).WillOnce(Return(nullptr));
214 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
215 BJsonDisposalConfig config;
216 EXPECT_EQ(access(filePath.c_str(), F_OK), 0);
217 const string bundleName = "test1";
218 EXPECT_CALL(*cJsonMock, cJSON_Parse(_)).WillOnce(Return(nullptr));
219 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
220 bool retAdd = config.AppendIntoDisposalConfigFile(bundleName);
221 EXPECT_FALSE(retAdd);
222 } catch (...) {
223 EXPECT_TRUE(false);
224 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-an exception occurred by construction.";
225 }
226 GTEST_LOG_(INFO) << "BJsonServiceDisposalConfigTest-end Disposal_Config_Test_0203";
227 }
228 } // namespace OHOS::FileManagement::Backup