From 2b1d5930023d56514eaf05265e10a02e65daf464 Mon Sep 17 00:00:00 2001 From: shrapnelnet Date: Fri, 14 Aug 2026 18:42:21 +0100 Subject: [PATCH] Add operator test Signed-off-by: observer --- .../com/shr4pnel/ferretirc/IrcClientTest.kt | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/test/kotlin/com/shr4pnel/ferretirc/IrcClientTest.kt b/src/test/kotlin/com/shr4pnel/ferretirc/IrcClientTest.kt index 85a75d1..fccbf61 100644 --- a/src/test/kotlin/com/shr4pnel/ferretirc/IrcClientTest.kt +++ b/src/test/kotlin/com/shr4pnel/ferretirc/IrcClientTest.kt @@ -5,7 +5,6 @@ import io.github.oshai.kotlinlogging.KotlinLogging import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.withTimeout import kotlinx.coroutines.withTimeoutOrNull import com.shr4pnel.ferretirc.net.messages.ClientMessage as Message import org.junit.jupiter.api.AfterAll @@ -15,8 +14,6 @@ import java.io.File import java.lang.ProcessBuilder import kotlin.test.assertEquals import kotlin.test.assertNotNull -import kotlin.time.Duration.Companion.microseconds -import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.seconds class IrcClientTest { @@ -52,7 +49,12 @@ class IrcClientTest { @JvmStatic @AfterAll - fun shutdown() = processes.forEach { it.destroy() } + fun shutdown() = runBlocking { + logger.info { "Closing server." } + client.queueMessage(Message.Die()) + client.waitForNext() + processes.forEach { it.destroy() } + } } @Test @@ -74,5 +76,18 @@ class IrcClientTest { } assertNotNull(pong, "Reached timeout while waiting for PONG") assertEquals(token, pong.token, "Token in PING did not match PONG") + logger.info { "Received PING" } + } + + @Test + fun oper() = runBlocking { + client.queueMessage(Message.Oper("shr4p", "password")) + val mode = withTimeoutOrNull(1.seconds) { + client.waitForNext() + } + assertNotNull(mode, "Timed out waiting for OPER MODE response") + assertEquals("shr4p", mode.operatorName, "Received incorrect operator name in MODE") + assertEquals("+o", mode.pMask, "Received unexpected mask in MODE") + logger.info { "Received MODE with mask ${mode.pMask}" } } }