package org.arquillian.cube.docker.restassured; import io.restassured.RestAssured; import io.restassured.builder.RequestSpecBuilder; import org.arquillian.cube.docker.impl.client.CubeDockerConfiguration; import org.arquillian.cube.docker.impl.util.SinglePortBindResolver; import org.jboss.arquillian.core.api.Instance; import org.jboss.arquillian.core.api.InstanceProducer; import org.jboss.arquillian.core.api.annotation.ApplicationScoped; import org.jboss.arquillian.core.api.annotation.Inject; import org.jboss.arquillian.core.api.annotation.Observes; import org.jboss.arquillian.core.api.event.ManagerStopping; /** * Class that gets restassured configuration and configures the RestAssured instance accordantly */ public class RestAssuredCustomizer { @Inject Instance<CubeDockerConfiguration> cubeDockerConfigurationInstance; @Inject @ApplicationScoped InstanceProducer<RequestSpecBuilder> requestSpecBuilderInstanceProducer; /** * Method executed before starting a test. * It is important to do it in this event because in case of incontainer tests or containerless, * this is when the mapped container is started and you might need to inspect the automatic port binding. * <p> * Precedence is set to -100 to execute this after all sarting events. */ public void configure(@Observes RestAssuredConfiguration restAssuredConfiguration) { CubeDockerConfiguration cubeDockerConfiguration = cubeDockerConfigurationInstance.get(); final RequestSpecBuilder requestSpecBuilder = new RequestSpecBuilder(); configureRequestSpecBuilder(restAssuredConfiguration, cubeDockerConfiguration, requestSpecBuilder); requestSpecBuilderInstanceProducer.set(requestSpecBuilder); } void configureRequestSpecBuilder(@Observes RestAssuredConfiguration restAssuredConfiguration, CubeDockerConfiguration cubeDockerConfiguration, RequestSpecBuilder requestSpecBuilder) { if (restAssuredConfiguration.isBaseUriSet()) { requestSpecBuilder.setBaseUri(restAssuredConfiguration.getBaseUri()); } else { requestSpecBuilder.setBaseUri( restAssuredConfiguration.getSchema() + "://" + cubeDockerConfiguration.getDockerServerIp()); } if (restAssuredConfiguration.isPortSet()) { requestSpecBuilder.setPort(SinglePortBindResolver.resolveBindPort(cubeDockerConfiguration, restAssuredConfiguration.getPort(), restAssuredConfiguration.getExclusionContainers())); } else { requestSpecBuilder.setPort(SinglePortBindResolver.resolveBindPort(cubeDockerConfiguration, restAssuredConfiguration.getExclusionContainers())); } if (restAssuredConfiguration.isBasePathSet()) { requestSpecBuilder.setBasePath(restAssuredConfiguration.getBasePath()); } if (restAssuredConfiguration.isAuthenticationSchemeSet()) { requestSpecBuilder.setAuth(restAssuredConfiguration.getAuthenticationScheme()); } if (restAssuredConfiguration.isUseRelaxedHttpsValidationSet()) { if (restAssuredConfiguration.isUseRelaxedHttpsValidationInAllProtocols()) { requestSpecBuilder.setRelaxedHTTPSValidation(); } else { requestSpecBuilder.setRelaxedHTTPSValidation(restAssuredConfiguration.getUseRelaxedHttpsValidation()); } } } /** * Resets RestAssured configuration values to default. */ public void resetRestAssuredConfiguration(@Observes ManagerStopping event) { RestAssured.reset(); } }