diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/TestConnectivityManager.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/TestConnectivityManager.java index 6090213516..b8389ea896 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/TestConnectivityManager.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/TestConnectivityManager.java @@ -36,6 +36,7 @@ import android.os.Handler; import android.os.UserHandle; import android.util.ArrayMap; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.util.Map; @@ -67,10 +68,10 @@ public class TestConnectivityManager extends ConnectivityManager { public static final boolean BROADCAST_FIRST = false; public static final boolean CALLBACKS_FIRST = true; - final Map mAllCallbacks = new ArrayMap<>(); + final Map mAllCallbacks = new ArrayMap<>(); // This contains the callbacks tracking the system default network, whether it's registered // with registerSystemDefaultNetworkCallback (S+) or with a custom request (R-). - final Map mTrackingDefault = new ArrayMap<>(); + final Map mTrackingDefault = new ArrayMap<>(); final Map mListening = new ArrayMap<>(); final Map mRequested = new ArrayMap<>(); final Map mLegacyTypeMap = new ArrayMap<>(); @@ -91,15 +92,21 @@ public class TestConnectivityManager extends ConnectivityManager { mContext = ctx; } - class NetworkRequestInfo { - public final NetworkRequest request; + static class NetworkCallbackInfo { public final Handler handler; - NetworkRequestInfo(NetworkRequest r, Handler h) { - request = r; + NetworkCallbackInfo(Handler h) { handler = h; } } + static class NetworkRequestInfo extends NetworkCallbackInfo { + public final NetworkRequest request; + NetworkRequestInfo(NetworkRequest r, Handler h) { + super(h); + request = r; + } + } + boolean hasNoCallbacks() { return mAllCallbacks.isEmpty() && mTrackingDefault.isEmpty() @@ -145,7 +152,7 @@ public class TestConnectivityManager extends ConnectivityManager { private void sendDefaultNetworkCallbacks(TestNetworkAgent formerDefault, TestNetworkAgent defaultNetwork) { for (NetworkCallback cb : mTrackingDefault.keySet()) { - final NetworkRequestInfo nri = mTrackingDefault.get(cb); + final NetworkCallbackInfo nri = mTrackingDefault.get(cb); if (defaultNetwork != null) { nri.handler.post(() -> cb.onAvailable(defaultNetwork.networkId)); nri.handler.post(() -> cb.onCapabilitiesChanged( @@ -191,19 +198,27 @@ public class TestConnectivityManager extends ConnectivityManager { @Override public void requestNetwork(NetworkRequest req, NetworkCallback cb, Handler h) { - assertFalse(mAllCallbacks.containsKey(cb)); - mAllCallbacks.put(cb, new NetworkRequestInfo(req, h)); // For R- devices, Tethering will invoke this function in 2 cases, one is to request mobile // network, the other is to track system default network. if (looksLikeDefaultRequest(req)) { - assertFalse(mTrackingDefault.containsKey(cb)); - mTrackingDefault.put(cb, new NetworkRequestInfo(req, h)); + registerSystemDefaultNetworkCallback(cb, h); } else { + assertFalse(mAllCallbacks.containsKey(cb)); + mAllCallbacks.put(cb, new NetworkRequestInfo(req, h)); assertFalse(mRequested.containsKey(cb)); mRequested.put(cb, new NetworkRequestInfo(req, h)); } } + @Override + public void registerSystemDefaultNetworkCallback( + @NonNull NetworkCallback cb, @NonNull Handler h) { + assertFalse(mAllCallbacks.containsKey(cb)); + mAllCallbacks.put(cb, new NetworkCallbackInfo(h)); + assertFalse(mTrackingDefault.containsKey(cb)); + mTrackingDefault.put(cb, new NetworkCallbackInfo(h)); + } + @Override public void requestNetwork(NetworkRequest req, NetworkCallback cb) { fail("Should never be called."); diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java index d277e30773..af28dd794c 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java @@ -61,6 +61,7 @@ import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLED; import static android.system.OsConstants.RT_SCOPE_UNIVERSE; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; +import static com.android.modules.utils.build.SdkLevel.isAtLeastS; import static com.android.net.module.util.Inet4AddressUtils.inet4AddressToIntHTH; import static com.android.net.module.util.Inet4AddressUtils.intToInet4AddressHTH; import static com.android.networkstack.tethering.OffloadHardwareInterface.OFFLOAD_HAL_VERSION_1_0; @@ -760,10 +761,17 @@ public class TetheringTest { } private void verifyDefaultNetworkRequestFiled() { - ArgumentCaptor reqCaptor = ArgumentCaptor.forClass(NetworkRequest.class); - verify(mCm, times(1)).requestNetwork(reqCaptor.capture(), - any(NetworkCallback.class), any(Handler.class)); - assertTrue(TestConnectivityManager.looksLikeDefaultRequest(reqCaptor.getValue())); + if (isAtLeastS()) { + verify(mCm, times(1)).registerSystemDefaultNetworkCallback( + any(NetworkCallback.class), any(Handler.class)); + } else { + ArgumentCaptor reqCaptor = ArgumentCaptor.forClass( + NetworkRequest.class); + verify(mCm, times(1)).requestNetwork(reqCaptor.capture(), + any(NetworkCallback.class), any(Handler.class)); + assertTrue(TestConnectivityManager.looksLikeDefaultRequest(reqCaptor.getValue())); + } + // The default network request is only ever filed once. verifyNoMoreInteractions(mCm); } diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/UpstreamNetworkMonitorTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/UpstreamNetworkMonitorTest.java index ce4ba85565..173679dc31 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/UpstreamNetworkMonitorTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/UpstreamNetworkMonitorTest.java @@ -24,6 +24,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; +import static com.android.modules.utils.build.SdkLevel.isAtLeastS; import static com.android.networkstack.tethering.UpstreamNetworkMonitor.TYPE_NONE; import static org.junit.Assert.assertEquals; @@ -172,12 +173,17 @@ public class UpstreamNetworkMonitorTest { // Verify the fired default request matches expectation. final ArgumentCaptor requestCaptor = ArgumentCaptor.forClass(NetworkRequest.class); - verify(mCM, times(1)).requestNetwork( - requestCaptor.capture(), any(NetworkCallback.class), any(Handler.class)); - // For R- devices, Tethering will invoke this function in 2 cases, one is to - // request mobile network, the other is to track system default network. Verify - // the request is the one tracks default network. - assertTrue(TestConnectivityManager.looksLikeDefaultRequest(requestCaptor.getValue())); + + if (isAtLeastS()) { + verify(mCM).registerSystemDefaultNetworkCallback(any(), any()); + } else { + verify(mCM).requestNetwork( + requestCaptor.capture(), any(NetworkCallback.class), any(Handler.class)); + // For R- devices, Tethering will invoke this function in 2 cases, one is to + // request mobile network, the other is to track system default network. Verify + // the request is the one tracks default network. + assertTrue(TestConnectivityManager.looksLikeDefaultRequest(requestCaptor.getValue())); + } mUNM.startObserveAllNetworks(); verify(mCM, times(1)).registerNetworkCallback(