Merge "Update TetheringTests for new connectivity shims" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
b81724602f
@@ -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<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
|
||||
// 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> mRequested = new ArrayMap<>();
|
||||
final Map<NetworkCallback, Integer> 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.");
|
||||
|
||||
@@ -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.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;
|
||||
@@ -779,10 +780,17 @@ public class TetheringTest {
|
||||
}
|
||||
|
||||
private void verifyDefaultNetworkRequestFiled() {
|
||||
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()));
|
||||
if (isAtLeastS()) {
|
||||
verify(mCm, times(1)).registerSystemDefaultNetworkCallback(
|
||||
any(NetworkCallback.class), any(Handler.class));
|
||||
} 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.
|
||||
verifyNoMoreInteractions(mCm);
|
||||
}
|
||||
|
||||
@@ -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<NetworkRequest> 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(
|
||||
|
||||
Reference in New Issue
Block a user