• 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 
18 using namespace std;
19 using namespace testing::ext;
20 
21 static PmsInnerApi *g_interface;
22 static PermissionTrans g_systemPers[] = {
23     {
24         "ohos.permission.CAMERA",
25         "for CAMERA use",
26         INUSE,
27     },
28     {
29         "ohos.permission.RECORD_AUDIO",
30         "for RECORD_AUDIO use",
31         ALWAYS,
32     },
33     {
34         "ohos.permission.READ_MEDIA_AUDIO",
35         "for READ_MEDIA_AUDIO use",
36         INUSE,
37     },
38     {
39         "ohos.permission.READ_MEDIA_IMAGES",
40         "for READ_MEDIA_IMAGES use",
41         ALWAYS,
42     },
43     {
44         "ohos.permission.READ_MEDIA_VIDEO",
45         "for READ_MEDIA_VIDEO use",
46         INUSE,
47     },
48     {
49         "ohos.permission.WRITE_MEDIA_AUDIO",
50         "for WRITE_MEDIA_AUDIO use",
51         ALWAYS,
52     },
53     {
54         "ohos.permission.WRITE_MEDIA_IMAGES",
55         "for WRITE_MEDIA_IMAGES use",
56         INUSE,
57     },
58     {
59         "ohos.permission.WRITE_MEDIA_VIDEO",
60         "for WRITE_MEDIA_VIDEO use",
61         ALWAYS,
62     },
63     {
64         "ohos.permission.MODIFY_AUDIO_SETTINGS",
65         "for MODIFY_AUDIO_SETTINGS use",
66         INUSE,
67     },
68 };
69 static PermissionTrans g_unDefPer = {
70     PERMISSION_UNDEFINED,
71     "for undefined use",
72     INUSE,
73 };
74 
75 class ActsPMSRevokeTest : public testing::Test {
76 protected:
SetUpTestCase(void)77     static void SetUpTestCase(void)
78     {
79         CreateAppDir();
80         IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(PERMISSION_SERVICE, PERM_INNER);
81         iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **) &g_interface);
82         setuid(0);
83     }
TearDownTestCase(void)84     static void TearDownTestCase(void) {}
SetUp()85     virtual void SetUp() {}
TearDown()86     virtual void TearDown()
87     {
88         DeletePermissions(TEST_APP_ID);
89         DeletePermissions(TEST_APP_ID2);
90         DeletePermissions(SUBTEST_APP_ID);
91         UnLoadPermissions(TEST_TASKID);
92         UnLoadPermissions(SUBTEST_TASKID);
93     }
94 };
95 
96 /**
97  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1110
98  * @tc.name       revoke permissions while not load permiossion
99  * @tc.desc       [C- SOFTWARE -0200]
100  */
101 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1110, Function | MediumTest | Level2)
102 {
103     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
104     g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
105     int ret = g_interface->RevokePermission(TEST_APP_ID, g_systemPers[0].name);
106     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "revoke ret = " << ret << endl;
107     ret = g_interface->RevokePermission(TEST_APP_ID, g_systemPers[1].name);
108     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "revoke ret = " << ret << endl;
109     PermissionSaved* permissions = NULL;
110     int permNum = 0;
111     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
112     if (permissions != NULL) {
113         EXPECT_EQ(permissions[0].granted, NOT_GRANTED);
114         EXPECT_EQ(permissions[1].granted, NOT_GRANTED);
115     }
116     ClrPers(permissions);
117     DeletePermissions(TEST_APP_ID);
118 }
119 
120 /**
121  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1120
122  * @tc.name       revoke closed permissions while load permiossion
123  * @tc.desc       [C- SOFTWARE -0200]
124  */
125 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1120, Function | MediumTest | Level1)
126 {
127     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
128     LoadPermissions(TEST_APP_ID, TEST_TASKID);
129     int ret = g_interface->RevokePermission(TEST_APP_ID, g_systemPers[0].name);
130     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "revoke ret = " << ret << endl;
131     PermissionSaved* permissions = NULL;
132     int permNum = 0;
133     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
134     if (permissions != NULL) {
135         EXPECT_EQ(permissions[0].granted, NOT_GRANTED);
136     }
137     ClrPers(permissions);
138     UnLoadPermissions(TEST_TASKID);
139     DeletePermissions(TEST_APP_ID);
140 }
141 
142 /**
143  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1130
144  * @tc.name       revoke permissions while load permiossion
145  * @tc.desc       [C- SECURITY -0500]
146  */
147 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1130, Function | MediumTest | Level0)
148 {
149     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
150     LoadPermissions(TEST_APP_ID, TEST_TASKID);
151     g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
152     int ret = g_interface->RevokePermission(TEST_APP_ID, g_systemPers[0].name);
153     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "revoke ret = " << ret << endl;
154     PermissionSaved* permissions = NULL;
155     int permNum = 0;
156     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
157     if (permissions != NULL) {
158         EXPECT_EQ(permissions[0].granted, NOT_GRANTED);
159     }
160     ClrPers(permissions);
161     UnLoadPermissions(TEST_TASKID);
162     DeletePermissions(TEST_APP_ID);
163 }
164 
165 /**
166  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1140
167  * @tc.name       revoke unapplied permissions while load permiossion
168  * @tc.desc       [C- SOFTWARE -0200]
169  */
170 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1140, Function | MediumTest | Level2)
171 {
172     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, 1, FIRST_INSTALL);
173     LoadPermissions(TEST_APP_ID, TEST_TASKID);
174     int ret = g_interface->RevokePermission(TEST_APP_ID, g_systemPers[1].name);
175     EXPECT_EQ(ret, PERM_ERRORCODE_PERM_NOT_EXIST) << "revoke ret = " << ret << endl;
176     PermissionSaved* permissions = NULL;
177     int permNum = 0;
178     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
179     if (permissions != NULL) {
180         EXPECT_EQ(permissions[0].granted, NOT_GRANTED);
181     }
182     ClrPers(permissions);
183     UnLoadPermissions(TEST_TASKID);
184     DeletePermissions(TEST_APP_ID);
185 }
186 
187 /**
188  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1150
189  * @tc.name       revoke system_grant permissions
190  * @tc.desc       [C- SOFTWARE -0200]
191  */
192 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1150, Function | MediumTest | Level2)
193 {
194     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
195     LoadPermissions(TEST_APP_ID, TEST_TASKID);
196     int ret = g_interface->RevokePermission(TEST_APP_ID, g_systemPers[SYS_PERM_NUM - 1].name);
197     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "revoke ret = " << ret << endl;
198     PermissionSaved* permissions = NULL;
199     int permNum = 0;
200     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
201     if (permissions != NULL) {
202         EXPECT_EQ(permissions[0].granted, NOT_GRANTED);
203     }
204     ClrPers(permissions);
205     UnLoadPermissions(TEST_TASKID);
206     DeletePermissions(TEST_APP_ID);
207 }
208 
209 /**
210  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1160
211  * @tc.name       revoke user_grant permissions
212  * @tc.desc       [C- SOFTWARE -0200]
213  */
214 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1160, Function | MediumTest | Level1)
215 {
216     int ret = SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
217     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "save ret = " << ret << endl;
218     int i;
219     for (i = 0; i < SYS_PERM_NUM; i++) {
220         g_interface->GrantPermission(TEST_APP_ID, g_systemPers[i].name);
221     }
222     for (i = 0; i < SYS_PERM_NUM; i++) {
223         ret = g_interface->RevokePermission(TEST_APP_ID, g_systemPers[i].name);
224         EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "revoke ret = " << ret << endl;
225     }
226     PermissionSaved* permissions = NULL;
227     int permNum = 0;
228     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
229     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
230     EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum = " << permNum << endl;
231     if (permissions != NULL) {
232         for (i = 0; i < SYS_PERM_NUM; i++) {
233             EXPECT_EQ(permissions[i].granted, NOT_GRANTED);
234         }
235     }
236     ClrPers(permissions);
237     DeletePermissions(TEST_APP_ID);
238 }
239 
240 /**
241  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1170
242  * @tc.name       revoke undefined permissions
243  * @tc.desc       [C- SOFTWARE -0200]
244  */
245 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1170, Function | MediumTest | Level1)
246 {
247     int ret = SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
248     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "save ret = " << ret << endl;
249     ret = g_interface->GrantPermission(TEST_APP_ID, g_unDefPer.name);
250     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
251     DeletePermissions(TEST_APP_ID);
252 }
253 
254 /**
255  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1260
256  * @tc.name       revoke permissions after grant runtime permission
257  * @tc.desc       [C- SOFTWARE -0200]
258  */
259 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1260, Function | MediumTest | Level2)
260 {
261     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
262     LoadPermissions(TEST_APP_ID, TEST_TASKID);
263     g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[0].name);
264     int ret = g_interface->RevokePermission(TEST_APP_ID, g_systemPers[0].name);
265     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "revoke ret = " << ret << endl;
266     PermissionSaved* permissions = NULL;
267     int permNum = 0;
268     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
269     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
270     EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum = " << permNum << endl;
271     if (permissions != NULL) {
272         EXPECT_EQ(permissions[0].granted, NOT_GRANTED);
273     }
274     ClrPers(permissions);
275     UnLoadPermissions(TEST_TASKID);
276     DeletePermissions(TEST_APP_ID);
277 }
278 
279 /**
280  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1270
281  * @tc.name       revoke permissions after revoke permission
282  * @tc.desc       [C- SOFTWARE -0200]
283  */
284 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1270, Function | MediumTest | Level2)
285 {
286     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
287     g_interface->RevokePermission(TEST_APP_ID, g_systemPers[0].name);
288     int ret = g_interface->RevokePermission(TEST_APP_ID, g_systemPers[0].name);
289     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "revoke ret = " << ret << endl;
290     PermissionSaved* permissions = NULL;
291     int permNum = 0;
292     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
293     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
294     EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum = " << permNum << endl;
295     if (permissions != NULL) {
296         EXPECT_EQ(permissions[0].granted, NOT_GRANTED);
297     }
298     ClrPers(permissions);
299     DeletePermissions(TEST_APP_ID);
300 }
301 
302 /**
303  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1280
304  * @tc.name       revoke permissions continuously
305  * @tc.desc       [C- SOFTWARE -0200]
306  */
307 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1280, Function | MediumTest | Level3)
308 {
309     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
310     int ret;
311     for (int i = 0; i < RELI_TEST_TIME; i++) {
312         ret = g_interface->RevokePermission(TEST_APP_ID, g_systemPers[0].name);
313         EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "revoke ret = " << ret << endl;
314         if (ret != PERM_ERRORCODE_SUCCESS) {
315             break;
316         }
317     }
318     PermissionSaved* permissions = NULL;
319     int permNum = 0;
320     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
321     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
322     EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum = " << permNum << endl;
323     if (permissions != NULL) {
324         EXPECT_EQ(permissions[0].granted, NOT_GRANTED);
325     }
326     DeletePermissions(TEST_APP_ID);
327 }
328 
329 /**
330  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1320
331  * @tc.name       revoke permissions of unnormal task
332  * @tc.desc       [C- SOFTWARE -0200]
333  */
334 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1320, Function | MediumTest | Level4)
335 {
336     int ret = g_interface->RevokePermission(PERMISSION_UNSUPPORTED, g_systemPers[0].name);
337     EXPECT_EQ(ret, PERM_ERRORCODE_FILE_NOT_EXIST) << "revoke ret = " << ret << endl;
338 }
339 
340 /**
341  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1350
342  * @tc.name       grant permissions of unnormal permission
343  * @tc.desc       [C- SOFTWARE -0200]
344  */
345 HWTEST_F(ActsPMSRevokeTest, testSecPMPMS_1350, Function | MediumTest | Level4)
346 {
347     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
348     int ret = g_interface->RevokePermission(TEST_APP_ID, PERMISSION_UNSUPPORTED);
349     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
350     DeletePermissions(TEST_APP_ID);
351 }