Skip to content

Commit 9c2b836

Browse files
chemicLtzolov
authored andcommitted
Sync async client tests between mcp and mcp-test module
Signed-off-by: Dariusz Jędrzejczyk <[email protected]>
1 parent e996a5d commit 9c2b836

File tree

2 files changed

+24
-77
lines changed

2 files changed

+24
-77
lines changed

mcp-test/src/main/java/io/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java

+24-76
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,17 @@ void tearDown() {
109109
onClose();
110110
}
111111

112+
<T> void verifyInitializationTimeout(Function<McpAsyncClient, Mono<T>> operation, String action) {
113+
withClient(createMcpTransport(), mcpAsyncClient -> {
114+
StepVerifier.withVirtualTime(() -> operation.apply(mcpAsyncClient))
115+
.expectSubscription()
116+
.thenAwait(getInitializationTimeout())
117+
.consumeErrorWith(e -> assertThat(e).isInstanceOf(McpError.class)
118+
.hasMessage("Client must be initialized before " + action))
119+
.verify();
120+
});
121+
}
122+
112123
@Test
113124
void testConstructorWithInvalidArguments() {
114125
assertThatThrownBy(() -> McpClient.async(null).build()).isInstanceOf(IllegalArgumentException.class)
@@ -121,14 +132,7 @@ void testConstructorWithInvalidArguments() {
121132

122133
@Test
123134
void testListToolsWithoutInitialization() {
124-
withClient(createMcpTransport(), mcpAsyncClient -> {
125-
StepVerifier.withVirtualTime(() -> mcpAsyncClient.listTools(null))
126-
.expectSubscription()
127-
.thenAwait(getInitializationTimeout())
128-
.consumeErrorWith(e -> assertThat(e).isInstanceOf(McpError.class)
129-
.hasMessage("Client must be initialized before listing tools"))
130-
.verify();
131-
});
135+
verifyInitializationTimeout(client -> client.listTools(null), "listing tools");
132136
}
133137

134138
@Test
@@ -148,14 +152,7 @@ void testListTools() {
148152

149153
@Test
150154
void testPingWithoutInitialization() {
151-
withClient(createMcpTransport(), mcpAsyncClient -> {
152-
StepVerifier.withVirtualTime(() -> mcpAsyncClient.ping())
153-
.expectSubscription()
154-
.thenAwait(getInitializationTimeout())
155-
.consumeErrorWith(e -> assertThat(e).isInstanceOf(McpError.class)
156-
.hasMessage("Client must be initialized before pinging the " + "server"))
157-
.verify();
158-
});
155+
verifyInitializationTimeout(client -> client.ping(), "pinging the server");
159156
}
160157

161158
@Test
@@ -169,16 +166,8 @@ void testPing() {
169166

170167
@Test
171168
void testCallToolWithoutInitialization() {
172-
withClient(createMcpTransport(), mcpAsyncClient -> {
173-
CallToolRequest callToolRequest = new CallToolRequest("echo", Map.of("message", ECHO_TEST_MESSAGE));
174-
175-
StepVerifier.withVirtualTime(() -> mcpAsyncClient.callTool(callToolRequest))
176-
.expectSubscription()
177-
.thenAwait(getInitializationTimeout())
178-
.consumeErrorWith(e -> assertThat(e).isInstanceOf(McpError.class)
179-
.hasMessage("Client must be initialized before calling tools"))
180-
.verify();
181-
});
169+
CallToolRequest callToolRequest = new CallToolRequest("echo", Map.of("message", ECHO_TEST_MESSAGE));
170+
verifyInitializationTimeout(client -> client.callTool(callToolRequest), "calling tools");
182171
}
183172

184173
@Test
@@ -212,14 +201,7 @@ void testCallToolWithInvalidTool() {
212201

213202
@Test
214203
void testListResourcesWithoutInitialization() {
215-
withClient(createMcpTransport(), mcpAsyncClient -> {
216-
StepVerifier.withVirtualTime(() -> mcpAsyncClient.listResources(null))
217-
.expectSubscription()
218-
.thenAwait(getInitializationTimeout())
219-
.consumeErrorWith(e -> assertThat(e).isInstanceOf(McpError.class)
220-
.hasMessage("Client must be initialized before listing resources"))
221-
.verify();
222-
});
204+
verifyInitializationTimeout(client -> client.listResources(null), "listing resources");
223205
}
224206

225207
@Test
@@ -250,14 +232,7 @@ void testMcpAsyncClientState() {
250232

251233
@Test
252234
void testListPromptsWithoutInitialization() {
253-
withClient(createMcpTransport(), mcpAsyncClient -> {
254-
StepVerifier.withVirtualTime(() -> mcpAsyncClient.listPrompts(null))
255-
.expectSubscription()
256-
.thenAwait(getInitializationTimeout())
257-
.consumeErrorWith(e -> assertThat(e).isInstanceOf(McpError.class)
258-
.hasMessage("Client must be initialized before listing prompts"))
259-
.verify();
260-
});
235+
verifyInitializationTimeout(client -> client.listPrompts(null), "listing " + "prompts");
261236
}
262237

263238
@Test
@@ -281,16 +256,8 @@ void testListPrompts() {
281256

282257
@Test
283258
void testGetPromptWithoutInitialization() {
284-
withClient(createMcpTransport(), mcpAsyncClient -> {
285-
GetPromptRequest request = new GetPromptRequest("simple_prompt", Map.of());
286-
287-
StepVerifier.withVirtualTime(() -> mcpAsyncClient.getPrompt(request))
288-
.expectSubscription()
289-
.thenAwait(getInitializationTimeout())
290-
.consumeErrorWith(e -> assertThat(e).isInstanceOf(McpError.class)
291-
.hasMessage("Client must be initialized before getting prompts"))
292-
.verify();
293-
});
259+
GetPromptRequest request = new GetPromptRequest("simple_prompt", Map.of());
260+
verifyInitializationTimeout(client -> client.getPrompt(request), "getting " + "prompts");
294261
}
295262

296263
@Test
@@ -311,14 +278,8 @@ void testGetPrompt() {
311278

312279
@Test
313280
void testRootsListChangedWithoutInitialization() {
314-
withClient(createMcpTransport(), mcpAsyncClient -> {
315-
StepVerifier.withVirtualTime(() -> mcpAsyncClient.rootsListChangedNotification())
316-
.expectSubscription()
317-
.thenAwait(getInitializationTimeout())
318-
.consumeErrorWith(e -> assertThat(e).isInstanceOf(McpError.class)
319-
.hasMessage("Client must be initialized before sending roots list changed notification"))
320-
.verify();
321-
});
281+
verifyInitializationTimeout(client -> client.rootsListChangedNotification(),
282+
"sending roots list changed notification");
322283
}
323284

324285
@Test
@@ -392,14 +353,7 @@ void testReadResource() {
392353

393354
@Test
394355
void testListResourceTemplatesWithoutInitialization() {
395-
withClient(createMcpTransport(), mcpAsyncClient -> {
396-
StepVerifier.withVirtualTime(() -> mcpAsyncClient.listResourceTemplates())
397-
.expectSubscription()
398-
.thenAwait(getInitializationTimeout())
399-
.consumeErrorWith(e -> assertThat(e).isInstanceOf(McpError.class)
400-
.hasMessage("Client must be initialized before listing resource templates"))
401-
.verify();
402-
});
356+
verifyInitializationTimeout(client -> client.listResourceTemplates(), "listing resource templates");
403357
}
404358

405359
@Test
@@ -492,14 +446,8 @@ void testInitializeWithAllCapabilities() {
492446

493447
@Test
494448
void testLoggingLevelsWithoutInitialization() {
495-
withClient(createMcpTransport(),
496-
mcpAsyncClient -> StepVerifier
497-
.withVirtualTime(() -> mcpAsyncClient.setLoggingLevel(McpSchema.LoggingLevel.DEBUG))
498-
.expectSubscription()
499-
.thenAwait(getInitializationTimeout())
500-
.consumeErrorWith(e -> assertThat(e).isInstanceOf(McpError.class)
501-
.hasMessage("Client must be initialized before setting logging level"))
502-
.verify());
449+
verifyInitializationTimeout(client -> client.setLoggingLevel(McpSchema.LoggingLevel.DEBUG),
450+
"setting logging level");
503451
}
504452

505453
@Test

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

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import java.util.concurrent.atomic.AtomicReference;
1212
import java.util.function.Consumer;
1313
import java.util.function.Function;
14-
import java.util.function.Supplier;
1514

1615
import io.modelcontextprotocol.spec.ClientMcpTransport;
1716
import io.modelcontextprotocol.spec.McpError;

0 commit comments

Comments
 (0)