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