diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java index dc244a6e..cf67d34a 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Session.java @@ -99,6 +99,26 @@ public class Session { .orElseThrow(() -> new IllegalArgumentException("No ACME provider found for " + localServerUri)); } + /** + * Creates a new {@link Session} using the given {@link AcmeProvider}. + *
+ * This constructor should only be used for testing purposes. + * + * @param serverUri + * {@link URI} of the ACME server + * @param provider + * {@link AcmeProvider} to be used + * @since 2.8 + */ + public Session(URI serverUri, AcmeProvider provider) { + this.serverUri = Objects.requireNonNull(serverUri, "serverUri"); + this.provider = Objects.requireNonNull(provider, "provider"); + + if (!provider.accepts(serverUri)) { + throw new IllegalArgumentException("Provider does not accept " + serverUri); + } + } + /** * Logs into an existing account. * diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/SessionTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/SessionTest.java index 38aa539e..346680e6 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/SessionTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/SessionTest.java @@ -34,6 +34,7 @@ import org.mockito.ArgumentMatchers; import org.shredzone.acme4j.connector.Resource; import org.shredzone.acme4j.exception.AcmeException; import org.shredzone.acme4j.provider.AcmeProvider; +import org.shredzone.acme4j.provider.GenericAcmeProvider; import org.shredzone.acme4j.toolbox.TestUtils; /** @@ -63,12 +64,23 @@ public class SessionTest { assertThat(session2, not(nullValue())); assertThat(session2.getServerUri(), is(serverUri)); + Session session3 = new Session(serverUri, new GenericAcmeProvider()); + assertThat(session3, not(nullValue())); + assertThat(session3.getServerUri(), is(serverUri)); + try { new Session("#*aBaDuRi*#"); fail("accepted bad URI in constructor"); } catch (IllegalArgumentException ex) { // expected } + + try { + new Session(URI.create("acme://invalid"), new GenericAcmeProvider()); + fail("Provider accepted unsupported URI"); + } catch (IllegalArgumentException ex) { + // expected + } } /** @@ -189,7 +201,7 @@ public class SessionTest { /** * Asserts that the {@link Session} returns correct - * {@link Session#resourceUri(Resource)} and {@link Session#getMetadata()}. + * {@link Session#resourceUrl(Resource)} and {@link Session#getMetadata()}. * * @param session * {@link Session} to assert