// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.io;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import javax.net.ssl.SSLHandshakeException;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openstreetmap.josm.JOSMFixture;
/**
* Unit tests of {@link CertificateAmendment} class.
*/
public class CertificateAmendmentTest {
/**
* Setup test.
*/
@BeforeClass
public static void setUp() {
JOSMFixture.createUnitTestFixture().init();
}
/**
* Test a well-known certificate.
* @throws IOException in case of I/O error
*/
@Test
public void testDefault() throws IOException {
// something that is neither DST nor StartSSL
connect("https://google.com", true);
}
/**
* Test <a href="https://letsencrypt.org">Let's Encrypt</a>.
* @throws IOException in case of I/O error
*/
@Test
public void testLetsEncrypt() throws IOException {
// signed by letsencrypt's own ISRG root
// (not included yet)
// TODO: they switched to cross-sign CA, re-enable it if ISRG root is used again
// connect("https://helloworld.letsencrypt.org", false);
// signed by letsencrypt's cross-sign CA
connect("https://letsencrypt.org", true);
// signed by letsencrypt's cross-sign CA, requires SNI
connect("https://acme-v01.api.letsencrypt.org", true);
}
/**
* Test <a href="https://www.startssl.com">StartSSL</a>.
* @throws IOException in case of I/O error
*/
@Test
public void testStartSSL() throws IOException {
connect("https://map.dgpsonline.eu", true);
connect("https://www.startssl.com", true);
}
/**
* Test a broken certificate.
* @throws IOException in case of I/O error
*/
@Test
public void testBrokenCert() throws IOException {
// broken at the moment (may get fixed some day)
connect("https://www.pcwebshop.co.uk", false);
}
/**
* Test overpass API.
* @throws IOException in case of I/O error
*/
@Test
public void testOverpass() throws IOException {
connect("https://overpass-api.de", true);
}
private static void connect(String url, boolean shouldWork) throws IOException {
URLConnection connection = new URL(url).openConnection();
try {
connection.connect();
} catch (SSLHandshakeException e) {
if (shouldWork) {
e.printStackTrace();
Assert.fail("Untrusted: " + url);
} else {
return;
}
}
if (!shouldWork) {
Assert.fail("Expected error: " + url);
}
}
}