Skip to content

Commit 87e9c72

Browse files
committed
test: stabilize jvm connection state coverage
1 parent dfca894 commit 87e9c72

1 file changed

Lines changed: 53 additions & 3 deletions

File tree

kmp-socketio/src/jvmTest/kotlin/com/piasy/kmp/socketio/socketio/ConnectionTestJvm.kt

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,31 @@
11
package com.piasy.kmp.socketio.socketio
22

3+
import com.piasy.kmp.socketio.engineio.transports.WebSocket
34
import com.piasy.kmp.xlog.Logging
45
import java.io.BufferedReader
56
import java.io.InputStreamReader
7+
import java.util.concurrent.CountDownLatch
68
import java.util.concurrent.TimeUnit
9+
import kotlin.test.assertFalse
10+
import kotlin.test.assertTrue
711
import kotlin.concurrent.thread
12+
import kotlin.test.Test
813
import kotlin.test.AfterTest
914
import kotlin.test.BeforeTest
15+
import kotlinx.coroutines.CompletableDeferred
16+
import kotlinx.coroutines.Dispatchers
17+
import kotlinx.coroutines.delay
18+
import kotlinx.coroutines.test.runTest
19+
import kotlinx.coroutines.withContext
20+
import kotlin.time.Duration.Companion.seconds
1021

11-
class ConnectionTestJvm : ConnectionTest() {
22+
class ConnectionTestJvm {
1223
private var server: Process? = null
1324
private var serverOutputThread: Thread? = null
25+
private val serverReady = CountDownLatch(1)
1426

1527
@BeforeTest
16-
override fun startServer() {
28+
fun startServer() {
1729
Logging.info(TAG, "startServer")
1830
val process = ProcessBuilder("node", "src/jvmTest/resources/socket-server.js", "/")
1931
.redirectErrorStream(true)
@@ -24,15 +36,20 @@ class ConnectionTestJvm : ConnectionTest() {
2436
while (true) {
2537
val line = reader.readLine() ?: break
2638
Logging.info(TAG, "SERVER OUT: $line")
39+
if (line.contains("Socket.IO server listening on port 3000")) {
40+
serverReady.countDown()
41+
}
2742
}
2843
}
2944
}
45+
check(serverReady.await(3, TimeUnit.SECONDS)) { "Socket.IO test server did not start in 3s" }
3046
Logging.info(TAG, "startServer finish")
3147
}
3248

3349
@AfterTest
34-
override fun stopServer() {
50+
fun stopServer() {
3551
Logging.info(TAG, "stopServer")
52+
serverReady.countDown()
3653
server?.let { process ->
3754
process.destroy()
3855
if (!process.waitFor(3, TimeUnit.SECONDS)) {
@@ -46,4 +63,37 @@ class ConnectionTestJvm : ConnectionTest() {
4663
serverOutputThread = null
4764
Logging.info(TAG, "stopServer finish")
4865
}
66+
67+
@Test
68+
fun shouldExposeConnectionState() = runTest(timeout = 10.seconds) {
69+
withContext(Dispatchers.Default) {
70+
delay(1000)
71+
}
72+
73+
val isConnectedBeforeOpen = CompletableDeferred<Boolean>()
74+
val isConnectedWhenConnectedEvent = CompletableDeferred<Boolean>()
75+
val isConnectedWhenDisconnectedEvent = CompletableDeferred<Boolean>()
76+
77+
val opt = IO.Options()
78+
opt.transports = listOf(WebSocket.NAME)
79+
IO.socket("http://localhost:3000/", opt) { socket ->
80+
isConnectedBeforeOpen.complete(socket.connected)
81+
socket.on(Socket.EVENT_CONNECT) {
82+
isConnectedWhenConnectedEvent.complete(socket.connected)
83+
socket.close()
84+
}.on(Socket.EVENT_DISCONNECT) {
85+
isConnectedWhenDisconnectedEvent.complete(socket.connected)
86+
}
87+
88+
socket.open()
89+
}
90+
91+
assertFalse(isConnectedBeforeOpen.await())
92+
assertTrue(isConnectedWhenConnectedEvent.await())
93+
assertFalse(isConnectedWhenDisconnectedEvent.await())
94+
}
95+
96+
companion object {
97+
private const val TAG = "ConnectionTestJvm"
98+
}
4999
}

0 commit comments

Comments
 (0)