From e2ef4547e14d977705a563cbd0ac390f7948207c Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Wed, 12 Jun 2024 17:35:14 +0000 Subject: [PATCH] Adjust background restriction transition delays in tests Background chain transition delays are changing in the framework to be longer for LAST_ACTIVITY and higher-priority and shorter for lower-priority process-states. Updating tests to use the shorter timeout wherever possible and using the longer timeout wherever the test specifically tests for process-state LAST_ACTIVITY. Flag: com.android.server.net.use_different_delays_for_background_chain Test: atest CtsHostsideNetworkPolicyTests Bug: 323963467 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:adf00ec210dc72b0075755065f5dfafa7971e70f) Merged-In: I4ab0cef2e81c465753a8aa2228d2e0ddf1abf1ea Change-Id: I4ab0cef2e81c465753a8aa2228d2e0ddf1abf1ea --- .../AbstractDefaultRestrictionsTest.java | 23 ++++++++-------- ...ractRestrictBackgroundNetworkTestCase.java | 27 ++++++++++++++++++- .../hostside/ConnOnActivityStartTest.java | 4 +-- .../hostside/NetworkCallbackTest.java | 5 ++-- .../hostside/NetworkPolicyManagerTest.java | 8 +++--- 5 files changed, 48 insertions(+), 19 deletions(-) diff --git a/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/AbstractDefaultRestrictionsTest.java b/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/AbstractDefaultRestrictionsTest.java index da633c0795..00f67f43ff 100644 --- a/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/AbstractDefaultRestrictionsTest.java +++ b/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/AbstractDefaultRestrictionsTest.java @@ -16,7 +16,7 @@ package com.android.cts.netpolicy.hostside; -import static android.app.ActivityManager.PROCESS_STATE_TOP_SLEEPING; +import static android.app.ActivityManager.PROCESS_STATE_LAST_ACTIVITY; import static org.junit.Assume.assumeTrue; @@ -46,14 +46,15 @@ abstract class AbstractDefaultRestrictionsTest extends AbstractRestrictBackgroun public final void tearDown() throws Exception { super.tearDown(); + stopApp(); removePowerSaveModeWhitelist(TEST_APP2_PKG); removePowerSaveModeExceptIdleWhitelist(TEST_APP2_PKG); } @Test public void testFgsNetworkAccess() throws Exception { - assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); - SystemClock.sleep(PROCESS_STATE_TRANSITION_DELAY_MS); + assertProcessStateBelow(PROCESS_STATE_LAST_ACTIVITY); + SystemClock.sleep(mProcessStateTransitionShortDelayMs); assertNetworkAccess(false, null); launchComponentAndAssertNetworkAccess(TYPE_COMPONENT_FOREGROUND_SERVICE); @@ -61,8 +62,8 @@ abstract class AbstractDefaultRestrictionsTest extends AbstractRestrictBackgroun @Test public void testActivityNetworkAccess() throws Exception { - assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); - SystemClock.sleep(PROCESS_STATE_TRANSITION_DELAY_MS); + assertProcessStateBelow(PROCESS_STATE_LAST_ACTIVITY); + SystemClock.sleep(mProcessStateTransitionShortDelayMs); assertNetworkAccess(false, null); launchComponentAndAssertNetworkAccess(TYPE_COMPONENT_ACTIVTIY); @@ -70,23 +71,23 @@ abstract class AbstractDefaultRestrictionsTest extends AbstractRestrictBackgroun @Test public void testBackgroundNetworkAccess_inFullAllowlist() throws Exception { - assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); - SystemClock.sleep(PROCESS_STATE_TRANSITION_DELAY_MS); + assertProcessStateBelow(PROCESS_STATE_LAST_ACTIVITY); + SystemClock.sleep(mProcessStateTransitionShortDelayMs); assertNetworkAccess(false, null); addPowerSaveModeWhitelist(TEST_APP2_PKG); - assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); + assertProcessStateBelow(PROCESS_STATE_LAST_ACTIVITY); assertNetworkAccess(true, null); } @Test public void testBackgroundNetworkAccess_inExceptIdleAllowlist() throws Exception { - assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); - SystemClock.sleep(PROCESS_STATE_TRANSITION_DELAY_MS); + assertProcessStateBelow(PROCESS_STATE_LAST_ACTIVITY); + SystemClock.sleep(mProcessStateTransitionShortDelayMs); assertNetworkAccess(false, null); addPowerSaveModeExceptIdleWhitelist(TEST_APP2_PKG); - assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); + assertProcessStateBelow(PROCESS_STATE_LAST_ACTIVITY); assertNetworkAccess(true, null); } } diff --git a/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/AbstractRestrictBackgroundNetworkTestCase.java b/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/AbstractRestrictBackgroundNetworkTestCase.java index d0203c5bed..0f5f58cce7 100644 --- a/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/AbstractRestrictBackgroundNetworkTestCase.java +++ b/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/AbstractRestrictBackgroundNetworkTestCase.java @@ -96,7 +96,12 @@ public abstract class AbstractRestrictBackgroundNetworkTestCase { protected static final String TEST_PKG = "com.android.cts.netpolicy.hostside"; protected static final String TEST_APP2_PKG = "com.android.cts.netpolicy.hostside.app2"; // TODO(b/321797685): Configure it via device-config once it is available. - protected static final long PROCESS_STATE_TRANSITION_DELAY_MS = TimeUnit.SECONDS.toMillis(5); + protected final long mProcessStateTransitionLongDelayMs = + useDifferentDelaysForBackgroundChain() ? TimeUnit.SECONDS.toMillis(20) + : TimeUnit.SECONDS.toMillis(5); + protected final long mProcessStateTransitionShortDelayMs = + useDifferentDelaysForBackgroundChain() ? TimeUnit.SECONDS.toMillis(2) + : TimeUnit.SECONDS.toMillis(5); private static final String TEST_APP2_ACTIVITY_CLASS = TEST_APP2_PKG + ".MyActivity"; private static final String TEST_APP2_SERVICE_CLASS = TEST_APP2_PKG + ".MyForegroundService"; @@ -241,6 +246,22 @@ public abstract class AbstractRestrictBackgroundNetworkTestCase { return Boolean.parseBoolean(output); } + /** + * Check if the flag to use different delays for sensitive proc-states is enabled. + * This is a manual check because the feature flag infrastructure may not be available + * in all the branches that will get this code. + * TODO: b/322115994 - Use @RequiresFlagsEnabled with + * Flags.FLAG_USE_DIFFERENT_DELAYS_FOR_BACKGROUND_CHAIN once the tests are moved to cts. + */ + private boolean useDifferentDelaysForBackgroundChain() { + if (!SdkLevel.isAtLeastV()) { + return false; + } + final String output = executeShellCommand("device_config get backstage_power" + + " com.android.server.net.use_different_delays_for_background_chain"); + return Boolean.parseBoolean(output); + } + protected int getUid(String packageName) throws Exception { return mContext.getPackageManager().getPackageUid(packageName, 0); } @@ -824,6 +845,10 @@ public abstract class AbstractRestrictBackgroundNetworkTestCase { assertDelayedShellCommand("dumpsys deviceidle get deep", enabled ? "IDLE" : "ACTIVE"); } + protected void stopApp() { + executeSilentShellCommand("am stop-app " + TEST_APP2_PKG); + } + protected void setAppIdle(boolean isIdle) throws Exception { setAppIdleNoAssert(isIdle); assertAppIdle(isIdle); diff --git a/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/ConnOnActivityStartTest.java b/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/ConnOnActivityStartTest.java index 811190f632..bfccce9a7d 100644 --- a/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/ConnOnActivityStartTest.java +++ b/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/ConnOnActivityStartTest.java @@ -53,7 +53,7 @@ public class ConnOnActivityStartTest extends AbstractRestrictBackgroundNetworkTe @After public final void tearDown() throws Exception { super.tearDown(); - finishActivity(); + stopApp(); resetDeviceState(); } @@ -108,7 +108,7 @@ public class ConnOnActivityStartTest extends AbstractRestrictBackgroundNetworkTe assumeTrue("Feature not enabled", isNetworkBlockedForTopSleepingAndAbove()); assertLaunchedActivityHasNetworkAccess("testStartActivity_default", () -> { assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); - SystemClock.sleep(PROCESS_STATE_TRANSITION_DELAY_MS); + SystemClock.sleep(mProcessStateTransitionLongDelayMs); assertNetworkAccess(false, null); }); } diff --git a/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/NetworkCallbackTest.java b/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/NetworkCallbackTest.java index 7038d026a3..3934cfae0f 100644 --- a/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/NetworkCallbackTest.java +++ b/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/NetworkCallbackTest.java @@ -268,6 +268,7 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa setRestrictBackground(false); setBatterySaverMode(false); unregisterNetworkCallback(); + stopApp(); if (SdkLevel.isAtLeastT() && (mCtsNetUtils != null)) { mCtsNetUtils.restorePrivateDnsSetting(); @@ -387,7 +388,7 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa finishActivity(); assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); - SystemClock.sleep(PROCESS_STATE_TRANSITION_DELAY_MS); + SystemClock.sleep(mProcessStateTransitionLongDelayMs); assertNetworkAccess(false, null); mTestNetworkCallback.expectBlockedStatusCallbackEventually(mNetwork, true); assertNetworkAccessBlockedByBpf(true, mUid, true /* metered */); @@ -413,7 +414,7 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa finishActivity(); assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); - SystemClock.sleep(PROCESS_STATE_TRANSITION_DELAY_MS); + SystemClock.sleep(mProcessStateTransitionLongDelayMs); assertNetworkAccess(false, null); mTestNetworkCallback.expectBlockedStatusCallbackEventually(mNetwork, true); assertNetworkAccessBlockedByBpf(true, mUid, false /* metered */); diff --git a/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/NetworkPolicyManagerTest.java b/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/NetworkPolicyManagerTest.java index 9b3fe9f554..6c5f2ff3ee 100644 --- a/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/NetworkPolicyManagerTest.java +++ b/tests/cts/hostside-network-policy/app/src/com/android/cts/netpolicy/hostside/NetworkPolicyManagerTest.java @@ -17,6 +17,7 @@ package com.android.cts.netpolicy.hostside; import static android.app.ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE; +import static android.app.ActivityManager.PROCESS_STATE_LAST_ACTIVITY; import static android.app.ActivityManager.PROCESS_STATE_TOP_SLEEPING; import static android.os.Process.SYSTEM_UID; @@ -65,6 +66,7 @@ public class NetworkPolicyManagerTest extends AbstractRestrictBackgroundNetworkT setRestrictBackground(false); setRestrictedNetworkingMode(false); unregisterNetworkCallback(); + stopApp(); } @Test @@ -248,8 +250,8 @@ public class NetworkPolicyManagerTest extends AbstractRestrictBackgroundNetworkT assumeTrue("Feature not enabled", isNetworkBlockedForTopSleepingAndAbove()); try { - assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); - SystemClock.sleep(PROCESS_STATE_TRANSITION_DELAY_MS); + assertProcessStateBelow(PROCESS_STATE_LAST_ACTIVITY); + SystemClock.sleep(mProcessStateTransitionShortDelayMs); assertNetworkingBlockedStatusForUid(mUid, METERED, true /* expectedResult */); assertTrue(isUidNetworkingBlocked(mUid, NON_METERED)); @@ -260,7 +262,7 @@ public class NetworkPolicyManagerTest extends AbstractRestrictBackgroundNetworkT finishActivity(); assertProcessStateBelow(PROCESS_STATE_TOP_SLEEPING); - SystemClock.sleep(PROCESS_STATE_TRANSITION_DELAY_MS); + SystemClock.sleep(mProcessStateTransitionLongDelayMs); assertNetworkingBlockedStatusForUid(mUid, METERED, true /* expectedResult */); assertTrue(isUidNetworkingBlocked(mUid, NON_METERED));