Skip to content
Snippets Groups Projects
Commit cc2e593d authored by Remi NGUYEN VAN's avatar Remi NGUYEN VAN Committed by Gerrit Code Review
Browse files

Merge "Use async private DNS resolution for privdns CTS" into main

parents 505b5ce4 5450f5e3
No related branches found
No related tags found
No related merge requests found
......@@ -23,6 +23,7 @@ import static android.net.DnsResolver.TYPE_A;
import static android.net.DnsResolver.TYPE_AAAA;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.cts.util.CtsNetUtils.TestNetworkCallback;
import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY;
import static android.system.OsConstants.ETIMEDOUT;
import static com.android.testutils.DevSdkIgnoreRuleKt.SC_V2;
......@@ -59,11 +60,14 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.net.module.util.DnsPacket;
import com.android.testutils.DevSdkIgnoreRule;
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo;
import com.android.testutils.DeviceConfigRule;
import com.android.testutils.DnsResolverModuleTest;
import com.android.testutils.SkipPresubmit;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -80,6 +84,8 @@ import java.util.concurrent.TimeUnit;
@AppModeFull(reason = "WRITE_SECURE_SETTINGS permission can't be granted to instant apps")
@RunWith(AndroidJUnit4.class)
public class DnsResolverTest {
@ClassRule
public static final DeviceConfigRule DEVICE_CONFIG_CLASS_RULE = new DeviceConfigRule();
@Rule
public final DevSdkIgnoreRule ignoreRule = new DevSdkIgnoreRule();
......@@ -123,6 +129,20 @@ public class DnsResolverTest {
private TestNetworkCallback mWifiRequestCallback = null;
/**
* @see BeforeClass
*/
@BeforeClass
public static void beforeClass() throws Exception {
// Use async private DNS resolution to avoid flakes due to races applying the setting
DEVICE_CONFIG_CLASS_RULE.setConfig(NAMESPACE_CONNECTIVITY,
"networkmonitor_async_privdns_resolution", "1");
// Make sure NetworkMonitor is restarted before and after the test so the flag is applied
// and cleaned up.
maybeToggleWifiAndCell();
DEVICE_CONFIG_CLASS_RULE.runAfterNextCleanup(DnsResolverTest::maybeToggleWifiAndCell);
}
@Before
public void setUp() throws Exception {
mContext = InstrumentationRegistry.getContext();
......@@ -144,6 +164,12 @@ public class DnsResolverTest {
}
}
private static void maybeToggleWifiAndCell() throws Exception {
final CtsNetUtils utils = new CtsNetUtils(InstrumentationRegistry.getContext());
utils.reconnectWifiIfSupported();
utils.reconnectCellIfSupported();
}
private static String byteArrayToHexString(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int i = 0; i < bytes.length; ++i) {
......
......@@ -17,6 +17,12 @@
package android.net.cts;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import android.content.ContentResolver;
import android.content.Context;
......@@ -28,9 +34,21 @@ import android.net.cts.util.CtsNetUtils;
import android.platform.test.annotations.AppModeFull;
import android.system.ErrnoException;
import android.system.OsConstants;
import android.test.AndroidTestCase;
public class MultinetworkApiTest extends AndroidTestCase {
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.testutils.DeviceConfigRule;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class MultinetworkApiTest {
@Rule
public final DeviceConfigRule mDeviceConfigRule = new DeviceConfigRule();
static {
System.loadLibrary("nativemultinetwork_jni");
......@@ -58,20 +76,17 @@ public class MultinetworkApiTest extends AndroidTestCase {
private CtsNetUtils mCtsNetUtils;
private String mOldMode;
private String mOldDnsSpecifier;
@Override
protected void setUp() throws Exception {
super.setUp();
mCM = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
mCR = getContext().getContentResolver();
mCtsNetUtils = new CtsNetUtils(getContext());
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
private Context mContext;
@Before
public void setUp() throws Exception {
mContext = InstrumentationRegistry.getInstrumentation().getContext();
mCM = mContext.getSystemService(ConnectivityManager.class);
mCR = mContext.getContentResolver();
mCtsNetUtils = new CtsNetUtils(mContext);
}
@Test
public void testGetaddrinfo() throws ErrnoException {
for (Network network : mCtsNetUtils.getTestableNetworks()) {
int errno = runGetaddrinfoCheck(network.getNetworkHandle());
......@@ -82,6 +97,7 @@ public class MultinetworkApiTest extends AndroidTestCase {
}
}
@Test
@AppModeFull(reason = "CHANGE_NETWORK_STATE permission can't be granted to instant apps")
public void testSetprocnetwork() throws ErrnoException {
// Hopefully no prior test in this process space has set a default network.
......@@ -125,6 +141,7 @@ public class MultinetworkApiTest extends AndroidTestCase {
}
}
@Test
@AppModeFull(reason = "CHANGE_NETWORK_STATE permission can't be granted to instant apps")
public void testSetsocknetwork() throws ErrnoException {
for (Network network : mCtsNetUtils.getTestableNetworks()) {
......@@ -136,6 +153,7 @@ public class MultinetworkApiTest extends AndroidTestCase {
}
}
@Test
public void testNativeDatagramTransmission() throws ErrnoException {
for (Network network : mCtsNetUtils.getTestableNetworks()) {
int errno = runDatagramCheck(network.getNetworkHandle());
......@@ -146,6 +164,7 @@ public class MultinetworkApiTest extends AndroidTestCase {
}
}
@Test
public void testNoSuchNetwork() {
final Network eNoNet = new Network(54321);
assertNull(mCM.getNetworkInfo(eNoNet));
......@@ -158,6 +177,7 @@ public class MultinetworkApiTest extends AndroidTestCase {
// assertEquals(-OsConstants.ENONET, runGetaddrinfoCheck(eNoNetHandle));
}
@Test
public void testNetworkHandle() {
// Test Network -> NetworkHandle -> Network results in the same Network.
for (Network network : mCtsNetUtils.getTestableNetworks()) {
......@@ -181,6 +201,7 @@ public class MultinetworkApiTest extends AndroidTestCase {
} catch (IllegalArgumentException e) {}
}
@Test
public void testResNApi() throws Exception {
final Network[] testNetworks = mCtsNetUtils.getTestableNetworks();
......@@ -201,9 +222,21 @@ public class MultinetworkApiTest extends AndroidTestCase {
}
}
@Test
@AppModeFull(reason = "WRITE_SECURE_SETTINGS permission can't be granted to instant apps")
public void testResNApiNXDomainPrivateDns() throws InterruptedException {
public void testResNApiNXDomainPrivateDns() throws Exception {
// Use async private DNS resolution to avoid flakes due to races applying the setting
mDeviceConfigRule.setConfig(NAMESPACE_CONNECTIVITY,
"networkmonitor_async_privdns_resolution", "1");
mCtsNetUtils.reconnectWifiIfSupported();
mCtsNetUtils.reconnectCellIfSupported();
mCtsNetUtils.storePrivateDnsSetting();
mDeviceConfigRule.runAfterNextCleanup(() -> {
mCtsNetUtils.reconnectWifiIfSupported();
mCtsNetUtils.reconnectCellIfSupported();
});
// Enable private DNS strict mode and set server to dns.google before doing NxDomain test.
// b/144521720
try {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment