From 9d8fd5d82a08b9dc4a9af962ebca07b23225d6cf Mon Sep 17 00:00:00 2001 From: Benedict Wong Date: Fri, 30 Apr 2021 01:14:05 -0700 Subject: [PATCH] Trigger reevaluation of all requests when mobile data state changes This change ensures mobile data state changes result in the reevaluation of all NetworkRequests; ensuring that any requests that can be fulfilled as a result of the mobile data state change start the relevant GatewayConnections Test: atest FrameworksVcnTests Change-Id: I442ca2ee0fc8b9ad962a2491ddc3818535d9e042 --- services/core/java/com/android/server/vcn/Vcn.java | 12 ++++++++++++ tests/vcn/java/com/android/server/vcn/VcnTest.java | 6 +++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/vcn/Vcn.java b/services/core/java/com/android/server/vcn/Vcn.java index cccb0968fc6ab..e1747f71d5a9f 100644 --- a/services/core/java/com/android/server/vcn/Vcn.java +++ b/services/core/java/com/android/server/vcn/Vcn.java @@ -396,6 +396,15 @@ public class Vcn extends Handler { continue; } + // This should never happen, by virtue of checking for the above check for + // pre-existing VcnGatewayConnections that satisfy a given request, but if state + // that affects the satsifying of requests changes, this is theoretically possible. + if (mVcnGatewayConnections.containsKey(gatewayConnectionConfig)) { + Slog.wtf(getLogTag(), "Attempted to bring up VcnGatewayConnection for config " + + "with existing VcnGatewayConnection"); + return; + } + final VcnGatewayConnection vcnGatewayConnection = mDeps.newVcnGatewayConnection( mVcnContext, @@ -467,6 +476,9 @@ public class Vcn extends Handler { } } } + + // Trigger re-evaluation of all requests; mobile data state impacts supported caps. + mVcnContext.getVcnNetworkProvider().resendAllRequests(mRequestListener); } } diff --git a/tests/vcn/java/com/android/server/vcn/VcnTest.java b/tests/vcn/java/com/android/server/vcn/VcnTest.java index 736fabdb1ac54..f681ee19ab126 100644 --- a/tests/vcn/java/com/android/server/vcn/VcnTest.java +++ b/tests/vcn/java/com/android/server/vcn/VcnTest.java @@ -388,8 +388,9 @@ public class VcnTest { final ContentObserver contentObserver = captor.getValue(); // Start VcnGatewayConnections + final NetworkRequestListener requestListener = verifyAndGetRequestListener(); mVcn.setMobileDataEnabled(startingToggleState); - triggerVcnRequestListeners(verifyAndGetRequestListener()); + triggerVcnRequestListeners(requestListener); final Map gateways = mVcn.getVcnGatewayConnectionConfigMap(); @@ -411,6 +412,9 @@ public class VcnTest { } } + if (startingToggleState != endingToggleState) { + verify(mVcnNetworkProvider).resendAllRequests(requestListener); + } assertEquals(endingToggleState, mVcn.isMobileDataEnabled()); }