Skip to content

Commit 28165ae

Browse files
committed
Move mcp-core integration tests to mcp-test package
- The integration tests pass with both Jackson 2 and Jackson 3. - Modified McpSchemaTests.testContentDeserializationWrongType to work with both Jackson 2 and Jackson 3. Signed-off-by: Daniel Garnier-Moiroux <git@garnier.wf>
1 parent d8ea3f0 commit 28165ae

File tree

46 files changed

+135
-94
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+135
-94
lines changed

mcp-core/pom.xml

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -93,43 +93,6 @@
9393
<scope>provided</scope>
9494
</dependency>
9595

96-
<dependency>
97-
<groupId>org.springframework</groupId>
98-
<artifactId>spring-webmvc</artifactId>
99-
<version>${springframework.version}</version>
100-
<scope>test</scope>
101-
</dependency>
102-
103-
<dependency>
104-
<groupId>tools.jackson.core</groupId>
105-
<artifactId>jackson-databind</artifactId>
106-
<version>${jackson3.version}</version>
107-
<scope>test</scope>
108-
</dependency>
109-
110-
<dependency>
111-
<groupId>io.projectreactor.netty</groupId>
112-
<artifactId>reactor-netty-http</artifactId>
113-
<scope>test</scope>
114-
</dependency>
115-
116-
<!-- The Spring Context is required due to the reactor-netty connector being dependent on
117-
the Spring Lifecycle, as discussed here:
118-
https://github.com/spring-projects/spring-framework/issues/31180 -->
119-
<dependency>
120-
<groupId>org.springframework</groupId>
121-
<artifactId>spring-context</artifactId>
122-
<version>${springframework.version}</version>
123-
<scope>test</scope>
124-
</dependency>
125-
126-
<dependency>
127-
<groupId>org.springframework</groupId>
128-
<artifactId>spring-test</artifactId>
129-
<version>${springframework.version}</version>
130-
<scope>test</scope>
131-
</dependency>
132-
13396
<dependency>
13497
<groupId>org.assertj</groupId>
13598
<artifactId>assertj-core</artifactId>
@@ -195,20 +158,6 @@
195158
<scope>test</scope>
196159
</dependency>
197160

198-
<!-- Tomcat dependencies for testing -->
199-
<dependency>
200-
<groupId>org.apache.tomcat.embed</groupId>
201-
<artifactId>tomcat-embed-core</artifactId>
202-
<version>${tomcat.version}</version>
203-
<scope>test</scope>
204-
</dependency>
205-
<dependency>
206-
<groupId>org.apache.tomcat.embed</groupId>
207-
<artifactId>tomcat-embed-websocket</artifactId>
208-
<version>${tomcat.version}</version>
209-
<scope>test</scope>
210-
</dependency>
211-
212161
<dependency>
213162
<groupId>org.testcontainers</groupId>
214163
<artifactId>toxiproxy</artifactId>

mcp-core/src/test/java/io/modelcontextprotocol/MockMcpClientTransport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public Mono<Void> closeGracefully() {
100100

101101
@Override
102102
public <T> T unmarshalFrom(Object data, TypeRef<T> typeRef) {
103-
return McpJsonDefaults.getDefaultMcpJsonMapper().convertValue(data, typeRef);
103+
return (T) data;
104104
}
105105

106106
}

mcp-spring/mcp-spring-webflux/src/test/java/io/modelcontextprotocol/security/WebFluxServerTransportSecurityIntegrationTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.modelcontextprotocol.client.McpSyncClient;
1212
import io.modelcontextprotocol.client.transport.WebClientStreamableHttpTransport;
1313
import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
14+
import io.modelcontextprotocol.json.McpJsonDefaults;
1415
import io.modelcontextprotocol.json.McpJsonMapper;
1516
import io.modelcontextprotocol.server.McpServer;
1617
import io.modelcontextprotocol.server.TestUtil;
@@ -194,7 +195,7 @@ public McpSyncClient createMcpClient(String baseUrl,
194195
TestOriginHeaderExchangeFilterFunction exchangeFilterFunction) {
195196
var transport = WebFluxSseClientTransport
196197
.builder(WebClient.builder().baseUrl(baseUrl).filter(exchangeFilterFunction))
197-
.jsonMapper(McpJsonMapper.getDefault())
198+
.jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
198199
.build();
199200
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
200201
}
@@ -226,7 +227,7 @@ public McpSyncClient createMcpClient(String baseUrl,
226227
TestOriginHeaderExchangeFilterFunction exchangeFilterFunction) {
227228
var transport = WebClientStreamableHttpTransport
228229
.builder(WebClient.builder().baseUrl(baseUrl).filter(exchangeFilterFunction))
229-
.jsonMapper(McpJsonMapper.getDefault())
230+
.jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
230231
.openConnectionOnStartup(true)
231232
.build();
232233
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
@@ -259,7 +260,7 @@ public McpSyncClient createMcpClient(String baseUrl,
259260
TestOriginHeaderExchangeFilterFunction exchangeFilterFunction) {
260261
var transport = WebClientStreamableHttpTransport
261262
.builder(WebClient.builder().baseUrl(baseUrl).filter(exchangeFilterFunction))
262-
.jsonMapper(McpJsonMapper.getDefault())
263+
.jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
263264
.openConnectionOnStartup(true)
264265
.build();
265266
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();

mcp-spring/mcp-spring-webmvc/src/test/java/io/modelcontextprotocol/security/ServerTransportSecurityIntegrationTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport;
1616
import io.modelcontextprotocol.client.transport.customizer.McpSyncHttpClientRequestCustomizer;
1717
import io.modelcontextprotocol.common.McpTransportContext;
18+
import io.modelcontextprotocol.json.McpJsonDefaults;
1819
import io.modelcontextprotocol.json.McpJsonMapper;
1920
import io.modelcontextprotocol.server.McpServer;
2021
import io.modelcontextprotocol.server.McpStatelessSyncServer;
@@ -209,7 +210,7 @@ static class SseConfig {
209210
McpSyncClient createMcpClient(McpSyncHttpClientRequestCustomizer requestCustomizer) {
210211
var transport = HttpClientSseClientTransport.builder(baseUrl)
211212
.httpRequestCustomizer(requestCustomizer)
212-
.jsonMapper(McpJsonMapper.getDefault())
213+
.jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
213214
.build();
214215
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
215216
}
@@ -248,7 +249,7 @@ static class StreamableHttpConfig {
248249
McpSyncClient createMcpClient(McpSyncHttpClientRequestCustomizer requestCustomizer) {
249250
var transport = HttpClientStreamableHttpTransport.builder(baseUrl)
250251
.httpRequestCustomizer(requestCustomizer)
251-
.jsonMapper(McpJsonMapper.getDefault())
252+
.jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
252253
.openConnectionOnStartup(true)
253254
.build();
254255
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();
@@ -286,7 +287,7 @@ static class StatelessConfig {
286287
McpSyncClient createMcpClient(McpSyncHttpClientRequestCustomizer requestCustomizer) {
287288
var transport = HttpClientStreamableHttpTransport.builder(baseUrl)
288289
.httpRequestCustomizer(requestCustomizer)
289-
.jsonMapper(McpJsonMapper.getDefault())
290+
.jsonMapper(McpJsonDefaults.getDefaultMcpJsonMapper())
290291
.openConnectionOnStartup(true)
291292
.build();
292293
return McpClient.sync(transport).initializationTimeout(Duration.ofMillis(500)).build();

mcp-test/pom.xml

Lines changed: 85 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<project xmlns="http://maven.apache.org/POM/4.0.0"
3-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
55
<modelVersion>4.0.0</modelVersion>
66
<parent>
77
<groupId>io.modelcontextprotocol.sdk</groupId>
@@ -33,12 +33,6 @@
3333
<version>${slf4j-api.version}</version>
3434
</dependency>
3535

36-
<dependency>
37-
<groupId>tools.jackson.core</groupId>
38-
<artifactId>jackson-databind</artifactId>
39-
<version>${jackson3.version}</version>
40-
</dependency>
41-
4236
<dependency>
4337
<groupId>io.projectreactor</groupId>
4438
<artifactId>reactor-core</artifactId>
@@ -97,8 +91,91 @@
9791
<version>${json-unit-assertj.version}</version>
9892
</dependency>
9993

94+
<!-- Test-scoped dependencies for integration tests -->
95+
<dependency>
96+
<groupId>org.springframework</groupId>
97+
<artifactId>spring-webmvc</artifactId>
98+
<version>${springframework.version}</version>
99+
<scope>test</scope>
100+
</dependency>
101+
102+
<dependency>
103+
<groupId>org.springframework</groupId>
104+
<artifactId>spring-context</artifactId>
105+
<version>${springframework.version}</version>
106+
<scope>test</scope>
107+
</dependency>
108+
109+
<dependency>
110+
<groupId>org.springframework</groupId>
111+
<artifactId>spring-test</artifactId>
112+
<version>${springframework.version}</version>
113+
<scope>test</scope>
114+
</dependency>
115+
116+
<dependency>
117+
<groupId>io.projectreactor.netty</groupId>
118+
<artifactId>reactor-netty-http</artifactId>
119+
<scope>test</scope>
120+
</dependency>
121+
122+
<dependency>
123+
<groupId>org.apache.tomcat.embed</groupId>
124+
<artifactId>tomcat-embed-core</artifactId>
125+
<version>${tomcat.version}</version>
126+
<scope>test</scope>
127+
</dependency>
128+
129+
<dependency>
130+
<groupId>org.apache.tomcat.embed</groupId>
131+
<artifactId>tomcat-embed-websocket</artifactId>
132+
<version>${tomcat.version}</version>
133+
<scope>test</scope>
134+
</dependency>
135+
136+
<dependency>
137+
<groupId>net.bytebuddy</groupId>
138+
<artifactId>byte-buddy</artifactId>
139+
<version>${byte-buddy.version}</version>
140+
<scope>test</scope>
141+
</dependency>
142+
143+
<dependency>
144+
<groupId>jakarta.servlet</groupId>
145+
<artifactId>jakarta.servlet-api</artifactId>
146+
<version>${jakarta.servlet.version}</version>
147+
<scope>test</scope>
148+
</dependency>
100149

101150
</dependencies>
102151

152+
<profiles>
153+
<profile>
154+
<id>jackson3</id>
155+
<activation>
156+
<activeByDefault>true</activeByDefault>
157+
</activation>
158+
<dependencies>
159+
<dependency>
160+
<groupId>io.modelcontextprotocol.sdk</groupId>
161+
<artifactId>mcp-json-jackson3</artifactId>
162+
<version>0.18.0-SNAPSHOT</version>
163+
<scope>test</scope>
164+
</dependency>
165+
</dependencies>
166+
</profile>
167+
<profile>
168+
<id>jackson2</id>
169+
<dependencies>
170+
<dependency>
171+
<groupId>io.modelcontextprotocol.sdk</groupId>
172+
<artifactId>mcp-json-jackson2</artifactId>
173+
<version>0.18.0-SNAPSHOT</version>
174+
<scope>test</scope>
175+
</dependency>
176+
</dependencies>
177+
</profile>
178+
</profiles>
179+
103180

104181
</project>

mcp-test/src/main/java/io/modelcontextprotocol/MockMcpTransport.java renamed to mcp-test/src/test/java/io/modelcontextprotocol/MockMcpClientTransport.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,40 @@
1515
import io.modelcontextprotocol.spec.McpSchema;
1616
import io.modelcontextprotocol.spec.McpSchema.JSONRPCNotification;
1717
import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
18-
import io.modelcontextprotocol.spec.McpServerTransport;
1918
import reactor.core.publisher.Mono;
2019
import reactor.core.publisher.Sinks;
2120

2221
/**
23-
* A mock implementation of the {@link McpClientTransport} and {@link McpServerTransport}
24-
* interfaces.
25-
*
26-
* @deprecated not used. to be removed in the future.
22+
* A mock implementation of the {@link McpClientTransport} interfaces.
2723
*/
28-
@Deprecated
29-
public class MockMcpTransport implements McpClientTransport, McpServerTransport {
24+
public class MockMcpClientTransport implements McpClientTransport {
3025

3126
private final Sinks.Many<McpSchema.JSONRPCMessage> inbound = Sinks.many().unicast().onBackpressureBuffer();
3227

3328
private final List<McpSchema.JSONRPCMessage> sent = new ArrayList<>();
3429

35-
private final BiConsumer<MockMcpTransport, McpSchema.JSONRPCMessage> interceptor;
30+
private final BiConsumer<MockMcpClientTransport, McpSchema.JSONRPCMessage> interceptor;
3631

37-
public MockMcpTransport() {
32+
private String protocolVersion = McpSchema.LATEST_PROTOCOL_VERSION;
33+
34+
public MockMcpClientTransport() {
3835
this((t, msg) -> {
3936
});
4037
}
4138

42-
public MockMcpTransport(BiConsumer<MockMcpTransport, McpSchema.JSONRPCMessage> interceptor) {
39+
public MockMcpClientTransport(BiConsumer<MockMcpClientTransport, McpSchema.JSONRPCMessage> interceptor) {
4340
this.interceptor = interceptor;
4441
}
4542

43+
public MockMcpClientTransport withProtocolVersion(String protocolVersion) {
44+
return this;
45+
}
46+
47+
@Override
48+
public List<String> protocolVersions() {
49+
return List.of(protocolVersion);
50+
}
51+
4652
public void simulateIncomingMessage(McpSchema.JSONRPCMessage message) {
4753
if (inbound.tryEmitNext(message).isFailure()) {
4854
throw new RuntimeException("Failed to process incoming message " + message);

mcp-core/src/test/java/io/modelcontextprotocol/MockMcpServerTransport.java renamed to mcp-test/src/test/java/io/modelcontextprotocol/MockMcpServerTransport.java

File renamed without changes.

mcp-core/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java renamed to mcp-test/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java

File renamed without changes.

mcp-core/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientResiliencyTests.java renamed to mcp-test/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientResiliencyTests.java

File renamed without changes.

mcp-core/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientTests.java renamed to mcp-test/src/test/java/io/modelcontextprotocol/client/HttpClientStreamableHttpAsyncClientTests.java

File renamed without changes.

0 commit comments

Comments
 (0)