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 }