From c80f04858ebffafd330448e4fead4b4ed340a603 Mon Sep 17 00:00:00 2001 From: Luke Huang Date: Mon, 10 Jun 2019 14:16:41 +0800 Subject: [PATCH 1/2] Fix DnsResolverTest for instant mode add AppModeFull@ to DnsResolverTest since WRITE_SECURE_SETTINGS could not be ganted in instant mode. Bug: 134897744 Test: atest DnsResolverTest atest DnsResolverTest --instant Change-Id: I267c19af1a1c5544ca752a364335ec728a478bb2 --- tests/cts/net/src/android/net/cts/DnsResolverTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/cts/net/src/android/net/cts/DnsResolverTest.java b/tests/cts/net/src/android/net/cts/DnsResolverTest.java index e16fce09bf..1ff2090bc5 100644 --- a/tests/cts/net/src/android/net/cts/DnsResolverTest.java +++ b/tests/cts/net/src/android/net/cts/DnsResolverTest.java @@ -39,6 +39,7 @@ import android.net.ParseException; import android.os.CancellationSignal; import android.os.Handler; import android.os.Looper; +import android.platform.test.annotations.AppModeFull; import android.provider.Settings; import android.system.ErrnoException; import android.test.AndroidTestCase; @@ -53,6 +54,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; +@AppModeFull(reason = "WRITE_SECURE_SETTINGS permission can't be granted to instant apps") public class DnsResolverTest extends AndroidTestCase { private static final String TAG = "DnsResolverTest"; private static final char[] HEX_CHARS = { From 1053db1f82c989540704a2020971a7fefad5bda3 Mon Sep 17 00:00:00 2001 From: Luke Huang Date: Tue, 11 Jun 2019 15:49:08 +0800 Subject: [PATCH 2/2] Add test with inline executor for DnsResolverTest Makes general query test cases also take inline executor. The new added test case testSequentialQuery with inline executor will only pass after aosp/980686. Bug: 134310704 Test: atest DnsResolverTest atest DnsResolverTest --instant Change-Id: I135358fe45652277ed795a2f359f44f4db787c08 --- .../src/android/net/cts/DnsResolverTest.java | 115 +++++++++++++++--- 1 file changed, 101 insertions(+), 14 deletions(-) diff --git a/tests/cts/net/src/android/net/cts/DnsResolverTest.java b/tests/cts/net/src/android/net/cts/DnsResolverTest.java index 1ff2090bc5..ef8badd32a 100644 --- a/tests/cts/net/src/android/net/cts/DnsResolverTest.java +++ b/tests/cts/net/src/android/net/cts/DnsResolverTest.java @@ -80,12 +80,14 @@ public class DnsResolverTest extends AndroidTestCase { static final int TIMEOUT_MS = 12_000; static final int CANCEL_TIMEOUT_MS = 3_000; static final int CANCEL_RETRY_TIMES = 5; + static final int QUERY_TIMES = 10; static final int NXDOMAIN = 3; static final int PRIVATE_DNS_SETTING_TIMEOUT_MS = 2_000; private ContentResolver mCR; private ConnectivityManager mCM; private Executor mExecutor; + private Executor mExecutorInline; private DnsResolver mDns; private String mOldMode; @@ -97,6 +99,7 @@ public class DnsResolverTest extends AndroidTestCase { mCM = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE); mDns = DnsResolver.getInstance(); mExecutor = new Handler(Looper.getMainLooper())::post; + mExecutorInline = (Runnable r) -> r.run(); mCR = getContext().getContentResolver(); storePrivateDnsSetting(); } @@ -274,12 +277,44 @@ public class DnsResolverTest extends AndroidTestCase { } } - public void testRawQuery() throws InterruptedException { + public void testRawQuery() throws Exception { + doTestRawQuery(mExecutor); + } + + public void testRawQueryInline() throws Exception { + doTestRawQuery(mExecutorInline); + } + + public void testRawQueryBlob() throws Exception { + doTestRawQueryBlob(mExecutor); + } + + public void testRawQueryBlobInline() throws Exception { + doTestRawQueryBlob(mExecutorInline); + } + + public void testRawQueryRoot() throws Exception { + doTestRawQueryRoot(mExecutor); + } + + public void testRawQueryRootInline() throws Exception { + doTestRawQueryRoot(mExecutorInline); + } + + public void testRawQueryNXDomain() throws Exception { + doTestRawQueryNXDomain(mExecutor); + } + + public void testRawQueryNXDomainInline() throws Exception { + doTestRawQueryNXDomain(mExecutorInline); + } + + public void doTestRawQuery(Executor executor) throws InterruptedException { final String msg = "RawQuery " + TEST_DOMAIN; for (Network network : getTestableNetworks()) { final VerifyCancelCallback callback = new VerifyCancelCallback(msg); mDns.rawQuery(network, TEST_DOMAIN, CLASS_IN, TYPE_AAAA, FLAG_NO_CACHE_LOOKUP, - mExecutor, null, callback); + executor, null, callback); assertTrue(msg + " but no answer after " + TIMEOUT_MS + "ms.", callback.waitForAnswer()); @@ -287,7 +322,7 @@ public class DnsResolverTest extends AndroidTestCase { } } - public void testRawQueryBlob() throws InterruptedException { + public void doTestRawQueryBlob(Executor executor) throws InterruptedException { final byte[] blob = new byte[]{ /* Header */ 0x55, 0x66, /* Transaction ID */ @@ -305,7 +340,7 @@ public class DnsResolverTest extends AndroidTestCase { final String msg = "RawQuery blob " + byteArrayToHexString(blob); for (Network network : getTestableNetworks()) { final VerifyCancelCallback callback = new VerifyCancelCallback(msg); - mDns.rawQuery(network, blob, FLAG_NO_CACHE_LOOKUP, mExecutor, null, callback); + mDns.rawQuery(network, blob, FLAG_NO_CACHE_LOOKUP, executor, null, callback); assertTrue(msg + " but no answer after " + TIMEOUT_MS + "ms.", callback.waitForAnswer()); @@ -313,13 +348,13 @@ public class DnsResolverTest extends AndroidTestCase { } } - public void testRawQueryRoot() throws InterruptedException { + public void doTestRawQueryRoot(Executor executor) throws InterruptedException { final String dname = ""; final String msg = "RawQuery empty dname(ROOT) "; for (Network network : getTestableNetworks()) { final VerifyCancelCallback callback = new VerifyCancelCallback(msg); mDns.rawQuery(network, dname, CLASS_IN, TYPE_AAAA, FLAG_NO_CACHE_LOOKUP, - mExecutor, null, callback); + executor, null, callback); assertTrue(msg + " but no answer after " + TIMEOUT_MS + "ms.", callback.waitForAnswer()); @@ -328,13 +363,13 @@ public class DnsResolverTest extends AndroidTestCase { } } - public void testRawQueryNXDomain() throws InterruptedException { + public void doTestRawQueryNXDomain(Executor executor) throws InterruptedException { final String dname = "test1-nx.metric.gstatic.com"; final String msg = "RawQuery " + dname; for (Network network : getTestableNetworks()) { final VerifyCancelCallback callback = new VerifyCancelCallback(msg); mDns.rawQuery(network, dname, CLASS_IN, TYPE_AAAA, FLAG_NO_CACHE_LOOKUP, - mExecutor, null, callback); + executor, null, callback); assertTrue(msg + " but no answer after " + TIMEOUT_MS + "ms.", callback.waitForAnswer()); @@ -476,12 +511,44 @@ public class DnsResolverTest extends AndroidTestCase { } } - public void testQueryForInetAddress() throws InterruptedException { + public void testQueryForInetAddress() throws Exception { + doTestQueryForInetAddress(mExecutor); + } + + public void testQueryForInetAddressInline() throws Exception { + doTestQueryForInetAddress(mExecutorInline); + } + + public void testQueryForInetAddressIpv4() throws Exception { + doTestQueryForInetAddressIpv4(mExecutor); + } + + public void testQueryForInetAddressIpv4Inline() throws Exception { + doTestQueryForInetAddressIpv4(mExecutorInline); + } + + public void testQueryForInetAddressIpv6() throws Exception { + doTestQueryForInetAddressIpv6(mExecutor); + } + + public void testQueryForInetAddressIpv6Inline() throws Exception { + doTestQueryForInetAddressIpv6(mExecutorInline); + } + + public void testContinuousQueries() throws Exception { + doTestContinuousQueries(mExecutor); + } + + public void testContinuousQueriesInline() throws Exception { + doTestContinuousQueries(mExecutorInline); + } + + public void doTestQueryForInetAddress(Executor executor) throws InterruptedException { final String msg = "Test query for InetAddress " + TEST_DOMAIN; for (Network network : getTestableNetworks()) { final VerifyCancelInetAddressCallback callback = new VerifyCancelInetAddressCallback(msg, null); - mDns.query(network, TEST_DOMAIN, FLAG_NO_CACHE_LOOKUP, mExecutor, null, callback); + mDns.query(network, TEST_DOMAIN, FLAG_NO_CACHE_LOOKUP, executor, null, callback); assertTrue(msg + " but no answer after " + TIMEOUT_MS + "ms.", callback.waitForAnswer()); @@ -518,13 +585,13 @@ public class DnsResolverTest extends AndroidTestCase { } } - public void testQueryForInetAddressIpv4() throws InterruptedException { + public void doTestQueryForInetAddressIpv4(Executor executor) throws InterruptedException { final String msg = "Test query for IPv4 InetAddress " + TEST_DOMAIN; for (Network network : getTestableNetworks()) { final VerifyCancelInetAddressCallback callback = new VerifyCancelInetAddressCallback(msg, null); mDns.query(network, TEST_DOMAIN, TYPE_A, FLAG_NO_CACHE_LOOKUP, - mExecutor, null, callback); + executor, null, callback); assertTrue(msg + " but no answer after " + TIMEOUT_MS + "ms.", callback.waitForAnswer()); @@ -533,13 +600,13 @@ public class DnsResolverTest extends AndroidTestCase { } } - public void testQueryForInetAddressIpv6() throws InterruptedException { + public void doTestQueryForInetAddressIpv6(Executor executor) throws InterruptedException { final String msg = "Test query for IPv6 InetAddress " + TEST_DOMAIN; for (Network network : getTestableNetworks()) { final VerifyCancelInetAddressCallback callback = new VerifyCancelInetAddressCallback(msg, null); mDns.query(network, TEST_DOMAIN, TYPE_AAAA, FLAG_NO_CACHE_LOOKUP, - mExecutor, null, callback); + executor, null, callback); assertTrue(msg + " but no answer after " + TIMEOUT_MS + "ms.", callback.waitForAnswer()); @@ -632,4 +699,24 @@ public class DnsResolverTest extends AndroidTestCase { mCM.bindProcessToNetwork(null); } } + + public void doTestContinuousQueries(Executor executor) throws InterruptedException { + final String msg = "Test continuous " + QUERY_TIMES + " queries " + TEST_DOMAIN; + for (Network network : getTestableNetworks()) { + for (int i = 0; i < QUERY_TIMES ; ++i) { + final VerifyCancelInetAddressCallback callback = + new VerifyCancelInetAddressCallback(msg, null); + // query v6/v4 in turn + boolean queryV6 = (i % 2 == 0); + mDns.query(network, TEST_DOMAIN, queryV6 ? TYPE_AAAA : TYPE_A, + FLAG_NO_CACHE_LOOKUP, executor, null, callback); + + assertTrue(msg + " but no answer after " + TIMEOUT_MS + "ms.", + callback.waitForAnswer()); + assertTrue(msg + " returned 0 results", !callback.isAnswerEmpty()); + assertTrue(msg + " returned " + (queryV6 ? "Ipv4" : "Ipv6") + " results", + queryV6 ? !callback.hasIpv4Answer() : !callback.hasIpv6Answer()); + } + } + } }