• 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 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 }