From 61c634a65ed2e1183080d16a462c2472bd4b0d6f Mon Sep 17 00:00:00 2001 From: Mitravanu Rout <74468172+imitravanu@users.noreply.github.com> Date: Mon, 19 Oct 2026 11:54:46 +0530 Subject: [PATCH] test: cover SSH console newline normalization --- .../SSHServerConsoleReceiveTest.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/test/java/com/osiris/autoplug/client/network/online/connections/SSHServerConsoleReceiveTest.java diff --git a/src/test/java/com/osiris/autoplug/client/network/online/connections/SSHServerConsoleReceiveTest.java b/src/test/java/com/osiris/autoplug/client/network/online/connections/SSHServerConsoleReceiveTest.java new file mode 100644 index 00000000..67143066 --- /dev/null +++ b/src/test/java/com/osiris/autoplug/client/network/online/connections/SSHServerConsoleReceiveTest.java @@ -0,0 +1,77 @@ +package com.osiris.autoplug.client.network.online.connections; + +import org.junit.jupiter.api.Test; +import java.io.ByteArrayOutputStream; +import java.nio.charset.StandardCharsets; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class SSHServerConsoleReceiveTest { + private String broadcast(String... messages) { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + SSHServerConsoleReceive console = new SSHServerConsoleReceive(); + console.setOutputStream(output); + for (String message : messages) console.broadcast(message); + return new String(output.toByteArray(), StandardCharsets.UTF_8); + } + + @Test + void convertsLinuxLineEndings() { + assertEquals("one\r\ntwo\r\n", broadcast("one\ntwo\n")); + } + + @Test + void preservesWindowsLineEndings() { + assertEquals("one\r\ntwo\r\n", broadcast("one\r\ntwo\r\n")); + } + + @Test + void convertsMixedLineEndingsWithoutDoublingCarriageReturns() { + assertEquals("one\r\ntwo\r\nthree\r\n", broadcast("one\r\ntwo\nthree")); + } + + @Test + void terminatesAnUnterminatedMessage() { + assertEquals("one\r\n", broadcast("one")); + } + + @Test + void completesATrailingCarriageReturn() { + assertEquals("one\r\n", broadcast("one\r")); + } + + @Test + void preservesBlankLines() { + assertEquals("one\r\n\r\ntwo\r\n", broadcast("one\n\ntwo\n")); + } + + @Test + void preservesTerminalControlSequences() { + assertEquals("\u001b[32mgreen\u001b[0m\r\n", broadcast("\u001b[32mgreen\u001b[0m\n")); + } + + @Test + void preservesStandaloneCarriageReturnsInsideAMessage() { + assertEquals("10%\r20%\r\n", broadcast("10%\r20%\n")); + } + + @Test + void preservesUtf8Content() { + assertEquals("नमस्ते 🌍\r\n", broadcast("नमस्ते 🌍\n")); + } + + @Test + void terminatesAnEmptyMessage() { + assertEquals("\r\n", broadcast("")); + } + + @Test + void preservesAnAlreadyTerminatedEmptyLine() { + assertEquals("\r\n", broadcast("\n")); + } + + @Test + void handlesSuccessiveBroadcasts() { + assertEquals("one\r\ntwo\r\n", broadcast("one", "two\n")); + } +} +