Merge "Use IDnsResolver instead of INetd for resolver related binder commands"
This commit is contained in:
@@ -63,6 +63,7 @@ import android.net.ConnectionInfo;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.ICaptivePortal;
|
||||
import android.net.IConnectivityManager;
|
||||
import android.net.IDnsResolver;
|
||||
import android.net.IIpConnectivityMetrics;
|
||||
import android.net.INetd;
|
||||
import android.net.INetdEventCallback;
|
||||
@@ -294,6 +295,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
private INetworkManagementService mNMS;
|
||||
@VisibleForTesting
|
||||
protected IDnsResolver mDnsResolver;
|
||||
@VisibleForTesting
|
||||
protected INetd mNetd;
|
||||
private INetworkStatsService mStatsService;
|
||||
private INetworkPolicyManager mPolicyManager;
|
||||
@@ -525,6 +528,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
return sMagicDecoderRing.get(what, Integer.toString(what));
|
||||
}
|
||||
|
||||
private static IDnsResolver getDnsResolver() {
|
||||
return IDnsResolver.Stub
|
||||
.asInterface(ServiceManager.getService("dnsresolver"));
|
||||
}
|
||||
|
||||
/** Handler thread used for both of the handlers below. */
|
||||
@VisibleForTesting
|
||||
protected final HandlerThread mHandlerThread;
|
||||
@@ -810,13 +818,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
public ConnectivityService(Context context, INetworkManagementService netManager,
|
||||
INetworkStatsService statsService, INetworkPolicyManager policyManager) {
|
||||
this(context, netManager, statsService, policyManager, new IpConnectivityLog());
|
||||
this(context, netManager, statsService, policyManager,
|
||||
getDnsResolver(), new IpConnectivityLog());
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected ConnectivityService(Context context, INetworkManagementService netManager,
|
||||
INetworkStatsService statsService, INetworkPolicyManager policyManager,
|
||||
IpConnectivityLog logger) {
|
||||
IDnsResolver dnsresolver, IpConnectivityLog logger) {
|
||||
if (DBG) log("ConnectivityService starting up");
|
||||
|
||||
mSystemProperties = getSystemProperties();
|
||||
@@ -853,6 +862,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
mPolicyManagerInternal = checkNotNull(
|
||||
LocalServices.getService(NetworkPolicyManagerInternal.class),
|
||||
"missing NetworkPolicyManagerInternal");
|
||||
mDnsResolver = checkNotNull(dnsresolver, "missing IDnsResolver");
|
||||
mProxyTracker = makeProxyTracker();
|
||||
|
||||
mNetd = NetdService.getInstance();
|
||||
@@ -1006,7 +1016,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
mMultipathPolicyTracker = new MultipathPolicyTracker(mContext, mHandler);
|
||||
|
||||
mDnsManager = new DnsManager(mContext, mNMS, mSystemProperties);
|
||||
mDnsManager = new DnsManager(mContext, mDnsResolver, mSystemProperties);
|
||||
registerPrivateDnsSettingsCallbacks();
|
||||
}
|
||||
|
||||
@@ -3021,9 +3031,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
// NetworkFactories, so network traffic isn't interrupted for an unnecessarily
|
||||
// long time.
|
||||
try {
|
||||
mNMS.removeNetwork(nai.network.netId);
|
||||
} catch (Exception e) {
|
||||
loge("Exception removing network: " + e);
|
||||
mNetd.networkDestroy(nai.network.netId);
|
||||
} catch (RemoteException | ServiceSpecificException e) {
|
||||
loge("Exception destroying network: " + e);
|
||||
}
|
||||
mDnsManager.removeNetwork(nai.network);
|
||||
}
|
||||
@@ -5379,8 +5389,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
final NetworkCapabilities nc = new NetworkCapabilities(networkCapabilities);
|
||||
final NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(),
|
||||
new Network(reserveNetId()), new NetworkInfo(networkInfo), lp, nc, currentScore,
|
||||
mContext, mTrackerHandler, new NetworkMisc(networkMisc), this, mNetd, mNMS,
|
||||
factorySerialNumber);
|
||||
mContext, mTrackerHandler, new NetworkMisc(networkMisc), this, mNetd, mDnsResolver,
|
||||
mNMS, factorySerialNumber);
|
||||
// Make sure the network capabilities reflect what the agent info says.
|
||||
nai.networkCapabilities = mixInCapabilities(nai, nc);
|
||||
final String extraInfo = networkInfo.getExtraInfo();
|
||||
|
||||
@@ -30,13 +30,15 @@ import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.IDnsResolver;
|
||||
import android.net.LinkProperties;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkUtils;
|
||||
import android.net.Uri;
|
||||
import android.net.shared.PrivateDnsConfig;
|
||||
import android.os.Binder;
|
||||
import android.os.INetworkManagementService;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceSpecificException;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
@@ -229,7 +231,7 @@ public class DnsManager {
|
||||
|
||||
private final Context mContext;
|
||||
private final ContentResolver mContentResolver;
|
||||
private final INetworkManagementService mNMS;
|
||||
private final IDnsResolver mDnsResolver;
|
||||
private final MockableSystemProperties mSystemProperties;
|
||||
// TODO: Replace these Maps with SparseArrays.
|
||||
private final Map<Integer, PrivateDnsConfig> mPrivateDnsMap;
|
||||
@@ -243,10 +245,10 @@ public class DnsManager {
|
||||
private String mPrivateDnsMode;
|
||||
private String mPrivateDnsSpecifier;
|
||||
|
||||
public DnsManager(Context ctx, INetworkManagementService nms, MockableSystemProperties sp) {
|
||||
public DnsManager(Context ctx, IDnsResolver dnsResolver, MockableSystemProperties sp) {
|
||||
mContext = ctx;
|
||||
mContentResolver = mContext.getContentResolver();
|
||||
mNMS = nms;
|
||||
mDnsResolver = dnsResolver;
|
||||
mSystemProperties = sp;
|
||||
mPrivateDnsMap = new HashMap<>();
|
||||
mPrivateDnsValidationMap = new HashMap<>();
|
||||
@@ -260,6 +262,12 @@ public class DnsManager {
|
||||
}
|
||||
|
||||
public void removeNetwork(Network network) {
|
||||
try {
|
||||
mDnsResolver.clearResolverConfiguration(network.netId);
|
||||
} catch (RemoteException | ServiceSpecificException e) {
|
||||
Slog.e(TAG, "Error clearing DNS configuration: " + e);
|
||||
return;
|
||||
}
|
||||
mPrivateDnsMap.remove(network.netId);
|
||||
mPrivateDnsValidationMap.remove(network.netId);
|
||||
}
|
||||
@@ -344,10 +352,12 @@ public class DnsManager {
|
||||
Slog.d(TAG, String.format("setDnsConfigurationForNetwork(%d, %s, %s, %s, %s, %s)",
|
||||
netId, Arrays.toString(assignedServers), Arrays.toString(domainStrs),
|
||||
Arrays.toString(params), tlsHostname, Arrays.toString(tlsServers)));
|
||||
final String[] tlsFingerprints = new String[0];
|
||||
try {
|
||||
mNMS.setDnsConfigurationForNetwork(
|
||||
netId, assignedServers, domainStrs, params, tlsHostname, tlsServers);
|
||||
} catch (Exception e) {
|
||||
mDnsResolver.setResolverConfiguration(
|
||||
netId, assignedServers, domainStrs, params,
|
||||
tlsHostname, tlsServers, tlsFingerprints);
|
||||
} catch (RemoteException | ServiceSpecificException e) {
|
||||
Slog.e(TAG, "Error setting DNS configuration: " + e);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.server.connectivity;
|
||||
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.IDnsResolver;
|
||||
import android.net.INetd;
|
||||
import android.net.InetAddresses;
|
||||
import android.net.InterfaceConfiguration;
|
||||
@@ -65,6 +66,7 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
||||
NetworkInfo.State.SUSPENDED,
|
||||
};
|
||||
|
||||
private final IDnsResolver mDnsResolver;
|
||||
private final INetd mNetd;
|
||||
private final INetworkManagementService mNMService;
|
||||
|
||||
@@ -84,7 +86,9 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
||||
private Inet6Address mIPv6Address;
|
||||
private State mState = State.IDLE;
|
||||
|
||||
public Nat464Xlat(NetworkAgentInfo nai, INetd netd, INetworkManagementService nmService) {
|
||||
public Nat464Xlat(NetworkAgentInfo nai, INetd netd, IDnsResolver dnsResolver,
|
||||
INetworkManagementService nmService) {
|
||||
mDnsResolver = dnsResolver;
|
||||
mNetd = netd;
|
||||
mNMService = nmService;
|
||||
mNetwork = nai;
|
||||
@@ -269,7 +273,7 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
||||
|
||||
private void startPrefixDiscovery() {
|
||||
try {
|
||||
mNetd.resolverStartPrefix64Discovery(getNetId());
|
||||
mDnsResolver.startPrefix64Discovery(getNetId());
|
||||
mState = State.DISCOVERING;
|
||||
} catch (RemoteException | ServiceSpecificException e) {
|
||||
Slog.e(TAG, "Error starting prefix discovery on netId " + getNetId() + ": " + e);
|
||||
@@ -278,7 +282,7 @@ public class Nat464Xlat extends BaseNetworkObserver {
|
||||
|
||||
private void stopPrefixDiscovery() {
|
||||
try {
|
||||
mNetd.resolverStopPrefix64Discovery(getNetId());
|
||||
mDnsResolver.stopPrefix64Discovery(getNetId());
|
||||
} catch (RemoteException | ServiceSpecificException e) {
|
||||
Slog.e(TAG, "Error stopping prefix discovery on netId " + getNetId() + ": " + e);
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.server.connectivity;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.IDnsResolver;
|
||||
import android.net.INetd;
|
||||
import android.net.INetworkMonitor;
|
||||
import android.net.LinkProperties;
|
||||
@@ -255,7 +256,7 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {
|
||||
public NetworkAgentInfo(Messenger messenger, AsyncChannel ac, Network net, NetworkInfo info,
|
||||
LinkProperties lp, NetworkCapabilities nc, int score, Context context, Handler handler,
|
||||
NetworkMisc misc, ConnectivityService connService, INetd netd,
|
||||
INetworkManagementService nms, int factorySerialNumber) {
|
||||
IDnsResolver dnsResolver, INetworkManagementService nms, int factorySerialNumber) {
|
||||
this.messenger = messenger;
|
||||
asyncChannel = ac;
|
||||
network = net;
|
||||
@@ -263,7 +264,7 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> {
|
||||
linkProperties = lp;
|
||||
networkCapabilities = nc;
|
||||
currentScore = score;
|
||||
clatd = new Nat464Xlat(this, netd, nms);
|
||||
clatd = new Nat464Xlat(this, netd, dnsResolver, nms);
|
||||
mConnService = connService;
|
||||
mContext = context;
|
||||
mHandler = handler;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -29,13 +29,13 @@ import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.IDnsResolver;
|
||||
import android.net.IpPrefix;
|
||||
import android.net.LinkAddress;
|
||||
import android.net.LinkProperties;
|
||||
import android.net.Network;
|
||||
import android.net.RouteInfo;
|
||||
import android.net.shared.PrivateDnsConfig;
|
||||
import android.os.INetworkManagementService;
|
||||
import android.provider.Settings;
|
||||
import android.test.mock.MockContentResolver;
|
||||
|
||||
@@ -73,7 +73,7 @@ public class DnsManagerTest {
|
||||
MockContentResolver mContentResolver;
|
||||
|
||||
@Mock Context mCtx;
|
||||
@Mock INetworkManagementService mNMService;
|
||||
@Mock IDnsResolver mMockDnsResolver;
|
||||
@Mock MockableSystemProperties mSystemProperties;
|
||||
|
||||
@Before
|
||||
@@ -83,7 +83,7 @@ public class DnsManagerTest {
|
||||
mContentResolver.addProvider(Settings.AUTHORITY,
|
||||
new FakeSettingsProvider());
|
||||
when(mCtx.getContentResolver()).thenReturn(mContentResolver);
|
||||
mDnsManager = new DnsManager(mCtx, mNMService, mSystemProperties);
|
||||
mDnsManager = new DnsManager(mCtx, mMockDnsResolver, mSystemProperties);
|
||||
|
||||
// Clear the private DNS settings
|
||||
Settings.Global.putString(mContentResolver, PRIVATE_DNS_DEFAULT_MODE, "");
|
||||
|
||||
@@ -32,6 +32,7 @@ import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.IDnsResolver;
|
||||
import android.net.INetd;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkCapabilities;
|
||||
@@ -69,6 +70,7 @@ public class LingerMonitorTest {
|
||||
LingerMonitor mMonitor;
|
||||
|
||||
@Mock ConnectivityService mConnService;
|
||||
@Mock IDnsResolver mDnsResolver;
|
||||
@Mock INetd mNetd;
|
||||
@Mock INetworkManagementService mNMS;
|
||||
@Mock Context mCtx;
|
||||
@@ -353,7 +355,7 @@ public class LingerMonitorTest {
|
||||
caps.addCapability(0);
|
||||
caps.addTransportType(transport);
|
||||
NetworkAgentInfo nai = new NetworkAgentInfo(null, null, new Network(netId), info, null,
|
||||
caps, 50, mCtx, null, mMisc, mConnService, mNetd, mNMS,
|
||||
caps, 50, mCtx, null, mMisc, mConnService, mNetd, mDnsResolver, mNMS,
|
||||
NetworkFactory.SerialNumber.NONE);
|
||||
nai.everValidated = true;
|
||||
return nai;
|
||||
|
||||
@@ -27,6 +27,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.IDnsResolver;
|
||||
import android.net.INetd;
|
||||
import android.net.InterfaceConfiguration;
|
||||
import android.net.IpPrefix;
|
||||
@@ -63,6 +64,7 @@ public class Nat464XlatTest {
|
||||
|
||||
@Mock ConnectivityService mConnectivity;
|
||||
@Mock NetworkMisc mMisc;
|
||||
@Mock IDnsResolver mDnsResolver;
|
||||
@Mock INetd mNetd;
|
||||
@Mock INetworkManagementService mNms;
|
||||
@Mock InterfaceConfiguration mConfig;
|
||||
@@ -72,7 +74,7 @@ public class Nat464XlatTest {
|
||||
Handler mHandler;
|
||||
|
||||
Nat464Xlat makeNat464Xlat() {
|
||||
return new Nat464Xlat(mNai, mNetd, mNms) {
|
||||
return new Nat464Xlat(mNai, mNetd, mDnsResolver, mNms) {
|
||||
@Override protected int getNetId() {
|
||||
return NETID;
|
||||
}
|
||||
@@ -205,7 +207,7 @@ public class Nat464XlatTest {
|
||||
verify(mNms).unregisterObserver(eq(nat));
|
||||
assertTrue(c.getValue().getStackedLinks().isEmpty());
|
||||
assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
|
||||
verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));
|
||||
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
||||
assertIdle(nat);
|
||||
|
||||
// Stacked interface removed notification arrives and is ignored.
|
||||
@@ -331,7 +333,7 @@ public class Nat464XlatTest {
|
||||
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
||||
verify(mConnectivity, times(2)).handleUpdateLinkProperties(eq(mNai), c.capture());
|
||||
verify(mNms).unregisterObserver(eq(nat));
|
||||
verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));
|
||||
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
||||
assertTrue(c.getValue().getStackedLinks().isEmpty());
|
||||
assertFalse(c.getValue().getAllInterfaceNames().contains(STACKED_IFACE));
|
||||
assertIdle(nat);
|
||||
@@ -358,7 +360,7 @@ public class Nat464XlatTest {
|
||||
|
||||
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
||||
verify(mNms).unregisterObserver(eq(nat));
|
||||
verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));
|
||||
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
||||
assertIdle(nat);
|
||||
|
||||
// In-flight interface up notification arrives: no-op
|
||||
@@ -390,7 +392,7 @@ public class Nat464XlatTest {
|
||||
|
||||
verify(mNetd).clatdStop(eq(BASE_IFACE));
|
||||
verify(mNms).unregisterObserver(eq(nat));
|
||||
verify(mNetd).resolverStopPrefix64Discovery(eq(NETID));
|
||||
verify(mDnsResolver).stopPrefix64Discovery(eq(NETID));
|
||||
assertIdle(nat);
|
||||
|
||||
verifyNoMoreInteractions(mNetd, mNms, mConnectivity);
|
||||
|
||||
Reference in New Issue
Block a user