From 94e9dced6ad4b3410efe16ad4f0e1fd790a369dd Mon Sep 17 00:00:00 2001 From: JW Wang Date: Wed, 20 Jan 2021 11:19:01 +0800 Subject: [PATCH] More error messages for device operations (4/n) This gives us more debug information when a device operation fails. Bug: 177861067 Test: atest StagedRollbackTest Change-Id: I19dc0adf5973850390aae0e793cbf50e009a0137 --- .../rollback/host/StagedRollbackTest.java | 100 +++++++++++------- 1 file changed, 61 insertions(+), 39 deletions(-) diff --git a/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java b/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java index ce3cd64783a01..1d5730fb4427f 100644 --- a/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java +++ b/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java @@ -139,6 +139,11 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { } } + private void waitForDeviceNotAvailable(long timeout, TimeUnit unit) { + assertWithMessage("waitForDeviceNotAvailable() timed out in %s %s", timeout, unit) + .that(getDevice().waitForDeviceNotAvailable(unit.toMillis(timeout))).isTrue(); + } + /** * Tests watchdog triggered staged rollbacks involving only apks. */ @@ -150,7 +155,7 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Trigger rollback and wait for reboot to happen runPhase("testBadApkOnly_Phase3_Crash"); - assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(2))).isTrue(); + waitForDeviceNotAvailable(2, TimeUnit.MINUTES); getDevice().waitForDeviceAvailable(); @@ -181,7 +186,7 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // 3. Staged rollback session becomes ready. // 4. Device actually reboots. // So we give a generous timeout here. - assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))).isTrue(); + waitForDeviceNotAvailable(5, TimeUnit.MINUTES); getDevice().waitForDeviceAvailable(); // verify rollback committed @@ -219,7 +224,7 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // 3. Staged rollback session becomes ready. // 4. Device actually reboots. // So we give a generous timeout here. - assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))).isTrue(); + waitForDeviceNotAvailable(5, TimeUnit.MINUTES); getDevice().waitForDeviceAvailable(); // verify all available rollbacks have been committed @@ -300,7 +305,7 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify apex was installed and then crash the apk runPhase("testRollbackApexWithApkCrashing_Phase2_Crash"); // Wait for crash to trigger rollback - assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))).isTrue(); + waitForDeviceNotAvailable(5, TimeUnit.MINUTES); getDevice().waitForDeviceAvailable(); // Verify rollback occurred due to crash of apk-in-apex runPhase("testRollbackApexWithApkCrashing_Phase3_VerifyRollback"); @@ -323,8 +328,8 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { String oldFilePath2 = apexDataDirDeSys(APK_IN_APEX_TESTAPEX_NAME) + TEST_SUBDIR + TEST_FILENAME_2; runAsRoot(() -> { - assertThat(getDevice().pushString(TEST_STRING_1, oldFilePath1)).isTrue(); - assertThat(getDevice().pushString(TEST_STRING_2, oldFilePath2)).isTrue(); + pushString(TEST_STRING_1, oldFilePath1); + pushString(TEST_STRING_2, oldFilePath2); }); // Install new version of the APEX with rollback enabled @@ -338,8 +343,8 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { runAsRoot(() -> { getDevice().deleteFile(oldFilePath1); getDevice().deleteFile(oldFilePath2); - assertThat(getDevice().pushString(TEST_STRING_3, newFilePath3)).isTrue(); - assertThat(getDevice().pushString(TEST_STRING_4, newFilePath4)).isTrue(); + pushString(TEST_STRING_3, newFilePath3); + pushString(TEST_STRING_4, newFilePath4); }); // Roll back the APEX @@ -348,10 +353,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { - assertThat(getDevice().pullFileContents(oldFilePath1)).isEqualTo(TEST_STRING_1); - assertThat(getDevice().pullFileContents(oldFilePath2)).isEqualTo(TEST_STRING_2); - assertThat(getDevice().pullFile(newFilePath3)).isNull(); - assertThat(getDevice().pullFile(newFilePath4)).isNull(); + assertFileContents(TEST_STRING_1, oldFilePath1); + assertFileContents(TEST_STRING_2, oldFilePath2); + assertFileNotExists(newFilePath3); + assertFileNotExists(newFilePath4); }); // Verify snapshots are deleted after restoration @@ -377,8 +382,8 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { String oldFilePath2 = apexDataDirDeUser(APK_IN_APEX_TESTAPEX_NAME, 0) + TEST_SUBDIR + TEST_FILENAME_2; runAsRoot(() -> { - assertThat(getDevice().pushString(TEST_STRING_1, oldFilePath1)).isTrue(); - assertThat(getDevice().pushString(TEST_STRING_2, oldFilePath2)).isTrue(); + pushString(TEST_STRING_1, oldFilePath1); + pushString(TEST_STRING_2, oldFilePath2); }); // Install new version of the APEX with rollback enabled @@ -393,8 +398,8 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { runAsRoot(() -> { getDevice().deleteFile(oldFilePath1); getDevice().deleteFile(oldFilePath2); - assertThat(getDevice().pushString(TEST_STRING_3, newFilePath3)).isTrue(); - assertThat(getDevice().pushString(TEST_STRING_4, newFilePath4)).isTrue(); + pushString(TEST_STRING_3, newFilePath3); + pushString(TEST_STRING_4, newFilePath4); }); // Roll back the APEX @@ -403,10 +408,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { - assertThat(getDevice().pullFileContents(oldFilePath1)).isEqualTo(TEST_STRING_1); - assertThat(getDevice().pullFileContents(oldFilePath2)).isEqualTo(TEST_STRING_2); - assertThat(getDevice().pullFile(newFilePath3)).isNull(); - assertThat(getDevice().pullFile(newFilePath4)).isNull(); + assertFileContents(TEST_STRING_1, oldFilePath1); + assertFileContents(TEST_STRING_2, oldFilePath2); + assertFileNotExists(newFilePath3); + assertFileNotExists(newFilePath4); }); // Verify snapshots are deleted after restoration @@ -431,8 +436,8 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { String oldFilePath2 = apexDataDirCe(APK_IN_APEX_TESTAPEX_NAME, 0) + TEST_SUBDIR + TEST_FILENAME_2; runAsRoot(() -> { - assertThat(getDevice().pushString(TEST_STRING_1, oldFilePath1)).isTrue(); - assertThat(getDevice().pushString(TEST_STRING_2, oldFilePath2)).isTrue(); + pushString(TEST_STRING_1, oldFilePath1); + pushString(TEST_STRING_2, oldFilePath2); }); // Install new version of the APEX with rollback enabled @@ -446,8 +451,8 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { runAsRoot(() -> { getDevice().deleteFile(oldFilePath1); getDevice().deleteFile(oldFilePath2); - assertThat(getDevice().pushString(TEST_STRING_3, newFilePath3)).isTrue(); - assertThat(getDevice().pushString(TEST_STRING_4, newFilePath4)).isTrue(); + pushString(TEST_STRING_3, newFilePath3); + pushString(TEST_STRING_4, newFilePath4); }); // Roll back the APEX @@ -456,10 +461,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { - assertThat(getDevice().pullFileContents(oldFilePath1)).isEqualTo(TEST_STRING_1); - assertThat(getDevice().pullFileContents(oldFilePath2)).isEqualTo(TEST_STRING_2); - assertThat(getDevice().pullFile(newFilePath3)).isNull(); - assertThat(getDevice().pullFile(newFilePath4)).isNull(); + assertFileContents(TEST_STRING_1, oldFilePath1); + assertFileContents(TEST_STRING_2, oldFilePath2); + assertFileNotExists(newFilePath3); + assertFileNotExists(newFilePath4); }); // Verify snapshots are deleted after restoration @@ -483,8 +488,8 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { String oldFilePath1 = apkDataDirDe(TESTAPP_A, 0) + "/" + TEST_FILENAME_1; String oldFilePath2 = apkDataDirDe(TESTAPP_A, 0) + TEST_SUBDIR + TEST_FILENAME_2; runAsRoot(() -> { - assertThat(getDevice().pushString(TEST_STRING_1, oldFilePath1)).isTrue(); - assertThat(getDevice().pushString(TEST_STRING_2, oldFilePath2)).isTrue(); + pushString(TEST_STRING_1, oldFilePath1); + pushString(TEST_STRING_2, oldFilePath2); }); // Install version 2 of TESTAPP_A with rollback enabled @@ -497,8 +502,8 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { runAsRoot(() -> { getDevice().deleteFile(oldFilePath1); getDevice().deleteFile(oldFilePath2); - assertThat(getDevice().pushString(TEST_STRING_3, newFilePath3)).isTrue(); - assertThat(getDevice().pushString(TEST_STRING_4, newFilePath4)).isTrue(); + pushString(TEST_STRING_3, newFilePath3); + pushString(TEST_STRING_4, newFilePath4); }); // Roll back the APK @@ -507,10 +512,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { - assertThat(getDevice().pullFileContents(oldFilePath1)).isEqualTo(TEST_STRING_1); - assertThat(getDevice().pullFileContents(oldFilePath2)).isEqualTo(TEST_STRING_2); - assertThat(getDevice().pullFile(newFilePath3)).isNull(); - assertThat(getDevice().pullFile(newFilePath4)).isNull(); + assertFileContents(TEST_STRING_1, oldFilePath1); + assertFileContents(TEST_STRING_2, oldFilePath2); + assertFileNotExists(newFilePath3); + assertFileNotExists(newFilePath4); }); } @@ -524,8 +529,8 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { String oldFilePath2 = apexDataDirCe(APK_IN_APEX_TESTAPEX_NAME, 0) + TEST_SUBDIR + TEST_FILENAME_2; runAsRoot(() -> { - assertThat(getDevice().pushString(TEST_STRING_1, oldFilePath1)).isTrue(); - assertThat(getDevice().pushString(TEST_STRING_2, oldFilePath2)).isTrue(); + pushString(TEST_STRING_1, oldFilePath1); + pushString(TEST_STRING_2, oldFilePath2); }); // Install new version of the APEX with rollback enabled @@ -541,7 +546,7 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { runPhase("expireRollbacks"); runAsRoot(() -> { for (String dir : after) { - assertThat(getDevice().getFileEntry(dir)).isNull(); + assertFileNotExists(dir); } }); } @@ -560,6 +565,23 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { getDevice().reboot(); } + private void pushString(String contents, String path) throws Exception { + assertWithMessage("Failed to push file to device, content=%s path=%s", contents, path) + .that(getDevice().pushString(contents, path)).isTrue(); + } + + private void assertFileContents(String expectedContents, String path) throws Exception { + String actualContents = getDevice().pullFileContents(path); + assertWithMessage("Failed to retrieve file=%s", path).that(actualContents).isNotNull(); + assertWithMessage("Mismatched file contents, path=%s", path) + .that(actualContents).isEqualTo(expectedContents); + } + + private void assertFileNotExists(String path) throws Exception { + assertWithMessage("File shouldn't exist, path=%s", path) + .that(getDevice().getFileEntry(path)).isNull(); + } + private static String apexDataDirDeSys(String apexName) { return String.format("/data/misc/apexdata/%s", apexName); }