• 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 
70 class ActsPMSGrantRuntimeTest : public testing::Test {
71 protected:
SetUpTestCase(void)72     static void SetUpTestCase(void)
73     {
74         CreateAppDir();
75         IUnknown *iUnknown = SAMGR_GetInstance()->GetFeatureApi(PERMISSION_SERVICE, PERM_INNER);
76         iUnknown->QueryInterface(iUnknown, DEFAULT_VERSION, (void **) &g_interface);
77         setuid(0);
78     }
TearDownTestCase(void)79     static void TearDownTestCase(void) {}
SetUp()80     virtual void SetUp() {}
TearDown()81     virtual void TearDown()
82     {
83         DeletePermissions(TEST_APP_ID);
84         DeletePermissions(TEST_APP_ID2);
85         DeletePermissions(SUBTEST_APP_ID);
86         UnLoadPermissions(TEST_TASKID);
87         UnLoadPermissions(SUBTEST_TASKID);
88     }
89 };
90 
91 /**
92  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_0960
93  * @tc.name       grant permissions to large and small PIDs
94  * @tc.desc       [C- SOFTWARE -0200]
95  */
96 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_0960, Function | MediumTest | Level3)
97 {
98     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
99     LoadPermissions(TEST_APP_ID, MAX_PID);
100     int ret = g_interface->GrantRuntimePermission(MAX_PID, g_systemPers[0].name);
101     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
102     ret = g_interface->CheckPermission(MAX_PID, g_systemPers[0].name);
103     EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
104     UnLoadPermissions(MAX_PID);
105     LoadPermissions(TEST_APP_ID, MIN_PID);
106     ret = g_interface->GrantRuntimePermission(MIN_PID, g_systemPers[1].name);
107     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
108     ret = g_interface->CheckPermission(MIN_PID, g_systemPers[1].name);
109     EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
110     UnLoadPermissions(MIN_PID);
111     DeletePermissions(TEST_APP_ID);
112 }
113 
114 /**
115  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_0970
116  * @tc.name       grant permissions while not load permiossion
117  * @tc.desc       [C- SOFTWARE -0200]
118  */
119 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_0970, Function | MediumTest | Level2)
120 {
121     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
122     int ret = g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[0].name);
123     EXPECT_EQ(ret, PERM_ERRORCODE_TASKID_NOT_EXIST) << "grant ret = " << ret << endl;
124     ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[0].name);
125     EXPECT_EQ(ret, RET_NOK) << "checkperm ret = " << ret << endl;
126     DeletePermissions(TEST_APP_ID);
127 }
128 
129 /**
130  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_0980
131  * @tc.name       grant runtime app permissions
132  * @tc.desc       [C- SECURITY -0400]
133  */
134 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_0980, Function | MediumTest | Level0)
135 {
136     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
137     LoadPermissions(TEST_APP_ID, TEST_TASKID);
138     int ret = g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[0].name);
139     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
140     ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[0].name);
141     EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
142     UnLoadPermissions(TEST_TASKID);
143     DeletePermissions(TEST_APP_ID);
144 }
145 
146 /**
147  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_0990
148  * @tc.name       grant opened permissions
149  * @tc.desc       [C- SOFTWARE -0200]
150  */
151 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_0990, Function | MediumTest | Level1)
152 {
153     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
154     g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
155     LoadPermissions(TEST_APP_ID, TEST_TASKID);
156     int ret = g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[0].name);
157     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
158     ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[0].name);
159     EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
160     ret = g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[1].name);
161     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
162     ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[1].name);
163     EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
164     UnLoadPermissions(TEST_TASKID);
165     DeletePermissions(TEST_APP_ID);
166 }
167 
168 /**
169  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1000
170  * @tc.name       grant permissions without request
171  * @tc.desc       [C- SOFTWARE -0200]
172  */
173 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_1000, Function | MediumTest | Level2)
174 {
175     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, 1, FIRST_INSTALL);
176     LoadPermissions(TEST_APP_ID, TEST_TASKID);
177     int ret = g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[1].name);
178     EXPECT_EQ(ret, PERM_ERRORCODE_PERM_NOT_EXIST) << "grant ret = " << ret << endl;
179     ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[1].name);
180     EXPECT_EQ(ret, RET_NOK) << "checkperm ret = " << ret << endl;
181     UnLoadPermissions(TEST_TASKID);
182     DeletePermissions(TEST_APP_ID);
183 }
184 
185 /**
186  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1010
187  * @tc.name       grant system_grant permissions
188  * @tc.desc       [C- SOFTWARE -0200]
189  */
190 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_1010, Function | MediumTest | Level2)
191 {
192     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
193     LoadPermissions(TEST_APP_ID, TEST_TASKID);
194     int ret = g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[SYS_PERM_NUM - 1].name);
195     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
196     ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[SYS_PERM_NUM - 1].name);
197     EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
198     UnLoadPermissions(TEST_TASKID);
199     DeletePermissions(TEST_APP_ID);
200 }
201 
202 /**
203  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1020
204  * @tc.name       grant user_grant permissions
205  * @tc.desc       [C- SOFTWARE -0200]
206  */
207 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_1020, Function | MediumTest | Level1)
208 {
209     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
210     LoadPermissions(TEST_APP_ID, TEST_TASKID);
211     int ret;
212     for (int i = 0; i < SYS_PERM_NUM - 1; i++) {
213         ret = g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[i].name);
214         EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
215         ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[i].name);
216         EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
217     }
218     UnLoadPermissions(TEST_TASKID);
219     DeletePermissions(TEST_APP_ID);
220 }
221 
222 /**
223  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1030
224  * @tc.name       grant unknown permissions
225  * @tc.desc       [C- SOFTWARE -0200]
226  */
227 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_1030, Function | MediumTest | Level3)
228 {
229     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
230     LoadPermissions(TEST_APP_ID, TEST_TASKID);
231     int ret = g_interface->GrantRuntimePermission(TEST_TASKID, PERMISSION_UNDEFINED);
232     EXPECT_EQ(ret, PERM_ERRORCODE_PERM_NOT_EXIST) << "grant ret = " << ret << endl;
233     ret = g_interface->CheckPermission(TEST_TASKID, PERMISSION_UNDEFINED);
234     EXPECT_EQ(ret, RET_NOK) << "checkperm ret = " << ret << endl;
235     UnLoadPermissions(TEST_TASKID);
236     DeletePermissions(TEST_APP_ID);
237 }
238 
239 /**
240  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1180
241  * @tc.name       grant runtime permissions after grant permission
242  * @tc.desc       [C- SOFTWARE -0200]
243  */
244 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_1180, Function | MediumTest | Level3)
245 {
246     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
247     g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
248     LoadPermissions(TEST_APP_ID, TEST_TASKID);
249     int ret = g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[0].name);
250     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
251     ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[0].name);
252     EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
253     UnLoadPermissions(TEST_TASKID);
254     DeletePermissions(TEST_APP_ID);
255 }
256 
257 /**
258  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1190
259  * @tc.name       grant runtime permissions after revoke permission
260  * @tc.desc       [C- SOFTWARE -0200]
261  */
262 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_1190, Function | MediumTest | Level2)
263 {
264     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
265     g_interface->GrantPermission(TEST_APP_ID, g_systemPers[0].name);
266     g_interface->RevokePermission(TEST_APP_ID, g_systemPers[0].name);
267     LoadPermissions(TEST_APP_ID, TEST_TASKID);
268     int ret = g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[0].name);
269     EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
270     ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[0].name);
271     EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
272     UnLoadPermissions(TEST_TASKID);
273     DeletePermissions(TEST_APP_ID);
274 }
275 
276 /**
277  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1200
278  * @tc.name       grant runtime permissions continuously
279  * @tc.desc       [C- SOFTWARE -0200]
280  */
281 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_1200, Function | MediumTest | Level2)
282 {
283     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
284     LoadPermissions(TEST_APP_ID, TEST_TASKID);
285     int ret;
286     for (int i = 0; i < RELI_TEST_TIME; i++) {
287         ret = g_interface->GrantRuntimePermission(TEST_TASKID, g_systemPers[0].name);
288         EXPECT_EQ(ret, PERM_ERRORCODE_SUCCESS) << "grant ret = " << ret << endl;
289         if (ret != PERM_ERRORCODE_SUCCESS) {
290             break;
291         }
292     }
293     ret = g_interface->CheckPermission(TEST_TASKID, g_systemPers[0].name);
294     EXPECT_EQ(ret, GRANTED) << "checkperm ret = " << ret << endl;
295     UnLoadPermissions(TEST_TASKID);
296     DeletePermissions(TEST_APP_ID);
297 }
298 
299 /**
300  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1300
301  * @tc.name       grant permissions of unnormal task
302  * @tc.desc       [C- SOFTWARE -0200]
303  */
304 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_1300, Function | MediumTest | Level3)
305 {
306     int ret = g_interface->GrantRuntimePermission(ABNORMAL_TASKID, g_systemPers[0].name);
307     EXPECT_EQ(ret, PERM_ERRORCODE_TASKID_NOT_EXIST) << "grant ret = " << ret << endl;
308 }
309 
310 /**
311  * @tc.number     SUB_SEC_AppSEC_PermissionMgmt_PMS_1330
312  * @tc.name       grant permissions of unnormal permission
313  * @tc.desc       [C- SOFTWARE -0200]
314  */
315 HWTEST_F(ActsPMSGrantRuntimeTest, testSecPMPMS_1330, Function | MediumTest | Level4)
316 {
317     SaveOrUpdatePermissions(TEST_APP_ID, g_systemPers, SYS_PERM_NUM, FIRST_INSTALL);
318     LoadPermissions(TEST_APP_ID, TEST_TASKID);
319     int ret = g_interface->GrantRuntimePermission(TEST_TASKID, PERMISSION_UNSUPPORTED);
320     EXPECT_EQ(ret, PERM_ERRORCODE_PERM_NOT_EXIST) << "grant ret = " << ret << endl;
321     UnLoadPermissions(TEST_TASKID);
322     DeletePermissions(TEST_APP_ID);
323 }