Skip to content

Commit 4aa2e77

Browse files
committed
Address review comments
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
1 parent 657b6bf commit 4aa2e77

File tree

3 files changed

+15
-33
lines changed

3 files changed

+15
-33
lines changed

mcp/src/test/java/io/modelcontextprotocol/MockMcpTransport.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,16 @@
44

55
package io.modelcontextprotocol;
66

7-
import java.util.concurrent.TimeUnit;
87
import java.util.concurrent.atomic.AtomicInteger;
98
import java.util.function.Function;
109

1110
import com.fasterxml.jackson.core.type.TypeReference;
1211
import com.fasterxml.jackson.databind.ObjectMapper;
1312
import io.modelcontextprotocol.spec.ClientMcpTransport;
1413
import io.modelcontextprotocol.spec.McpSchema;
15-
import io.modelcontextprotocol.spec.ServerMcpTransport;
1614
import io.modelcontextprotocol.spec.McpSchema.JSONRPCNotification;
1715
import io.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
16+
import io.modelcontextprotocol.spec.ServerMcpTransport;
1817
import reactor.core.publisher.Flux;
1918
import reactor.core.publisher.Mono;
2019
import reactor.core.publisher.Sinks;
@@ -34,14 +33,20 @@ public class MockMcpTransport implements ClientMcpTransport, ServerMcpTransport
3433

3534
private final Flux<McpSchema.JSONRPCMessage> outboundView = outgoing.asFlux().cache(1);
3635

36+
// Latch to wait for the next message(s) to be sent in response of simulated incoming
37+
// message
3738
java.util.concurrent.CountDownLatch latch = new java.util.concurrent.CountDownLatch(1);
3839

3940
public void simulateIncomingMessage(McpSchema.JSONRPCMessage message) {
41+
simulateIncomingMessage(message, 1);
42+
}
43+
44+
public void simulateIncomingMessage(McpSchema.JSONRPCMessage message, int expectedResponseMessagesCount) {
4045
if (inbound.tryEmitNext(message).isFailure()) {
4146
throw new RuntimeException("Failed to emit message " + message);
4247
}
4348
inboundMessageCount.incrementAndGet();
44-
latch = new java.util.concurrent.CountDownLatch(1);
49+
latch = new java.util.concurrent.CountDownLatch(expectedResponseMessagesCount);
4550
}
4651

4752
@Override
@@ -63,7 +68,7 @@ public McpSchema.JSONRPCNotification getLastSentMessageAsNotifiation() {
6368

6469
public McpSchema.JSONRPCMessage getLastSentMessage() {
6570
try {
66-
latch.await(200, TimeUnit.MILLISECONDS);
71+
latch.await();
6772
}
6873
catch (InterruptedException e) {
6974
e.printStackTrace();

mcp/src/test/java/io/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -60,29 +60,11 @@ void testSuccessfulInitialization() {
6060
// Verify client is not initialized initially
6161
assertThat(asyncMcpClient.isInitialized()).isFalse();
6262

63-
// Create mock server response
64-
McpSchema.ServerCapabilities mockServerCapabilities = McpSchema.ServerCapabilities.builder()
65-
.tools(true)
66-
.resources(true, true) // Enable both resources and resource templates
67-
.build();
68-
McpSchema.Implementation mockServerInfo = new McpSchema.Implementation("test-server", "1.0.0");
69-
McpSchema.InitializeResult mockInitResult = new McpSchema.InitializeResult(McpSchema.LATEST_PROTOCOL_VERSION,
70-
mockServerCapabilities, mockServerInfo, "Test instructions");
71-
7263
// Start initialization with reactive handling
73-
InitializeResult result = asyncMcpClient.initialize().doOnSubscribe(subscription -> {
74-
// Run in a separate reactive context to avoid blocking the main subscription
75-
Mono.fromRunnable(() -> {
76-
McpSchema.JSONRPCRequest initRequest = transport.getLastSentMessageAsRequest();
77-
assertThat(initRequest.method()).isEqualTo(McpSchema.METHOD_INITIALIZE);
64+
InitializeResult result = initialization(asyncMcpClient, transport);
7865

79-
// Send mock server response
80-
McpSchema.JSONRPCResponse initResponse = new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION,
81-
initRequest.id(), mockInitResult, null);
82-
transport.simulateIncomingMessage(initResponse);
83-
// latch.countDown();
84-
}).subscribeOn(reactor.core.scheduler.Schedulers.boundedElastic()).subscribe();
85-
}).block();
66+
// Verify client state after initialization
67+
assertThat(asyncMcpClient.isInitialized()).isTrue();
8668

8769
// Verify initialized notification was sent
8870
McpSchema.JSONRPCMessage notificationMessage = transport.getLastSentMessage();
@@ -93,15 +75,10 @@ void testSuccessfulInitialization() {
9375
// Verify initialization result
9476
assertThat(result).isNotNull();
9577
assertThat(result.protocolVersion()).isEqualTo(McpSchema.LATEST_PROTOCOL_VERSION);
96-
assertThat(result.capabilities()).isEqualTo(mockServerCapabilities);
97-
assertThat(result.serverInfo()).isEqualTo(mockServerInfo);
78+
assertThat(result.capabilities()).isEqualTo(asyncMcpClient.getServerCapabilities());
79+
assertThat(result.serverInfo()).isEqualTo(asyncMcpClient.getServerInfo());
9880
assertThat(result.instructions()).isEqualTo("Test instructions");
9981

100-
// Verify client state after initialization
101-
assertThat(asyncMcpClient.isInitialized()).isTrue();
102-
assertThat(asyncMcpClient.getServerCapabilities()).isEqualTo(mockServerCapabilities);
103-
assertThat(asyncMcpClient.getServerInfo()).isEqualTo(mockServerInfo);
104-
10582
asyncMcpClient.closeGracefully();
10683
}
10784

mcp/src/test/java/io/modelcontextprotocol/spec/DefaultMcpSessionTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ void testSendRequest() {
8282
StepVerifier.create(responseMono).then(() -> {
8383
McpSchema.JSONRPCRequest request = transport.getLastSentMessageAsRequest();
8484
transport.simulateIncomingMessage(
85-
new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, request.id(), responseData, null));
85+
new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, request.id(), responseData, null), 0);
8686
}).consumeNextWith(response -> {
8787
// Verify the request was sent
8888
McpSchema.JSONRPCMessage sentMessage = transport.getLastSentMessageAsRequest();

0 commit comments

Comments
 (0)