Add integration tests for the CA providers

These tests will fail if the directory URLs are changed, or if a
relevant part of the directory changes. If one of the tests should fail,
acme4j will need to be updated to the new directory URL or structure.
pull/168/head
Richard Körber 2024-02-26 18:17:03 +01:00
parent 60342c435f
commit c0b74bfc59
No known key found for this signature in database
GPG Key ID: AAB9FD19C78AA3E0
1 changed files with 101 additions and 0 deletions

View File

@ -0,0 +1,101 @@
/*
* acme4j - Java ACME client
*
* Copyright (C) 2024 Richard "Shred" Körber
* http://acme4j.shredzone.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.shredzone.acme4j.it;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatNoException;
import java.net.MalformedURLException;
import java.net.URL;
import org.junit.jupiter.api.Test;
import org.shredzone.acme4j.Session;
import org.shredzone.acme4j.connector.Resource;
import org.shredzone.acme4j.exception.AcmeException;
/**
* A very simple test to check if all provider URIs are still pointing to a directory
* resource.
* <p>
* If one of these tests fails, it could be an indicator that the corresponding directory
* URL has been changed on CA side, or that EAR or auto-renewal features have been
* changed.
* <p>
* These integration tests require a network connection.
*/
public class ProviderIT {
/**
* Test Let's Encrypt
*/
@Test
public void testLetsEncrypt() throws AcmeException, MalformedURLException {
var session = new Session("acme://letsencrypt.org");
assertThat(session.getMetadata().getWebsite()).hasValue(new URL("https://letsencrypt.org"));
assertThatNoException().isThrownBy(() -> session.resourceUrl(Resource.NEW_ACCOUNT));
assertThat(session.getMetadata().isExternalAccountRequired()).isFalse();
assertThat(session.getMetadata().isAutoRenewalEnabled()).isFalse();
var sessionStage = new Session("acme://letsencrypt.org/staging");
assertThat(sessionStage.getMetadata().getWebsite()).hasValue(new URL("https://letsencrypt.org/docs/staging-environment/"));
assertThatNoException().isThrownBy(() -> sessionStage.resourceUrl(Resource.NEW_ACCOUNT));
assertThat(sessionStage.getMetadata().isExternalAccountRequired()).isFalse();
assertThat(sessionStage.getMetadata().isAutoRenewalEnabled()).isFalse();
}
/**
* Test Pebble
*/
@Test
public void testPebble() throws AcmeException, MalformedURLException {
var session = new Session("acme://pebble");
assertThat(session.getMetadata().getWebsite()).isEmpty();
assertThatNoException().isThrownBy(() -> session.resourceUrl(Resource.NEW_ACCOUNT));
assertThat(session.getMetadata().isExternalAccountRequired()).isFalse();
assertThat(session.getMetadata().isAutoRenewalEnabled()).isFalse();
}
/**
* Test ssl.com
*/
@Test
public void testSslCom() throws AcmeException, MalformedURLException {
var session = new Session("acme://ssl.com");
assertThat(session.getMetadata().getWebsite()).hasValue(new URL("https://www.ssl.com"));
assertThatNoException().isThrownBy(() -> session.resourceUrl(Resource.NEW_ACCOUNT));
assertThat(session.getMetadata().isExternalAccountRequired()).isFalse();
assertThat(session.getMetadata().isAutoRenewalEnabled()).isFalse();
var sessionStage = new Session("acme://ssl.com/staging");
assertThat(sessionStage.getMetadata().getWebsite()).hasValue(new URL("https://www.ssl.com"));
assertThatNoException().isThrownBy(() -> sessionStage.resourceUrl(Resource.NEW_ACCOUNT));
assertThat(sessionStage.getMetadata().isExternalAccountRequired()).isFalse();
assertThat(sessionStage.getMetadata().isAutoRenewalEnabled()).isFalse();
}
/**
* Test ZeroSSL
*/
@Test
public void testZeroSsl() throws AcmeException, MalformedURLException {
var session = new Session("acme://zerossl.com");
assertThat(session.getMetadata().getWebsite()).hasValue(new URL("https://zerossl.com"));
assertThatNoException().isThrownBy(() -> session.resourceUrl(Resource.NEW_ACCOUNT));
assertThat(session.getMetadata().isExternalAccountRequired()).isTrue();
assertThat(session.getMetadata().isAutoRenewalEnabled()).isFalse();
// ZeroSSL has no documented staging server (as of February 2024)
}
}