1 /* 2 * Copyright (C) 2016 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 package android.content.pm.cts.shortcuthost; 17 18 19 import com.android.tradefed.device.DeviceNotAvailableException; 20 import com.android.tradefed.log.LogUtil.CLog; 21 22 import java.util.concurrent.TimeUnit; 23 import java.util.regex.Pattern; 24 25 public class ShortcutManagerBackupTest extends BaseShortcutManagerHostTest { 26 private static final String LAUNCHER1_APK = "CtsShortcutBackupLauncher1.apk"; 27 private static final String LAUNCHER2_APK = "CtsShortcutBackupLauncher2.apk"; 28 private static final String LAUNCHER3_APK = "CtsShortcutBackupLauncher3.apk"; 29 private static final String LAUNCHER4_OLD_APK = "CtsShortcutBackupLauncher4old.apk"; 30 private static final String LAUNCHER4_NEW_APK = "CtsShortcutBackupLauncher4new.apk"; 31 32 private static final String PUBLISHER1_APK = "CtsShortcutBackupPublisher1.apk"; 33 private static final String PUBLISHER2_APK = "CtsShortcutBackupPublisher2.apk"; 34 private static final String PUBLISHER3_APK = "CtsShortcutBackupPublisher3.apk"; 35 private static final String PUBLISHER4_OLD_APK = "CtsShortcutBackupPublisher4old.apk"; 36 private static final String PUBLISHER4_NEW_APK = "CtsShortcutBackupPublisher4new.apk"; 37 private static final String PUBLISHER4_NEW_NOBACKUP_APK 38 = "CtsShortcutBackupPublisher4new_nobackup.apk"; 39 private static final String PUBLISHER4_NEW_WRONGKEY_APK 40 = "CtsShortcutBackupPublisher4new_wrongkey.apk"; 41 private static final String PUBLISHER4_OLD_NO_MANIFST_APK 42 = "CtsShortcutBackupPublisher4old_nomanifest.apk"; 43 private static final String PUBLISHER4_NEW_NO_MANIFST_APK 44 = "CtsShortcutBackupPublisher4new_nomanifest.apk"; 45 46 private static final String LAUNCHER1_PKG = 47 "android.content.pm.cts.shortcut.backup.launcher1"; 48 private static final String LAUNCHER2_PKG = 49 "android.content.pm.cts.shortcut.backup.launcher2"; 50 private static final String LAUNCHER3_PKG = 51 "android.content.pm.cts.shortcut.backup.launcher3"; 52 private static final String LAUNCHER4_PKG = 53 "android.content.pm.cts.shortcut.backup.launcher4"; 54 55 private static final String PUBLISHER1_PKG = 56 "android.content.pm.cts.shortcut.backup.publisher1"; 57 private static final String PUBLISHER2_PKG = 58 "android.content.pm.cts.shortcut.backup.publisher2"; 59 private static final String PUBLISHER3_PKG = 60 "android.content.pm.cts.shortcut.backup.publisher3"; 61 private static final String PUBLISHER4_PKG = 62 "android.content.pm.cts.shortcut.backup.publisher4"; 63 64 private static final int BROADCAST_TIMEOUT_SECONDS = 120; 65 66 private static final String FEATURE_BACKUP = "android.software.backup"; 67 68 private boolean mSupportsBackup; 69 70 @Override 71 protected void setUp() throws Exception { 72 super.setUp(); 73 74 mSupportsBackup = getDevice().hasFeature(FEATURE_BACKUP); 75 76 if (mSupportsBackup) { 77 clearShortcuts(LAUNCHER1_PKG, getPrimaryUserId()); 78 clearShortcuts(LAUNCHER2_PKG, getPrimaryUserId()); 79 clearShortcuts(LAUNCHER3_PKG, getPrimaryUserId()); 80 clearShortcuts(LAUNCHER4_PKG, getPrimaryUserId()); 81 82 clearShortcuts(PUBLISHER1_PKG, getPrimaryUserId()); 83 clearShortcuts(PUBLISHER2_PKG, getPrimaryUserId()); 84 clearShortcuts(PUBLISHER3_PKG, getPrimaryUserId()); 85 clearShortcuts(PUBLISHER4_PKG, getPrimaryUserId()); 86 87 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER1_PKG); 88 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER2_PKG); 89 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER3_PKG); 90 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER4_PKG); 91 92 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER1_PKG); 93 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER2_PKG); 94 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER3_PKG); 95 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER4_PKG); 96 97 waitUntilPackagesGone(); 98 } 99 } 100 101 @Override 102 protected void tearDown() throws Exception { 103 if (DUMPSYS_IN_TEARDOWN) { 104 dumpsys("tearDown"); 105 } 106 107 if (mSupportsBackup && !NO_UNINSTALL_IN_TEARDOWN) { 108 getDevice().uninstallPackage(LAUNCHER1_PKG); 109 getDevice().uninstallPackage(LAUNCHER2_PKG); 110 getDevice().uninstallPackage(LAUNCHER3_PKG); 111 getDevice().uninstallPackage(LAUNCHER4_PKG); 112 113 getDevice().uninstallPackage(PUBLISHER1_PKG); 114 getDevice().uninstallPackage(PUBLISHER2_PKG); 115 getDevice().uninstallPackage(PUBLISHER3_PKG); 116 getDevice().uninstallPackage(PUBLISHER4_PKG); 117 } 118 119 super.tearDown(); 120 } 121 122 private void doBackup() throws Exception { 123 CLog.i("Backing up package android..."); 124 125 waitUntilBroadcastsDrain(); // b/64203677 126 127 CLog.i("Making sure the local transport is selected..."); 128 assertContainsRegex( 129 "^Selected transport android/com.android.internal.backup.LocalTransport", 130 executeShellCommandWithLog( 131 "bmgr transport android/com.android.internal.backup.LocalTransport")); 132 133 executeShellCommandWithLog("dumpsys backup"); 134 135 assertContainsRegex( 136 "Wiped", 137 executeShellCommandWithLog( 138 "bmgr wipe android/com.android.internal.backup.LocalTransport android")); 139 140 assertContainsRegex( 141 "Backup finished with result: Success", 142 executeShellCommandWithLog("bmgr backupnow android")); 143 144 } 145 146 private void doRestore() throws DeviceNotAvailableException { 147 CLog.i("Restoring package android..."); 148 149 assertContainsRegex( 150 "\\bdone\\b", 151 executeShellCommandWithLog("bmgr restore 1 android")); 152 153 } 154 155 private void uninstallPackageAndWaitUntilBroadcastsDrain(String pkg) throws Exception { 156 getDevice().uninstallPackage(pkg); 157 waitUntilBroadcastsDrain(); 158 } 159 160 /** 161 * Wait until the broadcasts queues all drain. 162 */ 163 private void waitUntilBroadcastsDrain() throws Exception { 164 final long TIMEOUT = System.nanoTime() + 165 TimeUnit.SECONDS.toNanos(BROADCAST_TIMEOUT_SECONDS); 166 167 final Pattern re = Pattern.compile("^\\s+Active (ordered)? broadcasts \\[", 168 Pattern.MULTILINE); 169 170 String dumpsys = ""; 171 while (System.nanoTime() < TIMEOUT) { 172 Thread.sleep(1000); 173 174 dumpsys = getDevice().executeShellCommand("dumpsys activity broadcasts"); 175 176 if (re.matcher(dumpsys).find()) { 177 continue; 178 } 179 180 CLog.d("Broadcast queues drained:\n" + dumpsys); 181 182 dumpsys("Broadcast queues drained"); 183 184 // All packages gone. 185 return; 186 } 187 fail("Broadcast queues didn't drain before time out." 188 + " Last dumpsys=\n" + dumpsys); 189 } 190 191 /** 192 * Wait until all the test packages are forgotten by the shortcut manager. 193 */ 194 private void waitUntilPackagesGone() throws Exception { 195 CLog.i("Waiting until all packages are removed from shortcut manager..."); 196 197 final String packages[] = { 198 LAUNCHER1_PKG, LAUNCHER2_PKG, LAUNCHER3_PKG, LAUNCHER4_PKG, 199 PUBLISHER1_PKG, PUBLISHER2_PKG, PUBLISHER3_PKG, PUBLISHER4_PKG, 200 }; 201 202 String dumpsys = ""; 203 final long TIMEOUT = System.nanoTime() + 204 TimeUnit.SECONDS.toNanos(BROADCAST_TIMEOUT_SECONDS); 205 206 while (System.nanoTime() < TIMEOUT) { 207 Thread.sleep(2000); 208 dumpsys = getDevice().executeShellCommand("dumpsys shortcut"); 209 210 if (dumpsys.contains("Launcher: " + LAUNCHER1_PKG)) continue; 211 if (dumpsys.contains("Launcher: " + LAUNCHER2_PKG)) continue; 212 if (dumpsys.contains("Launcher: " + LAUNCHER3_PKG)) continue; 213 if (dumpsys.contains("Launcher: " + LAUNCHER4_PKG)) continue; 214 if (dumpsys.contains("Package: " + PUBLISHER1_PKG)) continue; 215 if (dumpsys.contains("Package: " + PUBLISHER2_PKG)) continue; 216 if (dumpsys.contains("Package: " + PUBLISHER3_PKG)) continue; 217 if (dumpsys.contains("Package: " + PUBLISHER4_PKG)) continue; 218 219 dumpsys("Shortcut manager handled broadcasts"); 220 221 // All packages gone. 222 return; 223 } 224 fail("ShortcutManager didn't handle all expected broadcasts before time out." 225 + " Last dumpsys=\n" + dumpsys); 226 } 227 228 public void testBackupAndRestore() throws Exception { 229 if (!mSupportsBackup) { 230 return; 231 } 232 dumpsys("Test start"); 233 234 installAppAsUser(LAUNCHER1_APK, getPrimaryUserId()); 235 installAppAsUser(LAUNCHER2_APK, getPrimaryUserId()); 236 installAppAsUser(LAUNCHER3_APK, getPrimaryUserId()); 237 238 installAppAsUser(PUBLISHER1_APK, getPrimaryUserId()); 239 installAppAsUser(PUBLISHER2_APK, getPrimaryUserId()); 240 installAppAsUser(PUBLISHER3_APK, getPrimaryUserId()); 241 242 // Prepare shortcuts 243 runDeviceTestsAsUser(PUBLISHER1_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 244 runDeviceTestsAsUser(PUBLISHER2_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 245 runDeviceTestsAsUser(PUBLISHER3_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 246 247 runDeviceTestsAsUser(LAUNCHER1_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 248 runDeviceTestsAsUser(LAUNCHER2_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 249 runDeviceTestsAsUser(LAUNCHER3_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 250 251 // Tweak shortcuts a little bit to make disabled shortcuts. 252 runDeviceTestsAsUser(PUBLISHER2_PKG, ".ShortcutManagerPreBackup2Test", getPrimaryUserId()); 253 254 dumpsys("Before backup"); 255 256 // Backup 257 doBackup(); 258 259 // Uninstall all apps 260 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER1_PKG); 261 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER2_PKG); 262 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER3_PKG); 263 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER1_PKG); 264 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER2_PKG); 265 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER3_PKG); 266 267 268 // Make sure the shortcut service handled all the uninstall broadcasts. 269 waitUntilPackagesGone(); 270 271 // Do it one more time just in case... 272 waitUntilBroadcastsDrain(); 273 274 // Then restore 275 doRestore(); 276 277 dumpsys("After restore"); 278 279 // First, restore launcher 1, which shouldn't see any shortcuts from the packages yet. 280 installAppAsUser(LAUNCHER1_APK, getPrimaryUserId()); 281 runDeviceTestsAsUser(LAUNCHER1_PKG, ".ShortcutManagerPostBackupTest", 282 "testWithUninstall_beforeAppRestore", 283 getPrimaryUserId()); 284 285 // Restore the apps. Even though launcher 2 hasn't been re-installed yet, they should 286 // still have pinned shortcuts by launcher 2. 287 installAppAsUser(PUBLISHER1_APK, getPrimaryUserId()); 288 installAppAsUser(PUBLISHER2_APK, getPrimaryUserId()); 289 installAppAsUser(PUBLISHER3_APK, getPrimaryUserId()); 290 291 runDeviceTestsAsUser(PUBLISHER1_PKG, ".ShortcutManagerPostBackupTest", 292 "testWithUninstall", 293 getPrimaryUserId()); 294 295 runDeviceTestsAsUser(PUBLISHER2_PKG, ".ShortcutManagerPostBackupTest", 296 "testWithUninstall", 297 getPrimaryUserId()); 298 299 runDeviceTestsAsUser(PUBLISHER3_PKG, ".ShortcutManagerPostBackupTest", 300 "testWithUninstall", 301 getPrimaryUserId()); 302 303 // Now launcher 1 should see shortcuts from these packages. 304 runDeviceTestsAsUser(LAUNCHER1_PKG, ".ShortcutManagerPostBackupTest", 305 "testWithUninstall_afterAppRestore", 306 getPrimaryUserId()); 307 308 // Then restore launcher 2 and check. 309 installAppAsUser(LAUNCHER2_APK, getPrimaryUserId()); 310 runDeviceTestsAsUser(LAUNCHER2_PKG, ".ShortcutManagerPostBackupTest", 311 "testWithUninstall_afterAppRestore", 312 getPrimaryUserId()); 313 314 315 // Run the same package side check. The result should be the same. 316 runDeviceTestsAsUser(PUBLISHER1_PKG, ".ShortcutManagerPostBackupTest", 317 "testWithUninstall", 318 getPrimaryUserId()); 319 320 runDeviceTestsAsUser(PUBLISHER2_PKG, ".ShortcutManagerPostBackupTest", 321 "testWithUninstall", 322 getPrimaryUserId()); 323 324 runDeviceTestsAsUser(PUBLISHER3_PKG, ".ShortcutManagerPostBackupTest", 325 "testWithUninstall", 326 getPrimaryUserId()); 327 } 328 329 public void testBackupAndRestore_downgrade() throws Exception { 330 if (!mSupportsBackup) { 331 return; 332 } 333 dumpsys("Test start"); 334 335 // First, publish shortcuts from the new version and pin them. 336 337 installAppAsUser(PUBLISHER4_NEW_APK, getPrimaryUserId()); 338 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 339 340 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 341 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 342 343 dumpsys("Before backup"); 344 345 // Backup 346 doBackup(); 347 348 // Uninstall all apps 349 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER4_PKG); 350 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER4_PKG); 351 352 // Make sure the shortcut service handled all the uninstall broadcasts. 353 waitUntilPackagesGone(); 354 355 // Do it one more time just in case... 356 waitUntilBroadcastsDrain(); 357 358 // Then restore 359 doRestore(); 360 361 dumpsys("After restore"); 362 363 // Restore the old version of the app, and the launcher. 364 // (But we don't check the launcher's version, so using old is fine.) 365 installAppAsUser(LAUNCHER4_OLD_APK, getPrimaryUserId()); 366 installAppAsUser(PUBLISHER4_OLD_APK, getPrimaryUserId()); 367 waitUntilBroadcastsDrain(); 368 369 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPostBackupTest", 370 "testRestoredOnOldVersion", 371 getPrimaryUserId()); 372 373 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPostBackupTest", 374 "testRestoredOnOldVersion", 375 getPrimaryUserId()); 376 377 // New install the original version. All blocked shortcuts should re-appear. 378 installAppAsUser(PUBLISHER4_NEW_APK, getPrimaryUserId()); 379 waitUntilBroadcastsDrain(); 380 381 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPostBackupTest", 382 "testRestoredOnNewVersion", 383 getPrimaryUserId()); 384 385 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPostBackupTest", 386 "testRestoredOnNewVersion", 387 getPrimaryUserId()); 388 389 } 390 391 public void testBackupAndRestore_backupWasDisabled() throws Exception { 392 if (!mSupportsBackup) { 393 return; 394 } 395 dumpsys("Test start"); 396 397 // First, publish shortcuts from "nobackup" version. 398 399 installAppAsUser(PUBLISHER4_NEW_NOBACKUP_APK, getPrimaryUserId()); 400 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 401 402 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 403 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 404 405 dumpsys("Before backup"); 406 407 // Backup 408 doBackup(); 409 410 // Uninstall all apps 411 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER4_PKG); 412 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER4_PKG); 413 414 // Make sure the shortcut service handled all the uninstall broadcasts. 415 waitUntilPackagesGone(); 416 417 // Do it one more time just in case... 418 waitUntilBroadcastsDrain(); 419 420 // Then restore 421 doRestore(); 422 423 dumpsys("After restore"); 424 425 // Install the "backup-ok" version. But restoration is limited. 426 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 427 installAppAsUser(PUBLISHER4_NEW_APK, getPrimaryUserId()); 428 waitUntilBroadcastsDrain(); 429 430 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPostBackupTest", 431 "testBackupDisabled", 432 getPrimaryUserId()); 433 } 434 435 public void testBackupAndRestore_backupIsDisabled() throws Exception { 436 if (!mSupportsBackup) { 437 return; 438 } 439 dumpsys("Test start"); 440 441 // First, publish shortcuts from backup-ok version. 442 443 installAppAsUser(PUBLISHER4_NEW_APK, getPrimaryUserId()); 444 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 445 446 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 447 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 448 449 dumpsys("Before backup"); 450 451 // Backup 452 doBackup(); 453 454 // Uninstall all apps 455 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER4_PKG); 456 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER4_PKG); 457 458 // Make sure the shortcut service handled all the uninstall broadcasts. 459 waitUntilPackagesGone(); 460 461 // Do it one more time just in case... 462 waitUntilBroadcastsDrain(); 463 464 // Then restore 465 doRestore(); 466 467 dumpsys("After restore"); 468 469 // Install the nobackup version. Restoration is limited. 470 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 471 installAppAsUser(PUBLISHER4_NEW_NOBACKUP_APK, getPrimaryUserId()); 472 waitUntilBroadcastsDrain(); 473 474 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPostBackupTest", 475 "testBackupDisabled", 476 getPrimaryUserId()); 477 } 478 479 public void testBackupAndRestore_wrongKey() throws Exception { 480 if (!mSupportsBackup) { 481 return; 482 } 483 dumpsys("Test start"); 484 485 // First, publish shortcuts from backup-ok version. 486 487 installAppAsUser(PUBLISHER4_NEW_APK, getPrimaryUserId()); 488 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 489 490 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 491 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 492 493 dumpsys("Before backup"); 494 495 // Backup 496 doBackup(); 497 498 // Uninstall all apps 499 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER4_PKG); 500 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER4_PKG); 501 502 // Make sure the shortcut service handled all the uninstall broadcasts. 503 waitUntilPackagesGone(); 504 505 // Do it one more time just in case... 506 waitUntilBroadcastsDrain(); 507 508 // Then restore 509 doRestore(); 510 511 dumpsys("After restore"); 512 513 // Install the nobackup version. Restoration is limited. 514 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 515 installAppAsUser(PUBLISHER4_NEW_WRONGKEY_APK, getPrimaryUserId()); 516 waitUntilBroadcastsDrain(); 517 518 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPostBackupTest", 519 "testRestoreWrongKey", 520 getPrimaryUserId()); 521 522 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPostBackupTest", 523 "testRestoreWrongKey", 524 getPrimaryUserId()); 525 } 526 527 public void testBackupAndRestore_noManifestOnOldVersion() throws Exception { 528 if (!mSupportsBackup) { 529 return; 530 } 531 dumpsys("Test start"); 532 533 // First, publish shortcuts from backup-ok version. 534 535 installAppAsUser(PUBLISHER4_NEW_APK, getPrimaryUserId()); 536 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 537 538 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 539 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 540 541 dumpsys("Before backup"); 542 543 // Backup 544 doBackup(); 545 546 // Uninstall all apps 547 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER4_PKG); 548 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER4_PKG); 549 550 // Make sure the shortcut service handled all the uninstall broadcasts. 551 waitUntilPackagesGone(); 552 553 // Do it one more time just in case... 554 waitUntilBroadcastsDrain(); 555 556 // Then restore 557 doRestore(); 558 559 dumpsys("After restore"); 560 561 // Install the nobackup version. Restoration is limited. 562 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 563 installAppAsUser(PUBLISHER4_OLD_NO_MANIFST_APK, getPrimaryUserId()); 564 waitUntilBroadcastsDrain(); 565 566 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPostBackupTest", 567 "testRestoreNoManifestOnOldVersion", 568 getPrimaryUserId()); 569 570 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPostBackupTest", 571 "testRestoreNoManifestOnOldVersion", 572 getPrimaryUserId()); 573 } 574 575 public void testBackupAndRestore_noManifestOnNewVersion() throws Exception { 576 if (!mSupportsBackup) { 577 return; 578 } 579 dumpsys("Test start"); 580 581 // First, publish shortcuts from backup-ok version. 582 583 installAppAsUser(PUBLISHER4_NEW_APK, getPrimaryUserId()); 584 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 585 586 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 587 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 588 589 dumpsys("Before backup"); 590 591 // Backup 592 doBackup(); 593 594 // Uninstall all apps 595 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER4_PKG); 596 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER4_PKG); 597 598 // Make sure the shortcut service handled all the uninstall broadcasts. 599 waitUntilPackagesGone(); 600 601 // Do it one more time just in case... 602 waitUntilBroadcastsDrain(); 603 604 // Then restore 605 doRestore(); 606 607 dumpsys("After restore"); 608 609 // Install the nobackup version. Restoration is limited. 610 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 611 installAppAsUser(PUBLISHER4_NEW_NO_MANIFST_APK, getPrimaryUserId()); 612 waitUntilBroadcastsDrain(); 613 614 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPostBackupTest", 615 "testRestoreNoManifestOnNewVersion", 616 getPrimaryUserId()); 617 618 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPostBackupTest", 619 "testRestoreNoManifestOnNewVersion", 620 getPrimaryUserId()); 621 } 622 623 /** 624 * Make sure invisible shortcuts are ignored by all API calls. 625 * 626 * (Restore from new to old-nomanifest) 627 */ 628 public void testBackupAndRestore_invisibleIgnored() throws Exception { 629 if (!mSupportsBackup) { 630 return; 631 } 632 dumpsys("Test start"); 633 634 // First, publish shortcuts from backup-ok version. 635 636 installAppAsUser(PUBLISHER4_NEW_APK, getPrimaryUserId()); 637 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 638 639 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 640 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 641 642 dumpsys("Before backup"); 643 644 // Backup 645 doBackup(); 646 647 // Uninstall all apps 648 uninstallPackageAndWaitUntilBroadcastsDrain(LAUNCHER4_PKG); 649 uninstallPackageAndWaitUntilBroadcastsDrain(PUBLISHER4_PKG); 650 651 // Make sure the shortcut service handled all the uninstall broadcasts. 652 waitUntilPackagesGone(); 653 654 // Do it one more time just in case... 655 waitUntilBroadcastsDrain(); 656 657 // Then restore 658 doRestore(); 659 660 dumpsys("After restore"); 661 662 // Install the nobackup version. Restoration is limited. 663 installAppAsUser(LAUNCHER4_NEW_APK, getPrimaryUserId()); 664 installAppAsUser(PUBLISHER4_OLD_NO_MANIFST_APK, getPrimaryUserId()); 665 waitUntilBroadcastsDrain(); 666 667 runDeviceTestsAsUser(PUBLISHER4_PKG, ".ShortcutManagerPostBackupTest", 668 "testInvisibleIgnored", 669 getPrimaryUserId()); 670 671 runDeviceTestsAsUser(LAUNCHER4_PKG, ".ShortcutManagerPostBackupTest", 672 "testInvisibleIgnored", 673 getPrimaryUserId()); 674 } 675 676 public void testBackupAndRestore_withNoUninstall() throws Exception { 677 if (!mSupportsBackup) { 678 return; 679 } 680 681 installAppAsUser(PUBLISHER1_APK, getPrimaryUserId()); 682 installAppAsUser(PUBLISHER3_APK, getPrimaryUserId()); 683 684 // Prepare shortcuts 685 runDeviceTestsAsUser(PUBLISHER1_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 686 runDeviceTestsAsUser(PUBLISHER3_PKG, ".ShortcutManagerPreBackupTest", getPrimaryUserId()); 687 688 // Backup & restore. 689 doBackup(); 690 doRestore(); 691 692 // Make sure the manifest shortcuts are re-published. 693 runDeviceTestsAsUser(PUBLISHER1_PKG, ".ShortcutManagerPostBackupTest", 694 "testWithNoUninstall", 695 getPrimaryUserId()); 696 697 runDeviceTestsAsUser(PUBLISHER3_PKG, ".ShortcutManagerPostBackupTest", 698 "testWithNoUninstall", 699 getPrimaryUserId()); 700 } 701 }