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.challenge;
015
016import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
017import static org.assertj.core.api.Assertions.assertThat;
018import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
019import static org.shredzone.acme4j.toolbox.TestUtils.getJSON;
020
021import org.junit.jupiter.api.Test;
022import org.shredzone.acme4j.Identifier;
023import org.shredzone.acme4j.Login;
024import org.shredzone.acme4j.Status;
025import org.shredzone.acme4j.exception.AcmeProtocolException;
026import org.shredzone.acme4j.toolbox.JSONBuilder;
027import org.shredzone.acme4j.toolbox.TestUtils;
028
029/**
030 * Unit tests for {@link Dns01Challenge}.
031 */
032public class Dns01ChallengeTest {
033
034    private final Login login = TestUtils.login();
035
036    /**
037     * Test that {@link Dns01Challenge} generates a correct authorization key.
038     */
039    @Test
040    public void testDnsChallenge() {
041        var challenge = new Dns01Challenge(login, getJSON("dnsChallenge"));
042
043        assertThat(challenge.getType()).isEqualTo(Dns01Challenge.TYPE);
044        assertThat(challenge.getStatus()).isEqualTo(Status.PENDING);
045        assertThat(challenge.getDigest()).isEqualTo("rzMmotrIgsithyBYc0vgiLUEEKYx0WetQRgEF2JIozA");
046        assertThat(challenge.getAuthorization()).isEqualTo("pNvmJivs0WCko2suV7fhe-59oFqyYx_yB7tx6kIMAyE.HnWjTDnyqlCrm6tZ-6wX-TrEXgRdeNu9G71gqxSO6o0");
047
048        var response = new JSONBuilder();
049        challenge.prepareResponse(response);
050
051        assertThatJson(response.toString()).isEqualTo("{}");
052    }
053
054    @Test
055    public void testToRRName() {
056        assertThat(Dns01Challenge.toRRName("www.example.org"))
057                .isEqualTo("_acme-challenge.www.example.org.");
058        assertThat(Dns01Challenge.toRRName(Identifier.dns("www.example.org")))
059                .isEqualTo("_acme-challenge.www.example.org.");
060        assertThatExceptionOfType(AcmeProtocolException.class)
061                .isThrownBy(() -> Dns01Challenge.toRRName(Identifier.ip("127.0.0.10")));
062        assertThat(Dns01Challenge.RECORD_NAME_PREFIX)
063                .isEqualTo("_acme-challenge");
064    }
065
066}