|
|
|
|
@@ -104,6 +104,7 @@ import android.net.ConnectivityManager.PacketKeepalive;
|
|
|
|
|
import android.net.ConnectivityManager.PacketKeepaliveCallback;
|
|
|
|
|
import android.net.ConnectivityManager.TooManyRequestsException;
|
|
|
|
|
import android.net.ConnectivityThread;
|
|
|
|
|
import android.net.IDnsResolver;
|
|
|
|
|
import android.net.INetd;
|
|
|
|
|
import android.net.INetworkMonitor;
|
|
|
|
|
import android.net.INetworkMonitorCallbacks;
|
|
|
|
|
@@ -240,6 +241,7 @@ public class ConnectivityServiceTest {
|
|
|
|
|
private static final String CLAT_PREFIX = "v4-";
|
|
|
|
|
private static final String MOBILE_IFNAME = "test_rmnet_data0";
|
|
|
|
|
private static final String WIFI_IFNAME = "test_wlan0";
|
|
|
|
|
private static final String[] EMPTY_STRING_ARRAY = new String[0];
|
|
|
|
|
|
|
|
|
|
private MockContext mServiceContext;
|
|
|
|
|
private WrappedConnectivityService mService;
|
|
|
|
|
@@ -256,6 +258,7 @@ public class ConnectivityServiceTest {
|
|
|
|
|
@Mock INetworkManagementService mNetworkManagementService;
|
|
|
|
|
@Mock INetworkStatsService mStatsService;
|
|
|
|
|
@Mock INetworkPolicyManager mNpm;
|
|
|
|
|
@Mock IDnsResolver mMockDnsResolver;
|
|
|
|
|
@Mock INetd mMockNetd;
|
|
|
|
|
@Mock NetworkStackClient mNetworkStack;
|
|
|
|
|
|
|
|
|
|
@@ -1053,8 +1056,8 @@ public class ConnectivityServiceTest {
|
|
|
|
|
|
|
|
|
|
public WrappedConnectivityService(Context context, INetworkManagementService netManager,
|
|
|
|
|
INetworkStatsService statsService, INetworkPolicyManager policyManager,
|
|
|
|
|
IpConnectivityLog log, INetd netd) {
|
|
|
|
|
super(context, netManager, statsService, policyManager, log);
|
|
|
|
|
IpConnectivityLog log, INetd netd, IDnsResolver dnsResolver) {
|
|
|
|
|
super(context, netManager, statsService, policyManager, dnsResolver, log);
|
|
|
|
|
mNetd = netd;
|
|
|
|
|
mLingerDelayMs = TEST_LINGER_DELAY_MS;
|
|
|
|
|
}
|
|
|
|
|
@@ -1218,7 +1221,8 @@ public class ConnectivityServiceTest {
|
|
|
|
|
mStatsService,
|
|
|
|
|
mNpm,
|
|
|
|
|
mock(IpConnectivityLog.class),
|
|
|
|
|
mMockNetd);
|
|
|
|
|
mMockNetd,
|
|
|
|
|
mMockDnsResolver);
|
|
|
|
|
|
|
|
|
|
final ArgumentCaptor<INetworkPolicyListener> policyListenerCaptor =
|
|
|
|
|
ArgumentCaptor.forClass(INetworkPolicyListener.class);
|
|
|
|
|
@@ -4777,14 +4781,14 @@ public class ConnectivityServiceTest {
|
|
|
|
|
ArgumentCaptor<String[]> tlsServers = ArgumentCaptor.forClass(String[].class);
|
|
|
|
|
|
|
|
|
|
// Clear any interactions that occur as a result of CS starting up.
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
|
|
|
|
|
final String[] EMPTY_STRING_ARRAY = new String[0];
|
|
|
|
|
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
|
|
|
|
|
waitForIdle();
|
|
|
|
|
verify(mNetworkManagementService, never()).setDnsConfigurationForNetwork(
|
|
|
|
|
anyInt(), eq(EMPTY_STRING_ARRAY), any(), any(), eq(""), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
verifyNoMoreInteractions(mNetworkManagementService);
|
|
|
|
|
verify(mMockDnsResolver, never()).setResolverConfiguration(
|
|
|
|
|
anyInt(), eq(EMPTY_STRING_ARRAY), any(), any(), eq(""),
|
|
|
|
|
eq(EMPTY_STRING_ARRAY), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
verifyNoMoreInteractions(mMockDnsResolver);
|
|
|
|
|
|
|
|
|
|
final LinkProperties cellLp = new LinkProperties();
|
|
|
|
|
cellLp.setInterfaceName(MOBILE_IFNAME);
|
|
|
|
|
@@ -4801,28 +4805,29 @@ public class ConnectivityServiceTest {
|
|
|
|
|
mCellNetworkAgent.connect(false);
|
|
|
|
|
waitForIdle();
|
|
|
|
|
// CS tells netd about the empty DNS config for this network.
|
|
|
|
|
verify(mNetworkManagementService, atLeastOnce()).setDnsConfigurationForNetwork(
|
|
|
|
|
anyInt(), eq(EMPTY_STRING_ARRAY), any(), any(), eq(""), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
verify(mMockDnsResolver, atLeastOnce()).setResolverConfiguration(
|
|
|
|
|
anyInt(), eq(EMPTY_STRING_ARRAY), any(), any(), eq(""),
|
|
|
|
|
eq(EMPTY_STRING_ARRAY), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
|
|
|
|
|
cellLp.addDnsServer(InetAddress.getByName("2001:db8::1"));
|
|
|
|
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
|
|
|
|
waitForIdle();
|
|
|
|
|
verify(mNetworkManagementService, atLeastOnce()).setDnsConfigurationForNetwork(
|
|
|
|
|
verify(mMockDnsResolver, atLeastOnce()).setResolverConfiguration(
|
|
|
|
|
anyInt(), mStringArrayCaptor.capture(), any(), any(),
|
|
|
|
|
eq(""), tlsServers.capture());
|
|
|
|
|
eq(""), tlsServers.capture(), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
assertEquals(1, mStringArrayCaptor.getValue().length);
|
|
|
|
|
assertTrue(ArrayUtils.contains(mStringArrayCaptor.getValue(), "2001:db8::1"));
|
|
|
|
|
// Opportunistic mode.
|
|
|
|
|
assertTrue(ArrayUtils.contains(tlsServers.getValue(), "2001:db8::1"));
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
|
|
|
|
|
cellLp.addDnsServer(InetAddress.getByName("192.0.2.1"));
|
|
|
|
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
|
|
|
|
waitForIdle();
|
|
|
|
|
verify(mNetworkManagementService, atLeastOnce()).setDnsConfigurationForNetwork(
|
|
|
|
|
verify(mMockDnsResolver, atLeastOnce()).setResolverConfiguration(
|
|
|
|
|
anyInt(), mStringArrayCaptor.capture(), any(), any(),
|
|
|
|
|
eq(""), tlsServers.capture());
|
|
|
|
|
eq(""), tlsServers.capture(), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
assertEquals(2, mStringArrayCaptor.getValue().length);
|
|
|
|
|
assertTrue(ArrayUtils.containsAll(mStringArrayCaptor.getValue(),
|
|
|
|
|
new String[]{"2001:db8::1", "192.0.2.1"}));
|
|
|
|
|
@@ -4830,7 +4835,7 @@ public class ConnectivityServiceTest {
|
|
|
|
|
assertEquals(2, tlsServers.getValue().length);
|
|
|
|
|
assertTrue(ArrayUtils.containsAll(tlsServers.getValue(),
|
|
|
|
|
new String[]{"2001:db8::1", "192.0.2.1"}));
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
|
|
|
|
|
final String TLS_SPECIFIER = "tls.example.com";
|
|
|
|
|
final String TLS_SERVER6 = "2001:db8:53::53";
|
|
|
|
|
@@ -4840,22 +4845,21 @@ public class ConnectivityServiceTest {
|
|
|
|
|
new PrivateDnsConfig(TLS_SPECIFIER, TLS_IPS).toParcel());
|
|
|
|
|
|
|
|
|
|
waitForIdle();
|
|
|
|
|
verify(mNetworkManagementService, atLeastOnce()).setDnsConfigurationForNetwork(
|
|
|
|
|
verify(mMockDnsResolver, atLeastOnce()).setResolverConfiguration(
|
|
|
|
|
anyInt(), mStringArrayCaptor.capture(), any(), any(),
|
|
|
|
|
eq(TLS_SPECIFIER), eq(TLS_SERVERS));
|
|
|
|
|
eq(TLS_SPECIFIER), eq(TLS_SERVERS), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
assertEquals(2, mStringArrayCaptor.getValue().length);
|
|
|
|
|
assertTrue(ArrayUtils.containsAll(mStringArrayCaptor.getValue(),
|
|
|
|
|
new String[]{"2001:db8::1", "192.0.2.1"}));
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testPrivateDnsSettingsChange() throws Exception {
|
|
|
|
|
final String[] EMPTY_STRING_ARRAY = new String[0];
|
|
|
|
|
ArgumentCaptor<String[]> tlsServers = ArgumentCaptor.forClass(String[].class);
|
|
|
|
|
|
|
|
|
|
// Clear any interactions that occur as a result of CS starting up.
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
|
|
|
|
|
// The default on Android is opportunistic mode ("Automatic").
|
|
|
|
|
setPrivateDnsSettings(PRIVATE_DNS_MODE_OPPORTUNISTIC, "ignored.example.com");
|
|
|
|
|
@@ -4868,9 +4872,10 @@ public class ConnectivityServiceTest {
|
|
|
|
|
mCellNetworkAgent = new MockNetworkAgent(TRANSPORT_CELLULAR);
|
|
|
|
|
waitForIdle();
|
|
|
|
|
// CS tells netd about the empty DNS config for this network.
|
|
|
|
|
verify(mNetworkManagementService, never()).setDnsConfigurationForNetwork(
|
|
|
|
|
anyInt(), eq(EMPTY_STRING_ARRAY), any(), any(), eq(""), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
verifyNoMoreInteractions(mNetworkManagementService);
|
|
|
|
|
verify(mMockDnsResolver, never()).setResolverConfiguration(
|
|
|
|
|
anyInt(), eq(EMPTY_STRING_ARRAY), any(), any(), eq(""),
|
|
|
|
|
eq(EMPTY_STRING_ARRAY), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
verifyNoMoreInteractions(mMockDnsResolver);
|
|
|
|
|
|
|
|
|
|
final LinkProperties cellLp = new LinkProperties();
|
|
|
|
|
cellLp.setInterfaceName(MOBILE_IFNAME);
|
|
|
|
|
@@ -4889,9 +4894,9 @@ public class ConnectivityServiceTest {
|
|
|
|
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
|
|
|
|
mCellNetworkAgent.connect(false);
|
|
|
|
|
waitForIdle();
|
|
|
|
|
verify(mNetworkManagementService, atLeastOnce()).setDnsConfigurationForNetwork(
|
|
|
|
|
verify(mMockDnsResolver, atLeastOnce()).setResolverConfiguration(
|
|
|
|
|
anyInt(), mStringArrayCaptor.capture(), any(), any(),
|
|
|
|
|
eq(""), tlsServers.capture());
|
|
|
|
|
eq(""), tlsServers.capture(), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
assertEquals(2, mStringArrayCaptor.getValue().length);
|
|
|
|
|
assertTrue(ArrayUtils.containsAll(mStringArrayCaptor.getValue(),
|
|
|
|
|
new String[]{"2001:db8::1", "192.0.2.1"}));
|
|
|
|
|
@@ -4899,7 +4904,7 @@ public class ConnectivityServiceTest {
|
|
|
|
|
assertEquals(2, tlsServers.getValue().length);
|
|
|
|
|
assertTrue(ArrayUtils.containsAll(tlsServers.getValue(),
|
|
|
|
|
new String[]{"2001:db8::1", "192.0.2.1"}));
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
cellNetworkCallback.expectCallback(CallbackState.AVAILABLE, mCellNetworkAgent);
|
|
|
|
|
cellNetworkCallback.expectCallback(CallbackState.NETWORK_CAPABILITIES,
|
|
|
|
|
mCellNetworkAgent);
|
|
|
|
|
@@ -4911,26 +4916,26 @@ public class ConnectivityServiceTest {
|
|
|
|
|
assertNull(((LinkProperties)cbi.arg).getPrivateDnsServerName());
|
|
|
|
|
|
|
|
|
|
setPrivateDnsSettings(PRIVATE_DNS_MODE_OFF, "ignored.example.com");
|
|
|
|
|
verify(mNetworkManagementService, times(1)).setDnsConfigurationForNetwork(
|
|
|
|
|
verify(mMockDnsResolver, times(1)).setResolverConfiguration(
|
|
|
|
|
anyInt(), mStringArrayCaptor.capture(), any(), any(),
|
|
|
|
|
eq(""), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
eq(""), eq(EMPTY_STRING_ARRAY), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
assertEquals(2, mStringArrayCaptor.getValue().length);
|
|
|
|
|
assertTrue(ArrayUtils.containsAll(mStringArrayCaptor.getValue(),
|
|
|
|
|
new String[]{"2001:db8::1", "192.0.2.1"}));
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
cellNetworkCallback.assertNoCallback();
|
|
|
|
|
|
|
|
|
|
setPrivateDnsSettings(PRIVATE_DNS_MODE_OPPORTUNISTIC, "ignored.example.com");
|
|
|
|
|
verify(mNetworkManagementService, atLeastOnce()).setDnsConfigurationForNetwork(
|
|
|
|
|
verify(mMockDnsResolver, atLeastOnce()).setResolverConfiguration(
|
|
|
|
|
anyInt(), mStringArrayCaptor.capture(), any(), any(),
|
|
|
|
|
eq(""), tlsServers.capture());
|
|
|
|
|
eq(""), tlsServers.capture(), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
assertEquals(2, mStringArrayCaptor.getValue().length);
|
|
|
|
|
assertTrue(ArrayUtils.containsAll(mStringArrayCaptor.getValue(),
|
|
|
|
|
new String[]{"2001:db8::1", "192.0.2.1"}));
|
|
|
|
|
assertEquals(2, tlsServers.getValue().length);
|
|
|
|
|
assertTrue(ArrayUtils.containsAll(tlsServers.getValue(),
|
|
|
|
|
new String[]{"2001:db8::1", "192.0.2.1"}));
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
cellNetworkCallback.assertNoCallback();
|
|
|
|
|
|
|
|
|
|
setPrivateDnsSettings(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME, "strict.example.com");
|
|
|
|
|
@@ -5761,6 +5766,7 @@ public class ConnectivityServiceTest {
|
|
|
|
|
cellLp.addRoute(new RouteInfo((IpPrefix) null, myIpv6.getAddress(), MOBILE_IFNAME));
|
|
|
|
|
cellLp.addRoute(new RouteInfo(myIpv6, null, MOBILE_IFNAME));
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
when(mNetworkManagementService.getInterfaceConfig(CLAT_PREFIX + MOBILE_IFNAME))
|
|
|
|
|
.thenReturn(getClatInterfaceConfig(myIpv4));
|
|
|
|
|
|
|
|
|
|
@@ -5768,7 +5774,7 @@ public class ConnectivityServiceTest {
|
|
|
|
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
|
|
|
|
mCellNetworkAgent.connect(true);
|
|
|
|
|
networkCallback.expectAvailableThenValidatedCallbacks(mCellNetworkAgent);
|
|
|
|
|
verify(mMockNetd, times(1)).resolverStartPrefix64Discovery(cellNetId);
|
|
|
|
|
verify(mMockDnsResolver, times(1)).startPrefix64Discovery(cellNetId);
|
|
|
|
|
|
|
|
|
|
// Switching default network updates TCP buffer sizes.
|
|
|
|
|
verifyTcpBufferSizeChange(ConnectivityService.DEFAULT_TCP_BUFFER_SIZES);
|
|
|
|
|
@@ -5778,17 +5784,22 @@ public class ConnectivityServiceTest {
|
|
|
|
|
cellLp.addLinkAddress(myIpv4);
|
|
|
|
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
|
|
|
|
networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
|
|
|
|
|
verify(mMockNetd, times(1)).resolverStopPrefix64Discovery(cellNetId);
|
|
|
|
|
verify(mMockDnsResolver, times(1)).stopPrefix64Discovery(cellNetId);
|
|
|
|
|
verify(mMockDnsResolver, atLeastOnce()).setResolverConfiguration(
|
|
|
|
|
eq(cellNetId), eq(EMPTY_STRING_ARRAY), any(), any(),
|
|
|
|
|
eq(""), eq(EMPTY_STRING_ARRAY), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
|
|
|
|
|
verifyNoMoreInteractions(mMockNetd);
|
|
|
|
|
verifyNoMoreInteractions(mMockDnsResolver);
|
|
|
|
|
reset(mMockNetd);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
|
|
|
|
|
// Remove IPv4 address. Expect prefix discovery to be started again.
|
|
|
|
|
cellLp.removeLinkAddress(myIpv4);
|
|
|
|
|
cellLp.removeRoute(new RouteInfo(myIpv4, null, MOBILE_IFNAME));
|
|
|
|
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
|
|
|
|
networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
|
|
|
|
|
verify(mMockNetd, times(1)).resolverStartPrefix64Discovery(cellNetId);
|
|
|
|
|
verify(mMockDnsResolver, times(1)).startPrefix64Discovery(cellNetId);
|
|
|
|
|
|
|
|
|
|
// When NAT64 prefix discovery succeeds, LinkProperties are updated and clatd is started.
|
|
|
|
|
Nat464Xlat clat = mService.getNat464Xlat(mCellNetworkAgent);
|
|
|
|
|
@@ -5818,6 +5829,12 @@ public class ConnectivityServiceTest {
|
|
|
|
|
assertNotEquals(stackedLpsAfterChange, Collections.EMPTY_LIST);
|
|
|
|
|
assertEquals(makeClatLinkProperties(myIpv4), stackedLpsAfterChange.get(0));
|
|
|
|
|
|
|
|
|
|
verify(mMockDnsResolver, times(1)).setResolverConfiguration(
|
|
|
|
|
eq(cellNetId), mStringArrayCaptor.capture(), any(), any(),
|
|
|
|
|
eq(""), eq(EMPTY_STRING_ARRAY), eq(EMPTY_STRING_ARRAY));
|
|
|
|
|
assertEquals(1, mStringArrayCaptor.getValue().length);
|
|
|
|
|
assertTrue(ArrayUtils.contains(mStringArrayCaptor.getValue(), "8.8.8.8"));
|
|
|
|
|
|
|
|
|
|
// Add ipv4 address, expect that clatd and prefix discovery are stopped and stacked
|
|
|
|
|
// linkproperties are cleaned up.
|
|
|
|
|
cellLp.addLinkAddress(myIpv4);
|
|
|
|
|
@@ -5825,7 +5842,7 @@ public class ConnectivityServiceTest {
|
|
|
|
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
|
|
|
|
networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
|
|
|
|
|
verify(mMockNetd, times(1)).clatdStop(MOBILE_IFNAME);
|
|
|
|
|
verify(mMockNetd, times(1)).resolverStopPrefix64Discovery(cellNetId);
|
|
|
|
|
verify(mMockDnsResolver, times(1)).stopPrefix64Discovery(cellNetId);
|
|
|
|
|
|
|
|
|
|
// As soon as stop is called, the linkproperties lose the stacked interface.
|
|
|
|
|
networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
|
|
|
|
|
@@ -5840,7 +5857,9 @@ public class ConnectivityServiceTest {
|
|
|
|
|
networkCallback.assertNoCallback();
|
|
|
|
|
|
|
|
|
|
verifyNoMoreInteractions(mMockNetd);
|
|
|
|
|
verifyNoMoreInteractions(mMockDnsResolver);
|
|
|
|
|
reset(mMockNetd);
|
|
|
|
|
reset(mMockDnsResolver);
|
|
|
|
|
|
|
|
|
|
// Stopping prefix discovery causes netd to tell us that the NAT64 prefix is gone.
|
|
|
|
|
mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, false /* added */,
|
|
|
|
|
@@ -5854,7 +5873,7 @@ public class ConnectivityServiceTest {
|
|
|
|
|
cellLp.removeDnsServer(InetAddress.getByName("8.8.8.8"));
|
|
|
|
|
mCellNetworkAgent.sendLinkProperties(cellLp);
|
|
|
|
|
networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
|
|
|
|
|
verify(mMockNetd, times(1)).resolverStartPrefix64Discovery(cellNetId);
|
|
|
|
|
verify(mMockDnsResolver, times(1)).startPrefix64Discovery(cellNetId);
|
|
|
|
|
mService.mNetdEventCallback.onNat64PrefixEvent(cellNetId, true /* added */,
|
|
|
|
|
kNat64PrefixString, 96);
|
|
|
|
|
networkCallback.expectCallback(CallbackState.LINK_PROPERTIES, mCellNetworkAgent);
|
|
|
|
|
@@ -5937,6 +5956,7 @@ public class ConnectivityServiceTest {
|
|
|
|
|
|
|
|
|
|
// Disconnect cell
|
|
|
|
|
reset(mNetworkManagementService);
|
|
|
|
|
reset(mMockNetd);
|
|
|
|
|
mCellNetworkAgent.disconnect();
|
|
|
|
|
networkCallback.expectCallback(CallbackState.LOST, mCellNetworkAgent);
|
|
|
|
|
// LOST callback is triggered earlier than removing idle timer. Broadcast should also be
|
|
|
|
|
@@ -5944,8 +5964,9 @@ public class ConnectivityServiceTest {
|
|
|
|
|
// unexpectedly before network being removed.
|
|
|
|
|
waitForIdle();
|
|
|
|
|
verify(mNetworkManagementService, times(0)).removeIdleTimer(eq(MOBILE_IFNAME));
|
|
|
|
|
verify(mNetworkManagementService, times(1)).removeNetwork(
|
|
|
|
|
eq(mCellNetworkAgent.getNetwork().netId));
|
|
|
|
|
verify(mMockNetd, times(1)).networkDestroy(eq(mCellNetworkAgent.getNetwork().netId));
|
|
|
|
|
verify(mMockDnsResolver, times(1))
|
|
|
|
|
.clearResolverConfiguration(eq(mCellNetworkAgent.getNetwork().netId));
|
|
|
|
|
|
|
|
|
|
// Disconnect wifi
|
|
|
|
|
ConditionVariable cv = waitForConnectivityBroadcasts(1);
|
|
|
|
|
|