1 /* 2 * Copyright (c) 2011-2022, jcabi.com 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 1) Redistributions of source code must retain the above 8 * copyright notice, this list of conditions and the following 9 * disclaimer. 2) Redistributions in binary form must reproduce the above 10 * copyright notice, this list of conditions and the following 11 * disclaimer in the documentation and/or other materials provided 12 * with the distribution. 3) Neither the name of the jcabi.com nor 13 * the names of its contributors may be used to endorse or promote 14 * products derived from this software without specific prior written 15 * permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT 19 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 21 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 28 * OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 package com.jcabi.http; 31 32 import com.jcabi.http.request.ApacheRequest; 33 import com.jcabi.http.request.JdkRequest; 34 import java.net.URI; 35 import org.junit.jupiter.api.AfterAll; 36 import org.junit.jupiter.api.BeforeAll; 37 import org.junit.jupiter.api.Nested; 38 import org.junit.jupiter.api.TestInstance; 39 import org.testcontainers.containers.GenericContainer; 40 import org.testcontainers.junit.jupiter.Testcontainers; 41 import org.testcontainers.utility.DockerImageName; 42 43 /** 44 * Integration test for {@link Request}. 45 * 46 * @since 1.17.8 47 */ 48 @SuppressWarnings("PMD.AbstractClassWithoutAbstractMethod") 49 @TestInstance(TestInstance.Lifecycle.PER_CLASS) 50 @Testcontainers(disabledWithoutDocker = true) 51 final class RequestSecondITCase { 52 53 /** 54 * Container with HttpBin. 55 */ 56 private final GenericContainer<?> container = new GenericContainer<>( 57 DockerImageName.parse("kennethreitz/httpbin") 58 ).withExposedPorts(80); 59 60 @BeforeAll 61 void beforeAll() { 62 this.container.start(); 63 } 64 65 @AfterAll 66 void tearDown() { 67 this.container.stop(); 68 } 69 70 /** 71 * URI of the container. 72 * @return URI. 73 */ 74 private URI uri() { 75 return URI.create( 76 String.format( 77 "http://%s:%d", 78 this.container.getHost(), 79 this.container.getFirstMappedPort() 80 ) 81 ); 82 } 83 84 /** 85 * Test for {@link JdkRequest}. 86 * @since 1.17.8 87 */ 88 @Nested 89 final class JdkRequestITCase extends RequestITCaseTemplate { 90 JdkRequestITCase() { 91 super(JdkRequest.class, RequestSecondITCase.this.uri()); 92 } 93 } 94 95 /** 96 * Test for {@link ApacheRequest}. 97 * @since 1.17.8 98 */ 99 @Nested 100 final class ApacheRequestITCase extends RequestITCaseTemplate { 101 ApacheRequestITCase() { 102 super(ApacheRequest.class, RequestSecondITCase.this.uri()); 103 } 104 } 105 }