1 /**
2 * Copyright (c) 2021 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 "ActsPMSTest.h"
17 #include <sys/time.h>
18
19 using namespace std;
20 using namespace testing::ext;
21
22 static PmsInnerApi *g_interface;
23 static PermissionTrans g_systemPers[] = {
24 {
25 "ohos.permission.CAMERA",
26 "for CAMERA use",
27 INUSE,
28 },
29 {
30 "ohos.permission.RECORD_AUDIO",
31 "for RECORD_AUDIO use",
32 ALWAYS,
33 },
34 {
35 "ohos.permission.READ_MEDIA_AUDIO",
36 "for READ_MEDIA_AUDIO use",
37 INUSE,
38 },
39 {
40 "ohos.permission.READ_MEDIA_IMAGES",
41 "for READ_MEDIA_IMAGES use",
42 ALWAYS,
43 },
44 {
45 "ohos.permission.READ_MEDIA_VIDEO",
46 "for READ_MEDIA_VIDEO use",
47 INUSE,
48 },
49 {
50 "ohos.permission.WRITE_MEDIA_AUDIO",
51 "for WRITE_MEDIA_AUDIO use",
52 ALWAYS,
53 },
54 {
55 "ohos.permission.WRITE_MEDIA_IMAGES",
56 "for WRITE_MEDIA_IMAGES use",
57 INUSE,
58 },
59 {
60 "ohos.permission.WRITE_MEDIA_VIDEO",
61 "for WRITE_MEDIA_VIDEO use",
62 ALWAYS,
63 },
64 {
65 "ohos.permission.MODIFY_AUDIO_SETTINGS",
66 "for MODIFY_AUDIO_SETTINGS use",
67 INUSE,
68 },
69 };
70
71 class ActsPMSUpdatePermissionTest : public testing::Test
72 {
73 protected:
SetUpTestCase(void)74 static void SetUpTestCase(void)
75 {
76 CreateAppDir();
77 IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(PERMISSION_SERVICE, PERM_INNER);
78 iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **)&g_interface);
79 setuid(0);
80 }
TearDownTestCase(void)81 static void TearDownTestCase(void) {}
SetUp()82 virtual void SetUp() {}
TearDown()83 virtual void TearDown()
84 {
85 DeletePermissions(TEST_APP_ID);
86 DeletePermissions(TEST_APP_ID2);
87 DeletePermissions(SUBTEST_APP_ID);
88 UnLoadPermissions(TEST_TASKID);
89 UnLoadPermissions(SUBTEST_TASKID);
90 }
91 };
92
GetCurrentTimeMillis()93 long GetCurrentTimeMillis()
94 {
95 struct timeval current;
96 gettimeofday(¤t, NULL);
97 return current.tv_sec * MILLISECOND + current.tv_usec / MILLISECOND;
98 }
99
100 /**
101 * @tc.number SUB_SEC_AppSEC_PermissionMgmt_PMS_6200
102 * @tc.name Update permission flags
103 * @tc.desc [C- SECURITY -1000]
104 */
105 HWTEST_F(ActsPMSUpdatePermissionTest, testSecPMUpdatePMFlags_6200, Function | MediumTest | Level2)
106 {
107 SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
108
109 PermissionSaved *permissions = NULL;
110 int permNum = 0;
111 int ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
112 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret=" << ret << endl;
113 EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum =" << permNum << endl;
114 if (permissions != NULL)
115 {
116 EXPECT_EQ(permissions[0].flags, PMS_FLAG_DEFAULT) << "flags =" << permissions[0].flags << endl;
117 }
118 ClrPers(permissions);
119
120 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, g_systemPers[0].name, PMS_FLAG_DEFAULT);
121 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "update perms flag ret =" << ret << endl;
122
123 ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
124 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret=" << ret << endl;
125 EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum =" << permNum << endl;
126 ClrPers(permissions);
127
128 UnLoadPermissions(TEST_TASKID);
129 DeletePermissions(TEST_APP_ID);
130 }
131
132 /**
133 * @tc.number SUB_SEC_AppSEC_PermissionMgmt_PMS_6300
134 * @tc.name Update permission flags (No reminds after rejection)
135 * @tc.desc [C- SECURITY -1000]
136 */
137 HWTEST_F(ActsPMSUpdatePermissionTest, testSecPMUpdatePMFlags_6300, Function | MediumTest | Level2)
138 {
139 SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
140
141 PermissionSaved *permissions = NULL;
142 int permNum = 0;
143 int ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
144 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret=" << ret << endl;
145 EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum =" << permNum << endl;
146 if (permissions != NULL)
147 {
148 EXPECT_EQ(permissions[0].flags, PMS_FLAG_DEFAULT) << "flags =" << permissions[0].flags << endl;
149 }
150 ClrPers(permissions);
151
152 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, g_systemPers[0].name, PMS_FLAG_USER_FIXED);
153 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "update perms flag ret =" << ret << endl;
154
155 ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
156 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret=" << ret << endl;
157 EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum =" << permNum << endl;
158 ClrPers(permissions);
159
160 UnLoadPermissions(TEST_TASKID);
161 DeletePermissions(TEST_APP_ID);
162 }
163
164 /**
165 * @tc.number SUB_SEC_AppSEC_PermissionMgmt_PMS_6400
166 * @tc.name Update permission flags (Name does not exist)
167 * @tc.desc [C- SECURITY -1000]
168 */
169 HWTEST_F(ActsPMSUpdatePermissionTest, testSecPMUpdatePMFlags_6400, Function | MediumTest | Level2)
170 {
171 SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
172
173 PermissionSaved *permissions = NULL;
174 int permNum = 0;
175 int ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
176 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret=" << ret << endl;
177 EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum =" << permNum << endl;
178 if (permissions != NULL)
179 {
180 EXPECT_EQ(permissions[0].flags, PMS_FLAG_DEFAULT) << "flags =" << permissions[0].flags << endl;
181 }
182 ClrPers(permissions);
183
184 // pkg name not exist
185 ret = g_interface->UpdatePermissionFlags(TEST_APP_NOT_EXIST, g_systemPers[0].name, PMS_FLAG_USER_FIXED);
186 EXPECT_EQ(ret, PERM_ERRORCODE_FILE_NOT_EXIST) << "update perms flag ret =" << ret << endl;
187
188 // pkg perm not exist
189 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, PERMISSION_UNDEFINED, PMS_FLAG_USER_FIXED);
190 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "update perms flag ret =" << ret << endl;
191
192 // pkg flag not exist
193 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, g_systemPers[0].name, FLAG_NOT_EXIST);
194 EXPECT_EQ(ret, PERM_ERRORCODE_INVALID_PARAMS) << "update perms flag ret =" << ret << endl;
195 ClrPers(permissions);
196
197 UnLoadPermissions(TEST_TASKID);
198 DeletePermissions(TEST_APP_ID);
199 }
200
201 /**
202 * @tc.number SUB_SEC_AppSEC_PermissionMgmt_PMS_6500
203 * @tc.name Update permission flags (Name empty)
204 * @tc.desc [C- SECURITY -1000]
205 */
206 HWTEST_F(ActsPMSUpdatePermissionTest, testSecPMUpdatePMFlags_6500, Function | MediumTest | Level2)
207 {
208 SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
209
210 PermissionSaved *permissions = NULL;
211 int permNum = 0;
212 int ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
213 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret=" << ret << endl;
214 EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum =" << permNum << endl;
215 if (permissions != NULL)
216 {
217 EXPECT_EQ(permissions[0].flags, PMS_FLAG_DEFAULT) << "flags =" << permissions[0].flags << endl;
218 }
219 ClrPers(permissions);
220
221 // pkg name empty
222 ret = g_interface->UpdatePermissionFlags(NULL, g_systemPers[0].name, PMS_FLAG_USER_FIXED);
223 EXPECT_EQ(ret, PERM_ERRORCODE_INVALID_PARAMS) << "update perms flag ret =" << ret << endl;
224
225 // pkg perm empty
226 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, NULL, PMS_FLAG_USER_FIXED);
227 EXPECT_EQ(ret, PERM_ERRORCODE_INVALID_PARAMS) << "update perms flag ret =" << ret << endl;
228
229 // pkg flag empty
230 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, g_systemPers[0].name, 0);
231 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "update perms flag ret =" << ret << endl;
232 ClrPers(permissions);
233
234 UnLoadPermissions(TEST_TASKID);
235 DeletePermissions(TEST_APP_ID);
236 }
237
238 /**
239 * @tc.number SUB_SEC_AppSEC_PermissionMgmt_PMS_6600
240 * @tc.name Update permission flags (Name invalid)
241 * @tc.desc [C- SECURITY -1000]
242 */
243 HWTEST_F(ActsPMSUpdatePermissionTest, testSecPMUpdatePMFlags_6600, Function | MediumTest | Level2)
244 {
245 SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
246
247 PermissionSaved *permissions = NULL;
248 int permNum = 0;
249 int ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
250 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret=" << ret << endl;
251 EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum =" << permNum << endl;
252 if (permissions != NULL)
253 {
254 EXPECT_EQ(permissions[0].flags, PMS_FLAG_DEFAULT) << "flags =" << permissions[0].flags << endl;
255 }
256 ClrPers(permissions);
257
258 // pkg name invalid
259 ret = g_interface->UpdatePermissionFlags(TEST_APP_INVALID, g_systemPers[0].name, PMS_FLAG_USER_FIXED);
260 EXPECT_EQ(ret, PERM_ERRORCODE_FILE_NOT_EXIST) << "update perms flag ret =" << ret << endl;
261
262 // pkg perm invalid
263 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, PERMISSION_UNSUPPORTED, PMS_FLAG_USER_FIXED);
264 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "update perms flag ret =" << ret << endl;
265 ClrPers(permissions);
266
267 UnLoadPermissions(TEST_TASKID);
268 DeletePermissions(TEST_APP_ID);
269 }
270
271 /**
272 * @tc.number SUB_SEC_AppSEC_PermissionMgmt_PMS_6700
273 * @tc.name Updatepermissionflags interface stability test
274 * @tc.desc [C- SECURITY -1000]
275 */
276 HWTEST_F(ActsPMSUpdatePermissionTest, testSecPMUpdatePMFlags_6700, Function | MediumTest | Level2)
277 {
278 SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
279
280 PermissionSaved *permissions = NULL;
281 int permNum = 0;
282 int ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
283 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret=" << ret << endl;
284 EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum =" << permNum << endl;
285 if (permissions != NULL)
286 {
287 EXPECT_EQ(permissions[0].flags, PMS_FLAG_DEFAULT) << "flags =" << permissions[0].flags << endl;
288 }
289 ClrPers(permissions);
290
291 for (int i = 0; i < PERFORMANCE_RUN_TIMES / 2; i++)
292 {
293 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, g_systemPers[0].name, PMS_FLAG_DEFAULT);
294 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "update perms flag ret =" << ret << endl;
295 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, g_systemPers[0].name, PMS_FLAG_USER_FIXED);
296 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "update perms flag ret =" << ret << endl;
297 }
298 ClrPers(permissions);
299
300 UnLoadPermissions(TEST_TASKID);
301 DeletePermissions(TEST_APP_ID);
302 }
303
304 /**
305 * @tc.number SUB_SEC_AppSEC_PermissionMgmt_PMS_6800
306 * @tc.name Updatepermissionflags interface performace test
307 * @tc.desc [C- SECURITY -1000]
308 */
309 HWTEST_F(ActsPMSUpdatePermissionTest, testSecPMUpdatePMFlags_6800, Function | MediumTest | Level2)
310 {
311 SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
312
313 PermissionSaved *permissions = NULL;
314 int permNum = 0;
315 int ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
316 EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret=" << ret << endl;
317 EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum =" << permNum << endl;
318 if (permissions != NULL)
319 {
320 EXPECT_EQ(permissions[0].flags, PMS_FLAG_DEFAULT) << "flags =" << permissions[0].flags << endl;
321 }
322 ClrPers(permissions);
323
324 long startTime = GetCurrentTimeMillis();
325 for (int i = 0; i < PERFORMANCE_RUN_TIMES / 2; i++)
326 {
327 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, g_systemPers[0].name, PMS_FLAG_DEFAULT);
328 ret = g_interface->UpdatePermissionFlags(TEST_APP_ID, g_systemPers[0].name, PMS_FLAG_USER_FIXED);
329 }
330 long timeCost = GetCurrentTimeMillis() - startTime;
331 long timeAvg = timeCost / 10000;
332 EXPECT_LT(timeAvg, 11) << "avg times =" << timeAvg << endl;
333 ClrPers(permissions);
334
335 UnLoadPermissions(TEST_TASKID);
336 DeletePermissions(TEST_APP_ID);
337 }
338