001/*
002 * acme4j - Java ACME client
003 *
004 * Copyright (C) 2019 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.connector;
015
016import static org.assertj.core.api.Assertions.assertThat;
017import static org.junit.jupiter.api.Assertions.assertThrows;
018
019import java.net.Authenticator;
020import java.net.InetSocketAddress;
021import java.net.ProxySelector;
022import java.net.http.HttpClient;
023import java.time.Duration;
024
025import org.junit.jupiter.api.Test;
026
027/**
028 * Unit tests for {@link NetworkSettings}.
029 */
030public class NetworkSettingsTest {
031
032    /**
033     * Test getters and setters.
034     */
035    @Test
036    public void testGettersAndSetters() {
037        var settings = new NetworkSettings();
038
039        var proxyAddress = new InetSocketAddress("198.51.100.1", 8080);
040        var proxySelector = ProxySelector.of(proxyAddress);
041
042        assertThat(settings.getProxySelector()).isSameAs(HttpClient.Builder.NO_PROXY);
043        settings.setProxySelector(proxySelector);
044        assertThat(settings.getProxySelector()).isSameAs(proxySelector);
045        settings.setProxySelector(null);
046        assertThat(settings.getProxySelector()).isEqualTo(HttpClient.Builder.NO_PROXY);
047
048        assertThat(settings.getTimeout()).isEqualTo(Duration.ofSeconds(10));
049        settings.setTimeout(Duration.ofMillis(5120));
050        assertThat(settings.getTimeout()).isEqualTo(Duration.ofMillis(5120));
051
052        var defaultAuthenticator = Authenticator.getDefault();
053        assertThat(settings.getAuthenticator()).isNull();
054        settings.setAuthenticator(defaultAuthenticator);
055        assertThat(settings.getAuthenticator()).isSameAs(defaultAuthenticator);
056
057        assertThat(settings.isCompressionEnabled()).isTrue();
058        settings.setCompressionEnabled(false);
059        assertThat(settings.isCompressionEnabled()).isFalse();
060    }
061
062    @Test
063    public void testInvalidTimeouts() {
064        var settings = new NetworkSettings();
065
066        assertThrows(IllegalArgumentException.class,
067                () -> settings.setTimeout(null),
068                "timeout accepted null");
069        assertThrows(IllegalArgumentException.class,
070                () -> settings.setTimeout(Duration.ZERO),
071                "timeout accepted zero duration");
072        assertThrows(IllegalArgumentException.class,
073                () -> settings.setTimeout(Duration.ofSeconds(20).negated()),
074                "timeout accepted negative duration");
075    }
076
077    @Test
078    public void testSystemProperty() {
079        assertThat(NetworkSettings.GZIP_PROPERTY_NAME)
080                .startsWith("org.shredzone.acme4j")
081                .contains("gzip");
082
083        System.clearProperty(NetworkSettings.GZIP_PROPERTY_NAME);
084        var settingsNone = new NetworkSettings();
085        assertThat(settingsNone.isCompressionEnabled()).isTrue();
086
087        System.setProperty(NetworkSettings.GZIP_PROPERTY_NAME, "true");
088        var settingsTrue = new NetworkSettings();
089        assertThat(settingsTrue.isCompressionEnabled()).isTrue();
090
091        System.setProperty(NetworkSettings.GZIP_PROPERTY_NAME, "false");
092        var settingsFalse = new NetworkSettings();
093        assertThat(settingsFalse.isCompressionEnabled()).isFalse();
094
095        System.setProperty(NetworkSettings.GZIP_PROPERTY_NAME, "1234");
096        var settingsNonBoolean = new NetworkSettings();
097        assertThat(settingsNonBoolean.isCompressionEnabled()).isFalse();
098    }
099
100}