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 }