Merge "Don't run hotspot related tests if Soft AP is not supported"
diff --git a/tests/cts/net/Android.bp b/tests/cts/net/Android.bp
index 913380a..528171a 100644
--- a/tests/cts/net/Android.bp
+++ b/tests/cts/net/Android.bp
@@ -21,7 +21,6 @@
 
     libs: [
         "voip-common",
-        "org.apache.http.legacy",
         "android.test.base",
     ],
 
@@ -40,14 +39,11 @@
     static_libs: [
         "FrameworksNetCommonTests",
         "TestNetworkStackLib",
-        "compatibility-device-util-axt",
         "core-tests-support",
         "cts-net-utils",
         "ctstestrunner-axt",
-        "ctstestserver",
         "junit",
         "junit-params",
-        "mockwebserver",
         "net-utils-framework-common",
         "truth-prebuilt",
     ],
diff --git a/tests/cts/net/AndroidTestTemplate.xml b/tests/cts/net/AndroidTestTemplate.xml
index 4e93751..78a01e2 100644
--- a/tests/cts/net/AndroidTestTemplate.xml
+++ b/tests/cts/net/AndroidTestTemplate.xml
@@ -20,7 +20,7 @@
     <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
     <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
 
-    <option name="config-descriptor:metadata" key="mainline-param" value="CaptivePortalLoginGoogle.apk+NetworkStackGoogle.apk" />
+    <option name="config-descriptor:metadata" key="mainline-param" value="CaptivePortalLoginGoogle.apk+NetworkStackGoogle.apk+com.google.android.resolv.apex+com.google.android.tethering.apex" />
     <option name="not-shardable" value="true" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
diff --git a/tests/cts/net/TEST_MAPPING b/tests/cts/net/TEST_MAPPING
index 9167c98..7545cb0 100644
--- a/tests/cts/net/TEST_MAPPING
+++ b/tests/cts/net/TEST_MAPPING
@@ -12,7 +12,7 @@
   ],
   "mainline-presubmit": [
     {
-      "name": "CtsNetTestCasesLatestSdk[CaptivePortalLoginGoogle.apk+NetworkStackGoogle.apk]",
+      "name": "CtsNetTestCasesLatestSdk[CaptivePortalLoginGoogle.apk+NetworkStackGoogle.apk+com.google.android.resolv.apex+com.google.android.tethering.apex]",
       "options": [
         {
           "exclude-annotation": "com.android.testutils.SkipPresubmit"
diff --git a/tests/cts/net/native/dns/Android.bp b/tests/cts/net/native/dns/Android.bp
index 1704a2b..6defd35 100644
--- a/tests/cts/net/native/dns/Android.bp
+++ b/tests/cts/net/native/dns/Android.bp
@@ -35,6 +35,7 @@
     },
     test_suites: [
         "cts",
+        "general-tests",
         "mts",
     ],
 }
diff --git a/tests/cts/net/native/qtaguid/Android.bp b/tests/cts/net/native/qtaguid/Android.bp
index 7c6e19f..4861651 100644
--- a/tests/cts/net/native/qtaguid/Android.bp
+++ b/tests/cts/net/native/qtaguid/Android.bp
@@ -42,6 +42,7 @@
     // Tag this module as a cts test artifact
     test_suites: [
         "cts",
+        "general-tests",
     ],
 
     cflags: [
diff --git a/tests/cts/net/src/android/net/http/cts/ApacheHttpClientTest.java b/tests/cts/net/src/android/net/http/cts/ApacheHttpClientTest.java
deleted file mode 100644
index 8d7dff0..0000000
--- a/tests/cts/net/src/android/net/http/cts/ApacheHttpClientTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.net.http.cts;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.DefaultHttpClient;
-
-import android.net.Uri;
-import android.platform.test.annotations.AppModeFull;
-import android.test.AndroidTestCase;
-import android.webkit.cts.CtsTestServer;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-@AppModeFull(reason = "Socket cannot bind in instant app mode")
-public class ApacheHttpClientTest extends AndroidTestCase {
-
-    private static final int NUM_DOWNLOADS = 20;
-
-    private static final int SMALL_DOWNLOAD_SIZE = 100 * 1024;
-
-    private CtsTestServer mWebServer;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mWebServer = new CtsTestServer(mContext);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-        mWebServer.shutdown();
-    }
-
-    public void testExecute() throws Exception {
-        downloadMultipleFiles();
-    }
-
-    private void downloadMultipleFiles() throws ClientProtocolException, IOException {
-        List<HttpResponse> responses = new ArrayList<HttpResponse>();
-        for (int i = 0; i < NUM_DOWNLOADS; i++) {
-            HttpClient httpClient = new DefaultHttpClient();
-            HttpGet request = new HttpGet(getSmallDownloadUrl(i).toString());
-            HttpResponse response = httpClient.execute(request);
-            responses.add(response);
-        }
-
-        for (int i = 0; i < NUM_DOWNLOADS; i++) {
-            assertDownloadResponse("Download " + i, SMALL_DOWNLOAD_SIZE, responses.get(i));
-        }
-    }
-
-    private Uri getSmallDownloadUrl(int index) {
-        return Uri.parse(mWebServer.getTestDownloadUrl("cts-small-download-" + index,
-                SMALL_DOWNLOAD_SIZE));
-    }
-
-    private void assertDownloadResponse(String message, int expectedNumBytes, HttpResponse response)
-            throws IllegalStateException, IOException {
-        byte[] buffer = new byte[4096];
-        assertEquals(200, response.getStatusLine().getStatusCode());
-
-        InputStream stream = response.getEntity().getContent();
-        int numBytes = 0;
-        while (true) {
-            int bytesRead = stream.read(buffer);
-            if (bytesRead < 0) {
-                break;
-            } else {
-                numBytes += bytesRead;
-            }
-        }
-        assertEquals(message, expectedNumBytes, numBytes);
-    }
-}
diff --git a/tests/cts/net/src/android/net/http/cts/HttpResponseCacheTest.java b/tests/cts/net/src/android/net/http/cts/HttpResponseCacheTest.java
deleted file mode 100644
index 354954e..0000000
--- a/tests/cts/net/src/android/net/http/cts/HttpResponseCacheTest.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.http.cts;
-
-import com.google.mockwebserver.MockResponse;
-import com.google.mockwebserver.MockWebServer;
-
-import junit.framework.TestCase;
-
-import android.net.http.HttpResponseCache;
-import android.platform.test.annotations.AppModeFull;
-
-import com.android.compatibility.common.util.FileUtils;
-
-import java.io.File;
-import java.io.InputStream;
-import java.net.CacheRequest;
-import java.net.CacheResponse;
-import java.net.ResponseCache;
-import java.net.URI;
-import java.net.URLConnection;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-public final class HttpResponseCacheTest extends TestCase {
-
-    private File cacheDir;
-    private MockWebServer server;
-
-    @Override public void setUp() throws Exception {
-        super.setUp();
-        server = new MockWebServer();
-        String tmp = System.getProperty("java.io.tmpdir");
-        cacheDir = new File(tmp, "HttpCache-" + UUID.randomUUID());
-        cacheDir.mkdirs();
-        // Make the cache directory read / writable.
-        FileUtils.setPermissions(cacheDir.getPath(), 0777);
-    }
-
-    @Override protected void tearDown() throws Exception {
-        ResponseCache.setDefault(null);
-        server.shutdown();
-        super.tearDown();
-    }
-
-    public void testInstall() throws Exception {
-        HttpResponseCache installed = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
-        assertNotNull(installed);
-        assertSame(installed, ResponseCache.getDefault());
-        assertSame(installed, HttpResponseCache.getDefault());
-    }
-
-    public void testSecondEquivalentInstallDoesNothing() throws Exception {
-        HttpResponseCache first = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
-        HttpResponseCache another = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
-        assertSame(first, another);
-    }
-
-    public void testInstallClosesPreviouslyInstalled() throws Exception {
-        HttpResponseCache first = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
-        initializeCache(first);
-
-        HttpResponseCache another = HttpResponseCache.install(cacheDir, 8 * 1024 * 1024);
-        initializeCache(first);
-
-        assertNotSame(first, another);
-        try {
-            first.flush();
-            fail();
-        } catch (IllegalStateException expected) {
-        }
-    }
-
-    public void testGetInstalledWithWrongTypeInstalled() {
-        ResponseCache.setDefault(new ResponseCache() {
-            @Override public CacheResponse get(URI uri, String requestMethod,
-                    Map<String, List<String>> requestHeaders) {
-                return null;
-            }
-            @Override public CacheRequest put(URI uri, URLConnection connection) {
-                return null;
-            }
-        });
-        assertNull(HttpResponseCache.getInstalled());
-    }
-
-    public void testCloseCloses() throws Exception {
-        HttpResponseCache cache = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
-        initializeCache(cache);
-
-        cache.close();
-        try {
-            cache.flush();
-            fail();
-        } catch (IllegalStateException expected) {
-        }
-    }
-
-    public void testCloseUninstalls() throws Exception {
-        HttpResponseCache cache = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
-        cache.close();
-        assertNull(ResponseCache.getDefault());
-    }
-
-    public void testDeleteUninstalls() throws Exception {
-        HttpResponseCache cache = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
-        cache.delete();
-        assertNull(ResponseCache.getDefault());
-    }
-
-    /**
-     * Make sure that statistics tracking are wired all the way through the
-     * wrapper class. http://code.google.com/p/android/issues/detail?id=25418
-     */
-    @AppModeFull(reason = "Socket cannot bind in instant app mode")
-    public void testStatisticsTracking() throws Exception {
-        HttpResponseCache cache = HttpResponseCache.install(cacheDir, 10 * 1024 * 1024);
-
-        server.enqueue(new MockResponse()
-                .addHeader("Cache-Control: max-age=60")
-                .setBody("A"));
-        server.play();
-
-        URLConnection c1 = server.getUrl("/").openConnection();
-        InputStream inputStream1 = c1.getInputStream();
-        assertEquals('A', inputStream1.read());
-        inputStream1.close();
-
-        assertEquals(1, cache.getRequestCount());
-        assertEquals(1, cache.getNetworkCount());
-        assertEquals(0, cache.getHitCount());
-
-        URLConnection c2 = server.getUrl("/").openConnection();
-        assertEquals('A', c2.getInputStream().read());
-
-        URLConnection c3 = server.getUrl("/").openConnection();
-        assertEquals('A', c3.getInputStream().read());
-        assertEquals(3, cache.getRequestCount());
-        assertEquals(1, cache.getNetworkCount());
-        assertEquals(2, cache.getHitCount());
-    }
-
-    private void initializeCache(HttpResponseCache cache) {
-        // Ensure the cache is initialized, otherwise various methods are no-ops.
-        cache.size();
-    }
-}
diff --git a/tests/cts/net/src/android/net/http/cts/SslCertificateTest.java b/tests/cts/net/src/android/net/http/cts/SslCertificateTest.java
deleted file mode 100644
index 95f415c..0000000
--- a/tests/cts/net/src/android/net/http/cts/SslCertificateTest.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.http.cts;
-
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.PublicKey;
-import java.security.SignatureException;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.X509Certificate;
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.Set;
-
-import junit.framework.TestCase;
-import android.net.http.SslCertificate;
-import android.net.http.SslCertificate.DName;
-import android.os.Bundle;
-
-public class SslCertificateTest extends TestCase {
-
-    public void testConstructor() {
-        // new the SslCertificate instance
-        String date = DateFormat.getInstance().format(new Date());
-        new SslCertificate("c=129", "e=weji", date, date);
-
-        // new the SslCertificate instance
-        new SslCertificate(new MockX509Certificate());
-
-    }
-
-    class MockX509Certificate extends X509Certificate {
-
-        @Override
-        public void checkValidity() throws CertificateExpiredException,
-                CertificateNotYetValidException {
-        }
-
-        @Override
-        public void checkValidity(Date date) throws CertificateExpiredException,
-                CertificateNotYetValidException {
-        }
-
-        @Override
-        public int getBasicConstraints() {
-            return 0;
-        }
-
-        @Override
-        public Principal getIssuerDN() {
-            return new MockPrincipal();
-        }
-
-        @Override
-        public boolean[] getIssuerUniqueID() {
-            return null;
-        }
-
-        @Override
-        public boolean[] getKeyUsage() {
-            return null;
-        }
-
-        @Override
-        public Date getNotAfter() {
-            return new Date(System.currentTimeMillis());
-        }
-
-        @Override
-        public Date getNotBefore() {
-            return new Date(System.currentTimeMillis() - 1000);
-        }
-
-        @Override
-        public BigInteger getSerialNumber() {
-            return null;
-        }
-
-        @Override
-        public String getSigAlgName() {
-            return null;
-        }
-
-        @Override
-        public String getSigAlgOID() {
-            return null;
-        }
-
-        @Override
-        public byte[] getSigAlgParams() {
-            return null;
-        }
-
-        @Override
-        public byte[] getSignature() {
-            return null;
-        }
-
-        @Override
-        public Principal getSubjectDN() {
-            return new MockPrincipal();
-        }
-
-        class MockPrincipal implements Principal {
-            public String getName() {
-                return null;
-            }
-        }
-        @Override
-        public boolean[] getSubjectUniqueID() {
-            return null;
-        }
-
-        @Override
-        public byte[] getTBSCertificate() throws CertificateEncodingException {
-            return null;
-        }
-
-        @Override
-        public int getVersion() {
-            return 0;
-        }
-
-        @Override
-        public byte[] getEncoded() throws CertificateEncodingException {
-            return null;
-        }
-
-        @Override
-        public PublicKey getPublicKey() {
-            return null;
-        }
-
-        @Override
-        public String toString() {
-            return null;
-        }
-
-        @Override
-        public void verify(PublicKey key) throws CertificateException, NoSuchAlgorithmException,
-                InvalidKeyException, NoSuchProviderException, SignatureException {
-        }
-
-        @Override
-        public void verify(PublicKey key, String sigProvider) throws CertificateException,
-                NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException,
-                SignatureException {
-        }
-
-        public Set<String> getCriticalExtensionOIDs() {
-            return null;
-        }
-
-        public byte[] getExtensionValue(String oid) {
-            return null;
-        }
-
-        public Set<String> getNonCriticalExtensionOIDs() {
-            return null;
-        }
-
-        public boolean hasUnsupportedCriticalExtension() {
-            return false;
-        }
-    }
-
-    public void testState() {
-        // set the expected value
-
-        Date date1 = new Date(System.currentTimeMillis() - 1000);
-        Date date2 = new Date(System.currentTimeMillis());
-        SslCertificate ssl = new SslCertificate("c=129", "e=weji", date1, date2);
-        Bundle saved = SslCertificate.saveState(ssl);
-        assertTrue(saved.size() == 4);
-
-        assertNotNull(saved.getString("issued-to"));
-        assertNotNull(saved.getString("issued-by"));
-        assertNotNull(saved.getString("valid-not-before"));
-        assertNotNull(saved.getString("valid-not-after"));
-        assertNull(SslCertificate.saveState(null));
-
-        SslCertificate restored = SslCertificate.restoreState(saved);
-        assertEquals(ssl.getValidNotAfter(), restored.getValidNotAfter());
-        assertEquals(ssl.getValidNotBefore(), restored.getValidNotBefore());
-    }
-
-    public void testSslCertificate() {
-
-        final String TO = "c=ccc,o=testOName,ou=testUName,cn=testCName";
-        final String BY = "e=aeei,c=adb,o=testOName,ou=testUName,cn=testCName";
-        // new the SslCertificate instance
-        Date date1 = new Date(System.currentTimeMillis() - 1000);
-        Date date2 = new Date(System.currentTimeMillis());
-        SslCertificate ssl = new SslCertificate(TO, BY, date1, date2);
-        DName issuedTo = ssl.getIssuedTo();
-        DName issuedBy = ssl.getIssuedBy();
-
-        assertEquals("testCName", issuedTo.getCName());
-        assertEquals(TO, issuedTo.getDName());
-        assertEquals("testOName", issuedTo.getOName());
-        assertEquals("testUName", issuedTo.getUName());
-
-        assertEquals("testCName", issuedBy.getCName());
-        assertEquals(BY, issuedBy.getDName());
-        assertEquals("testOName", issuedBy.getOName());
-        assertEquals("testUName", issuedBy.getUName());
-
-        assertEquals(date1, ssl.getValidNotBeforeDate());
-        assertEquals(date2, ssl.getValidNotAfterDate());
-        final String EXPECTED = "Issued to: c=ccc,o=testOName,ou=testUName,cn=testCName;\n"
-            + "Issued by: e=aeei,c=adb,o=testOName,ou=testUName,cn=testCName;\n";
-        assertEquals(EXPECTED, ssl.toString());
-        assertNull(ssl.getX509Certificate());
-    }
-
-    public void testGetX509Certificate() {
-        final String TO = "c=ccc,o=testOName,ou=testUName,cn=testCName";
-        final String BY = "e=aeei,c=adb,o=testOName,ou=testUName,cn=testCName";
-        Date validNotBefore = new Date(System.currentTimeMillis() - 1000);
-        Date validNotAfter = new Date(System.currentTimeMillis());
-        SslCertificate ssl = new SslCertificate(TO, BY, validNotBefore, validNotAfter);
-        assertNull(ssl.getX509Certificate());
-
-        X509Certificate cert = new MockX509Certificate();
-        ssl = new SslCertificate(cert);
-        assertSame(cert, ssl.getX509Certificate());
-    }
-}
diff --git a/tests/cts/net/src/android/net/http/cts/SslCertificate_DNameTest.java b/tests/cts/net/src/android/net/http/cts/SslCertificate_DNameTest.java
deleted file mode 100644
index b0c71e8..0000000
--- a/tests/cts/net/src/android/net/http/cts/SslCertificate_DNameTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.http.cts;
-
-import java.text.DateFormat;
-import java.util.Date;
-
-import junit.framework.TestCase;
-import android.net.http.SslCertificate;
-import android.net.http.SslCertificate.DName;
-
-public class SslCertificate_DNameTest extends TestCase {
-
-    public void testDName() {
-        final String TO = "c=ccc,o=testOName,ou=testUName,cn=testCName";
-        final String BY = "e=aeei,c=adb,o=testOName,ou=testUName,cn=testCName";
-        // new the SslCertificate instance
-        Date date1 = new Date(System.currentTimeMillis() - 1000);
-        Date date2 = new Date(System.currentTimeMillis());
-        SslCertificate ssl = new SslCertificate(TO, BY, DateFormat.getInstance().format(
-                date1), DateFormat.getInstance().format(date2));
-        DName issuedTo = ssl.getIssuedTo();
-
-        assertNotNull(issuedTo);
-
-        assertEquals("testCName", issuedTo.getCName());
-        assertEquals(TO, issuedTo.getDName());
-        assertEquals("testOName", issuedTo.getOName());
-        assertEquals("testUName", issuedTo.getUName());
-    }
-
-}
diff --git a/tests/cts/net/src/android/net/http/cts/SslErrorTest.java b/tests/cts/net/src/android/net/http/cts/SslErrorTest.java
deleted file mode 100644
index 0058c90..0000000
--- a/tests/cts/net/src/android/net/http/cts/SslErrorTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.http.cts;
-
-import android.net.http.SslCertificate;
-import android.net.http.SslError;
-
-
-import java.util.Date;
-
-import junit.framework.TestCase;
-
-public class SslErrorTest extends TestCase {
-    private SslCertificate mCertificate;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mCertificate = new SslCertificate("foo", "bar", new Date(42), new Date(43));
-    }
-
-    public void testHasError() {
-        SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
-        assertTrue(error.hasError(SslError.SSL_EXPIRED));
-        assertFalse(error.hasError(SslError.SSL_UNTRUSTED));
-    }
-
-    public void testAddError() {
-        SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
-        assertFalse(error.hasError(SslError.SSL_UNTRUSTED));
-        error.addError(SslError.SSL_UNTRUSTED);
-        assertTrue(error.hasError(SslError.SSL_UNTRUSTED));
-    }
-
-    public void testAddErrorIgnoresInvalidValues() {
-        SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
-        error.addError(42);
-        assertFalse(error.hasError(42));
-    }
-
-    public void testConstructorIgnoresInvalidValues() {
-        SslError error = new SslError(42, mCertificate);
-        assertFalse(error.hasError(42));
-    }
-
-    public void testGetPrimaryError() {
-        SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
-        error.addError(SslError.SSL_UNTRUSTED);
-        assertEquals(error.getPrimaryError(), SslError.SSL_UNTRUSTED);
-    }
-
-    public void testGetPrimaryErrorWithEmptySet() {
-        SslError error = new SslError(42, mCertificate);
-        assertEquals(error.getPrimaryError(), -1);
-    }
-
-    public void testGetUrl() {
-        SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate, "foo");
-        assertEquals(error.getUrl(), "foo");
-    }
-
-    public void testGetUrlWithDeprecatedConstructor() {
-        SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
-        assertEquals(error.getUrl(), "");
-    }
-
-    public void testGetCertificate() {
-        SslError error = new SslError(SslError.SSL_EXPIRED, mCertificate);
-        assertEquals(mCertificate, error.getCertificate());
-    }
-}
diff --git a/tests/cts/net/src/android/net/http/cts/X509TrustManagerExtensionsTest.java b/tests/cts/net/src/android/net/http/cts/X509TrustManagerExtensionsTest.java
deleted file mode 100644
index 99de614..0000000
--- a/tests/cts/net/src/android/net/http/cts/X509TrustManagerExtensionsTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.http.cts;
-
-import android.net.http.X509TrustManagerExtensions;
-
-import java.security.KeyStore;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.X509TrustManager;
-
-import junit.framework.TestCase;
-
-public class X509TrustManagerExtensionsTest extends TestCase {
-
-    private static X509TrustManager getFirstX509TrustManager(TrustManagerFactory tmf)
-            throws Exception {
-        for (TrustManager trustManager : tmf.getTrustManagers()) {
-             if (trustManager instanceof X509TrustManager) {
-                 return (X509TrustManager) trustManager;
-             }
-        }
-        fail("Unable to find X509TrustManager");
-        return null;
-    }
-
-    public void testIsUserAddedCertificateDefaults() throws Exception {
-        final TrustManagerFactory tmf =
-                TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
-        tmf.init((KeyStore) null);
-        X509TrustManager tm = getFirstX509TrustManager(tmf);
-        X509TrustManagerExtensions xtm = new X509TrustManagerExtensions(tm);
-        // Verify that all the default system provided CAs are not marked as user added.
-        for (Certificate cert : tm.getAcceptedIssuers()) {
-            assertFalse(xtm.isUserAddedCertificate((X509Certificate) cert));
-        }
-    }
-}
diff --git a/tests/cts/net/src/org/apache/http/conn/ssl/cts/AbstractVerifierTest.java b/tests/cts/net/src/org/apache/http/conn/ssl/cts/AbstractVerifierTest.java
deleted file mode 100644
index 5e2a55e..0000000
--- a/tests/cts/net/src/org/apache/http/conn/ssl/cts/AbstractVerifierTest.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.http.conn.ssl.cts;
-
-import javax.security.auth.x500.X500Principal;
-import junit.framework.TestCase;
-
-import org.apache.http.conn.ssl.AbstractVerifier;
-
-import java.lang.Override;
-import java.math.BigInteger;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.Principal;
-import java.security.PublicKey;
-import java.security.SignatureException;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.X509Certificate;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.Set;
-
-/**
- * See also {@link libcore.javax.security.auth.x500.X500PrincipalTest} as it shows some cases
- * we are not checking as they are not allowed by the X500 principal in the first place.
- */
-public final class AbstractVerifierTest extends TestCase {
-
-    public void testGetCns() {
-        assertCns("");
-        assertCns("ou=xxx");
-        assertCns("ou=xxx,cn=xxx", "xxx");
-        assertCns("ou=xxx+cn=yyy,cn=zzz+cn=abc", "yyy", "zzz", "abc");
-        assertCns("cn=a,cn=b", "a", "b");
-        assertCns("cn=a   c,cn=b", "a   c", "b");
-        assertCns("cn=a   ,cn=b", "a", "b");
-        assertCns("cn=Cc,cn=Bb,cn=Aa", "Cc", "Bb", "Aa");
-        assertCns("cn=imap.gmail.com", "imap.gmail.com");
-        assertCns("l=\"abcn=a,b\", cn=c", "c");
-        assertCns("l=\"abcn=a,b\", cn=c", "c");
-        assertCns("l=\"abcn=a,b\", cn= c", "c");
-        assertCns("cn=<", "<");
-        assertCns("cn=>", ">");
-        assertCns("cn= >", ">");
-        assertCns("cn=a b", "a b");
-        assertCns("cn   =a b", "a b");
-        assertCns("Cn=a b", "a b");
-        assertCns("cN=a b", "a b");
-        assertCns("CN=a b", "a b");
-        assertCns("cn=a#b", "a#b");
-        assertCns("cn=#130161", "a");
-        assertCns("l=q\t+cn=p", "p");
-        assertCns("l=q\n+cn=p", "p");
-        assertCns("l=q\n,cn=p", "p");
-        assertCns("l=,cn=p", "p");
-        assertCns("l=\tq\n,cn=\tp", "\tp");
-    }
-
-    /** A cn=, generates an empty value, unless it's at the very end */
-    public void testEmptyValues() {
-        assertCns("l=,cn=+cn=q", "", "q");
-        assertCns("l=,cn=,cn=q", "", "q");
-        assertCns("l=,cn=");
-        assertCns("l=,cn=q,cn=   ", "q");
-        assertCns("l=,cn=q  ,cn=   ", "q");
-        assertCns("l=,cn=\"\"");
-        assertCns("l=,cn=\"  \",cn=\"  \"", "  ", "  ");
-        assertCns("l=,cn=  ,cn=  ","");
-        assertCns("l=,cn=,cn=  ,cn=  ", "", "");
-    }
-
-
-    public void testGetCns_escapedChars() {
-        assertCns("cn=\\,", ",");
-        assertCns("cn=\\#", "#");
-        assertCns("cn=\\+", "+");
-        assertCns("cn=\\\"", "\"");
-        assertCns("cn=\\\\", "\\");
-        assertCns("cn=\\<", "<");
-        assertCns("cn=\\>", ">");
-        assertCns("cn=\\;", ";");
-        assertCns("cn=\\+", "+");
-        assertCns("cn=\"\\+\"", "+");
-        assertCns("cn=\"\\,\"", ",");
-        assertCns("cn= a =", "a =");
-        assertCns("cn==", "=");
-    }
-
-    public void testGetCns_whitespace() {
-        assertCns("cn= p", "p");
-        assertCns("cn=\np", "p");
-        assertCns("cn=\tp", "\tp");
-    }
-
-    public void testGetCnsWithOid() {
-        assertCns("2.5.4.3=a,ou=xxx", "a");
-        assertCns("2.5.4.3=\" a \",ou=xxx", " a ");
-        assertCns("2.5.5.3=a,ou=xxx,cn=b", "b");
-    }
-
-    public void testGetCnsWithQuotedStrings() {
-        assertCns("cn=\"\\\" a ,=<>#;\"", "\" a ,=<>#;");
-        assertCns("cn=abc\\,def", "abc,def");
-        assertCns("cn=\"\\\" a ,\\=<>\\#;\"", "\" a ,=<>#;");
-    }
-
-    public void testGetCnsWithUtf8() {
-        assertCns("cn=\"Lu\\C4\\8Di\\C4\\87\"", "\u004c\u0075\u010d\u0069\u0107");
-        assertCns("cn=Lu\\C4\\8Di\\C4\\87", "\u004c\u0075\u010d\u0069\u0107");
-        assertCns("cn=Lu\\C4\\8di\\c4\\87", "\u004c\u0075\u010d\u0069\u0107");
-        assertCns("cn=\"Lu\\C4\\8di\\c4\\87\"", "\u004c\u0075\u010d\u0069\u0107");
-        assertCns("cn=\u004c\u0075\u010d\u0069\u0107", "\u004c\u0075\u010d\u0069\u0107");
-        // \63=c
-        assertExceptionInPrincipal("\\63n=ab");
-        assertExceptionInPrincipal("cn=\\a");
-    }
-
-    public void testGetCnsWithWhitespace() {
-        assertCns("ou=a, cn=  a  b  ,o=x", "a  b");
-        assertCns("cn=\"  a  b  \" ,o=x", "  a  b  ");
-    }
-
-    private static void assertCns(String dn, String... expected) {
-        String[] result = AbstractVerifier.getCNs(createStubCertificate(dn));
-        if (expected.length == 0) {
-            assertNull(result);
-        } else {
-            assertNotNull(dn, result);
-            assertEquals(dn, Arrays.asList(expected), Arrays.asList(result));
-        }
-    }
-
-    private static void assertExceptionInPrincipal(String dn) {
-        try {
-            X500Principal principal = new X500Principal(dn);
-            fail("Expected " + IllegalArgumentException.class.getName()
-                    + " because of incorrect input name");
-        } catch (IllegalArgumentException e) {
-            // Expected.
-        }
-    }
-
-    private static X509Certificate createStubCertificate(final String subjectName) {
-        return new X509Certificate() {
-            @Override
-            public X500Principal getSubjectX500Principal() {
-                return new X500Principal(subjectName);
-            }
-
-            @Override
-            public Set<String> getCriticalExtensionOIDs() {
-                return null;
-            }
-
-            @Override
-            public byte[] getExtensionValue(String oid) {
-                return new byte[0];
-            }
-
-            @Override
-            public Set<String> getNonCriticalExtensionOIDs() {
-                return null;
-            }
-
-            @Override
-            public boolean hasUnsupportedCriticalExtension() {
-                return false;
-            }
-
-            @Override
-            public byte[] getEncoded() throws CertificateEncodingException {
-                return new byte[0];
-            }
-
-            @Override
-            public void verify(PublicKey key)
-                    throws CertificateException, NoSuchAlgorithmException, InvalidKeyException,
-                    NoSuchProviderException, SignatureException {
-
-            }
-
-            @Override
-            public void verify(PublicKey key, String sigProvider)
-                    throws CertificateException, NoSuchAlgorithmException, InvalidKeyException,
-                    NoSuchProviderException, SignatureException {
-
-            }
-
-            @Override
-            public String toString() {
-                return null;
-            }
-
-            @Override
-            public PublicKey getPublicKey() {
-                return null;
-            }
-
-            @Override
-            public void checkValidity()
-                    throws CertificateExpiredException, CertificateNotYetValidException {
-
-            }
-
-            @Override
-            public void checkValidity(Date date)
-                    throws CertificateExpiredException, CertificateNotYetValidException {
-
-            }
-
-            @Override
-            public int getVersion() {
-                return 0;
-            }
-
-            @Override
-            public BigInteger getSerialNumber() {
-                return null;
-            }
-
-            @Override
-            public Principal getIssuerDN() {
-                return null;
-            }
-
-            @Override
-            public Principal getSubjectDN() {
-                return null;
-            }
-
-            @Override
-            public Date getNotBefore() {
-                return null;
-            }
-
-            @Override
-            public Date getNotAfter() {
-                return null;
-            }
-
-            @Override
-            public byte[] getTBSCertificate() throws CertificateEncodingException {
-                return new byte[0];
-            }
-
-            @Override
-            public byte[] getSignature() {
-                return new byte[0];
-            }
-
-            @Override
-            public String getSigAlgName() {
-                return null;
-            }
-
-            @Override
-            public String getSigAlgOID() {
-                return null;
-            }
-
-            @Override
-            public byte[] getSigAlgParams() {
-                return new byte[0];
-            }
-
-            @Override
-            public boolean[] getIssuerUniqueID() {
-                return new boolean[0];
-            }
-
-            @Override
-            public boolean[] getSubjectUniqueID() {
-                return new boolean[0];
-            }
-
-            @Override
-            public boolean[] getKeyUsage() {
-                return new boolean[0];
-            }
-
-            @Override
-            public int getBasicConstraints() {
-                return 0;
-            }
-        };
-    }
-}
-
diff --git a/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java b/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java
index f1bc130..be0daae 100644
--- a/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java
+++ b/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java
@@ -23,10 +23,11 @@
 import static android.net.NetworkCapabilities.TRANSPORT_TEST;
 import static android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION;
 
-import static com.android.compatibility.common.util.ShellIdentityUtils.invokeWithShellPermissions;
+import static com.android.testutils.TestPermissionUtil.runAsShell;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -71,7 +72,6 @@
 import java.net.Socket;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
@@ -219,13 +219,18 @@
             if (config == null) {
                 // TODO: this may not clear the BSSID blacklist, as opposed to
                 // mWifiManager.connect(config)
-                SystemUtil.runWithShellPermissionIdentity(() -> mWifiManager.reconnect(),
-                        NETWORK_SETTINGS);
+                assertTrue("Error reconnecting wifi", runAsShell(NETWORK_SETTINGS,
+                        mWifiManager::reconnect));
             } else {
                 // When running CTS, devices are expected to have wifi networks pre-configured.
                 // This condition is only hit on virtual devices.
-                SystemUtil.runWithShellPermissionIdentity(
-                        () -> mWifiManager.connect(config, null /* listener */), NETWORK_SETTINGS);
+                final Integer error = runAsShell(NETWORK_SETTINGS, () -> {
+                    final ConnectWifiListener listener = new ConnectWifiListener();
+                    mWifiManager.connect(config, listener);
+                    return listener.connectFuture.get(
+                            CONNECTIVITY_CHANGE_TIMEOUT_SECS, TimeUnit.SECONDS);
+                });
+                assertNull("Error connecting to wifi: " + error, error);
             }
             // Ensure we get an onAvailable callback and possibly a CONNECTIVITY_ACTION.
             wifiNetwork = callback.waitForAvailable();
@@ -242,8 +247,24 @@
         return wifiNetwork;
     }
 
+    private static class ConnectWifiListener implements WifiManager.ActionListener {
+        /**
+         * Future completed when the connect process ends. Provides the error code or null if none.
+         */
+        final CompletableFuture<Integer> connectFuture = new CompletableFuture<>();
+        @Override
+        public void onSuccess() {
+            connectFuture.complete(null);
+        }
+
+        @Override
+        public void onFailure(int reason) {
+            connectFuture.complete(reason);
+        }
+    }
+
     private WifiConfiguration maybeAddVirtualWifiConfiguration() {
-        final List<WifiConfiguration> configs = invokeWithShellPermissions(
+        final List<WifiConfiguration> configs = runAsShell(NETWORK_SETTINGS,
                 mWifiManager::getConfiguredNetworks);
         // If no network is configured, add a config for virtual access points if applicable
         if (configs.size() == 0) {
@@ -259,7 +280,7 @@
 
     private List<ScanResult> getWifiScanResults() {
         final CompletableFuture<List<ScanResult>> scanResultsFuture = new CompletableFuture<>();
-        SystemUtil.runWithShellPermissionIdentity(() -> {
+        runAsShell(NETWORK_SETTINGS, () -> {
             final BroadcastReceiver receiver = new BroadcastReceiver() {
                 @Override
                 public void onReceive(Context context, Intent intent) {
@@ -296,7 +317,7 @@
         virtualConfig.SSID = "\"" + virtualScanResult.SSID + "\"";
         virtualConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
 
-        SystemUtil.runWithShellPermissionIdentity(() -> {
+        runAsShell(NETWORK_SETTINGS, () -> {
             final int networkId = mWifiManager.addNetwork(virtualConfig);
             assertTrue(networkId >= 0);
             assertTrue(mWifiManager.enableNetwork(networkId, false /* attemptConnect */));
@@ -310,7 +331,7 @@
      * to them.
      */
     private void clearWifiBlacklist() {
-        SystemUtil.runWithShellPermissionIdentity(() -> {
+        runAsShell(NETWORK_SETTINGS, () -> {
             for (WifiConfiguration cfg : mWifiManager.getConfiguredNetworks()) {
                 assertTrue(mWifiManager.enableNetwork(cfg.networkId, false /* attemptConnect */));
             }