package com.github.timpeeters.boot.shutdown.autoconfigure; import org.asynchttpclient.ListenableFuture; import org.asynchttpclient.Response; import org.junit.Test; import org.springframework.http.HttpStatus; import java.io.IOException; import java.util.Properties; import java.util.concurrent.ExecutionException; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; public class GracefulShutdownIT extends AbstractIT { @Override protected void configure(Properties properties) { properties.setProperty("graceful.shutdown.enabled", "true"); properties.setProperty("graceful.shutdown.timeout", "5s"); properties.setProperty("graceful.shutdown.wait", "0s"); } @Test public void inFlightRequestSuccessful() throws ExecutionException, InterruptedException { ListenableFuture<Response> response = sendRequestAndWaitForServerToStartProcessing(); stopSpringBootApp(); REQ_FINISHED.release(); assertThat(response.get().getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT.value()); } @Test public void inFlightRequestFailsAfterTimeout() throws InterruptedException { ListenableFuture<Response> response = sendRequestAndWaitForServerToStartProcessing(); stopSpringBootApp(); assertThatCode(response::get).hasCauseInstanceOf(IOException.class); } }