diff --git a/tests/cts/net/src/android/net/cts/DnsResolverTest.java b/tests/cts/net/src/android/net/cts/DnsResolverTest.java index 9ff0f2f49c..752891f07a 100644 --- a/tests/cts/net/src/android/net/cts/DnsResolverTest.java +++ b/tests/cts/net/src/android/net/cts/DnsResolverTest.java @@ -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) { diff --git a/tests/cts/net/src/android/net/cts/MultinetworkApiTest.java b/tests/cts/net/src/android/net/cts/MultinetworkApiTest.java index 17a9ca25b7..bca18f5a34 100644 --- a/tests/cts/net/src/android/net/cts/MultinetworkApiTest.java +++ b/tests/cts/net/src/android/net/cts/MultinetworkApiTest.java @@ -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; + private Context mContext; - @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(); + @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 {