Skip to content

Commit cbc9c57

Browse files
committed
Handle CancellationException gracefully and enable ignored tests
1 parent fdecf6b commit cbc9c57

File tree

2 files changed

+6
-7
lines changed

2 files changed

+6
-7
lines changed

integration-test/src/commonTest/kotlin/io/modelcontextprotocol/kotlin/sdk/client/WebSocketTransportTest.kt renamed to integration-test/src/jvmTest/kotlin/io/modelcontextprotocol/kotlin/sdk/client/WebSocketTransportTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@ import io.modelcontextprotocol.kotlin.sdk.server.mcpWebSocket
66
import io.modelcontextprotocol.kotlin.sdk.server.mcpWebSocketTransport
77
import io.modelcontextprotocol.kotlin.sdk.shared.BaseTransportTest
88
import kotlinx.coroutines.CompletableDeferred
9-
import kotlin.test.Ignore
10-
import kotlin.test.Test
9+
import org.junit.jupiter.api.Test
10+
import org.junit.jupiter.api.Timeout
11+
import java.util.concurrent.TimeUnit
1112

13+
@Timeout(30, unit = TimeUnit.SECONDS)
1214
class WebSocketTransportTest : BaseTransportTest() {
1315
@Test
14-
@Ignore // "Test disabled for investigation #17"
1516
fun `should start then close cleanly`() = testApplication {
1617
install(WebSockets)
1718
routing {
@@ -26,7 +27,6 @@ class WebSocketTransportTest : BaseTransportTest() {
2627
}
2728

2829
@Test
29-
@Ignore // "Test disabled for investigation #17"
3030
fun `should read messages`() = testApplication {
3131
val clientFinished = CompletableDeferred<Unit>()
3232

kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/shared/WebSocketMcpTransport.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import io.ktor.websocket.close
77
import io.ktor.websocket.readText
88
import io.modelcontextprotocol.kotlin.sdk.types.JSONRPCMessage
99
import io.modelcontextprotocol.kotlin.sdk.types.McpJson
10+
import kotlinx.coroutines.CancellationException
1011
import kotlinx.coroutines.CoroutineName
1112
import kotlinx.coroutines.CoroutineScope
12-
import kotlinx.coroutines.InternalCoroutinesApi
1313
import kotlinx.coroutines.SupervisorJob
1414
import kotlinx.coroutines.channels.ClosedReceiveChannelException
1515
import kotlinx.coroutines.job
@@ -80,9 +80,8 @@ public abstract class WebSocketMcpTransport : AbstractTransport() {
8080
}
8181
}
8282

83-
@OptIn(InternalCoroutinesApi::class)
8483
session.coroutineContext.job.invokeOnCompletion {
85-
if (it != null) {
84+
if (it != null && it !is CancellationException) {
8685
_onError.invoke(it)
8786
} else {
8887
invokeOnCloseCallback()

0 commit comments

Comments
 (0)