1/* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.server.devicepolicy; 18 19import com.android.server.devicepolicy.DevicePolicyManagerServiceTestable.OwnersTestable; 20 21import android.content.ComponentName; 22import android.os.UserHandle; 23 24/** 25 * Tests for the DeviceOwner object that saves & loads device and policy owner information. 26 * run this test with: 27 m FrameworksServicesTests && 28 adb install \ 29 -r out/target/product/hammerhead/data/app/FrameworksServicesTests/FrameworksServicesTests.apk && 30 adb shell am instrument -e class com.android.server.devicepolicy.OwnersTest \ 31 -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner 32 33 (mmma frameworks/base/services/tests/servicestests/ for non-ninja build) 34 */ 35public class OwnersTest extends DpmTestBase { 36 public void testUpgrade01() throws Exception { 37 getContext().addUsers(10, 11, 20, 21); 38 39 // First, migrate. 40 { 41 final OwnersTestable owners = new OwnersTestable(getContext()); 42 43 DpmTestUtils.writeToFile(owners.getLegacyConfigFileWithTestOverride(), 44 DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test01/input.xml")); 45 46 owners.load(); 47 48 // The legacy file should be removed. 49 assertFalse(owners.getLegacyConfigFileWithTestOverride().exists()); 50 51 // File was empty, so no new files should be created. 52 assertFalse(owners.getDeviceOwnerFileWithTestOverride().exists()); 53 54 assertFalse(owners.getProfileOwnerFileWithTestOverride(10).exists()); 55 assertFalse(owners.getProfileOwnerFileWithTestOverride(11).exists()); 56 assertFalse(owners.getProfileOwnerFileWithTestOverride(20).exists()); 57 assertFalse(owners.getProfileOwnerFileWithTestOverride(21).exists()); 58 59 assertFalse(owners.hasDeviceOwner()); 60 assertEquals(UserHandle.USER_NULL, owners.getDeviceOwnerUserId()); 61 assertNull(owners.getSystemUpdatePolicy()); 62 assertEquals(0, owners.getProfileOwnerKeys().size()); 63 64 assertFalse(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 65 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 66 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 67 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 68 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 69 } 70 71 // Then re-read and check. 72 { 73 final OwnersTestable owners = new OwnersTestable(getContext()); 74 owners.load(); 75 76 assertFalse(owners.hasDeviceOwner()); 77 assertEquals(UserHandle.USER_NULL, owners.getDeviceOwnerUserId()); 78 assertNull(owners.getSystemUpdatePolicy()); 79 assertEquals(0, owners.getProfileOwnerKeys().size()); 80 81 assertFalse(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 82 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 83 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 84 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 85 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 86 } 87 } 88 89 public void testUpgrade02() throws Exception { 90 getContext().addUsers(10, 11, 20, 21); 91 92 // First, migrate. 93 { 94 final OwnersTestable owners = new OwnersTestable(getContext()); 95 96 DpmTestUtils.writeToFile(owners.getLegacyConfigFileWithTestOverride(), 97 DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test02/input.xml")); 98 99 owners.load(); 100 101 // The legacy file should be removed. 102 assertFalse(owners.getLegacyConfigFileWithTestOverride().exists()); 103 104 assertTrue(owners.getDeviceOwnerFileWithTestOverride().exists()); // TODO Check content 105 106 assertFalse(owners.getProfileOwnerFileWithTestOverride(10).exists()); 107 assertFalse(owners.getProfileOwnerFileWithTestOverride(11).exists()); 108 assertFalse(owners.getProfileOwnerFileWithTestOverride(20).exists()); 109 assertFalse(owners.getProfileOwnerFileWithTestOverride(21).exists()); 110 111 assertTrue(owners.hasDeviceOwner()); 112 assertEquals(null, owners.getDeviceOwnerName()); 113 assertEquals("com.google.android.testdpc", owners.getDeviceOwnerPackageName()); 114 assertEquals(UserHandle.USER_SYSTEM, owners.getDeviceOwnerUserId()); 115 116 assertNull(owners.getSystemUpdatePolicy()); 117 assertEquals(0, owners.getProfileOwnerKeys().size()); 118 119 assertTrue(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 120 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 121 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 122 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 123 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 124 } 125 126 // Then re-read and check. 127 { 128 final OwnersTestable owners = new OwnersTestable(getContext()); 129 owners.load(); 130 131 assertTrue(owners.hasDeviceOwner()); 132 assertEquals(null, owners.getDeviceOwnerName()); 133 assertEquals("com.google.android.testdpc", owners.getDeviceOwnerPackageName()); 134 assertEquals(UserHandle.USER_SYSTEM, owners.getDeviceOwnerUserId()); 135 136 assertNull(owners.getSystemUpdatePolicy()); 137 assertEquals(0, owners.getProfileOwnerKeys().size()); 138 139 assertTrue(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 140 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 141 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 142 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 143 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 144 } 145 } 146 147 public void testUpgrade03() throws Exception { 148 getContext().addUsers(10, 11, 20, 21); 149 150 // First, migrate. 151 { 152 final OwnersTestable owners = new OwnersTestable(getContext()); 153 154 DpmTestUtils.writeToFile(owners.getLegacyConfigFileWithTestOverride(), 155 DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test03/input.xml")); 156 157 owners.load(); 158 159 // The legacy file should be removed. 160 assertFalse(owners.getLegacyConfigFileWithTestOverride().exists()); 161 162 assertFalse(owners.getDeviceOwnerFileWithTestOverride().exists()); 163 164 assertTrue(owners.getProfileOwnerFileWithTestOverride(10).exists()); 165 assertTrue(owners.getProfileOwnerFileWithTestOverride(11).exists()); 166 assertFalse(owners.getProfileOwnerFileWithTestOverride(20).exists()); 167 assertFalse(owners.getProfileOwnerFileWithTestOverride(21).exists()); 168 169 assertFalse(owners.hasDeviceOwner()); 170 assertEquals(UserHandle.USER_NULL, owners.getDeviceOwnerUserId()); 171 assertNull(owners.getSystemUpdatePolicy()); 172 173 assertEquals(2, owners.getProfileOwnerKeys().size()); 174 assertEquals(new ComponentName("com.google.android.testdpc", 175 "com.google.android.testdpc.DeviceAdminReceiver0"), 176 owners.getProfileOwnerComponent(10)); 177 assertEquals("0", owners.getProfileOwnerName(10)); 178 assertEquals("com.google.android.testdpc", owners.getProfileOwnerPackage(10)); 179 180 assertEquals(new ComponentName("com.google.android.testdpc1", ""), 181 owners.getProfileOwnerComponent(11)); 182 assertEquals("1", owners.getProfileOwnerName(11)); 183 assertEquals("com.google.android.testdpc1", owners.getProfileOwnerPackage(11)); 184 185 assertFalse(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 186 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 187 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 188 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 189 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 190 } 191 192 // Then re-read and check. 193 { 194 final OwnersTestable owners = new OwnersTestable(getContext()); 195 owners.load(); 196 197 assertFalse(owners.hasDeviceOwner()); 198 assertEquals(UserHandle.USER_NULL, owners.getDeviceOwnerUserId()); 199 assertNull(owners.getSystemUpdatePolicy()); 200 201 assertEquals(2, owners.getProfileOwnerKeys().size()); 202 assertEquals(new ComponentName("com.google.android.testdpc", 203 "com.google.android.testdpc.DeviceAdminReceiver0"), 204 owners.getProfileOwnerComponent(10)); 205 assertEquals("0", owners.getProfileOwnerName(10)); 206 assertEquals("com.google.android.testdpc", owners.getProfileOwnerPackage(10)); 207 208 assertEquals(new ComponentName("com.google.android.testdpc1", ""), 209 owners.getProfileOwnerComponent(11)); 210 assertEquals("1", owners.getProfileOwnerName(11)); 211 assertEquals("com.google.android.testdpc1", owners.getProfileOwnerPackage(11)); 212 213 assertFalse(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 214 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 215 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 216 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 217 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 218 } 219 } 220 221 /** 222 * Note this also tests {@link Owners#setDeviceOwnerUserRestrictionsMigrated()} 223 * and {@link Owners#setProfileOwnerUserRestrictionsMigrated(int)}. 224 */ 225 public void testUpgrade04() throws Exception { 226 getContext().addUsers(10, 11, 20, 21); 227 228 // First, migrate. 229 { 230 final OwnersTestable owners = new OwnersTestable(getContext()); 231 232 DpmTestUtils.writeToFile(owners.getLegacyConfigFileWithTestOverride(), 233 DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test04/input.xml")); 234 235 owners.load(); 236 237 // The legacy file should be removed. 238 assertFalse(owners.getLegacyConfigFileWithTestOverride().exists()); 239 240 assertTrue(owners.getDeviceOwnerFileWithTestOverride().exists()); 241 242 assertTrue(owners.getProfileOwnerFileWithTestOverride(10).exists()); 243 assertTrue(owners.getProfileOwnerFileWithTestOverride(11).exists()); 244 assertFalse(owners.getProfileOwnerFileWithTestOverride(20).exists()); 245 assertFalse(owners.getProfileOwnerFileWithTestOverride(21).exists()); 246 247 assertTrue(owners.hasDeviceOwner()); 248 assertEquals(null, owners.getDeviceOwnerName()); 249 assertEquals("com.google.android.testdpc", owners.getDeviceOwnerPackageName()); 250 assertEquals(UserHandle.USER_SYSTEM, owners.getDeviceOwnerUserId()); 251 252 assertNotNull(owners.getSystemUpdatePolicy()); 253 assertEquals(5, owners.getSystemUpdatePolicy().getPolicyType()); 254 255 assertEquals(2, owners.getProfileOwnerKeys().size()); 256 assertEquals(new ComponentName("com.google.android.testdpc", 257 "com.google.android.testdpc.DeviceAdminReceiver0"), 258 owners.getProfileOwnerComponent(10)); 259 assertEquals("0", owners.getProfileOwnerName(10)); 260 assertEquals("com.google.android.testdpc", owners.getProfileOwnerPackage(10)); 261 262 assertEquals(new ComponentName("com.google.android.testdpc1", ""), 263 owners.getProfileOwnerComponent(11)); 264 assertEquals("1", owners.getProfileOwnerName(11)); 265 assertEquals("com.google.android.testdpc1", owners.getProfileOwnerPackage(11)); 266 267 assertTrue(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 268 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 269 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 270 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 271 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 272 } 273 274 // Then re-read and check. 275 { 276 final OwnersTestable owners = new OwnersTestable(getContext()); 277 owners.load(); 278 279 assertTrue(owners.hasDeviceOwner()); 280 assertEquals(null, owners.getDeviceOwnerName()); 281 assertEquals("com.google.android.testdpc", owners.getDeviceOwnerPackageName()); 282 assertEquals(UserHandle.USER_SYSTEM, owners.getDeviceOwnerUserId()); 283 284 assertNotNull(owners.getSystemUpdatePolicy()); 285 assertEquals(5, owners.getSystemUpdatePolicy().getPolicyType()); 286 287 assertEquals(2, owners.getProfileOwnerKeys().size()); 288 assertEquals(new ComponentName("com.google.android.testdpc", 289 "com.google.android.testdpc.DeviceAdminReceiver0"), 290 owners.getProfileOwnerComponent(10)); 291 assertEquals("0", owners.getProfileOwnerName(10)); 292 assertEquals("com.google.android.testdpc", owners.getProfileOwnerPackage(10)); 293 294 assertEquals(new ComponentName("com.google.android.testdpc1", ""), 295 owners.getProfileOwnerComponent(11)); 296 assertEquals("1", owners.getProfileOwnerName(11)); 297 assertEquals("com.google.android.testdpc1", owners.getProfileOwnerPackage(11)); 298 299 assertTrue(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 300 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 301 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 302 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 303 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 304 305 owners.setDeviceOwnerUserRestrictionsMigrated(); 306 } 307 308 { 309 final OwnersTestable owners = new OwnersTestable(getContext()); 310 owners.load(); 311 312 assertFalse(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 313 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 314 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 315 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 316 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 317 318 owners.setProfileOwnerUserRestrictionsMigrated(11); 319 } 320 321 { 322 final OwnersTestable owners = new OwnersTestable(getContext()); 323 owners.load(); 324 325 assertFalse(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 326 assertTrue(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 327 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 328 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 329 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 330 331 owners.setProfileOwnerUserRestrictionsMigrated(11); 332 } 333 } 334 335 public void testUpgrade05() throws Exception { 336 getContext().addUsers(10, 11, 20, 21); 337 338 // First, migrate. 339 { 340 final OwnersTestable owners = new OwnersTestable(getContext()); 341 342 DpmTestUtils.writeToFile(owners.getLegacyConfigFileWithTestOverride(), 343 DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test05/input.xml")); 344 345 owners.load(); 346 347 // The legacy file should be removed. 348 assertFalse(owners.getLegacyConfigFileWithTestOverride().exists()); 349 350 // Note device initializer is no longer supported. No need to write the DO file. 351 assertFalse(owners.getDeviceOwnerFileWithTestOverride().exists()); 352 353 assertFalse(owners.getProfileOwnerFileWithTestOverride(10).exists()); 354 assertFalse(owners.getProfileOwnerFileWithTestOverride(11).exists()); 355 assertFalse(owners.getProfileOwnerFileWithTestOverride(20).exists()); 356 357 assertFalse(owners.hasDeviceOwner()); 358 assertEquals(UserHandle.USER_NULL, owners.getDeviceOwnerUserId()); 359 360 361 assertNull(owners.getSystemUpdatePolicy()); 362 assertEquals(0, owners.getProfileOwnerKeys().size()); 363 364 assertFalse(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 365 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 366 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 367 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 368 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 369 } 370 371 // Then re-read and check. 372 { 373 final OwnersTestable owners = new OwnersTestable(getContext()); 374 owners.load(); 375 376 assertFalse(owners.hasDeviceOwner()); 377 assertEquals(UserHandle.USER_NULL, owners.getDeviceOwnerUserId()); 378 379 380 assertNull(owners.getSystemUpdatePolicy()); 381 assertEquals(0, owners.getProfileOwnerKeys().size()); 382 383 assertFalse(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 384 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 385 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 386 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 387 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 388 } 389 } 390 391 public void testUpgrade06() throws Exception { 392 getContext().addUsers(10, 11, 20, 21); 393 394 // First, migrate. 395 { 396 final OwnersTestable owners = new OwnersTestable(getContext()); 397 398 DpmTestUtils.writeToFile(owners.getLegacyConfigFileWithTestOverride(), 399 DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test06/input.xml")); 400 401 owners.load(); 402 403 // The legacy file should be removed. 404 assertFalse(owners.getLegacyConfigFileWithTestOverride().exists()); 405 406 assertTrue(owners.getDeviceOwnerFileWithTestOverride().exists()); 407 408 assertFalse(owners.getProfileOwnerFileWithTestOverride(10).exists()); 409 assertFalse(owners.getProfileOwnerFileWithTestOverride(11).exists()); 410 assertFalse(owners.getProfileOwnerFileWithTestOverride(20).exists()); 411 412 assertFalse(owners.hasDeviceOwner()); 413 assertEquals(UserHandle.USER_NULL, owners.getDeviceOwnerUserId()); 414 assertEquals(0, owners.getProfileOwnerKeys().size()); 415 416 assertNotNull(owners.getSystemUpdatePolicy()); 417 assertEquals(5, owners.getSystemUpdatePolicy().getPolicyType()); 418 419 assertFalse(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 420 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 421 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 422 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 423 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 424 } 425 426 // Then re-read and check. 427 { 428 final OwnersTestable owners = new OwnersTestable(getContext()); 429 owners.load(); 430 431 assertFalse(owners.hasDeviceOwner()); 432 assertEquals(UserHandle.USER_NULL, owners.getDeviceOwnerUserId()); 433 assertEquals(0, owners.getProfileOwnerKeys().size()); 434 435 assertNotNull(owners.getSystemUpdatePolicy()); 436 assertEquals(5, owners.getSystemUpdatePolicy().getPolicyType()); 437 438 assertFalse(owners.getDeviceOwnerUserRestrictionsNeedsMigration()); 439 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(10)); 440 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(11)); 441 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(20)); 442 assertFalse(owners.getProfileOwnerUserRestrictionsNeedsMigration(21)); 443 } 444 } 445 446 public void testRemoveExistingFiles() throws Exception { 447 getContext().addUsers(10, 11, 20, 21); 448 449 final OwnersTestable owners = new OwnersTestable(getContext()); 450 451 // First, migrate to create new-style config files. 452 DpmTestUtils.writeToFile(owners.getLegacyConfigFileWithTestOverride(), 453 DpmTestUtils.readAsset(mRealTestContext, "OwnersTest/test04/input.xml")); 454 455 owners.load(); 456 457 assertFalse(owners.getLegacyConfigFileWithTestOverride().exists()); 458 459 assertTrue(owners.getDeviceOwnerFileWithTestOverride().exists()); 460 assertTrue(owners.getProfileOwnerFileWithTestOverride(10).exists()); 461 assertTrue(owners.getProfileOwnerFileWithTestOverride(11).exists()); 462 463 // Then clear all information and save. 464 owners.clearDeviceOwner(); 465 owners.clearSystemUpdatePolicy(); 466 owners.removeProfileOwner(10); 467 owners.removeProfileOwner(11); 468 469 owners.writeDeviceOwner(); 470 owners.writeProfileOwner(10); 471 owners.writeProfileOwner(11); 472 owners.writeProfileOwner(20); 473 owners.writeProfileOwner(21); 474 475 // Now all files should be removed. 476 assertFalse(owners.getDeviceOwnerFileWithTestOverride().exists()); 477 assertFalse(owners.getProfileOwnerFileWithTestOverride(10).exists()); 478 assertFalse(owners.getProfileOwnerFileWithTestOverride(11).exists()); 479 } 480} 481