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