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