From 9c17cde97172fdcbf35cdf314f0707c379aa652f Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Thu, 16 Jul 2020 01:15:39 -0700 Subject: [PATCH] Fix failing tests in AppStateTrackerTest Also adding the test to presubmit when AppStateTracker changes Test: atest FrameworksMockingServicesTests:AppStateTrackerTest Fixes: 159504076 Change-Id: I45b595809aa9996fd09981b1c9a196ef6f4016b6 --- .../core/java/com/android/server/TEST_MAPPING | 15 +++++++ .../android/server/AppStateTrackerTest.java | 41 ++++++++++++++++++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/TEST_MAPPING b/services/core/java/com/android/server/TEST_MAPPING index 1cb7c4d18326f..dd485fe3342f2 100644 --- a/services/core/java/com/android/server/TEST_MAPPING +++ b/services/core/java/com/android/server/TEST_MAPPING @@ -25,6 +25,21 @@ { "name": "CtsScopedStorageHostTest", "file_patterns": ["StorageManagerService\\.java"] + }, + { + "name": "FrameworksMockingServicesTests", + "file_patterns": ["AppStateTracker\\.java"], + "options": [ + { + "include-filter": "com.android.server.AppStateTrackerTest" + }, + { + "include-annotation": "android.platform.test.annotations.Presubmit" + }, + { + "exclude-annotation": "androidx.test.filters.FlakyTest" + } + ] } ] } diff --git a/services/tests/mockingservicestests/src/com/android/server/AppStateTrackerTest.java b/services/tests/mockingservicestests/src/com/android/server/AppStateTrackerTest.java index f0758dd3ef322..dcd7af31af93b 100644 --- a/services/tests/mockingservicestests/src/com/android/server/AppStateTrackerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/AppStateTrackerTest.java @@ -57,6 +57,7 @@ import android.os.PowerSaveState; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; +import android.platform.test.annotations.Presubmit; import android.provider.Settings.Global; import android.test.mock.MockContentResolver; import android.util.ArraySet; @@ -94,6 +95,7 @@ import java.util.function.Consumer; * * Run with: atest com.android.server.AppStateTrackerTest */ +@Presubmit @SmallTest @RunWith(AndroidJUnit4.class) public class AppStateTrackerTest { @@ -130,6 +132,7 @@ public class AppStateTrackerTest { @Override AppStandbyInternal injectAppStandbyInternal() { + when(mMockAppStandbyInternal.isAppIdleEnabled()).thenReturn(true); return mMockAppStandbyInternal; } @@ -141,7 +144,9 @@ public class AppStateTrackerTest { } @Override - boolean isSmallBatteryDevice() { return mIsSmallBatteryDevice; }; + boolean isSmallBatteryDevice() { + return mIsSmallBatteryDevice; + } } private static final int UID_1 = Process.FIRST_APPLICATION_UID + 1; @@ -201,6 +206,13 @@ public class AppStateTrackerTest { mMainHandler = new Handler(Looper.getMainLooper()); } + /** + * Enqueues a message and waits for it to complete. This ensures that any messages posted until + * now have been executed. + * + * Note that these messages may have enqueued more messages, which may or may not have executed + * when this method returns. + */ private void waitUntilMainHandlerDrain() throws Exception { final CountDownLatch l = new CountDownLatch(1); mMainHandler.post(() -> { @@ -362,6 +374,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidActive(UID_1); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, NONE); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); @@ -370,6 +383,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidGone(UID_1, /*disable=*/ false); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); @@ -378,12 +392,14 @@ public class AppStateTrackerTest { mIUidObserver.onUidActive(UID_1); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, NONE); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); mIUidObserver.onUidIdle(UID_1, /*disable=*/ false); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); areRestricted(instance, UID_1, PACKAGE_1, JOBS_AND_ALARMS); areRestricted(instance, UID_2, PACKAGE_2, JOBS_AND_ALARMS); areRestricted(instance, Process.SYSTEM_UID, PACKAGE_SYSTEM, NONE); @@ -499,6 +515,8 @@ public class AppStateTrackerTest { mIUidObserver.onUidActive(UID_1); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); + assertTrue(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); @@ -517,6 +535,8 @@ public class AppStateTrackerTest { ActivityManager.PROCESS_CAPABILITY_NONE); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); + assertTrue(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); @@ -535,6 +555,8 @@ public class AppStateTrackerTest { ActivityManager.PROCESS_CAPABILITY_NONE); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); + assertTrue(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); @@ -546,6 +568,8 @@ public class AppStateTrackerTest { mIUidObserver.onUidGone(UID_1, true); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); + assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); @@ -557,6 +581,8 @@ public class AppStateTrackerTest { mIUidObserver.onUidIdle(UID_2, true); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); + assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); @@ -570,6 +596,8 @@ public class AppStateTrackerTest { ActivityManager.PROCESS_CAPABILITY_NONE); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); + assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); @@ -583,6 +611,8 @@ public class AppStateTrackerTest { ActivityManager.PROCESS_CAPABILITY_NONE); waitUntilMainHandlerDrain(); + waitUntilMainHandlerDrain(); + assertFalse(instance.isUidActive(UID_1)); assertFalse(instance.isUidActive(UID_2)); assertTrue(instance.isUidActive(Process.SYSTEM_UID)); @@ -1006,6 +1036,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidActive(UID_10_1); + waitUntilMainHandlerDrain(); waitUntilMainHandlerDrain(); verify(l, times(0)).updateAllJobs(); verify(l, times(1)).updateJobsForUid(eq(UID_10_1), anyBoolean()); @@ -1018,6 +1049,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidGone(UID_10_1, true); + waitUntilMainHandlerDrain(); waitUntilMainHandlerDrain(); verify(l, times(0)).updateAllJobs(); verify(l, times(1)).updateJobsForUid(eq(UID_10_1), anyBoolean()); @@ -1030,6 +1062,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidActive(UID_10_1); + waitUntilMainHandlerDrain(); waitUntilMainHandlerDrain(); verify(l, times(0)).updateAllJobs(); verify(l, times(1)).updateJobsForUid(eq(UID_10_1), anyBoolean()); @@ -1042,6 +1075,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidIdle(UID_10_1, true); + waitUntilMainHandlerDrain(); waitUntilMainHandlerDrain(); verify(l, times(0)).updateAllJobs(); verify(l, times(1)).updateJobsForUid(eq(UID_10_1), anyBoolean()); @@ -1068,6 +1102,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidActive(UID_10_1); + waitUntilMainHandlerDrain(); waitUntilMainHandlerDrain(); verify(l, times(0)).updateAllJobs(); verify(l, times(1)).updateJobsForUid(eq(UID_10_1), anyBoolean()); @@ -1080,6 +1115,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidGone(UID_10_1, true); + waitUntilMainHandlerDrain(); waitUntilMainHandlerDrain(); verify(l, times(0)).updateAllJobs(); verify(l, times(1)).updateJobsForUid(eq(UID_10_1), anyBoolean()); @@ -1092,6 +1128,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidActive(UID_10_1); + waitUntilMainHandlerDrain(); waitUntilMainHandlerDrain(); verify(l, times(0)).updateAllJobs(); verify(l, times(1)).updateJobsForUid(eq(UID_10_1), anyBoolean()); @@ -1104,6 +1141,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidIdle(UID_10_1, true); + waitUntilMainHandlerDrain(); waitUntilMainHandlerDrain(); verify(l, times(0)).updateAllJobs(); verify(l, times(1)).updateJobsForUid(eq(UID_10_1), anyBoolean()); @@ -1123,6 +1161,7 @@ public class AppStateTrackerTest { mIUidObserver.onUidActive(UID_1); mIUidObserver.onUidActive(UID_10_1); + waitUntilMainHandlerDrain(); waitUntilMainHandlerDrain(); setAppOps(UID_2, PACKAGE_2, true);