Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ jobs:
:kotlin-sdk-client:compileKotlinJvm \
:kotlin-sdk-server:compileKotlinJvm \
:kotlin-sdk:compileKotlinJvm \
:kotlin-sdk-test:compileKotlinJvm \
:integration-test:compileKotlinJvm \
:conformance-test:testClasses \
-Pkotlin.incremental=false \
--no-daemon --stacktrace --rerun-tasks

Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ dependencies {
kover(project(":kotlin-sdk-core"))
kover(project(":kotlin-sdk-client"))
kover(project(":kotlin-sdk-server"))
kover(project(":kotlin-sdk-test"))
"kover"(project(":integration-test"))
}

subprojects {
Expand Down
1 change: 1 addition & 0 deletions conformance-test/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ plugins {
dependencies {
testImplementation(project(":kotlin-sdk"))
testImplementation(kotlin("test"))
testImplementation(project(":test-utils"))
testImplementation(libs.kotlin.logging)
testImplementation(libs.ktor.client.cio)
testImplementation(libs.ktor.server.cio)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import kotlin.properties.Delegates

private val logger = KotlinLogging.logger {}

private const val CONFORMANCE_VERSION = "0.1.8"

enum class TransportType {
SSE,
WEBSOCKET,
Expand Down Expand Up @@ -215,7 +217,7 @@ class ConformanceTest {
val serverUrl = "http://127.0.0.1:$serverPort/mcp"
ProcessBuilder(
"npx",
"@modelcontextprotocol/conformance",
"@modelcontextprotocol/conformance@$CONFORMANCE_VERSION",
"server",
"--url",
serverUrl,
Expand All @@ -230,7 +232,7 @@ class ConformanceTest {
val serverUrl = "ws://127.0.0.1:$serverPort/ws"
ProcessBuilder(
"npx",
"@modelcontextprotocol/conformance",
"@modelcontextprotocol/conformance@$CONFORMANCE_VERSION",
"server",
"--url",
serverUrl,
Expand Down Expand Up @@ -274,7 +276,7 @@ class ConformanceTest {

val processBuilder = ProcessBuilder(
"npx",
"@modelcontextprotocol/conformance",
"@modelcontextprotocol/conformance@$CONFORMANCE_VERSION",
"client",
"--command",
clientCommand.joinToString(" "),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,7 @@ kotlin {
}
jvmTest {
dependencies {
implementation(libs.awaitility)
implementation(libs.junit.jupiter.params)
runtimeOnly(libs.slf4j.simple)
implementation(project(":test-utils"))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package io.modelcontextprotocol.kotlin.sdk.client
import io.modelcontextprotocol.kotlin.sdk.shared.BaseTransportTest
import io.modelcontextprotocol.kotlin.sdk.types.Implementation
import io.modelcontextprotocol.kotlin.sdk.types.McpException
import io.modelcontextprotocol.kotlin.test.utils.createSleepyProcessBuilder
import io.modelcontextprotocol.kotlin.test.utils.createTeeProcessBuilder
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runTest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ import io.ktor.server.routing.routing
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.client.SseClientTransport
import io.modelcontextprotocol.kotlin.sdk.client.StdioClientTransport
import io.modelcontextprotocol.kotlin.sdk.integration.utils.Retry
import io.modelcontextprotocol.kotlin.sdk.server.Server
import io.modelcontextprotocol.kotlin.sdk.server.ServerOptions
import io.modelcontextprotocol.kotlin.sdk.server.StdioServerTransport
import io.modelcontextprotocol.kotlin.sdk.server.mcp
import io.modelcontextprotocol.kotlin.sdk.types.Implementation
import io.modelcontextprotocol.kotlin.sdk.types.ServerCapabilities
import io.modelcontextprotocol.kotlin.test.utils.Retry
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
import kotlinx.io.Sink
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ import io.modelcontextprotocol.kotlin.sdk.Implementation
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.client.SseClientTransport
import io.modelcontextprotocol.kotlin.sdk.client.StdioClientTransport
import io.modelcontextprotocol.kotlin.sdk.integration.utils.Retry
import io.modelcontextprotocol.kotlin.sdk.server.Server
import io.modelcontextprotocol.kotlin.sdk.server.ServerOptions
import io.modelcontextprotocol.kotlin.sdk.server.StdioServerTransport
import io.modelcontextprotocol.kotlin.sdk.server.mcp
import io.modelcontextprotocol.kotlin.test.utils.Retry
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withTimeout
import kotlinx.io.Sink
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.modelcontextprotocol.kotlin.sdk.integration.typescript

import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import org.junit.jupiter.api.Test
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.modelcontextprotocol.kotlin.sdk.integration.typescript

import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Timeout
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.client.StdioClientTransport
import io.modelcontextprotocol.kotlin.sdk.client.mcpStreamableHttp
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.sse.KotlinServerForTsClient
import io.modelcontextprotocol.kotlin.sdk.integration.utils.Retry
import io.modelcontextprotocol.kotlin.sdk.server.Server
import io.modelcontextprotocol.kotlin.sdk.server.StdioServerTransport
import io.modelcontextprotocol.kotlin.sdk.types.Implementation
import io.modelcontextprotocol.kotlin.test.utils.Retry
import kotlinx.coroutines.withTimeout
import kotlinx.io.Sink
import kotlinx.io.Source
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package io.modelcontextprotocol.kotlin.sdk.integration.typescript.sse
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TsTestBase
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package io.modelcontextprotocol.kotlin.sdk.integration.typescript.sse
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.AbstractKotlinClientTsServerTest
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import kotlinx.coroutines.withTimeout
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import io.modelcontextprotocol.kotlin.sdk.TextContent
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TsTestBase
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package io.modelcontextprotocol.kotlin.sdk.integration.typescript.sse
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.OldSchemaAbstractKotlinClientTsServerTest
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import kotlinx.coroutines.withTimeout
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package io.modelcontextprotocol.kotlin.sdk.integration.typescript.sse

import io.modelcontextprotocol.kotlin.sdk.integration.typescript.AbstractTsClientKotlinServerTest
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.BeforeEach

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package io.modelcontextprotocol.kotlin.sdk.integration.typescript.sse

import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TsTestBase
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.coroutineScope
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package io.modelcontextprotocol.kotlin.sdk.integration.typescript.stdio
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TsTestBase
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package io.modelcontextprotocol.kotlin.sdk.integration.typescript.stdio
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.AbstractKotlinClientTsServerTest
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI

@DisabledOnCI
class KotlinClientTsServerTestStdio : AbstractKotlinClientTsServerTest() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import io.modelcontextprotocol.kotlin.sdk.TextContent
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TsTestBase
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package io.modelcontextprotocol.kotlin.sdk.integration.typescript.stdio
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.OldSchemaAbstractKotlinClientTsServerTest
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI

@DisabledOnCI
class OldSchemaKotlinClientTsServerTestStdio : OldSchemaAbstractKotlinClientTsServerTest() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package io.modelcontextprotocol.kotlin.sdk.integration.typescript.stdio

import io.modelcontextprotocol.kotlin.sdk.integration.typescript.AbstractTsClientKotlinServerTest
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI

@DisabledOnCI
class TsClientKotlinServerTestStdio : AbstractTsClientKotlinServerTest() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package io.modelcontextprotocol.kotlin.sdk.integration.typescript.stdio

import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TransportKind
import io.modelcontextprotocol.kotlin.sdk.integration.typescript.TsTestBase
import io.modelcontextprotocol.kotlin.sdk.integration.utils.DisabledOnCI
import io.modelcontextprotocol.kotlin.test.utils.DisabledOnCI
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Timeout
import org.junit.jupiter.api.condition.EnabledOnOs
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// @ts-nocheck
import { z } from 'zod';
import {z} from 'zod';
import path from 'node:path';
import { pathToFileURL } from 'node:url';
import {pathToFileURL} from 'node:url';

const SDK_DIR = process.env.TYPESCRIPT_SDK_DIR;
if (!SDK_DIR) {
Expand Down
3 changes: 2 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ dependencyResolutionManagement {
}

include(
":test-utils",
":kotlin-sdk-core",
":kotlin-sdk-client",
":kotlin-sdk-server",
":kotlin-sdk",
":kotlin-sdk-test",
":integration-test",
":conformance-test",
)
22 changes: 22 additions & 0 deletions test-utils/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
plugins {
kotlin("jvm")
}

kotlin {
explicitApi()

dependencies {
api(kotlin("test"))
api(libs.kotest.assertions.core)
api(libs.kotest.assertions.json)
api(libs.kotlinx.coroutines.test)
api(libs.mockk)
api(libs.awaitility)
api(libs.junit.jupiter.params)
runtimeOnly(libs.slf4j.simple)
}

tasks.withType<Test> {
useJUnitPlatform()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.modelcontextprotocol.kotlin.sdk.integration.utils
package io.modelcontextprotocol.kotlin.test.utils

import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable

@DisabledIfEnvironmentVariable(named = "CI", matches = "true")
annotation class DisabledOnCI
public annotation class DisabledOnCI
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.modelcontextprotocol.kotlin.sdk.integration.utils
package io.modelcontextprotocol.kotlin.test.utils

import org.junit.jupiter.api.extension.ExtendWith
import org.junit.jupiter.api.extension.ExtensionContext
Expand All @@ -7,15 +7,16 @@ import org.junit.jupiter.api.extension.InvocationInterceptor.Invocation
import org.junit.jupiter.api.extension.ReflectiveInvocationContext
import org.opentest4j.TestAbortedException
import java.lang.reflect.AnnotatedElement
import java.lang.reflect.InvocationTargetException
import java.lang.reflect.Method
import java.util.Optional

@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
@ExtendWith(RetryExtension::class)
annotation class Retry(val times: Int = 3, val delayMs: Long = 1000)
public annotation class Retry(val times: Int = 3, val delayMs: Long = 1000)

class RetryExtension : InvocationInterceptor {
public class RetryExtension : InvocationInterceptor {
override fun interceptTestMethod(
invocation: Invocation<Void>,
invocationContext: ReflectiveInvocationContext<Method>,
Expand Down Expand Up @@ -65,7 +66,7 @@ class RetryExtension : InvocationInterceptor {
return
} catch (t: Throwable) {
if (t is TestAbortedException) throw t
lastError = if (t is java.lang.reflect.InvocationTargetException) t.targetException ?: t else t
lastError = if (t is InvocationTargetException) t.targetException ?: t else t
if (attempt == maxAttempts) {
println(
"[Retry] Giving up after $attempt attempts for ${
Expand Down
Loading
Loading