Loading services/tests/mockingservicestests/src/com/android/server/RescuePartyTest.java +1 −7 Original line number Diff line number Diff line Loading @@ -47,7 +47,6 @@ import android.crashrecovery.flags.Flags; import android.os.RecoverySystem; import android.os.SystemProperties; import android.os.UserHandle; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.FlagsParameterization; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.DeviceConfig; Loading Loading @@ -135,8 +134,7 @@ public class RescuePartyTest { @Parameters(name = "{0}") public static List<FlagsParameterization> getFlags() { return FlagsParameterization.allCombinationsOf( Flags.FLAG_RECOVERABILITY_DETECTION, Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS); Flags.FLAG_RECOVERABILITY_DETECTION); } public RescuePartyTest(FlagsParameterization flags) { Loading Loading @@ -248,7 +246,6 @@ public class RescuePartyTest { } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testBootLoopNoFlags() { // this is old test where the flag needs to be disabled noteBoot(1); Loading @@ -260,7 +257,6 @@ public class RescuePartyTest { } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testPersistentAppCrashNoFlags() { // this is old test where the flag needs to be disabled noteAppCrash(1, true); Loading Loading @@ -396,7 +392,6 @@ public class RescuePartyTest { } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testHealthCheckLevelsNoFlags() { // this is old test where the flag needs to be disabled RescuePartyObserver observer = RescuePartyObserver.getInstance(mMockContext); Loading @@ -416,7 +411,6 @@ public class RescuePartyTest { } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testBootLoopLevelsNoFlags() { RescuePartyObserver observer = RescuePartyObserver.getInstance(mMockContext); Loading tests/PackageWatchdog/src/com/android/server/CrashRecoveryTest.java +0 −277 Original line number Diff line number Diff line Loading @@ -48,8 +48,6 @@ import android.net.ConnectivityModuleConnector.ConnectivityModuleHealthListener; import android.os.Handler; import android.os.SystemProperties; import android.os.test.TestLooper; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.DeviceConfig; import android.util.AtomicFile; Loading Loading @@ -305,90 +303,6 @@ public class CrashRecoveryTest { } @Test @DisableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testBootLoopWithRescuePartyAndRollbackObserver() throws Exception { PackageWatchdog watchdog = createWatchdog(); RescuePartyObserver rescuePartyObserver = setUpRescuePartyObserver(watchdog); RollbackPackageHealthObserver rollbackObserver = setUpRollbackPackageHealthObserver(watchdog); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(1); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(1); for (int i = 0; i < PackageWatchdog.DEFAULT_BOOT_LOOP_TRIGGER_COUNT; i++) { watchdog.noteBoot(); } mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(1); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(2); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(1); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(2); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(3); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(2); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(3); verify(rollbackObserver).onExecuteBootLoopMitigation(1); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(2); // Update the list of available rollbacks after executing bootloop mitigation once when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of(ROLLBACK_INFO_HIGH, ROLLBACK_INFO_MANUAL)); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(3); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(4); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(2); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(4); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(5); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(2); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(5); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(6); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(2); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(6); verify(rollbackObserver).onExecuteBootLoopMitigation(2); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(3); // Update the list of available rollbacks after executing bootloop mitigation when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of(ROLLBACK_INFO_MANUAL)); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(6); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(7); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(3); moveTimeForwardAndDispatch(PackageWatchdog.DEFAULT_DEESCALATION_WINDOW_MS + 1); Mockito.reset(rescuePartyObserver); for (int i = 0; i < PackageWatchdog.DEFAULT_BOOT_LOOP_TRIGGER_COUNT; i++) { watchdog.noteBoot(); } mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(1); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(2); } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testBootLoopWithRescuePartyAndRollbackObserverNoFlags() throws Exception { PackageWatchdog watchdog = createWatchdog(); RescuePartyObserver rescuePartyObserver = setUpRescuePartyObserver(watchdog); Loading Loading @@ -443,80 +357,6 @@ public class CrashRecoveryTest { } @Test @DisableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testCrashLoopWithRescuePartyAndRollbackObserver() throws Exception { PackageWatchdog watchdog = createWatchdog(); RescuePartyObserver rescuePartyObserver = setUpRescuePartyObserver(watchdog); RollbackPackageHealthObserver rollbackObserver = setUpRollbackPackageHealthObserver(watchdog); VersionedPackage versionedPackageA = new VersionedPackage(APP_A, VERSION_CODE); when(mMockPackageManager.getApplicationInfo(anyString(), anyInt())).then(inv -> { ApplicationInfo info = new ApplicationInfo(); info.flags |= ApplicationInfo.FLAG_PERSISTENT | ApplicationInfo.FLAG_SYSTEM; return info; }); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageA), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: SCOPED_DEVICE_CONFIG_RESET verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageA), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: ALL_DEVICE_CONFIG_RESET verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 3); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageA), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: WARM_REBOOT verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 3); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageA), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: Low impact rollback verify(rollbackObserver).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); // update available rollbacks to mock rollbacks being applied after the call to // rollbackObserver.onExecuteHealthCheckMitigation when(mRollbackManager.getAvailableRollbacks()).thenReturn( List.of(ROLLBACK_INFO_HIGH, ROLLBACK_INFO_MANUAL)); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageA), PackageWatchdog.FAILURE_REASON_APP_CRASH); // DEFAULT_MAJOR_USER_IMPACT_LEVEL_THRESHOLD reached. No more mitigations applied verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testCrashLoopWithRescuePartyAndRollbackObserverEnableDeprecateFlagReset() throws Exception { PackageWatchdog watchdog = createWatchdog(); Loading Loading @@ -569,123 +409,6 @@ public class CrashRecoveryTest { } @Test @DisableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testCrashLoopSystemUIWithRescuePartyAndRollbackObserver() throws Exception { PackageWatchdog watchdog = createWatchdog(); RescuePartyObserver rescuePartyObserver = setUpRescuePartyObserver(watchdog); RollbackPackageHealthObserver rollbackObserver = setUpRollbackPackageHealthObserver(watchdog); String systemUi = "com.android.systemui"; VersionedPackage versionedPackageUi = new VersionedPackage( systemUi, VERSION_CODE); RollbackInfo rollbackInfoUi = getRollbackInfo(systemUi, VERSION_CODE, 1, PackageManager.ROLLBACK_USER_IMPACT_LOW); when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of(ROLLBACK_INFO_LOW, ROLLBACK_INFO_HIGH, ROLLBACK_INFO_MANUAL, rollbackInfoUi)); when(mMockPackageManager.getApplicationInfo(anyString(), anyInt())).then(inv -> { ApplicationInfo info = new ApplicationInfo(); info.flags |= ApplicationInfo.FLAG_PERSISTENT | ApplicationInfo.FLAG_SYSTEM; return info; }); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: SCOPED_DEVICE_CONFIG_RESET verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: ALL_DEVICE_CONFIG_RESET verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 3); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: WARM_REBOOT verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 3); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: Low impact rollback verify(rollbackObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); // update available rollbacks to mock rollbacks being applied after the call to // rollbackObserver.onExecuteHealthCheckMitigation when(mRollbackManager.getAvailableRollbacks()).thenReturn( List.of(ROLLBACK_INFO_HIGH, ROLLBACK_INFO_MANUAL)); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: RESET_SETTINGS_UNTRUSTED_DEFAULTS verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 5); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: RESET_SETTINGS_UNTRUSTED_CHANGES verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 5); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 6); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: RESET_SETTINGS_TRUSTED_DEFAULTS verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 6); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 7); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: Factory reset. High impact rollbacks are performed only for boot loops. verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 7); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 8); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testCrashLoopSystemUIWithRescuePartyAndRollbackObserverEnableDeprecateFlagReset() throws Exception { PackageWatchdog watchdog = createWatchdog(); Loading Loading
services/tests/mockingservicestests/src/com/android/server/RescuePartyTest.java +1 −7 Original line number Diff line number Diff line Loading @@ -47,7 +47,6 @@ import android.crashrecovery.flags.Flags; import android.os.RecoverySystem; import android.os.SystemProperties; import android.os.UserHandle; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.FlagsParameterization; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.DeviceConfig; Loading Loading @@ -135,8 +134,7 @@ public class RescuePartyTest { @Parameters(name = "{0}") public static List<FlagsParameterization> getFlags() { return FlagsParameterization.allCombinationsOf( Flags.FLAG_RECOVERABILITY_DETECTION, Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS); Flags.FLAG_RECOVERABILITY_DETECTION); } public RescuePartyTest(FlagsParameterization flags) { Loading Loading @@ -248,7 +246,6 @@ public class RescuePartyTest { } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testBootLoopNoFlags() { // this is old test where the flag needs to be disabled noteBoot(1); Loading @@ -260,7 +257,6 @@ public class RescuePartyTest { } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testPersistentAppCrashNoFlags() { // this is old test where the flag needs to be disabled noteAppCrash(1, true); Loading Loading @@ -396,7 +392,6 @@ public class RescuePartyTest { } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testHealthCheckLevelsNoFlags() { // this is old test where the flag needs to be disabled RescuePartyObserver observer = RescuePartyObserver.getInstance(mMockContext); Loading @@ -416,7 +411,6 @@ public class RescuePartyTest { } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testBootLoopLevelsNoFlags() { RescuePartyObserver observer = RescuePartyObserver.getInstance(mMockContext); Loading
tests/PackageWatchdog/src/com/android/server/CrashRecoveryTest.java +0 −277 Original line number Diff line number Diff line Loading @@ -48,8 +48,6 @@ import android.net.ConnectivityModuleConnector.ConnectivityModuleHealthListener; import android.os.Handler; import android.os.SystemProperties; import android.os.test.TestLooper; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.DeviceConfig; import android.util.AtomicFile; Loading Loading @@ -305,90 +303,6 @@ public class CrashRecoveryTest { } @Test @DisableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testBootLoopWithRescuePartyAndRollbackObserver() throws Exception { PackageWatchdog watchdog = createWatchdog(); RescuePartyObserver rescuePartyObserver = setUpRescuePartyObserver(watchdog); RollbackPackageHealthObserver rollbackObserver = setUpRollbackPackageHealthObserver(watchdog); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(1); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(1); for (int i = 0; i < PackageWatchdog.DEFAULT_BOOT_LOOP_TRIGGER_COUNT; i++) { watchdog.noteBoot(); } mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(1); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(2); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(1); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(2); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(3); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(2); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(3); verify(rollbackObserver).onExecuteBootLoopMitigation(1); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(2); // Update the list of available rollbacks after executing bootloop mitigation once when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of(ROLLBACK_INFO_HIGH, ROLLBACK_INFO_MANUAL)); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(3); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(4); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(2); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(4); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(5); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(2); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(5); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(6); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(2); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(6); verify(rollbackObserver).onExecuteBootLoopMitigation(2); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(3); // Update the list of available rollbacks after executing bootloop mitigation when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of(ROLLBACK_INFO_MANUAL)); watchdog.noteBoot(); mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(6); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(7); verify(rollbackObserver, never()).onExecuteBootLoopMitigation(3); moveTimeForwardAndDispatch(PackageWatchdog.DEFAULT_DEESCALATION_WINDOW_MS + 1); Mockito.reset(rescuePartyObserver); for (int i = 0; i < PackageWatchdog.DEFAULT_BOOT_LOOP_TRIGGER_COUNT; i++) { watchdog.noteBoot(); } mTestLooper.dispatchAll(); verify(rescuePartyObserver).onExecuteBootLoopMitigation(1); verify(rescuePartyObserver, never()).onExecuteBootLoopMitigation(2); } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testBootLoopWithRescuePartyAndRollbackObserverNoFlags() throws Exception { PackageWatchdog watchdog = createWatchdog(); RescuePartyObserver rescuePartyObserver = setUpRescuePartyObserver(watchdog); Loading Loading @@ -443,80 +357,6 @@ public class CrashRecoveryTest { } @Test @DisableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testCrashLoopWithRescuePartyAndRollbackObserver() throws Exception { PackageWatchdog watchdog = createWatchdog(); RescuePartyObserver rescuePartyObserver = setUpRescuePartyObserver(watchdog); RollbackPackageHealthObserver rollbackObserver = setUpRollbackPackageHealthObserver(watchdog); VersionedPackage versionedPackageA = new VersionedPackage(APP_A, VERSION_CODE); when(mMockPackageManager.getApplicationInfo(anyString(), anyInt())).then(inv -> { ApplicationInfo info = new ApplicationInfo(); info.flags |= ApplicationInfo.FLAG_PERSISTENT | ApplicationInfo.FLAG_SYSTEM; return info; }); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageA), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: SCOPED_DEVICE_CONFIG_RESET verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageA), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: ALL_DEVICE_CONFIG_RESET verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 3); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageA), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: WARM_REBOOT verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 3); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageA), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: Low impact rollback verify(rollbackObserver).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); // update available rollbacks to mock rollbacks being applied after the call to // rollbackObserver.onExecuteHealthCheckMitigation when(mRollbackManager.getAvailableRollbacks()).thenReturn( List.of(ROLLBACK_INFO_HIGH, ROLLBACK_INFO_MANUAL)); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageA), PackageWatchdog.FAILURE_REASON_APP_CRASH); // DEFAULT_MAJOR_USER_IMPACT_LEVEL_THRESHOLD reached. No more mitigations applied verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageA, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testCrashLoopWithRescuePartyAndRollbackObserverEnableDeprecateFlagReset() throws Exception { PackageWatchdog watchdog = createWatchdog(); Loading Loading @@ -569,123 +409,6 @@ public class CrashRecoveryTest { } @Test @DisableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testCrashLoopSystemUIWithRescuePartyAndRollbackObserver() throws Exception { PackageWatchdog watchdog = createWatchdog(); RescuePartyObserver rescuePartyObserver = setUpRescuePartyObserver(watchdog); RollbackPackageHealthObserver rollbackObserver = setUpRollbackPackageHealthObserver(watchdog); String systemUi = "com.android.systemui"; VersionedPackage versionedPackageUi = new VersionedPackage( systemUi, VERSION_CODE); RollbackInfo rollbackInfoUi = getRollbackInfo(systemUi, VERSION_CODE, 1, PackageManager.ROLLBACK_USER_IMPACT_LOW); when(mRollbackManager.getAvailableRollbacks()).thenReturn(List.of(ROLLBACK_INFO_LOW, ROLLBACK_INFO_HIGH, ROLLBACK_INFO_MANUAL, rollbackInfoUi)); when(mMockPackageManager.getApplicationInfo(anyString(), anyInt())).then(inv -> { ApplicationInfo info = new ApplicationInfo(); info.flags |= ApplicationInfo.FLAG_PERSISTENT | ApplicationInfo.FLAG_SYSTEM; return info; }); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: SCOPED_DEVICE_CONFIG_RESET verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: ALL_DEVICE_CONFIG_RESET verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 3); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: WARM_REBOOT verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 3); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: Low impact rollback verify(rollbackObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 1); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); // update available rollbacks to mock rollbacks being applied after the call to // rollbackObserver.onExecuteHealthCheckMitigation when(mRollbackManager.getAvailableRollbacks()).thenReturn( List.of(ROLLBACK_INFO_HIGH, ROLLBACK_INFO_MANUAL)); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: RESET_SETTINGS_UNTRUSTED_DEFAULTS verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 4); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 5); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: RESET_SETTINGS_UNTRUSTED_CHANGES verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 5); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 6); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: RESET_SETTINGS_TRUSTED_DEFAULTS verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 6); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 7); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); raiseFatalFailureAndDispatch(watchdog, Arrays.asList(versionedPackageUi), PackageWatchdog.FAILURE_REASON_APP_CRASH); // Mitigation: Factory reset. High impact rollbacks are performed only for boot loops. verify(rescuePartyObserver).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 7); verify(rescuePartyObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 8); verify(rollbackObserver, never()).onExecuteHealthCheckMitigation(versionedPackageUi, PackageWatchdog.FAILURE_REASON_APP_CRASH, 2); } @Test @EnableFlags(Flags.FLAG_DEPRECATE_FLAGS_AND_SETTINGS_RESETS) public void testCrashLoopSystemUIWithRescuePartyAndRollbackObserverEnableDeprecateFlagReset() throws Exception { PackageWatchdog watchdog = createWatchdog(); Loading