Loading tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java +42 −49 Original line number Diff line number Diff line Loading @@ -16,11 +16,11 @@ package com.android.tests.rollback.host; import static com.android.tests.rollback.host.WatchdogEventLogger.Subject.assertThat; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; Loading Loading @@ -62,9 +62,9 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { * For example, <code>runPhase("testApkOnlyEnableRollback");</code> */ private void runPhase(String phase) throws Exception { assertTrue(runDeviceTests("com.android.tests.rollback", assertThat(runDeviceTests("com.android.tests.rollback", "com.android.tests.rollback.StagedRollbackTest", phase)); phase)).isTrue(); } private static final String APK_IN_APEX_TESTAPEX_NAME = "com.android.apex.apkrollback.test"; Loading Loading @@ -150,17 +150,15 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Trigger rollback and wait for reboot to happen runPhase("testBadApkOnly_Phase3"); assertTrue(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(2))); assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(2))).isTrue(); getDevice().waitForDeviceAvailable(); runPhase("testBadApkOnly_Phase4"); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_INITIATE, null, REASON_APP_CRASH, TESTAPP_A)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_SUCCESS, null, null, null)); assertThat(mLogger).eventOccurred(ROLLBACK_INITIATE, null, REASON_APP_CRASH, TESTAPP_A); assertThat(mLogger).eventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null); assertThat(mLogger).eventOccurred(ROLLBACK_SUCCESS, null, null, null); } @Test Loading @@ -183,17 +181,15 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // 3. Staged rollback session becomes ready. // 4. Device actually reboots. // So we give a generous timeout here. assertTrue(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))); assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))).isTrue(); getDevice().waitForDeviceAvailable(); // verify rollback committed runPhase("testNativeWatchdogTriggersRollback_Phase3"); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_INITIATE, null, REASON_NATIVE_CRASH, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_SUCCESS, null, null, null)); assertThat(mLogger).eventOccurred(ROLLBACK_INITIATE, null, REASON_NATIVE_CRASH, null); assertThat(mLogger).eventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null); assertThat(mLogger).eventOccurred(ROLLBACK_SUCCESS, null, null, null); } @Test Loading Loading @@ -223,17 +219,15 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // 3. Staged rollback session becomes ready. // 4. Device actually reboots. // So we give a generous timeout here. assertTrue(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))); assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))).isTrue(); getDevice().waitForDeviceAvailable(); // verify all available rollbacks have been committed runPhase("testNativeWatchdogTriggersRollbackForAll_Phase4"); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_INITIATE, null, REASON_NATIVE_CRASH, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_SUCCESS, null, null, null)); assertThat(mLogger).eventOccurred(ROLLBACK_INITIATE, null, REASON_NATIVE_CRASH, null); assertThat(mLogger).eventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null); assertThat(mLogger).eventOccurred(ROLLBACK_SUCCESS, null, null, null); } /** Loading Loading @@ -306,16 +300,14 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify apex was installed and then crash the apk runPhase("testRollbackApexWithApkCrashing_Phase2"); // Wait for crash to trigger rollback assertTrue(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))); assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))).isTrue(); getDevice().waitForDeviceAvailable(); // Verify rollback occurred due to crash of apk-in-apex runPhase("testRollbackApexWithApkCrashing_Phase3"); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_INITIATE, null, REASON_APP_CRASH, TESTAPP_A)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_SUCCESS, null, null, null)); assertThat(mLogger).eventOccurred(ROLLBACK_INITIATE, null, REASON_APP_CRASH, TESTAPP_A); assertThat(mLogger).eventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null); assertThat(mLogger).eventOccurred(ROLLBACK_SUCCESS, null, null, null); } /** Loading Loading @@ -356,10 +348,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { assertEquals(TEST_STRING_1, getDevice().pullFileContents(oldFilePath1)); assertEquals(TEST_STRING_2, getDevice().pullFileContents(oldFilePath2)); assertNull(getDevice().pullFile(newFilePath3)); assertNull(getDevice().pullFile(newFilePath4)); 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(); }); // Verify snapshots are deleted after restoration Loading Loading @@ -411,10 +403,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { assertEquals(TEST_STRING_1, getDevice().pullFileContents(oldFilePath1)); assertEquals(TEST_STRING_2, getDevice().pullFileContents(oldFilePath2)); assertNull(getDevice().pullFile(newFilePath3)); assertNull(getDevice().pullFile(newFilePath4)); 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(); }); // Verify snapshots are deleted after restoration Loading Loading @@ -464,10 +456,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { assertEquals(TEST_STRING_1, getDevice().pullFileContents(oldFilePath1)); assertEquals(TEST_STRING_2, getDevice().pullFileContents(oldFilePath2)); assertNull(getDevice().pullFile(newFilePath3)); assertNull(getDevice().pullFile(newFilePath4)); 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(); }); // Verify snapshots are deleted after restoration Loading Loading @@ -515,10 +507,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { assertEquals(TEST_STRING_1, getDevice().pullFileContents(oldFilePath1)); assertEquals(TEST_STRING_2, getDevice().pullFileContents(oldFilePath2)); assertNull(getDevice().pullFile(newFilePath3)); assertNull(getDevice().pullFile(newFilePath4)); 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(); }); } Loading Loading @@ -549,7 +541,7 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { runPhase("testCleanUp"); runAsRoot(() -> { for (String dir : after) { assertNull(getDevice().getFileEntry(dir)); assertThat(getDevice().getFileEntry(dir)).isNull(); } }); } Loading @@ -561,7 +553,7 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { try { getDevice().enableAdbRoot(); getDevice().remountSystemWritable(); assertTrue(getDevice().pushFile(apex, "/system/apex/" + fileName)); assertThat(getDevice().pushFile(apex, "/system/apex/" + fileName)).isTrue(); } finally { getDevice().disableAdbRoot(); } Loading Loading @@ -607,8 +599,9 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { try { getDevice().enableAdbRoot(); IFileEntry file = getDevice().getFileEntry(path); assertTrue("Not a directory: " + path, file.isDirectory()); assertTrue("Directory not empty: " + path, file.getChildren(false).isEmpty()); assertWithMessage("Not a directory: " + path).that(file.isDirectory()).isTrue(); assertWithMessage("Directory not empty: " + path) .that(file.getChildren(false)).isEmpty(); } catch (DeviceNotAvailableException e) { fail("Can't access directory: " + path); } finally { Loading tests/RollbackTest/lib/src/com/android/tests/rollback/host/WatchdogEventLogger.java +28 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.tests.rollback.host; import com.android.tradefed.device.ITestDevice; import com.google.common.truth.FailureMetadata; import com.google.common.truth.Truth; import static com.google.common.truth.Truth.assertThat; Loading Loading @@ -76,4 +78,30 @@ public class WatchdogEventLogger { && matchProperty(type, "rollbackReason", rollbackReason) && matchProperty(type, "failedPackageName", failedPackageName); } static class Subject extends com.google.common.truth.Subject { private final WatchdogEventLogger mActual; private Subject(FailureMetadata failureMetadata, WatchdogEventLogger subject) { super(failureMetadata, subject); mActual = subject; } private static com.google.common.truth.Subject.Factory<Subject, WatchdogEventLogger> loggers() { return Subject::new; } static Subject assertThat(WatchdogEventLogger actual) { return Truth.assertAbout(loggers()).that(actual); } void eventOccurred(String type, String logPackage, String rollbackReason, String failedPackageName) throws Exception { check("watchdogEventOccurred(type=%s, logPackage=%s, rollbackReason=%s, " + "failedPackageName=%s)", type, logPackage, rollbackReason, failedPackageName) .that(mActual.watchdogEventOccurred(type, logPackage, rollbackReason, failedPackageName)).isTrue(); } } } Loading
tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java +42 −49 Original line number Diff line number Diff line Loading @@ -16,11 +16,11 @@ package com.android.tests.rollback.host; import static com.android.tests.rollback.host.WatchdogEventLogger.Subject.assertThat; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; Loading Loading @@ -62,9 +62,9 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { * For example, <code>runPhase("testApkOnlyEnableRollback");</code> */ private void runPhase(String phase) throws Exception { assertTrue(runDeviceTests("com.android.tests.rollback", assertThat(runDeviceTests("com.android.tests.rollback", "com.android.tests.rollback.StagedRollbackTest", phase)); phase)).isTrue(); } private static final String APK_IN_APEX_TESTAPEX_NAME = "com.android.apex.apkrollback.test"; Loading Loading @@ -150,17 +150,15 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Trigger rollback and wait for reboot to happen runPhase("testBadApkOnly_Phase3"); assertTrue(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(2))); assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(2))).isTrue(); getDevice().waitForDeviceAvailable(); runPhase("testBadApkOnly_Phase4"); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_INITIATE, null, REASON_APP_CRASH, TESTAPP_A)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_SUCCESS, null, null, null)); assertThat(mLogger).eventOccurred(ROLLBACK_INITIATE, null, REASON_APP_CRASH, TESTAPP_A); assertThat(mLogger).eventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null); assertThat(mLogger).eventOccurred(ROLLBACK_SUCCESS, null, null, null); } @Test Loading @@ -183,17 +181,15 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // 3. Staged rollback session becomes ready. // 4. Device actually reboots. // So we give a generous timeout here. assertTrue(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))); assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))).isTrue(); getDevice().waitForDeviceAvailable(); // verify rollback committed runPhase("testNativeWatchdogTriggersRollback_Phase3"); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_INITIATE, null, REASON_NATIVE_CRASH, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_SUCCESS, null, null, null)); assertThat(mLogger).eventOccurred(ROLLBACK_INITIATE, null, REASON_NATIVE_CRASH, null); assertThat(mLogger).eventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null); assertThat(mLogger).eventOccurred(ROLLBACK_SUCCESS, null, null, null); } @Test Loading Loading @@ -223,17 +219,15 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // 3. Staged rollback session becomes ready. // 4. Device actually reboots. // So we give a generous timeout here. assertTrue(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))); assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))).isTrue(); getDevice().waitForDeviceAvailable(); // verify all available rollbacks have been committed runPhase("testNativeWatchdogTriggersRollbackForAll_Phase4"); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_INITIATE, null, REASON_NATIVE_CRASH, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_SUCCESS, null, null, null)); assertThat(mLogger).eventOccurred(ROLLBACK_INITIATE, null, REASON_NATIVE_CRASH, null); assertThat(mLogger).eventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null); assertThat(mLogger).eventOccurred(ROLLBACK_SUCCESS, null, null, null); } /** Loading Loading @@ -306,16 +300,14 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify apex was installed and then crash the apk runPhase("testRollbackApexWithApkCrashing_Phase2"); // Wait for crash to trigger rollback assertTrue(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))); assertThat(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5))).isTrue(); getDevice().waitForDeviceAvailable(); // Verify rollback occurred due to crash of apk-in-apex runPhase("testRollbackApexWithApkCrashing_Phase3"); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_INITIATE, null, REASON_APP_CRASH, TESTAPP_A)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null)); assertTrue(mLogger.watchdogEventOccurred(ROLLBACK_SUCCESS, null, null, null)); assertThat(mLogger).eventOccurred(ROLLBACK_INITIATE, null, REASON_APP_CRASH, TESTAPP_A); assertThat(mLogger).eventOccurred(ROLLBACK_BOOT_TRIGGERED, null, null, null); assertThat(mLogger).eventOccurred(ROLLBACK_SUCCESS, null, null, null); } /** Loading Loading @@ -356,10 +348,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { assertEquals(TEST_STRING_1, getDevice().pullFileContents(oldFilePath1)); assertEquals(TEST_STRING_2, getDevice().pullFileContents(oldFilePath2)); assertNull(getDevice().pullFile(newFilePath3)); assertNull(getDevice().pullFile(newFilePath4)); 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(); }); // Verify snapshots are deleted after restoration Loading Loading @@ -411,10 +403,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { assertEquals(TEST_STRING_1, getDevice().pullFileContents(oldFilePath1)); assertEquals(TEST_STRING_2, getDevice().pullFileContents(oldFilePath2)); assertNull(getDevice().pullFile(newFilePath3)); assertNull(getDevice().pullFile(newFilePath4)); 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(); }); // Verify snapshots are deleted after restoration Loading Loading @@ -464,10 +456,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { assertEquals(TEST_STRING_1, getDevice().pullFileContents(oldFilePath1)); assertEquals(TEST_STRING_2, getDevice().pullFileContents(oldFilePath2)); assertNull(getDevice().pullFile(newFilePath3)); assertNull(getDevice().pullFile(newFilePath4)); 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(); }); // Verify snapshots are deleted after restoration Loading Loading @@ -515,10 +507,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { // Verify that old files have been restored and new files are gone runAsRoot(() -> { assertEquals(TEST_STRING_1, getDevice().pullFileContents(oldFilePath1)); assertEquals(TEST_STRING_2, getDevice().pullFileContents(oldFilePath2)); assertNull(getDevice().pullFile(newFilePath3)); assertNull(getDevice().pullFile(newFilePath4)); 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(); }); } Loading Loading @@ -549,7 +541,7 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { runPhase("testCleanUp"); runAsRoot(() -> { for (String dir : after) { assertNull(getDevice().getFileEntry(dir)); assertThat(getDevice().getFileEntry(dir)).isNull(); } }); } Loading @@ -561,7 +553,7 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { try { getDevice().enableAdbRoot(); getDevice().remountSystemWritable(); assertTrue(getDevice().pushFile(apex, "/system/apex/" + fileName)); assertThat(getDevice().pushFile(apex, "/system/apex/" + fileName)).isTrue(); } finally { getDevice().disableAdbRoot(); } Loading Loading @@ -607,8 +599,9 @@ public class StagedRollbackTest extends BaseHostJUnit4Test { try { getDevice().enableAdbRoot(); IFileEntry file = getDevice().getFileEntry(path); assertTrue("Not a directory: " + path, file.isDirectory()); assertTrue("Directory not empty: " + path, file.getChildren(false).isEmpty()); assertWithMessage("Not a directory: " + path).that(file.isDirectory()).isTrue(); assertWithMessage("Directory not empty: " + path) .that(file.getChildren(false)).isEmpty(); } catch (DeviceNotAvailableException e) { fail("Can't access directory: " + path); } finally { Loading
tests/RollbackTest/lib/src/com/android/tests/rollback/host/WatchdogEventLogger.java +28 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.tests.rollback.host; import com.android.tradefed.device.ITestDevice; import com.google.common.truth.FailureMetadata; import com.google.common.truth.Truth; import static com.google.common.truth.Truth.assertThat; Loading Loading @@ -76,4 +78,30 @@ public class WatchdogEventLogger { && matchProperty(type, "rollbackReason", rollbackReason) && matchProperty(type, "failedPackageName", failedPackageName); } static class Subject extends com.google.common.truth.Subject { private final WatchdogEventLogger mActual; private Subject(FailureMetadata failureMetadata, WatchdogEventLogger subject) { super(failureMetadata, subject); mActual = subject; } private static com.google.common.truth.Subject.Factory<Subject, WatchdogEventLogger> loggers() { return Subject::new; } static Subject assertThat(WatchdogEventLogger actual) { return Truth.assertAbout(loggers()).that(actual); } void eventOccurred(String type, String logPackage, String rollbackReason, String failedPackageName) throws Exception { check("watchdogEventOccurred(type=%s, logPackage=%s, rollbackReason=%s, " + "failedPackageName=%s)", type, logPackage, rollbackReason, failedPackageName) .that(mActual.watchdogEventOccurred(type, logPackage, rollbackReason, failedPackageName)).isTrue(); } } }