From: David Roden Date: Fri, 24 Jan 2025 19:24:54 +0000 (+0100) Subject: ✨ Run shutdown hook only when shutdown command is sent X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=65a8360e4c46d36439dcc5af855b620a1067aabd;p=msta.git ✨ Run shutdown hook only when shutdown command is sent --- diff --git a/server/src/main/java/de/qsheltier/msta/Server.java b/server/src/main/java/de/qsheltier/msta/Server.java index 8176618..dce8b8b 100644 --- a/server/src/main/java/de/qsheltier/msta/Server.java +++ b/server/src/main/java/de/qsheltier/msta/Server.java @@ -78,12 +78,11 @@ public class Server implements Closeable { 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(); @@ -158,6 +157,10 @@ public class Server implements Closeable { }).start(); String line; while ((line = inputReader.readLine()) != null) { + if (line.equalsIgnoreCase("shutdown")) { + shutdownHook.run(); + break; + } } } finally { finished.set(true); diff --git a/server/src/test/java/de/qsheltier/msta/ServerTest.java b/server/src/test/java/de/qsheltier/msta/ServerTest.java index 3077005..480b90c 100644 --- a/server/src/test/java/de/qsheltier/msta/ServerTest.java +++ b/server/src/test/java/de/qsheltier/msta/ServerTest.java @@ -3,7 +3,9 @@ package de.qsheltier.msta; 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; @@ -12,6 +14,7 @@ import org.junit.jupiter.api.Test; 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; @@ -41,11 +44,15 @@ public class ServerTest { @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();