new Thread(() -> {
try {
startLatch.countDown();
- var socket = serverSocket.accept();
- handleSocket(socket.getInputStream(), socket.getOutputStream());
+ try (var socket = serverSocket.accept()) {
+ handleSocket(socket.getInputStream(), socket.getOutputStream());
+ }
} catch (IOException e) {
/* swallow exceptions. */
- } finally {
- shutdownHook.run();
}
}).start();
startLatch.await();
}).start();
String line;
while ((line = inputReader.readLine()) != null) {
+ if (line.equalsIgnoreCase("shutdown")) {
+ shutdownHook.run();
+ break;
+ }
}
} finally {
finished.set(true);
import java.awt.Frame;
import java.awt.Window;
import java.io.BufferedReader;
+import java.io.BufferedWriter;
import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.function.ThrowingConsumer;
+import static java.nio.charset.StandardCharsets.UTF_8;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.not;
@Test
@Timeout(value = 5, unit = TimeUnit.SECONDS, threadMode = SEPARATE_THREAD)
- public void serverRunsShutdownHookWhenConnectionIsClosed() throws Exception {
+ public void serverRunsShutdownHookWhenShutdownCommandIsSent() throws Exception {
var shutdown = new AtomicBoolean();
try (var server = new Server(() -> shutdown.set(true))) {
server.start();
- try (var ignored = new Socket("localhost", server.getPort())) {
+ try (var socket = new Socket("localhost", server.getPort());
+ var writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), UTF_8))) {
+ writer.write("shutdown\n");
+ writer.flush();
+ Thread.yield();
}
while (!shutdown.get()) {
Thread.yield();