001/*
002 * acme4j - Java ACME client
003 *
004 * Copyright (C) 2015 Richard "Shred" Körber
005 *   http://acme4j.shredzone.org
006 *
007 * Licensed under the Apache License, Version 2.0 (the "License");
008 * you may not use this file except in compliance with the License.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
013 */
014package org.shredzone.acme4j.provider.letsencrypt;
015
016import static org.assertj.core.api.Assertions.assertThat;
017import static org.junit.jupiter.api.Assertions.assertThrows;
018import static org.shredzone.acme4j.toolbox.TestUtils.url;
019
020import java.net.URI;
021import java.net.URISyntaxException;
022
023import org.assertj.core.api.AutoCloseableSoftAssertions;
024import org.junit.jupiter.api.Test;
025
026/**
027 * Unit tests for {@link LetsEncryptAcmeProvider}.
028 */
029public class LetsEncryptAcmeProviderTest {
030
031    private static final String V02_DIRECTORY_URL = "https://acme-v02.api.letsencrypt.org/directory";
032    private static final String STAGING_DIRECTORY_URL = "https://acme-staging-v02.api.letsencrypt.org/directory";
033
034    /**
035     * Tests if the provider accepts the correct URIs.
036     */
037    @Test
038    public void testAccepts() throws URISyntaxException {
039        var provider = new LetsEncryptAcmeProvider();
040
041        try (var softly = new AutoCloseableSoftAssertions()) {
042            softly.assertThat(provider.accepts(new URI("acme://letsencrypt.org"))).isTrue();
043            softly.assertThat(provider.accepts(new URI("acme://letsencrypt.org/"))).isTrue();
044            softly.assertThat(provider.accepts(new URI("acme://letsencrypt.org/staging"))).isTrue();
045            softly.assertThat(provider.accepts(new URI("acme://letsencrypt.org/v02"))).isTrue();
046            softly.assertThat(provider.accepts(new URI("acme://example.com"))).isFalse();
047            softly.assertThat(provider.accepts(new URI("http://example.com/acme"))).isFalse();
048            softly.assertThat(provider.accepts(new URI("https://example.com/acme"))).isFalse();
049        }
050    }
051
052    /**
053     * Test if acme URIs are properly resolved.
054     */
055    @Test
056    public void testResolve() throws URISyntaxException {
057        var provider = new LetsEncryptAcmeProvider();
058
059        assertThat(provider.resolve(new URI("acme://letsencrypt.org"))).isEqualTo(url(V02_DIRECTORY_URL));
060        assertThat(provider.resolve(new URI("acme://letsencrypt.org/"))).isEqualTo(url(V02_DIRECTORY_URL));
061        assertThat(provider.resolve(new URI("acme://letsencrypt.org/v02"))).isEqualTo(url(V02_DIRECTORY_URL));
062        assertThat(provider.resolve(new URI("acme://letsencrypt.org/staging"))).isEqualTo(url(STAGING_DIRECTORY_URL));
063
064        assertThrows(IllegalArgumentException.class, () -> provider.resolve(new URI("acme://letsencrypt.org/v99")));
065    }
066
067}