diff --git a/tests/cts/net/Android.bp b/tests/cts/net/Android.bp index 913380a09c..528171a036 100644 --- a/tests/cts/net/Android.bp +++ b/tests/cts/net/Android.bp @@ -21,7 +21,6 @@ java_defaults { libs: [ "voip-common", - "org.apache.http.legacy", "android.test.base", ], @@ -40,14 +39,11 @@ java_defaults { 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/src/android/net/http/cts/ApacheHttpClientTest.java b/tests/cts/net/src/android/net/http/cts/ApacheHttpClientTest.java deleted file mode 100644 index 8d7dff021a..0000000000 --- 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 responses = new ArrayList(); - 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 354954e296..0000000000 --- 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> 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 95f415c58c..0000000000 --- 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 getCriticalExtensionOIDs() { - return null; - } - - public byte[] getExtensionValue(String oid) { - return null; - } - - public Set 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 b0c71e8c10..0000000000 --- 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 0058c90ac4..0000000000 --- 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 99de614d80..0000000000 --- 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 5e2a55e7ec..0000000000 --- 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 getCriticalExtensionOIDs() { - return null; - } - - @Override - public byte[] getExtensionValue(String oid) { - return new byte[0]; - } - - @Override - public Set 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; - } - }; - } -} -