Skip to content

Commit 1a7ea4e

Browse files
committed
Fix tests
1 parent ef1cf92 commit 1a7ea4e

File tree

3 files changed

+100
-31
lines changed

3 files changed

+100
-31
lines changed

kotlin-sdk-test/src/jvmTest/kotlin/io/modelcontextprotocol/kotlin/sdk/integration/kotlin/AbstractResourceIntegrationTest.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package io.modelcontextprotocol.kotlin.sdk.integration.kotlin
22

33
import io.modelcontextprotocol.kotlin.sdk.BlobResourceContents
4-
import io.modelcontextprotocol.kotlin.sdk.EmptyRequestResult
5-
import io.modelcontextprotocol.kotlin.sdk.Method
64
import io.modelcontextprotocol.kotlin.sdk.ReadResourceRequest
75
import io.modelcontextprotocol.kotlin.sdk.ReadResourceResult
86
import io.modelcontextprotocol.kotlin.sdk.ServerCapabilities
@@ -16,6 +14,7 @@ import kotlinx.coroutines.test.runTest
1614
import org.junit.jupiter.api.Test
1715
import org.junit.jupiter.api.assertThrows
1816
import java.util.concurrent.atomic.AtomicBoolean
17+
import kotlin.test.Ignore
1918
import kotlin.test.assertEquals
2019
import kotlin.test.assertNotNull
2120
import kotlin.test.assertTrue
@@ -211,9 +210,7 @@ abstract class AbstractResourceIntegrationTest : KotlinTestBase() {
211210
val invalidUri = "test://nonexistent.txt"
212211

213212
val exception = assertThrows<IllegalStateException> {
214-
runBlocking {
215-
client.readResource(ReadResourceRequest(uri = invalidUri))
216-
}
213+
client.readResource(ReadResourceRequest(uri = invalidUri))
217214
}
218215

219216
val msg = exception.message ?: ""
@@ -310,4 +307,16 @@ abstract class AbstractResourceIntegrationTest : KotlinTestBase() {
310307
assertTrue(result.contents.isNotEmpty(), "Result contents should not be empty")
311308
}
312309
}
310+
311+
@Test
312+
@Ignore("Blocked by https://github.com/modelcontextprotocol/kotlin-sdk/issues/249")
313+
fun testSubscribeAndUnsubscribe() {
314+
runTest {
315+
val subscribeResult = client.subscribeResource(SubscribeRequest(uri = testResourceUri))
316+
assertNotNull(subscribeResult, "Subscribe result should not be null")
317+
318+
val unsubscribeResult = client.unsubscribeResource(UnsubscribeRequest(uri = testResourceUri))
319+
assertNotNull(unsubscribeResult, "Unsubscribe result should not be null")
320+
}
321+
}
313322
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package io.modelcontextprotocol.kotlin.sdk.integration.kotlin
2+
3+
import io.modelcontextprotocol.kotlin.sdk.ReadResourceRequest
4+
import io.modelcontextprotocol.kotlin.sdk.ReadResourceResult
5+
import io.modelcontextprotocol.kotlin.sdk.ServerCapabilities
6+
import io.modelcontextprotocol.kotlin.sdk.SubscribeRequest
7+
import io.modelcontextprotocol.kotlin.sdk.TextResourceContents
8+
import io.modelcontextprotocol.kotlin.sdk.UnsubscribeRequest
9+
import io.modelcontextprotocol.kotlin.sdk.integration.utils.TestUtils.runTest
10+
import kotlin.test.Ignore
11+
import org.junit.jupiter.api.Test
12+
import kotlin.test.assertEquals
13+
import kotlin.test.assertNotNull
14+
import kotlin.test.assertTrue
15+
16+
class ResourceIntegrationTest : KotlinTestBase() {
17+
18+
override val port = 3005
19+
private val testResourceUri = "test://example.txt"
20+
private val testResourceName = "Test Resource"
21+
private val testResourceDescription = "A test resource for integration testing"
22+
private val testResourceContent = "This is the content of the test resource."
23+
24+
override fun configureServerCapabilities(): ServerCapabilities = ServerCapabilities(
25+
resources = ServerCapabilities.Resources(
26+
subscribe = true,
27+
listChanged = true,
28+
),
29+
)
30+
31+
override fun configureServer() {
32+
server.addResource(
33+
uri = testResourceUri,
34+
name = testResourceName,
35+
description = testResourceDescription,
36+
mimeType = "text/plain",
37+
) { request ->
38+
ReadResourceResult(
39+
contents = listOf(
40+
TextResourceContents(
41+
text = testResourceContent,
42+
uri = request.uri,
43+
mimeType = "text/plain",
44+
),
45+
),
46+
)
47+
}
48+
}
49+
50+
@Test
51+
fun testListResources() = runTest {
52+
val result = client.listResources()
53+
54+
assertNotNull(result, "List resources result should not be null")
55+
assertTrue(result.resources.isNotEmpty(), "Resources list should not be empty")
56+
57+
val testResource = result.resources.find { it.uri == testResourceUri }
58+
assertNotNull(testResource, "Test resource should be in the list")
59+
assertEquals(testResourceName, testResource.name, "Resource name should match")
60+
assertEquals(testResourceDescription, testResource.description, "Resource description should match")
61+
}
62+
63+
@Test
64+
fun testReadResource() = runTest {
65+
val result = client.readResource(ReadResourceRequest(uri = testResourceUri))
66+
67+
assertNotNull(result, "Read resource result should not be null")
68+
assertTrue(result.contents.isNotEmpty(), "Resource contents should not be empty")
69+
70+
val content = result.contents.firstOrNull() as? TextResourceContents
71+
assertNotNull(content, "Resource content should be TextResourceContents")
72+
assertEquals(testResourceContent, content.text, "Resource content should match")
73+
}
74+
75+
@Test
76+
@Ignore("Blocked by https://github.com/modelcontextprotocol/kotlin-sdk/issues/249")
77+
fun testSubscribeAndUnsubscribe() {
78+
runTest {
79+
val subscribeResult = client.subscribeResource(SubscribeRequest(uri = testResourceUri))
80+
assertNotNull(subscribeResult, "Subscribe result should not be null")
81+
82+
val unsubscribeResult = client.unsubscribeResource(UnsubscribeRequest(uri = testResourceUri))
83+
assertNotNull(unsubscribeResult, "Unsubscribe result should not be null")
84+
}
85+
}
86+
}

kotlin-sdk-test/src/jvmTest/kotlin/io/modelcontextprotocol/kotlin/sdk/integration/typescript/sse/KotlinServerForTsClientSse.kt

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -254,32 +254,6 @@ class KotlinServerForTsClient {
254254
) { request ->
255255
val name = (request.arguments["name"] as? JsonPrimitive)?.content ?: "World"
256256

257-
server.sendToolListChanged()
258-
server.sendLoggingMessage(
259-
LoggingMessageNotification(
260-
LoggingMessageNotification.Params(
261-
level = LoggingLevel.info,
262-
data = JsonPrimitive("Preparing greeting for $name"),
263-
),
264-
),
265-
)
266-
server.sendLoggingMessage(
267-
LoggingMessageNotification(
268-
LoggingMessageNotification.Params(
269-
level = LoggingLevel.info,
270-
data = JsonPrimitive("Halfway there for $name"),
271-
),
272-
),
273-
)
274-
server.sendLoggingMessage(
275-
LoggingMessageNotification(
276-
LoggingMessageNotification.Params(
277-
level = LoggingLevel.info,
278-
data = JsonPrimitive("Done sending greetings to $name"),
279-
),
280-
),
281-
)
282-
283257
CallToolResult(
284258
content = listOf(TextContent("Multiple greetings sent to $name!")),
285259
structuredContent = buildJsonObject {

0 commit comments

Comments
 (0)