From 234e5538ade87d6bf010803a069701a20759b802 Mon Sep 17 00:00:00 2001 From: David Roden Date: Sat, 25 Jan 2025 23:30:48 +0100 Subject: [PATCH] =?utf8?q?=E2=99=BB=EF=B8=8F=20Extract=20methods=20to=20ea?= =?utf8?q?sier=20handle=20connections?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../test/java/de/qsheltier/msta/ServerTest.java | 65 +++++++++++----------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/server/src/test/java/de/qsheltier/msta/ServerTest.java b/server/src/test/java/de/qsheltier/msta/ServerTest.java index aa7606b..98ed56a 100644 --- a/server/src/test/java/de/qsheltier/msta/ServerTest.java +++ b/server/src/test/java/de/qsheltier/msta/ServerTest.java @@ -12,7 +12,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; -import org.junit.jupiter.api.function.ThrowingConsumer; import static com.spotify.hamcrest.jackson.JsonMatchers.isJsonStringMatching; import static com.spotify.hamcrest.jackson.JsonMatchers.jsonObject; @@ -51,12 +50,11 @@ public class ServerTest { var shutdown = new AtomicBoolean(); try (var server = new Server(() -> shutdown.set(true))) { server.start(); - try (var socket = new Socket("localhost", server.getPort()); - var writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), UTF_8))) { + createConnection(server, verifyConnectedEvent((reader, writer) -> { writer.write("shutdown\n"); writer.flush(); Thread.yield(); - } + })); while (!shutdown.get()) { Thread.yield(); } @@ -82,10 +80,9 @@ public class ServerTest { var window = new Window(null); window.setVisible(true); try { - connectToServerAndWaitForEvent(reader -> { - var line = reader.readLine(); - assertThat(line, isJsonStringMatching(jsonObject().where("event", jsonText("new-window")))); - }); + connectToServer(verifyConnectedEvent((reader, writer) -> { + assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-window")))); + })); } finally { window.setVisible(false); } @@ -97,10 +94,9 @@ public class ServerTest { var frame = new Frame("Frame Title"); frame.setVisible(true); try { - connectToServerAndWaitForEvent(reader -> { - var line = reader.readLine(); - assertThat(line, isJsonStringMatching(jsonObject().where("event", jsonText("new-frame")))); - }); + connectToServer(verifyConnectedEvent((reader, writer) -> { + assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-frame")))); + })); } finally { frame.setVisible(false); } @@ -112,11 +108,11 @@ public class ServerTest { var frame = new Frame("Frame Title"); frame.setVisible(true); try { - connectToServerAndWaitForEvent(reader -> { - reader.readLine(); + connectToServer(verifyConnectedEvent((reader, writer) -> { + assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-frame")))); Thread.sleep(1000); assertThat(reader.ready(), equalTo(false)); - }); + })); } finally { frame.setVisible(false); } @@ -127,28 +123,35 @@ public class ServerTest { public void serverCanHandleMultipleConnections() throws Exception { try (var server = new Server()) { server.start(); - try (var connection = new Socket("localhost", server.getPort()); - var reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { - var line = reader.readLine(); - assertThat(line, isJsonStringMatching(jsonObject().where("event", jsonText("connected")))); - } - try (var connection = new Socket("localhost", server.getPort()); - var reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { - var line = reader.readLine(); - assertThat(line, isJsonStringMatching(jsonObject().where("event", jsonText("connected")))); - } + createConnection(server, verifyConnectedEvent(((reader, writer) -> {}))); + createConnection(server, verifyConnectedEvent(((reader, writer) -> {}))); } } - private static void connectToServerAndWaitForEvent(ThrowingConsumer readerConsumer) throws Throwable { + private static ThrowingBiConsumer verifyConnectedEvent(ThrowingBiConsumer connectionConsumer) { + return (reader, writer) -> { + assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("connected")))); + connectionConsumer.accept(reader, writer); + }; + } + + private static void connectToServer(ThrowingBiConsumer connectionConsumer) throws Exception { try (var server = new Server()) { server.start(); - try (var connection = new Socket("localhost", server.getPort()); - var reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { - reader.readLine(); - readerConsumer.accept(reader); - } + createConnection(server, connectionConsumer); } } + private static void createConnection(Server server, ThrowingBiConsumer connectionConsumer) throws Exception { + try (var connection = new Socket("localhost", server.getPort()); + var reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), UTF_8)); + var writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), UTF_8))) { + connectionConsumer.accept(reader, writer); + } + } + + private interface ThrowingBiConsumer { + void accept(A a, B b) throws Exception; + } + } -- 2.7.4