1 /*
2 * Copyright (c) 2022-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 <cstdio>
17 #include <cstdlib>
18
19 #include <dirent.h>
20 #include <fcntl.h>
21
22 #include <errors.h>
23 #include <file_ex.h>
24 #include <gtest/gtest.h>
25
26 #include "b_jsonutil/b_jsonutil.h"
27 #include "b_process/b_process.h"
28 #include "cJsonMock.h"
29
30 namespace OHOS::FileManagement::Backup {
31 using namespace std;
32 using namespace testing;
33 namespace {
34 const static int BUNDLE_INDEX_DEFAULT_VAL = 0;
35 }
36
37 class BJsonUtilTest : public testing::Test {
38 public:
39 // 所有测试用例执行之前执行
40 static void SetUpTestCase(void);
41 // 所有测试用例执行之后执行
42 static void TearDownTestCase(void);
43 // 每次测试用例执行之前执行
SetUp()44 void SetUp() {};
45 // 每次测试用例执行之后执行
TearDown()46 void TearDown() {};
47
48 static inline shared_ptr<CJsonMock> cJsonMock = nullptr;
49 };
50
SetUpTestCase()51 void BJsonUtilTest::SetUpTestCase()
52 {
53 cJsonMock = make_shared<CJsonMock>();
54 CJson::cJsonPtr = cJsonMock;
55 }
56
TearDownTestCase()57 void BJsonUtilTest::TearDownTestCase()
58 {
59 CJson::cJsonPtr = nullptr;
60 cJsonMock = nullptr;
61 }
62
63 /**
64 * @tc.number: b_jsonutil_BuildExtensionErrInfo_0101
65 * @tc.name: b_jsonutil_BuildExtensionErrInfo_0101
66 * @tc.desc: Test function of BuildExtensionErrInfo interface.
67 * @tc.size: MEDIUM
68 * @tc.type: FUNC
69 * @tc.level Level 0
70 * @tc.require: I6F3GV
71 */
72 HWTEST_F(BJsonUtilTest, b_jsonutil_BuildExtensionErrInfo_0101, testing::ext::TestSize.Level0)
73 {
74 GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildExtensionErrInfo_0101";
75 try {
76 std::string jsonStr;
77 int errCode = 1;
78 std::string errMsg = "error";
79 int cjson = 0;
80
81 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(nullptr));
82 bool result = BJsonUtil::BuildExtensionErrInfo(jsonStr, errCode, errMsg);
83 EXPECT_FALSE(result);
84
85 EXPECT_CALL(*cJsonMock, cJSON_CreateObject())
86 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)))
87 .WillOnce(Return(nullptr));
88 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
89 result = BJsonUtil::BuildExtensionErrInfo(jsonStr, errCode, errMsg);
90 EXPECT_FALSE(result);
91 } catch (...) {
92 EXPECT_TRUE(false);
93 GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred.";
94 }
95 GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildExtensionErrInfo_0101";
96 }
97
98 /**
99 * @tc.number: b_jsonutil_BuildExtensionErrInfo_0201
100 * @tc.name: b_jsonutil_BuildExtensionErrInfo_0201
101 * @tc.desc: Test function of BuildExtensionErrInfo interface.
102 * @tc.size: MEDIUM
103 * @tc.type: FUNC
104 * @tc.level Level 0
105 * @tc.require: I6F3GV
106 */
107 HWTEST_F(BJsonUtilTest, b_jsonutil_BuildExtensionErrInfo_0201, testing::ext::TestSize.Level0)
108 {
109 GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildExtensionErrInfo_0201";
110 try {
111 std::string jsonStr;
112 std::map<std::string, std::vector<int>> errFileInfo;
113 int cjson = 0;
114
115 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(nullptr));
116 bool result = BJsonUtil::BuildExtensionErrInfo(jsonStr, errFileInfo);
117 EXPECT_FALSE(result);
118
119 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
120 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(nullptr));
121 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
122 result = BJsonUtil::BuildExtensionErrInfo(jsonStr, errFileInfo);
123 EXPECT_FALSE(result);
124 } catch (...) {
125 EXPECT_TRUE(false);
126 GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred.";
127 }
128 GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildExtensionErrInfo_0201";
129 }
130
131 /**
132 * @tc.number: b_jsonutil_BuildOnProcessRetInfo_0301
133 * @tc.name: b_jsonutil_BuildOnProcessRetInfo_0301
134 * @tc.desc: Test function of BuildOnProcessRetInfo interface.
135 * @tc.size: MEDIUM
136 * @tc.type: FUNC
137 * @tc.level Level 0
138 * @tc.require: I6F3GV
139 */
140 HWTEST_F(BJsonUtilTest, b_jsonutil_BuildOnProcessRetInfo_0301, testing::ext::TestSize.Level0)
141 {
142 GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildOnProcessRetInfo_0301";
143 try {
144 std::string jsonStr;
145 std::string onProcessRet;
146 int cjson = 0;
147
148 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(nullptr));
149 bool result = BJsonUtil::BuildOnProcessRetInfo(jsonStr, onProcessRet);
150 EXPECT_FALSE(result);
151
152 EXPECT_CALL(*cJsonMock, cJSON_CreateObject())
153 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)))
154 .WillOnce(Return(nullptr));
155 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
156 result = BJsonUtil::BuildOnProcessRetInfo(jsonStr, onProcessRet);
157 EXPECT_FALSE(result);
158
159 EXPECT_CALL(*cJsonMock, cJSON_CreateObject())
160 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)))
161 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
162 EXPECT_CALL(*cJsonMock, cJSON_AddStringToObject(_, _, _))
163 .WillOnce(Return(nullptr))
164 .WillOnce(Return(nullptr));
165 EXPECT_CALL(*cJsonMock, cJSON_AddItemToObject(_, _, _)).WillOnce(Return(true));
166 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
167 EXPECT_CALL(*cJsonMock, cJSON_Print(_)).WillOnce(Return(nullptr));
168 result = BJsonUtil::BuildOnProcessRetInfo(jsonStr, onProcessRet);
169 EXPECT_FALSE(result);
170 } catch (...) {
171 EXPECT_TRUE(false);
172 GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred.";
173 }
174 GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildOnProcessRetInfo_0301";
175 }
176
177 /**
178 * @tc.number: b_jsonutil_BuildBundleInfoJson_0401
179 * @tc.name: b_jsonutil_BuildBundleInfoJson_0401
180 * @tc.desc: Test function of BuildBundleInfoJson interface.
181 * @tc.size: MEDIUM
182 * @tc.type: FUNC
183 * @tc.level Level 0
184 * @tc.require: I6F3GV
185 */
186 HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleInfoJson_0401, testing::ext::TestSize.Level0)
187 {
188 GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleInfoJson_0401";
189 try {
190 int32_t userId = 100;
191 std::string detailInfo;
192 int cjson = 0;
193
194 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(nullptr));
195 bool result = BJsonUtil::BuildBundleInfoJson(userId, detailInfo);
196 EXPECT_FALSE(result);
197
198 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
199 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(nullptr));
200 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
201 result = BJsonUtil::BuildBundleInfoJson(userId, detailInfo);
202 EXPECT_FALSE(result);
203
204 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
205 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
206 EXPECT_CALL(*cJsonMock, cJSON_AddStringToObject(_, _, _))
207 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)))
208 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
209 EXPECT_CALL(*cJsonMock, cJSON_AddItemToArray(_, _)).WillOnce(Return(true));
210 EXPECT_CALL(*cJsonMock, cJSON_Print(_)).WillOnce(Return(nullptr));
211 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
212 result = BJsonUtil::BuildBundleInfoJson(userId, detailInfo);
213 EXPECT_FALSE(result);
214 } catch (...) {
215 EXPECT_TRUE(false);
216 GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred.";
217 }
218 GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleInfoJson_0401";
219 }
220
221 /**
222 * @tc.number: b_jsonutil_BuildOnProcessErrInfo_0501
223 * @tc.name: b_jsonutil_BuildOnProcessErrInfo_0501
224 * @tc.desc: Test function of BuildOnProcessErrInfo interface.
225 * @tc.size: MEDIUM
226 * @tc.type: FUNC
227 * @tc.level Level 0
228 * @tc.require: I6F3GV
229 */
230 HWTEST_F(BJsonUtilTest, b_jsonutil_BuildOnProcessErrInfo_0501, testing::ext::TestSize.Level0)
231 {
232 GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildOnProcessErrInfo_0501";
233 try {
234 std::string reportInfo;
235 std::string path;
236 int err = 0;
237 int cjson = 0;
238 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(nullptr));
239 bool result = BJsonUtil::BuildOnProcessErrInfo(reportInfo, path, err);
240 EXPECT_FALSE(result);
241
242 EXPECT_CALL(*cJsonMock, cJSON_CreateObject())
243 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)))
244 .WillOnce(Return(nullptr));
245 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
246 result = BJsonUtil::BuildOnProcessErrInfo(reportInfo, path, err);
247 EXPECT_FALSE(result);
248
249 EXPECT_CALL(*cJsonMock, cJSON_CreateObject())
250 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)))
251 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)))
252 .WillOnce(Return(nullptr));
253 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return()).WillOnce(Return());
254 result = BJsonUtil::BuildOnProcessErrInfo(reportInfo, path, err);
255 EXPECT_FALSE(result);
256
257 EXPECT_CALL(*cJsonMock, cJSON_CreateObject())
258 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)))
259 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)))
260 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
261 EXPECT_CALL(*cJsonMock, cJSON_AddStringToObject(_, _, _))
262 .WillOnce(Return(nullptr))
263 .WillOnce(Return(nullptr))
264 .WillOnce(Return(nullptr));
265 EXPECT_CALL(*cJsonMock, cJSON_AddItemToObject(_, _, _)).WillOnce(Return(true)).WillOnce(Return(true));
266 EXPECT_CALL(*cJsonMock, cJSON_Print(_)).WillOnce(Return(nullptr));
267 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
268 result = BJsonUtil::BuildOnProcessErrInfo(reportInfo, path, err);
269 EXPECT_FALSE(result);
270 } catch (...) {
271 EXPECT_TRUE(false);
272 GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred.";
273 }
274 GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildOnProcessErrInfo_0501";
275 }
276
277 /**
278 * @tc.number: b_jsonutil_BuildBundleNameIndexInfo_0601
279 * @tc.name: b_jsonutil_BuildBundleNameIndexInfo_0601
280 * @tc.desc: Test function of BuildBundleNameIndexInfo interface.
281 * @tc.size: MEDIUM
282 * @tc.type: FUNC
283 * @tc.level Level 0
284 * @tc.require: I6F3GV
285 */
286 HWTEST_F(BJsonUtilTest, b_jsonutil_BuildBundleNameIndexInfo_0601, testing::ext::TestSize.Level0)
287 {
288 GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildBundleNameIndexInfo_0601";
289 try {
290 std::string bundleName = "test";
291 int appIndex = BUNDLE_INDEX_DEFAULT_VAL;
292 auto ret = BJsonUtil::BuildBundleNameIndexInfo(bundleName, appIndex);
293 EXPECT_EQ(ret, bundleName);
294
295 appIndex = -1;
296 ret = BJsonUtil::BuildBundleNameIndexInfo(bundleName, appIndex);
297 EXPECT_NE(ret, bundleName);
298 } catch (...) {
299 EXPECT_TRUE(false);
300 GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred.";
301 }
302 GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildBundleNameIndexInfo_0601";
303 }
304
305 /**
306 * @tc.number: b_jsonutil_BuildInitSessionErrInfo_0701
307 * @tc.name: b_jsonutil_BuildInitSessionErrInfo_0701
308 * @tc.desc: Test function of BuildInitSessionErrInfo interface.
309 * @tc.size: MEDIUM
310 * @tc.type: FUNC
311 * @tc.level Level 0
312 * @tc.require: I6F3GV
313 */
314 HWTEST_F(BJsonUtilTest, b_jsonutil_BuildInitSessionErrInfo_0701, testing::ext::TestSize.Level0)
315 {
316 GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildInitSessionErrInfo_0701";
317 try {
318 int32_t userId = 0;
319 std::string callerName;
320 std::string activeTime;
321 int cjson = 0;
322 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(nullptr));
323 auto result = BJsonUtil::BuildInitSessionErrInfo(userId, callerName, activeTime);
324 EXPECT_EQ(result, "");
325
326 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
327 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(nullptr));
328 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
329 result = BJsonUtil::BuildInitSessionErrInfo(userId, callerName, activeTime);
330 EXPECT_EQ(result, "");
331
332 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
333 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
334 EXPECT_CALL(*cJsonMock, cJSON_AddItemToObject(_, _, _)).WillOnce(Return(true));
335 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(nullptr));
336 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
337 result = BJsonUtil::BuildInitSessionErrInfo(userId, callerName, activeTime);
338 EXPECT_EQ(result, "");
339
340 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
341 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
342 EXPECT_CALL(*cJsonMock, cJSON_AddItemToObject(_, _, _)).WillOnce(Return(true));
343 EXPECT_CALL(*cJsonMock, cJSON_CreateObject())
344 .WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)))
345 .WillOnce(Return(nullptr));
346 EXPECT_CALL(*cJsonMock, cJSON_AddItemToArray(_, _)).WillOnce(Return(true));
347 EXPECT_CALL(*cJsonMock, cJSON_AddStringToObject(_, _, _))
348 .WillOnce(Return(nullptr))
349 .WillOnce(Return(nullptr))
350 .WillOnce(Return(nullptr));
351 EXPECT_CALL(*cJsonMock, cJSON_Print(_)).WillOnce(Return(nullptr));
352 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
353 result = BJsonUtil::BuildInitSessionErrInfo(userId, callerName, activeTime);
354 EXPECT_EQ(result, "");
355 } catch (...) {
356 EXPECT_TRUE(false);
357 GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred.";
358 }
359 GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildInitSessionErrInfo_0701";
360 }
361
362 /**
363 * @tc.number: b_jsonutil_WriteToStr_0801
364 * @tc.name: b_jsonutil_WriteToStr_0801
365 * @tc.desc: Test function of WriteToStr interface.
366 * @tc.size: MEDIUM
367 * @tc.type: FUNC
368 * @tc.level Level 0
369 * @tc.require: I6F3GV
370 */
371 HWTEST_F(BJsonUtilTest, b_jsonutil_WriteToStr_0801, testing::ext::TestSize.Level0)
372 {
373 GTEST_LOG_(INFO) << "BJsonUtilTest-begin WriteToStr_0801";
374 try {
375 std::vector<BJsonUtil::BundleDataSize> bundleDataList;
376 size_t listSize = 0;
377 std::string scanning;
378 std::string jsonStr;
379 int cjson = 0;
380 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(nullptr));
381 auto result = BJsonUtil::WriteToStr(bundleDataList, listSize, scanning, jsonStr);
382 EXPECT_FALSE(result);
383
384 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
385 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(nullptr));
386 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
387 result = BJsonUtil::WriteToStr(bundleDataList, listSize, scanning, jsonStr);
388 EXPECT_FALSE(result);
389
390 EXPECT_CALL(*cJsonMock, cJSON_CreateObject()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
391 EXPECT_CALL(*cJsonMock, cJSON_CreateArray()).WillOnce(Return(reinterpret_cast<cJSON *>(&cjson)));
392 EXPECT_CALL(*cJsonMock, cJSON_AddItemToObject(_, _, _)).WillOnce(Return(true));
393 EXPECT_CALL(*cJsonMock, cJSON_AddStringToObject(_, _, _)).WillOnce(Return(nullptr));
394 EXPECT_CALL(*cJsonMock, cJSON_Print(_)).WillOnce(Return(nullptr));
395 EXPECT_CALL(*cJsonMock, cJSON_Delete(_)).WillOnce(Return());
396 result = BJsonUtil::WriteToStr(bundleDataList, listSize, scanning, jsonStr);
397 EXPECT_FALSE(result);
398 } catch (...) {
399 EXPECT_TRUE(false);
400 GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred.";
401 }
402 GTEST_LOG_(INFO) << "BJsonUtilTest-end WriteToStr_0801";
403 }
404 }