summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemi NGUYEN VAN <reminv@google.com>2020-06-10 00:57:44 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-06-10 00:57:44 +0000
commit265b4007cc9163eb8335c7cb2957cc5f30e27389 (patch)
treede63d61f21e7b7f9756df64c93253c3352e891d0
parenta6020be0ddea6af39636ad080b395c25d152d791 (diff)
parent9572aa10c28501350350251525eed07408c3b849 (diff)
Do not revalidate before network is ready am: 9572aa10c2
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/NetworkStack/+/11807299 Change-Id: I9ba824d442f3878ccf912ac6862388491ab9ac32
-rwxr-xr-xsrc/com/android/server/connectivity/NetworkMonitor.java5
-rw-r--r--tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java27
2 files changed, 32 insertions, 0 deletions
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java
index d0f62b2..8493816 100755
--- a/src/com/android/server/connectivity/NetworkMonitor.java
+++ b/src/com/android/server/connectivity/NetworkMonitor.java
@@ -792,6 +792,11 @@ public class NetworkMonitor extends StateMachine {
return HANDLED;
case CMD_FORCE_REEVALUATION:
case CMD_CAPTIVE_PORTAL_RECHECK:
+ if (getCurrentState() == mDefaultState) {
+ // Before receiving CMD_NETWORK_CONNECTED (when still in mDefaultState),
+ // requests to reevaluate are not valid: drop them.
+ return HANDLED;
+ }
String msg = "Forcing reevaluation for UID " + message.arg1;
final DnsStallDetector dsd = getDnsStallDetector();
if (dsd != null) {
diff --git a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
index 2422b77..00fe17c 100644
--- a/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
+++ b/tests/unit/src/com/android/server/connectivity/NetworkMonitorTest.java
@@ -69,6 +69,7 @@ import static org.junit.Assume.assumeTrue;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.after;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.atLeastOnce;
@@ -1206,6 +1207,32 @@ public class NetworkMonitorTest {
}
@Test
+ public void testIsCaptivePortal_NoRevalidationBeforeNetworkConnected() throws Exception {
+ assumeTrue(CaptivePortalDataShimImpl.isSupported());
+
+ final NetworkMonitor nm = makeCellMeteredNetworkMonitor();
+
+ final LinkProperties lp = makeCapportLPs();
+
+ // LinkProperties changed, but NM should not revalidate before notifyNetworkConnected
+ nm.notifyLinkPropertiesChanged(lp);
+ verify(mHttpConnection, after(100).never()).getResponseCode();
+ verify(mHttpsConnection, never()).getResponseCode();
+ verify(mCapportApiConnection, never()).getResponseCode();
+
+ setValidProbes();
+ setApiContent(mCapportApiConnection, "{'captive': true, "
+ + "'user-portal-url': '" + TEST_LOGIN_URL + "'}");
+
+ // After notifyNetworkConnected, validation uses the capport API contents
+ nm.notifyNetworkConnected(lp, CELL_METERED_CAPABILITIES);
+ verifyNetworkTested(VALIDATION_RESULT_PORTAL, 0 /* probesSucceeded */, TEST_LOGIN_URL);
+
+ verify(mHttpConnection, never()).getResponseCode();
+ verify(mCapportApiConnection).getResponseCode();
+ }
+
+ @Test
public void testIsCaptivePortal_CapportApiNotPortalNotValidated() throws Exception {
assumeTrue(CaptivePortalDataShimImpl.isSupported());
setSslException(mHttpsConnection);