From: David Roden Date: Sat, 25 Jan 2025 23:11:52 +0000 (+0100) Subject: ♻️ Refactor connection input and output handling X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=2bd218edd6a5ce00cb0b28b6370634200f1a1086;p=msta.git ♻️ Refactor connection input and output handling --- diff --git a/server/src/test/java/de/qsheltier/msta/ServerTest.java b/server/src/test/java/de/qsheltier/msta/ServerTest.java index 98ed56a..059160f 100644 --- a/server/src/test/java/de/qsheltier/msta/ServerTest.java +++ b/server/src/test/java/de/qsheltier/msta/ServerTest.java @@ -4,12 +4,15 @@ import java.awt.Frame; import java.awt.Window; import java.io.BufferedReader; import java.io.BufferedWriter; +import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Consumer; +import java.util.function.Supplier; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; @@ -51,8 +54,7 @@ public class ServerTest { try (var server = new Server(() -> shutdown.set(true))) { server.start(); createConnection(server, verifyConnectedEvent((reader, writer) -> { - writer.write("shutdown\n"); - writer.flush(); + writer.accept("shutdown"); Thread.yield(); })); while (!shutdown.get()) { @@ -81,7 +83,7 @@ public class ServerTest { window.setVisible(true); try { connectToServer(verifyConnectedEvent((reader, writer) -> { - assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-window")))); + assertThat(reader.get(), isJsonStringMatching(jsonObject().where("event", jsonText("new-window")))); })); } finally { window.setVisible(false); @@ -95,23 +97,7 @@ public class ServerTest { frame.setVisible(true); try { connectToServer(verifyConnectedEvent((reader, writer) -> { - assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-frame")))); - })); - } finally { - frame.setVisible(false); - } - } - - @Test - @Timeout(value = 5, unit = TimeUnit.SECONDS, threadMode = SEPARATE_THREAD) - public void serverSendsASingleEventWhenAFrameIsOpened() throws Throwable { - var frame = new Frame("Frame Title"); - frame.setVisible(true); - try { - connectToServer(verifyConnectedEvent((reader, writer) -> { - assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-frame")))); - Thread.sleep(1000); - assertThat(reader.ready(), equalTo(false)); + assertThat(reader.get(), isJsonStringMatching(jsonObject().where("event", jsonText("new-frame")))); })); } finally { frame.setVisible(false); @@ -128,25 +114,38 @@ public class ServerTest { } } - private static ThrowingBiConsumer verifyConnectedEvent(ThrowingBiConsumer connectionConsumer) { + private static ThrowingBiConsumer, Consumer> verifyConnectedEvent(ThrowingBiConsumer, Consumer> connectionConsumer) { return (reader, writer) -> { - assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("connected")))); + assertThat(reader.get(), isJsonStringMatching(jsonObject().where("event", jsonText("connected")))); connectionConsumer.accept(reader, writer); }; } - private static void connectToServer(ThrowingBiConsumer connectionConsumer) throws Exception { + private static void connectToServer(ThrowingBiConsumer, Consumer> connectionConsumer) throws Exception { try (var server = new Server()) { server.start(); createConnection(server, connectionConsumer); } } - private static void createConnection(Server server, ThrowingBiConsumer connectionConsumer) throws Exception { + private static void createConnection(Server server, ThrowingBiConsumer, Consumer> 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); + connectionConsumer.accept(() -> { + try { + return reader.readLine(); + } catch (IOException e) { + throw new RuntimeException(e); + } + }, line -> { + try { + writer.write(line + "\r\n"); + writer.flush(); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); } }