kotlinx-coroutines-test, runTest replaces runBlocking

This commit is contained in:
2026-09-15 03:09:49 +01:00
parent 521dc00757
commit 101761bade
2 changed files with 9 additions and 29 deletions
+1
View File
@@ -14,6 +14,7 @@ repositories {
dependencies { dependencies {
testImplementation(kotlin("test")) testImplementation(kotlin("test"))
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.11.0")
implementation("io.ktor:ktor-client-core:$ktorVersion") implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-cio:$ktorVersion") implementation("io.ktor:ktor-client-cio:$ktorVersion")
implementation("io.ktor:ktor-network:$ktorVersion") implementation("io.ktor:ktor-network:$ktorVersion")
@@ -2,7 +2,6 @@ package com.shr4pnel.ferretirc
import com.shr4pnel.ferretirc.net.messages.ServerMessage import com.shr4pnel.ferretirc.net.messages.ServerMessage
import io.github.oshai.kotlinlogging.KotlinLogging import io.github.oshai.kotlinlogging.KotlinLogging
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.AfterAll import org.junit.jupiter.api.AfterAll
@@ -11,8 +10,6 @@ import org.junit.jupiter.api.Test
import java.io.File import java.io.File
import java.lang.ProcessBuilder import java.lang.ProcessBuilder
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.time.Duration.Companion.seconds
import com.shr4pnel.ferretirc.net.messages.ClientMessage as Message import com.shr4pnel.ferretirc.net.messages.ClientMessage as Message
class IrcClientTest { class IrcClientTest {
@@ -22,10 +19,11 @@ class IrcClientTest {
lateinit var processes: MutableList<Process> lateinit var processes: MutableList<Process>
val client = IrcClient("localhost", 6667, enableLogging = true) val client = IrcClient("localhost", 6667, enableLogging = true)
private val logger = KotlinLogging.logger {} private val logger = KotlinLogging.logger {}
val guestUser = IrcClient("localhost", 6667)
@JvmStatic @JvmStatic
@BeforeAll @BeforeAll
fun setup() = fun setup(): Unit =
runBlocking { runBlocking {
val logFile = File("src/test/resources/logs/ngircd.log") val logFile = File("src/test/resources/logs/ngircd.log")
val ngircdConfigPath = javaClass.classLoader.getResource("ngircd.conf")!!.path val ngircdConfigPath = javaClass.classLoader.getResource("ngircd.conf")!!.path
@@ -59,38 +57,20 @@ class IrcClientTest {
} }
} }
@Test
fun sample() {
client.scope.launch {
}
}
@Test @Test
fun pingGetsPong() = fun pingGetsPong() =
runBlocking { runTest {
val token = "ACK" val token = "ACK"
logger.info { "Sending PING $token" } val msg = Message.Ping(token)
client.queueMessage(Message.Ping(token)) val pong = client.queueAndWaitForNext<ServerMessage.Pong>(msg)
logger.info { "Waiting to receive PONG" }
val pong =
withTimeoutOrNull(1.seconds) {
client.waitForNext<ServerMessage.Pong> { it.token.equals(token) }
}
assertNotNull(pong, "Reached timeout while waiting for PONG")
assertEquals(token, pong.token, "Token in PING did not match PONG") assertEquals(token, pong.token, "Token in PING did not match PONG")
logger.info { "Received PING" }
} }
@Test @Test
fun oper() = fun oper() =
runBlocking { runTest {
client.queueMessage(Message.Oper("shr4p", "password")) client.queueMessage(Message.Oper("shr4p", "password"))
val mode = val mode = client.waitForNext<ServerMessage.Mode>()
withTimeoutOrNull(1.seconds) {
client.waitForNext<ServerMessage.Mode>()
}
assertNotNull(mode, "Timed out waiting for OPER MODE response")
assertEquals("shr4p", mode.operatorName, "Received incorrect operator name in MODE") assertEquals("shr4p", mode.operatorName, "Received incorrect operator name in MODE")
assertEquals("+o", mode.pMask, "Received unexpected mask in MODE") assertEquals("+o", mode.pMask, "Received unexpected mask in MODE")
logger.info { "Received MODE with mask ${mode.pMask}" } logger.info { "Received MODE with mask ${mode.pMask}" }
@@ -98,7 +78,7 @@ class IrcClientTest {
@Test @Test
fun listChannels() = fun listChannels() =
runBlocking { runTest {
val channels = client.server.fetchChannels() val channels = client.server.fetchChannels()
assert(channels.isNotEmpty()) assert(channels.isNotEmpty())
client.queueMessage(Message.Join(channels.first())) client.queueMessage(Message.Join(channels.first()))
@@ -114,6 +94,5 @@ class IrcClientTest {
logger.debug { "Message: $message, Received: $receivedMessage" } logger.debug { "Message: $message, Received: $receivedMessage" }
assertEquals(message.message, receivedMessage.message) assertEquals(message.message, receivedMessage.message)
assertEquals(message.target.chanName, receivedMessage.targets.first()) assertEquals(message.target.chanName, receivedMessage.targets.first())
guestUser.close()
} }
} }