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