• 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 ActsPMSGrantTest : 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_1040
98  * @tc.name       grant one permission while not load permiossion
99  * @tc.desc       [C- SECURITY -0400]
100  */
101 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1040, Function | MediumTest | Level0)
102 {
103     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
104     int ret = g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
105     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
106     LoadPermissions(TEST_APP_ID, TEST_TASKID);
107     ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[0].name);
108     EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
109     UnLoadPermissions(TEST_TASKID);
110     DeletePermissions(TEST_APP_ID);
111 }
112 
113 /**
114  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1050
115  * @tc.name       grant permissions while load permiossion
116  * @tc.desc       [C- SOFTWARE -0200]
117  */
118 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1050, Function | MediumTest | Level2)
119 {
120     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
121     LoadPermissions(TEST_APP_ID, TEST_TASKID);
122     int ret = g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
123     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
124     PermissionSaved* permissions = NULL;
125     int permNum = 0;
126     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
127     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
128     EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum = " << permNum << endl;
129     if (permissions != NULL) {
130         EXPECT_EQ(permissions[0].granted, GRANTED);
131     }
132     ClrPers(permissions);
133     UnLoadPermissions(TEST_TASKID);
134     DeletePermissions(TEST_APP_ID);
135 }
136 
137 /**
138  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1060
139  * @tc.name       grant opened permissions while load permiossion
140  * @tc.desc       [C- SOFTWARE -0200]
141  */
142 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1060, Function | MediumTest | Level1)
143 {
144     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
145     g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
146     LoadPermissions(TEST_APP_ID, TEST_TASKID);
147     int ret = g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
148     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
149     PermissionSaved* permissions = NULL;
150     int permNum = 0;
151     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
152     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
153     EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum = " << permNum << endl;
154     if (permissions != NULL) {
155         EXPECT_EQ(permissions[0].granted, GRANTED);
156     }
157     ClrPers(permissions);
158     UnLoadPermissions(TEST_TASKID);
159     DeletePermissions(TEST_APP_ID);
160 }
161 
162 /**
163  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1070
164  * @tc.name       grant unapplied permissions while load permiossion
165  * @tc.desc       [C- SOFTWARE -0200]
166  */
167 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1070, Function | MediumTest | Level2)
168 {
169     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, 1, FIRST_INSTALL);
170     LoadPermissions(TEST_APP_ID, TEST_TASKID);
171     int ret = g_interface->GrantPermission(TEST_APP_ID, g_systemPers[1].name);
172     EXPECT_EQ(ret, PERM_ERRORCODE_PERM_NOT_EXIST) << "grant ret = " << ret << endl;
173     PermissionSaved* permissions = NULL;
174     int permNum = 0;
175     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
176     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
177     EXPECT_EQ(permNum, 1) << "permNum = " << permNum << endl;
178     ClrPers(permissions);
179     UnLoadPermissions(TEST_TASKID);
180     DeletePermissions(TEST_APP_ID);
181 }
182 
183 /**
184  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1080
185  * @tc.name       grant system_grant permissions while load permiossion
186  * @tc.desc       [C- SOFTWARE -0200]
187  */
188 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1080, Function | MediumTest | Level2)
189 {
190     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, 0, FIRST_INSTALL);
191     LoadPermissions(TEST_APP_ID, TEST_TASKID);
192     int ret = g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
193     EXPECT_EQ(ret, PERM_ERRORCODE_FILE_NOT_EXIST) << "grant ret = " << ret << endl;
194     PermissionSaved* permissions = NULL;
195     int permNum = 0;
196     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
197     EXPECT_EQ(ret, PERM_ERRORCODE_FILE_NOT_EXIST) << "query ret = " << ret << endl;
198     EXPECT_EQ(permNum, 0) << "permNum = " << permNum << endl;
199     ClrPers(permissions);
200     UnLoadPermissions(TEST_TASKID);
201     DeletePermissions(TEST_APP_ID);
202 }
203 
204 /**
205  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1090
206  * @tc.name       grant user_grant permissions
207  * @tc.desc       [C- SOFTWARE -0200]
208  */
209 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1090, Function | MediumTest | Level1)
210 {
211     int ret = SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
212     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "save ret = " << ret << endl;
213     int i;
214     for (i = 0; i < SYS_PERM_NUM; i++) {
215         ret = g_interface->GrantPermission(TEST_APP_ID, g_systemPers[i].name);
216         EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
217     }
218     PermissionSaved* permissions = NULL;
219     int permNum = 0;
220     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
221     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
222     EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum = " << permNum << endl;
223     if (permissions != NULL) {
224         for (i = 0; i < SYS_PERM_NUM; i++) {
225             EXPECT_EQ(permissions[i].granted, GRANTED);
226         }
227     }
228     ClrPers(permissions);
229     DeletePermissions(TEST_APP_ID);
230 }
231 
232 /**
233  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1100
234  * @tc.name       grant undefined permissions
235  * @tc.desc       [C- SOFTWARE -0200]
236  */
237 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1100, Function | MediumTest | Level1)
238 {
239     int ret = SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
240     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "save ret = " << ret << endl;
241     ret = g_interface->GrantPermission(TEST_APP_ID, g_unDefPer.name);
242     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
243     DeletePermissions(TEST_APP_ID);
244 }
245 
246 /**
247  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1220
248  * @tc.name       grant permissions after grant runtime permission
249  * @tc.desc       [C- SOFTWARE -0200]
250  */
251 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1220, Function | MediumTest | Level2)
252 {
253     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
254     LoadPermissions(TEST_APP_ID, TEST_TASKID);
255     g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[0].name);
256     int ret = g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
257     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
258     PermissionSaved* permissions = NULL;
259     int permNum = 0;
260     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
261     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
262     EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum = " << permNum << endl;
263     if (permissions != NULL) {
264         EXPECT_EQ(permissions[0].granted, GRANTED);
265     }
266     ClrPers(permissions);
267     UnLoadPermissions(TEST_TASKID);
268     DeletePermissions(TEST_APP_ID);
269 }
270 
271 /**
272  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1230
273  * @tc.name       grant permissions after revoke permission
274  * @tc.desc       [C- SOFTWARE -0200]
275  */
276 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1230, Function | MediumTest | Level2)
277 {
278     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
279     g_interface->RevokePermission(TEST_APP_ID, g_systemPers[0].name);
280     int ret = g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
281     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
282     PermissionSaved* permissions = NULL;
283     int permNum = 0;
284     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
285     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
286     EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum = " << permNum << endl;
287     if (permissions != NULL) {
288         EXPECT_EQ(permissions[0].granted, GRANTED);
289     }
290     ClrPers(permissions);
291     DeletePermissions(TEST_APP_ID);
292 }
293 
294 /**
295  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1240
296  * @tc.name       grant permissions continuously
297  * @tc.desc       [C- SOFTWARE -0200]
298  */
299 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1240, Function | MediumTest | Level3)
300 {
301     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
302     int ret;
303     for (int i = 0; i < RELI_TEST_TIME; i++) {
304         ret = g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
305         EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
306         if (ret != PERM_ERRORCODE_SUCCESS) {
307             break;
308         }
309     }
310     PermissionSaved* permissions = NULL;
311     int permNum = 0;
312     ret = g_interface->QueryPermission(TEST_APP_ID, &permissions, &permNum);
313     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "query ret = " << ret << endl;
314     EXPECT_EQ(permNum, SYS_PERM_NUM) << "permNum = " << permNum << endl;
315     if (permissions != NULL) {
316         EXPECT_EQ(permissions[0].granted, GRANTED);
317     }
318     ClrPers(permissions);
319     DeletePermissions(TEST_APP_ID);
320 }
321 
322 /**
323  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1310
324  * @tc.name       grant permissions of unnormal task
325  * @tc.desc       [C- SOFTWARE -0200]
326  */
327 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1310, Function | MediumTest | Level4)
328 {
329     int ret = g_interface->GrantPermission(PERMISSION_UNSUPPORTED, g_systemPers[0].name);
330     EXPECT_EQ(ret, PERM_ERRORCODE_FILE_NOT_EXIST) << "grant ret = " << ret << endl;
331 }
332 
333 /**
334  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1340
335  * @tc.name       grant permissions of unnormal permission
336  * @tc.desc       [C- SOFTWARE -0200]
337  */
338 HWTEST_F(ActsPMSGrantTest, testSecPMPMS_1340, Function | MediumTest | Level4)
339 {
340     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
341     int ret = g_interface->GrantPermission(TEST_APP_ID, PERMISSION_UNSUPPORTED);
342     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
343     DeletePermissions(TEST_APP_ID);
344 }