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 }