1 /*
2 * Copyright (c) 2022 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 "nativetoken_oper_test.h"
17 #include <fcntl.h>
18 #include <poll.h>
19 #include <pthread.h>
20 #include "securec.h"
21 #include "nativetoken.h"
22 #include "nativetoken_json_oper.h"
23 #include "nativetoken_kit.h"
24
25 using namespace testing::ext;
26 using namespace OHOS::Security;
27
SetUpTestCase()28 void TokenOperTest::SetUpTestCase()
29 {}
30
TearDownTestCase()31 void TokenOperTest::TearDownTestCase()
32 {}
33
SetUp()34 void TokenOperTest::SetUp()
35 {}
36
TearDown()37 void TokenOperTest::TearDown()
38 {}
39
40 /**
41 * @tc.name: FreeStrArray001
42 * @tc.desc: FreeStrArray successfully.
43 * @tc.type: FUNC
44 * @tc.require:
45 */
46 HWTEST_F(TokenOperTest, FreeStrArray001, TestSize.Level0)
47 {
48 const int32_t testSize = 2; // 2 means test size
49 char **test = reinterpret_cast<char **>(malloc(sizeof(char *) * testSize));
50 ASSERT_NE(test, nullptr);
51 for (int32_t i = 0; i < testSize; i++) {
52 test[i] = reinterpret_cast<char *>(malloc(sizeof(char)));
53 ASSERT_NE(test[i], nullptr);
54 }
55 FreeStrArray(&test, testSize - 1);
56 EXPECT_EQ(test, nullptr);
57 FreeStrArray(&test, testSize - 1); // arr[i] == nullptr
58 if (test != nullptr) {
59 for (int32_t i = 0; i < testSize; i++) {
60 if (test[i] != nullptr) {
61 free(test[i]);
62 }
63 }
64 free(test);
65 }
66 }
67
68 /**
69 * @tc.name: GetProcessNameFromJson001
70 * @tc.desc: GetProcessNameFromJson successfully.
71 * @tc.type: FUNC
72 * @tc.require:
73 */
74 HWTEST_F(TokenOperTest, GetProcessNameFromJson001, TestSize.Level0)
75 {
76 NativeTokenList tokenNode;
77 std::string stringJson1 = R"()"\
78 R"({"processName":"process5","APL":3,"version":1,"tokenId":678065606,"tokenAttr":0,)"\
79 R"("dcaps":["AT_CAP","ST_CAP"], "permissions":[], "nativeAcls":[]})";
80
81 cJSON* jsonroot = cJSON_Parse(stringJson1.c_str());
82 EXPECT_EQ(GetProcessNameFromJson(jsonroot, &tokenNode), 0);
83 cJSON_Delete(jsonroot);
84
85 stringJson1 = R"()"\
86 R"({"processName":2,"APL":3,"version":1,"tokenId":678065606,"tokenAttr":0,)"\
87 R"("dcaps":["AT_CAP","ST_CAP"], "permissions":[], "nativeAcls":[]})";
88 jsonroot = cJSON_Parse(stringJson1.c_str());
89 EXPECT_NE(GetProcessNameFromJson(jsonroot, &tokenNode), 0);
90 cJSON_Delete(jsonroot);
91
92 stringJson1 = R"()"\
93 R"({"processName":"partitionslot_hostApartitionslot_hostApartitionslot_hostApartitions)"\
94 R"(lot_hostApartitionslot_hostApartitionslot_hostApartitionslot_hostApartitionslot_hostApartitonslt_hosApa)"\
95 R"(lot_hostApartitionslot_hostApartitionslot_hostApartitionslot_hostApartitionslot_hostApartitonslo_hostpa)"\
96 R"(lot_hostApartitionslot_hostApartitionslot_hostApartitionslot_hostApartitionslot_hostApartitonslo_hostpa)"\
97 R"(lot_hostApartitionslot_hostApartitionslot_hostApartitionslot_hostApartitionslot_hostApartitonslt_htApa")"\
98 R"(,"APL":3,"version":1,"tokenId":678065606,"tokenAttr":0,)"\
99 R"("dcaps":["AT_CAP","ST_CAP"], "permissions":[], "nativeAcls":[]})";
100
101 jsonroot = cJSON_Parse(stringJson1.c_str());
102 EXPECT_NE(GetProcessNameFromJson(jsonroot, &tokenNode), 0);
103 cJSON_Delete(jsonroot);
104 }
105
106 /**
107 * @tc.name: GetTokenIdFromJson001
108 * @tc.desc: GetTokenIdFromJson successfully.
109 * @tc.type: FUNC
110 * @tc.require:
111 */
112 HWTEST_F(TokenOperTest, GetTokenIdFromJson001, TestSize.Level0)
113 {
114 NativeTokenList tokenNode;
115 const char *stringJson1 = "{\"processName\":\"partitionslot_host\","
116 "\"APL\":2,\"version\":1,\"tokenId\":\"672003577\",\"tokenAttr\":0,\"dcaps\":[],"
117 "\"permissions\":[],\"nativeAcls\":[]}";
118 cJSON* jsonroot = cJSON_Parse(stringJson1);
119 EXPECT_NE(GetTokenIdFromJson(jsonroot, &tokenNode), 0);
120 cJSON_Delete(jsonroot);
121
122 const char *stringJson2 = "{\"processName\":\"partitionslot_host\","
123 "\"APL\":2,\"version\":1,\"tokenId\":0,\"tokenAttr\":0,\"dcaps\":[],"
124 "\"permissions\":[],\"nativeAcls\":[]}";
125 cJSON* jsonroot2 = cJSON_Parse(stringJson2);
126 EXPECT_NE(GetTokenIdFromJson(jsonroot2, &tokenNode), 0);
127 cJSON_Delete(jsonroot2);
128
129 const char *stringJson3 = "{\"processName\":\"partitionslot_host\","
130 "\"APL\":2,\"version\":1,\"tokenId\":536962970,\"tokenAttr\":0,\"dcaps\":[],"
131 "\"permissions\":[],\"nativeAcls\":[]}";
132 cJSON* jsonroot3 = cJSON_Parse(stringJson3);
133 EXPECT_NE(GetTokenIdFromJson(jsonroot3, &tokenNode), 0);
134 cJSON_Delete(jsonroot3);
135 }
136
137 /**
138 * @tc.name: GetAplFromJson001
139 * @tc.desc: GetAplFromJson successfully.
140 * @tc.type: FUNC
141 * @tc.require:
142 */
143 HWTEST_F(TokenOperTest, GetAplFromJson001, TestSize.Level0)
144 {
145 NativeTokenList tokenNode;
146 const char *stringJson1 = "{\"APL\":2}";
147 cJSON* jsonroot = cJSON_Parse(stringJson1);
148 EXPECT_EQ(GetAplFromJson(jsonroot, &tokenNode), 0);
149
150 const char *stringJson2 = "{\"processName\":\"partitionslot_host\","
151 "\"APL\":\"2\",\"version\":1,\"tokenId\":672003577,\"tokenAttr\":0,\"dcaps\":[],"
152 "\"permissions\":[],\"nativeAcls\":[]}";
153 jsonroot = cJSON_Parse(stringJson2);
154 EXPECT_NE(GetAplFromJson(jsonroot, &tokenNode), 0);
155 cJSON_Delete(jsonroot);
156
157 const char *stringJson3 = "{\"processName\":\"partitionslot_host\","
158 "\"APL\":-1,\"version\":1,\"tokenId\":672003577,\"tokenAttr\":0,\"dcaps\":[],"
159 "\"permissions\":[],\"nativeAcls\":[]}";
160 jsonroot = cJSON_Parse(stringJson3);
161 EXPECT_NE(GetAplFromJson(jsonroot, &tokenNode), 0);
162 cJSON_Delete(jsonroot);
163
164 const char *stringJson4 = "{\"processName\":\"partitionslot_host\","
165 "\"APL\":4,\"version\":1,\"tokenId\":672003577,\"tokenAttr\":0,\"dcaps\":[],"
166 "\"permissions\":[],\"nativeAcls\":[]}";
167 jsonroot = cJSON_Parse(stringJson4);
168 EXPECT_NE(GetAplFromJson(jsonroot, &tokenNode), 0);
169 cJSON_Delete(jsonroot);
170 }
171
172 /**
173 * @tc.name: GetInfoArrFromJson001
174 * @tc.desc: GetInfoArrFromJson successfully.
175 * @tc.type: FUNC
176 * @tc.require:
177 */
178 HWTEST_F(TokenOperTest, GetInfoArrFromJson001, TestSize.Level0)
179 {
180 const int32_t testSize = 2;
181 int32_t resSize;
182 StrArrayAttr attr;
183 attr.strKey = "dcaps";
184 attr.maxStrNum = 1;
185 attr.maxStrLen = 10;
186 char **test = static_cast<char **>(malloc(testSize * sizeof(char *)));
187 const char *stringJson1 = "{\"processName\":\"partitionslot_host\","
188 "\"dcaps\":[\"DCAPS_AT\",\"DCAPS_AT\", \"DCAPS_AT\",\"DCAPS_AT\"],"
189 "\"permissions\":[],\"nativeAcls\":[]}";
190 cJSON* jsonroot = cJSON_Parse(stringJson1);
191 EXPECT_EQ(GetInfoArrFromJson(jsonroot, &test, &resSize, &attr), 0);
192 cJSON_Delete(jsonroot);
193
194 stringJson1 = "{\"processName\":\"partitionslot_host\","
195 "\"APL\":2,\"version\":1,\"tokenId\":672003577,\"tokenAttr\":0,\"dcaps\":[1],"
196 "\"permissions\":[],\"nativeAcls\":[]}";
197 jsonroot = cJSON_Parse(stringJson1);
198 EXPECT_NE(GetInfoArrFromJson(jsonroot, &test, &resSize, &attr), 0);
199 cJSON_Delete(jsonroot);
200
201 stringJson1 = "{\"processName\":\"partitionslot_host\","
202 "\"APL\":2,\"version\":1,\"tokenId\":672003577,\"tokenAttr\":0,\"dcaps\":[\"DCAPSAAAAAAAA_AT\"],"
203 "\"permissions\":[],\"nativeAcls\":[]}";
204 jsonroot = cJSON_Parse(stringJson1);
205 EXPECT_NE(GetInfoArrFromJson(jsonroot, &test, &resSize, &attr), 0);
206 cJSON_Delete(jsonroot);
207 free(test);
208 test = nullptr;
209 }
210
211 /**
212 * @tc.name: UpdateGoalItemFromRecord001
213 * @tc.desc: UpdateGoalItemFromRecord abnormal.
214 * @tc.type: FUNC
215 * @tc.require:
216 */
217 HWTEST_F(TokenOperTest, UpdateGoalItemFromRecord001, TestSize.Level0)
218 {
219 NativeTokenList tokenNode;
220
221 // processName json is null
222 const char *stringJson2 = "[{\"processName_\":\"partitionslot_host\","
223 "\"APL\":2,\"version\":1,\"tokenId\":672003577,\"tokenAttr\":0,\"dcaps\":[],"
224 "\"permissions\":[],\"nativeAcls\":[]}]";
225 cJSON* jsonRoot = cJSON_Parse(stringJson2);
226 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
227 cJSON_Delete(jsonRoot);
228
229 std::string stringJson1 = R"()"\
230 R"({"processName":"process5","APL":3,"version":1,"tokenId":678065606,"tokenAttr":0,)"\
231 R"("dcaps":["AT_CAP","ST_CAP"], "permissions":[], "nativeAcls":[]})";
232
233 jsonRoot = cJSON_Parse(stringJson1.c_str());
234 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
235 cJSON_Delete(jsonRoot);
236
237 // processName json is not string
238 const char *stringJson3 = "[{\"processName\": 1,"
239 "\"APL\":1,\"version\":1,\"tokenId\":672003577,\"tokenAttr\":0,\"dcaps\":[],"
240 "\"permissions\":[],\"nativeAcls\":[]}]";
241 jsonRoot = cJSON_Parse(stringJson3);
242 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
243 cJSON_Delete(jsonRoot);
244
245 const char *stringJson4 = "[]";
246 jsonRoot = cJSON_Parse(stringJson4);
247 EXPECT_NE(UpdateGoalItemFromRecord(&tokenNode, jsonRoot), 0);
248 cJSON_Delete(jsonRoot);
249 }
250
251