Set transport types to resolver
For a given network, resolver doesn't know what transport types are.
Therefore, when a new network is created or transport types are changed
in a give network, transport types will be updated and sent by calling
setResolverConfiguration(). In the same time, if link properties or
transport types are null, setResolverConfiguration() won't be called.
The original behaviors of setResolverConfiguration() aren't changed.
Only increasing one new behavior that when a given network has transport
type change, calling setResolverConfiguration() directly and resolver
updates the transport types for that given network.
Bug: 143732914
Test: atest FrameworksNetTests
atest FrameworksNetIntegrationTests
Change-Id: I6527cde0e177ba08c886576131b35fc769c2bb53
This commit is contained in:
@@ -4907,6 +4907,29 @@ public class ConnectivityServiceTest {
|
||||
reset(mMockDnsResolver);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDnsConfigurationTransTypesPushed() throws Exception {
|
||||
// Clear any interactions that occur as a result of CS starting up.
|
||||
reset(mMockDnsResolver);
|
||||
|
||||
final NetworkRequest request = new NetworkRequest.Builder()
|
||||
.clearCapabilities().addCapability(NET_CAPABILITY_INTERNET)
|
||||
.build();
|
||||
final TestNetworkCallback callback = new TestNetworkCallback();
|
||||
mCm.registerNetworkCallback(request, callback);
|
||||
|
||||
mWiFiNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_WIFI);
|
||||
mWiFiNetworkAgent.connect(false);
|
||||
callback.expectAvailableCallbacksUnvalidated(mWiFiNetworkAgent);
|
||||
verify(mMockDnsResolver, times(1)).createNetworkCache(
|
||||
eq(mWiFiNetworkAgent.getNetwork().netId));
|
||||
verify(mMockDnsResolver, times(2)).setResolverConfiguration(
|
||||
mResolverParamsParcelCaptor.capture());
|
||||
final ResolverParamsParcel resolverParams = mResolverParamsParcelCaptor.getValue();
|
||||
assertContainsExactly(resolverParams.transportTypes, TRANSPORT_WIFI);
|
||||
reset(mMockDnsResolver);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPrivateDnsNotification() throws Exception {
|
||||
NetworkRequest request = new NetworkRequest.Builder()
|
||||
|
||||
@@ -18,22 +18,34 @@ package com.android.server.connectivity;
|
||||
|
||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
|
||||
import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
||||
import static android.provider.Settings.Global.PRIVATE_DNS_DEFAULT_MODE;
|
||||
import static android.provider.Settings.Global.PRIVATE_DNS_MODE;
|
||||
import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER;
|
||||
|
||||
import static com.android.testutils.MiscAssertsKt.assertContainsExactly;
|
||||
import static com.android.testutils.MiscAssertsKt.assertContainsStringsExactly;
|
||||
import static com.android.testutils.MiscAssertsKt.assertFieldCountEquals;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
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.ResolverOptionsParcel;
|
||||
import android.net.ResolverParamsParcel;
|
||||
import android.net.RouteInfo;
|
||||
import android.net.shared.PrivateDnsConfig;
|
||||
import android.provider.Settings;
|
||||
@@ -47,6 +59,7 @@ import com.android.internal.util.test.FakeSettingsProvider;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
@@ -66,8 +79,11 @@ public class DnsManagerTest {
|
||||
static final int TEST_NETID = 100;
|
||||
static final int TEST_NETID_ALTERNATE = 101;
|
||||
static final int TEST_NETID_UNTRACKED = 102;
|
||||
final boolean IS_DEFAULT = true;
|
||||
final boolean NOT_DEFAULT = false;
|
||||
static final int TEST_DEFAULT_SAMPLE_VALIDITY_SECONDS = 1800;
|
||||
static final int TEST_DEFAULT_SUCCESS_THRESHOLD_PERCENT = 25;
|
||||
static final int TEST_DEFAULT_MIN_SAMPLES = 8;
|
||||
static final int TEST_DEFAULT_MAX_SAMPLES = 64;
|
||||
static final int[] TEST_TRANSPORT_TYPES = {TRANSPORT_WIFI, TRANSPORT_VPN};
|
||||
|
||||
DnsManager mDnsManager;
|
||||
MockContentResolver mContentResolver;
|
||||
@@ -76,6 +92,35 @@ public class DnsManagerTest {
|
||||
@Mock IDnsResolver mMockDnsResolver;
|
||||
@Mock MockableSystemProperties mSystemProperties;
|
||||
|
||||
private void assertResolverOptionsEquals(
|
||||
@NonNull ResolverOptionsParcel actual,
|
||||
@NonNull ResolverOptionsParcel expected) {
|
||||
assertEquals(actual.hosts, expected.hosts);
|
||||
assertEquals(actual.tcMode, expected.tcMode);
|
||||
assertFieldCountEquals(2, ResolverOptionsParcel.class);
|
||||
}
|
||||
|
||||
private void assertResolverParamsEquals(@NonNull ResolverParamsParcel actual,
|
||||
@NonNull ResolverParamsParcel expected) {
|
||||
assertEquals(actual.netId, expected.netId);
|
||||
assertEquals(actual.sampleValiditySeconds, expected.sampleValiditySeconds);
|
||||
assertEquals(actual.successThreshold, expected.successThreshold);
|
||||
assertEquals(actual.minSamples, expected.minSamples);
|
||||
assertEquals(actual.maxSamples, expected.maxSamples);
|
||||
assertEquals(actual.baseTimeoutMsec, expected.baseTimeoutMsec);
|
||||
assertEquals(actual.retryCount, expected.retryCount);
|
||||
assertContainsStringsExactly(actual.servers, expected.servers);
|
||||
assertContainsStringsExactly(actual.domains, expected.domains);
|
||||
assertEquals(actual.tlsName, expected.tlsName);
|
||||
assertContainsStringsExactly(actual.tlsServers, expected.tlsServers);
|
||||
assertContainsStringsExactly(actual.tlsFingerprints, expected.tlsFingerprints);
|
||||
assertEquals(actual.caCertificate, expected.caCertificate);
|
||||
assertEquals(actual.tlsConnectTimeoutMs, expected.tlsConnectTimeoutMs);
|
||||
assertResolverOptionsEquals(actual.resolverOptions, expected.resolverOptions);
|
||||
assertContainsExactly(actual.transportTypes, expected.transportTypes);
|
||||
assertFieldCountEquals(16, ResolverParamsParcel.class);
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
@@ -103,8 +148,13 @@ public class DnsManagerTest {
|
||||
lp.addDnsServer(InetAddress.getByName("4.4.4.4"));
|
||||
|
||||
// Send a validation event that is tracked on the alternate netId
|
||||
mDnsManager.setDnsConfigurationForNetwork(TEST_NETID, lp, IS_DEFAULT);
|
||||
mDnsManager.setDnsConfigurationForNetwork(TEST_NETID_ALTERNATE, lp, NOT_DEFAULT);
|
||||
mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
|
||||
mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
|
||||
mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
|
||||
mDnsManager.flushVmDnsCache();
|
||||
mDnsManager.updateTransportsForNetwork(TEST_NETID_ALTERNATE, TEST_TRANSPORT_TYPES);
|
||||
mDnsManager.noteDnsServersForNetwork(TEST_NETID_ALTERNATE, lp);
|
||||
mDnsManager.flushVmDnsCache();
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID_ALTERNATE,
|
||||
InetAddress.parseNumericAddress("4.4.4.4"), "", true));
|
||||
@@ -135,7 +185,10 @@ public class DnsManagerTest {
|
||||
InetAddress.parseNumericAddress("6.6.6.6"),
|
||||
InetAddress.parseNumericAddress("2001:db8:66:66::1")
|
||||
}));
|
||||
mDnsManager.setDnsConfigurationForNetwork(TEST_NETID, lp, IS_DEFAULT);
|
||||
mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
|
||||
mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
|
||||
mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
|
||||
mDnsManager.flushVmDnsCache();
|
||||
fixedLp = new LinkProperties(lp);
|
||||
mDnsManager.updatePrivateDnsStatus(TEST_NETID, fixedLp);
|
||||
assertTrue(fixedLp.isPrivateDnsActive());
|
||||
@@ -168,7 +221,10 @@ public class DnsManagerTest {
|
||||
// be tracked.
|
||||
LinkProperties lp = new LinkProperties();
|
||||
lp.addDnsServer(InetAddress.getByName("3.3.3.3"));
|
||||
mDnsManager.setDnsConfigurationForNetwork(TEST_NETID, lp, IS_DEFAULT);
|
||||
mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
|
||||
mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
|
||||
mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
|
||||
mDnsManager.flushVmDnsCache();
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "", true));
|
||||
@@ -179,7 +235,10 @@ public class DnsManagerTest {
|
||||
// Validation event has untracked netId
|
||||
mDnsManager.updatePrivateDns(new Network(TEST_NETID),
|
||||
mDnsManager.getPrivateDnsConfig());
|
||||
mDnsManager.setDnsConfigurationForNetwork(TEST_NETID, lp, IS_DEFAULT);
|
||||
mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
|
||||
mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
|
||||
mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
|
||||
mDnsManager.flushVmDnsCache();
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID_UNTRACKED,
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "", true));
|
||||
@@ -225,7 +284,10 @@ public class DnsManagerTest {
|
||||
Settings.Global.putString(mContentResolver, PRIVATE_DNS_MODE, PRIVATE_DNS_MODE_OFF);
|
||||
mDnsManager.updatePrivateDns(new Network(TEST_NETID),
|
||||
mDnsManager.getPrivateDnsConfig());
|
||||
mDnsManager.setDnsConfigurationForNetwork(TEST_NETID, lp, IS_DEFAULT);
|
||||
mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
|
||||
mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
|
||||
mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
|
||||
mDnsManager.flushVmDnsCache();
|
||||
mDnsManager.updatePrivateDnsValidation(
|
||||
new DnsManager.PrivateDnsValidationUpdate(TEST_NETID,
|
||||
InetAddress.parseNumericAddress("3.3.3.3"), "", true));
|
||||
@@ -258,4 +320,38 @@ public class DnsManagerTest {
|
||||
assertEquals("strictmode.com", cfgStrict.hostname);
|
||||
assertEquals(new InetAddress[0], cfgStrict.ips);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendDnsConfiguration() throws Exception {
|
||||
reset(mMockDnsResolver);
|
||||
mDnsManager.updatePrivateDns(new Network(TEST_NETID),
|
||||
mDnsManager.getPrivateDnsConfig());
|
||||
final LinkProperties lp = new LinkProperties();
|
||||
lp.setInterfaceName(TEST_IFACENAME);
|
||||
lp.addDnsServer(InetAddress.getByName("3.3.3.3"));
|
||||
lp.addDnsServer(InetAddress.getByName("4.4.4.4"));
|
||||
mDnsManager.updateTransportsForNetwork(TEST_NETID, TEST_TRANSPORT_TYPES);
|
||||
mDnsManager.noteDnsServersForNetwork(TEST_NETID, lp);
|
||||
mDnsManager.setDefaultDnsSystemProperties(lp.getDnsServers());
|
||||
mDnsManager.flushVmDnsCache();
|
||||
|
||||
final ArgumentCaptor<ResolverParamsParcel> resolverParamsParcelCaptor =
|
||||
ArgumentCaptor.forClass(ResolverParamsParcel.class);
|
||||
verify(mMockDnsResolver, times(1)).setResolverConfiguration(
|
||||
resolverParamsParcelCaptor.capture());
|
||||
final ResolverParamsParcel actualParams = resolverParamsParcelCaptor.getValue();
|
||||
final ResolverParamsParcel expectedParams = new ResolverParamsParcel();
|
||||
expectedParams.netId = TEST_NETID;
|
||||
expectedParams.sampleValiditySeconds = TEST_DEFAULT_SAMPLE_VALIDITY_SECONDS;
|
||||
expectedParams.successThreshold = TEST_DEFAULT_SUCCESS_THRESHOLD_PERCENT;
|
||||
expectedParams.minSamples = TEST_DEFAULT_MIN_SAMPLES;
|
||||
expectedParams.maxSamples = TEST_DEFAULT_MAX_SAMPLES;
|
||||
expectedParams.servers = new String[]{"3.3.3.3", "4.4.4.4"};
|
||||
expectedParams.domains = new String[]{};
|
||||
expectedParams.tlsName = "";
|
||||
expectedParams.tlsServers = new String[]{"3.3.3.3", "4.4.4.4"};
|
||||
expectedParams.transportTypes = TEST_TRANSPORT_TYPES;
|
||||
expectedParams.resolverOptions = new ResolverOptionsParcel();
|
||||
assertResolverParamsEquals(actualParams, expectedParams);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user