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.connector; 015 016import static org.assertj.core.api.Assertions.assertThat; 017import static org.mockito.Mockito.mock; 018 019import java.net.Authenticator; 020import java.net.URL; 021import java.net.http.HttpClient; 022import java.time.Duration; 023 024import org.junit.jupiter.api.Test; 025 026/** 027 * Unit tests for {@link HttpConnector}. 028 */ 029public class HttpConnectorTest { 030 031 /** 032 * Test if a {@link java.net.http.HttpClient.Builder} can be created and has proper 033 * default values. 034 */ 035 @Test 036 public void testClientBuilderDefaultValues() { 037 var settings = new NetworkSettings(); 038 039 var connector = new HttpConnector(settings); 040 var client = connector.createClientBuilder().build(); 041 042 assertThat(client.connectTimeout().orElseThrow()).isEqualTo(settings.getTimeout()); 043 assertThat(client.followRedirects()).isEqualTo(HttpClient.Redirect.NORMAL); 044 assertThat(client.authenticator()).isEmpty(); 045 } 046 047 /** 048 * Test if a {@link java.net.http.HttpClient.Builder} can be created and if it is 049 * preconfigured properly. 050 */ 051 @Test 052 public void testClientBuilder() { 053 var timeout = Duration.ofSeconds(50); 054 var authenticator = mock(Authenticator.class); 055 056 var settings = new NetworkSettings(); 057 settings.setTimeout(timeout); 058 settings.setAuthenticator(authenticator); 059 060 var connector = new HttpConnector(settings); 061 var client = connector.createClientBuilder().build(); 062 063 assertThat(client.connectTimeout().orElseThrow()).isEqualTo(timeout); 064 assertThat(client.followRedirects()).isEqualTo(HttpClient.Redirect.NORMAL); 065 assertThat(client.authenticator().orElseThrow()).isSameAs(authenticator); 066 } 067 068 /** 069 * Test if a {@link java.net.http.HttpRequest.Builder} can be created and has proper 070 * default values. 071 */ 072 @Test 073 public void testRequestBuilderDefaultValues() throws Exception { 074 var url = new URL("http://example.org:123/foo"); 075 var settings = new NetworkSettings(); 076 077 var connector = new HttpConnector(settings); 078 var request = connector.createRequestBuilder(url).build(); 079 080 assertThat(request.uri().toString()).isEqualTo(url.toExternalForm()); 081 assertThat(request.timeout().orElseThrow()).isEqualTo(settings.getTimeout()); 082 assertThat(request.headers().firstValue("User-Agent").orElseThrow()) 083 .isEqualTo(HttpConnector.defaultUserAgent()); 084 } 085 086 /** 087 * Tests that the user agent is correct. 088 */ 089 @Test 090 public void testUserAgent() { 091 var userAgent = HttpConnector.defaultUserAgent(); 092 assertThat(userAgent).contains("acme4j/"); 093 assertThat(userAgent).contains("Java/"); 094 } 095 096}