blob: e2ebdbde0a0b8fba5ead78d47c5d3a08fcd7e175 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 tests.api.javax.net.ssl;
import java.io.ByteArrayInputStream;
import java.net.URL;
import java.security.Principal;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLPeerUnverifiedException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import org.apache.harmony.security.tests.support.cert.TestUtils;
import junit.framework.TestCase;
/**
* Tests for <code>HttpsURLConnection</code> class constructors and methods.
*
*/
public class HttpsURLConnectionTest extends TestCase {
/**
* javax.net.ssl.HttpsURLConnection#HttpsURLConnection(java_net_URL)
*/
public final void test_Constructor() throws Exception {
new MyHttpsURLConnection(new URL("https://www.fortify.net/"));
new MyHttpsURLConnection(null);
}
/**
* javax.net.ssl.HttpsURLConnection#getCipherSuite()
*/
public final void test_getCipherSuite() throws Exception {
URL url = new URL("https://localhost:55555");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
try {
connection.getCipherSuite();
fail("IllegalStateException wasn't thrown");
} catch (IllegalStateException expected) {
}
HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"));
assertEquals("CipherSuite", con.getCipherSuite());
}
/**
* javax.net.ssl.HttpsURLConnection#getLocalCertificates()
*/
public final void test_getLocalCertificates() throws Exception {
URL url = new URL("https://localhost:55555");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
try {
connection.getLocalCertificates();
fail("IllegalStateException wasn't thrown");
} catch (IllegalStateException expected) {
}
HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508");
assertNull(con.getLocalCertificates());
con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509");
Certificate[] cert = con.getLocalCertificates();
assertNotNull(cert);
assertEquals(1, cert.length);
}
/**
* javax.net.ssl.HttpsURLConnection#getDefaultHostnameVerifier()
*/
public final void test_getDefaultHostnameVerifier() {
HostnameVerifier verifyer =
HttpsURLConnection.getDefaultHostnameVerifier();
assertNotNull("Default hostname verifyer is null", verifyer);
}
/**
* javax.net.ssl.HttpsURLConnection#getDefaultSSLSocketFactory()
*/
public final void test_getDefaultSSLSocketFactory() {
SSLSocketFactory sf = HttpsURLConnection.getDefaultSSLSocketFactory();
if (!sf.equals(SSLSocketFactory.getDefault())) {
fail("incorrect DefaultSSLSocketFactory");
}
}
/**
* javax.net.ssl.HttpsURLConnection#getHostnameVerifier()
*/
public final void test_getHostnameVerifier()
throws Exception {
HttpsURLConnection con = new MyHttpsURLConnection(
new URL("https://www.fortify.net/"));
HostnameVerifier verifyer = con.getHostnameVerifier();
assertNotNull("Hostname verifyer is null", verifyer);
assertEquals("Incorrect value of hostname verirfyer",
HttpsURLConnection.getDefaultHostnameVerifier(), verifyer);
}
/**
* javax.net.ssl.HttpsURLConnection#getLocalPrincipal()
*/
public final void test_getLocalPrincipal() throws Exception {
URL url = new URL("https://localhost:55555");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
try {
connection.getLocalPrincipal();
fail("IllegalStateException wasn't thrown");
} catch (IllegalStateException expected) {
}
HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508");
assertNull(con.getLocalPrincipal());
con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509");
assertNotNull("Local principal is null", con.getLocalPrincipal());
}
/**
* javax.net.ssl.HttpsURLConnection#getPeerPrincipal()
*/
public final void test_getPeerPrincipal() throws Exception {
URL url = new URL("https://localhost:55555");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
try {
connection.getPeerPrincipal();
fail("IllegalStateException wasn't thrown");
} catch (IllegalStateException expected) {
}
HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508");
try {
Principal p = con.getPeerPrincipal();
fail("SSLPeerUnverifiedException wasn't thrown");
} catch (SSLPeerUnverifiedException expected) {
}
con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509");
Principal p = con.getPeerPrincipal();
assertNotNull(p);
}
/**
* javax.net.ssl.HttpsURLConnection#getServerCertificates()
*/
public final void test_getServerCertificates() throws Exception {
URL url = new URL("https://localhost:55555");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
try {
connection.getServerCertificates();
fail("IllegalStateException wasn't thrown");
} catch (IllegalStateException expected) {
}
HttpsURLConnection con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.508");
try {
con.getServerCertificates();
fail("SSLPeerUnverifiedException wasn't thrown");
} catch (SSLPeerUnverifiedException expected) {
}
con = new MyHttpsURLConnection(new URL("https://www.fortify.net/"), "X.509");
Certificate[] cert = con.getServerCertificates();
assertNotNull(cert);
assertEquals(1, cert.length);
}
/**
* javax.net.ssl.HttpsURLConnection#getSSLSocketFactory()
*/
public final void test_getSSLSocketFactory() {
HttpsURLConnection con = new MyHttpsURLConnection(null);
SSLSocketFactory sf = con.getSSLSocketFactory();
if (!sf.equals(SSLSocketFactory.getDefault())) {
fail("incorrect DefaultSSLSocketFactory");
}
}
/**
* javax.net.ssl.HttpsURLConnection#setDefaultHostnameVerifier()
*/
public final void test_setDefaultHostnameVerifier() {
try {
HttpsURLConnection.setDefaultHostnameVerifier(null);
fail("No expected IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
HostnameVerifier def = HttpsURLConnection.getDefaultHostnameVerifier();
try {
myHostnameVerifier hnv = new myHostnameVerifier();
HttpsURLConnection.setDefaultHostnameVerifier(hnv);
assertEquals(hnv, HttpsURLConnection.getDefaultHostnameVerifier());
} finally {
HttpsURLConnection.setDefaultHostnameVerifier(def);
}
}
/**
* javax.net.ssl.HttpsURLConnection#setHostnameVerifier()
*/
public final void test_setHostnameVerifier() {
HttpsURLConnection con = new MyHttpsURLConnection(null);
try {
con.setHostnameVerifier(null);
fail("No expected IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
myHostnameVerifier hnv = new myHostnameVerifier();
con.setHostnameVerifier(hnv);
}
/**
* javax.net.ssl.HttpsURLConnection#setDefaultSSLSocketFactory()
*/
public final void test_setDefaultSSLSocketFactory() {
try {
HttpsURLConnection.setDefaultSSLSocketFactory(null);
fail("No expected IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory
.getDefault();
HttpsURLConnection.setDefaultSSLSocketFactory(ssf);
}
/**
* javax.net.ssl.HttpsURLConnection#setSSLSocketFactory()
*/
public final void test_setSSLSocketFactory() {
HttpsURLConnection con = new MyHttpsURLConnection(null);
try {
con.setSSLSocketFactory(null);
fail("No expected IllegalArgumentException");
} catch (IllegalArgumentException expected) {
}
SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory
.getDefault();
con.setSSLSocketFactory(ssf);
}
}
class MyHttpsURLConnection extends javax.net.ssl.HttpsURLConnection {
private String typeDone;
public MyHttpsURLConnection(URL url) {
super(url);
}
public MyHttpsURLConnection(URL url, String type) {
super(url);
typeDone = type;
}
/*
* @see javax.net.ssl.HttpsURLConnection#getCipherSuite()
*/
public String getCipherSuite() {
return "CipherSuite";
}
/*
* @see javax.net.ssl.HttpsURLConnection#getLocalCertificates()
*/
public Certificate[] getLocalCertificates() {
try {
CertificateFactory cf = CertificateFactory.getInstance(typeDone);
byte[] barr = TestUtils.getX509Certificate_v1();
ByteArrayInputStream bis = new ByteArrayInputStream(barr);
Certificate cert = cf.generateCertificate(bis);
return new Certificate[] { cert };
} catch (CertificateException se) {
return null;
}
}
/*
* @see javax.net.ssl.HttpsURLConnection#getServerCertificates()
*/
public Certificate[] getServerCertificates() throws SSLPeerUnverifiedException {
try {
CertificateFactory cf = CertificateFactory.getInstance(typeDone);
byte[] barr = TestUtils.getX509Certificate_v3();
ByteArrayInputStream bis = new ByteArrayInputStream(barr);
Certificate cert = cf.generateCertificate(bis);
return new Certificate[] { cert };
} catch (CertificateException se) {
throw new SSLPeerUnverifiedException("No server's end-entity certificate");
}
}
/*
* @see java.net.HttpURLConnection#disconnect()
*/
public void disconnect() {
}
/*
* @see java.net.HttpURLConnection#usingProxy()
*/
public boolean usingProxy() {
return false;
}
public void connect() {
}
}
class myHostnameVerifier implements HostnameVerifier {
myHostnameVerifier() {
}
public boolean verify(String hostname, SSLSession session) {
if (hostname == session.getPeerHost()) {
return true;
} else return false;
}
}