Merge "Update TetheringTests for new connectivity shims" into sc-dev

This commit is contained in:
Remi NGUYEN VAN
2021-06-10 13:45:12 +00:00
committed by Android (Google) Code Review
3 changed files with 50 additions and 21 deletions

View File

@@ -36,6 +36,7 @@ import android.os.Handler;
import android.os.UserHandle; import android.os.UserHandle;
import android.util.ArrayMap; import android.util.ArrayMap;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import java.util.Map; import java.util.Map;
@@ -67,10 +68,10 @@ public class TestConnectivityManager extends ConnectivityManager {
public static final boolean BROADCAST_FIRST = false; public static final boolean BROADCAST_FIRST = false;
public static final boolean CALLBACKS_FIRST = true; public static final boolean CALLBACKS_FIRST = true;
final Map<NetworkCallback, NetworkRequestInfo> mAllCallbacks = new ArrayMap<>(); final Map<NetworkCallback, NetworkCallbackInfo> mAllCallbacks = new ArrayMap<>();
// This contains the callbacks tracking the system default network, whether it's registered // This contains the callbacks tracking the system default network, whether it's registered
// with registerSystemDefaultNetworkCallback (S+) or with a custom request (R-). // with registerSystemDefaultNetworkCallback (S+) or with a custom request (R-).
final Map<NetworkCallback, NetworkRequestInfo> mTrackingDefault = new ArrayMap<>(); final Map<NetworkCallback, NetworkCallbackInfo> mTrackingDefault = new ArrayMap<>();
final Map<NetworkCallback, NetworkRequestInfo> mListening = new ArrayMap<>(); final Map<NetworkCallback, NetworkRequestInfo> mListening = new ArrayMap<>();
final Map<NetworkCallback, NetworkRequestInfo> mRequested = new ArrayMap<>(); final Map<NetworkCallback, NetworkRequestInfo> mRequested = new ArrayMap<>();
final Map<NetworkCallback, Integer> mLegacyTypeMap = new ArrayMap<>(); final Map<NetworkCallback, Integer> mLegacyTypeMap = new ArrayMap<>();
@@ -91,15 +92,21 @@ public class TestConnectivityManager extends ConnectivityManager {
mContext = ctx; mContext = ctx;
} }
class NetworkRequestInfo { static class NetworkCallbackInfo {
public final NetworkRequest request;
public final Handler handler; public final Handler handler;
NetworkRequestInfo(NetworkRequest r, Handler h) { NetworkCallbackInfo(Handler h) {
request = r;
handler = h; handler = h;
} }
} }
static class NetworkRequestInfo extends NetworkCallbackInfo {
public final NetworkRequest request;
NetworkRequestInfo(NetworkRequest r, Handler h) {
super(h);
request = r;
}
}
boolean hasNoCallbacks() { boolean hasNoCallbacks() {
return mAllCallbacks.isEmpty() return mAllCallbacks.isEmpty()
&& mTrackingDefault.isEmpty() && mTrackingDefault.isEmpty()
@@ -145,7 +152,7 @@ public class TestConnectivityManager extends ConnectivityManager {
private void sendDefaultNetworkCallbacks(TestNetworkAgent formerDefault, private void sendDefaultNetworkCallbacks(TestNetworkAgent formerDefault,
TestNetworkAgent defaultNetwork) { TestNetworkAgent defaultNetwork) {
for (NetworkCallback cb : mTrackingDefault.keySet()) { for (NetworkCallback cb : mTrackingDefault.keySet()) {
final NetworkRequestInfo nri = mTrackingDefault.get(cb); final NetworkCallbackInfo nri = mTrackingDefault.get(cb);
if (defaultNetwork != null) { if (defaultNetwork != null) {
nri.handler.post(() -> cb.onAvailable(defaultNetwork.networkId)); nri.handler.post(() -> cb.onAvailable(defaultNetwork.networkId));
nri.handler.post(() -> cb.onCapabilitiesChanged( nri.handler.post(() -> cb.onCapabilitiesChanged(
@@ -191,19 +198,27 @@ public class TestConnectivityManager extends ConnectivityManager {
@Override @Override
public void requestNetwork(NetworkRequest req, NetworkCallback cb, Handler h) { 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 // 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. // network, the other is to track system default network.
if (looksLikeDefaultRequest(req)) { if (looksLikeDefaultRequest(req)) {
assertFalse(mTrackingDefault.containsKey(cb)); registerSystemDefaultNetworkCallback(cb, h);
mTrackingDefault.put(cb, new NetworkRequestInfo(req, h));
} else { } else {
assertFalse(mAllCallbacks.containsKey(cb));
mAllCallbacks.put(cb, new NetworkRequestInfo(req, h));
assertFalse(mRequested.containsKey(cb)); assertFalse(mRequested.containsKey(cb));
mRequested.put(cb, new NetworkRequestInfo(req, h)); 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 @Override
public void requestNetwork(NetworkRequest req, NetworkCallback cb) { public void requestNetwork(NetworkRequest req, NetworkCallback cb) {
fail("Should never be called."); fail("Should never be called.");

View File

@@ -60,6 +60,7 @@ import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLED;
import static android.system.OsConstants.RT_SCOPE_UNIVERSE; import static android.system.OsConstants.RT_SCOPE_UNIVERSE;
import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; 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.inet4AddressToIntHTH;
import static com.android.net.module.util.Inet4AddressUtils.intToInet4AddressHTH; import static com.android.net.module.util.Inet4AddressUtils.intToInet4AddressHTH;
import static com.android.networkstack.tethering.OffloadHardwareInterface.OFFLOAD_HAL_VERSION_1_0; import static com.android.networkstack.tethering.OffloadHardwareInterface.OFFLOAD_HAL_VERSION_1_0;
@@ -779,10 +780,17 @@ public class TetheringTest {
} }
private void verifyDefaultNetworkRequestFiled() { private void verifyDefaultNetworkRequestFiled() {
ArgumentCaptor<NetworkRequest> reqCaptor = ArgumentCaptor.forClass(NetworkRequest.class); if (isAtLeastS()) {
verify(mCm, times(1)).requestNetwork(reqCaptor.capture(), verify(mCm, times(1)).registerSystemDefaultNetworkCallback(
any(NetworkCallback.class), any(Handler.class)); any(NetworkCallback.class), any(Handler.class));
assertTrue(TestConnectivityManager.looksLikeDefaultRequest(reqCaptor.getValue())); } else {
ArgumentCaptor<NetworkRequest> 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. // The default network request is only ever filed once.
verifyNoMoreInteractions(mCm); verifyNoMoreInteractions(mCm);
} }

View File

@@ -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_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI; 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 com.android.networkstack.tethering.UpstreamNetworkMonitor.TYPE_NONE;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@@ -172,12 +173,17 @@ public class UpstreamNetworkMonitorTest {
// Verify the fired default request matches expectation. // Verify the fired default request matches expectation.
final ArgumentCaptor<NetworkRequest> requestCaptor = final ArgumentCaptor<NetworkRequest> requestCaptor =
ArgumentCaptor.forClass(NetworkRequest.class); ArgumentCaptor.forClass(NetworkRequest.class);
verify(mCM, times(1)).requestNetwork(
requestCaptor.capture(), any(NetworkCallback.class), any(Handler.class)); if (isAtLeastS()) {
// For R- devices, Tethering will invoke this function in 2 cases, one is to verify(mCM).registerSystemDefaultNetworkCallback(any(), any());
// request mobile network, the other is to track system default network. Verify } else {
// the request is the one tracks default network. verify(mCM).requestNetwork(
assertTrue(TestConnectivityManager.looksLikeDefaultRequest(requestCaptor.getValue())); 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(); mUNM.startObserveAllNetworks();
verify(mCM, times(1)).registerNetworkCallback( verify(mCM, times(1)).registerNetworkCallback(