kotlinx-coroutines-test, runTest replaces runBlocking
This commit is contained in:
@@ -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()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user