001/*
002 * acme4j - Java ACME client
003 *
004 * Copyright (C) 2024 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.sslcom;
015
016import static org.assertj.core.api.Assertions.assertThat;
017import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
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 SslComAcmeProviderTest}.
028 */
029public class SslComAcmeProviderTest {
030
031    private static final String PRODUCTION_ECC_DIRECTORY_URL = "https://acme.ssl.com/sslcom-dv-ecc";
032    private static final String PRODUCTION_RSA_DIRECTORY_URL = "https://acme.ssl.com/sslcom-dv-rsa";
033    private static final String STAGING_ECC_DIRECTORY_URL = "https://acme-try.ssl.com/sslcom-dv-ecc";
034    private static final String STAGING_RSA_DIRECTORY_URL = "https://acme-try.ssl.com/sslcom-dv-rsa";
035
036    /**
037     * Tests if the provider accepts the correct URIs.
038     */
039    @Test
040    public void testAccepts() throws URISyntaxException {
041        var provider = new SslComAcmeProvider();
042
043        try (var softly = new AutoCloseableSoftAssertions()) {
044            softly.assertThat(provider.accepts(new URI("acme://ssl.com"))).isTrue();
045            softly.assertThat(provider.accepts(new URI("acme://ssl.com/"))).isTrue();
046            softly.assertThat(provider.accepts(new URI("acme://ssl.com/ecc"))).isTrue();
047            softly.assertThat(provider.accepts(new URI("acme://ssl.com/rsa"))).isTrue();
048            softly.assertThat(provider.accepts(new URI("acme://ssl.com/staging"))).isTrue();
049            softly.assertThat(provider.accepts(new URI("acme://ssl.com/staging/ecc"))).isTrue();
050            softly.assertThat(provider.accepts(new URI("acme://ssl.com/staging/rsa"))).isTrue();
051            softly.assertThat(provider.accepts(new URI("acme://example.com"))).isFalse();
052            softly.assertThat(provider.accepts(new URI("http://example.com/acme"))).isFalse();
053            softly.assertThat(provider.accepts(new URI("https://example.com/acme"))).isFalse();
054        }
055    }
056
057    /**
058     * Test if acme URIs are properly resolved.
059     */
060    @Test
061    public void testResolve() throws URISyntaxException {
062        var provider = new SslComAcmeProvider();
063
064        assertThat(provider.resolve(new URI("acme://ssl.com"))).isEqualTo(url(PRODUCTION_ECC_DIRECTORY_URL));
065        assertThat(provider.resolve(new URI("acme://ssl.com/"))).isEqualTo(url(PRODUCTION_ECC_DIRECTORY_URL));
066        assertThat(provider.resolve(new URI("acme://ssl.com/ecc"))).isEqualTo(url(PRODUCTION_ECC_DIRECTORY_URL));
067        assertThat(provider.resolve(new URI("acme://ssl.com/rsa"))).isEqualTo(url(PRODUCTION_RSA_DIRECTORY_URL));
068        assertThat(provider.resolve(new URI("acme://ssl.com/staging"))).isEqualTo(url(STAGING_ECC_DIRECTORY_URL));
069        assertThat(provider.resolve(new URI("acme://ssl.com/staging/ecc"))).isEqualTo(url(STAGING_ECC_DIRECTORY_URL));
070        assertThat(provider.resolve(new URI("acme://ssl.com/staging/rsa"))).isEqualTo(url(STAGING_RSA_DIRECTORY_URL));
071
072        assertThatIllegalArgumentException().isThrownBy(() -> provider.resolve(new URI("acme://ssl.com/v99")));
073    }
074
075}