diff --git a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java index db6f139..07adc1c 100644 --- a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java +++ b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java @@ -55,9 +55,13 @@ public abstract class AbstractMcpAsyncClientTests { abstract protected void createMcpTransport(); + abstract protected void onStart(); + + abstract protected void onClose(); + @BeforeEach void setUp() { - + onStart(); createMcpTransport(); assertThatCode(() -> { @@ -72,6 +76,7 @@ public abstract class AbstractMcpAsyncClientTests { assertThatCode(() -> mcpAsyncClient.closeGracefully().block(Duration.ofSeconds(10))) .doesNotThrowAnyException(); } + onClose(); } @Test diff --git a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java index 14e309e..a66bc99 100644 --- a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java +++ b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java @@ -55,8 +55,13 @@ public abstract class AbstractMcpSyncClientTests { abstract protected void createMcpTransport(); + abstract protected void onStart(); + + abstract protected void onClose(); + @BeforeEach void setUp() { + onStart(); createMcpTransport(); assertThatCode(() -> { @@ -70,6 +75,7 @@ public abstract class AbstractMcpSyncClientTests { if (mcpSyncClient != null) { assertThatCode(() -> mcpSyncClient.close()).doesNotThrowAnyException(); } + onClose(); } @Test diff --git a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseMcpAsyncClientTests.java b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseMcpAsyncClientTests.java index dd8f04f..06d91fc 100644 --- a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseMcpAsyncClientTests.java +++ b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseMcpAsyncClientTests.java @@ -16,8 +16,6 @@ package org.springframework.ai.mcp.client.sse; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Timeout; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; @@ -38,7 +36,7 @@ class SseMcpAsyncClientTests extends AbstractMcpAsyncClientTests { // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - static GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v1") + GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v1") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) .waitingFor(Wait.forHttp("/").forStatusCode(404)); @@ -48,15 +46,15 @@ class SseMcpAsyncClientTests extends AbstractMcpAsyncClientTests { this.mcpTransport = new SseServerTransport(WebClient.builder().baseUrl(host)); } - @BeforeAll - static void beforeAll() { + @Override + protected void onStart() { container.start(); int port = container.getMappedPort(3001); host = "http://" + container.getHost() + ":" + port; } - @AfterAll - public static void cleanup() { + @Override + public void onClose() { container.stop(); } diff --git a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseMcpSyncClientTests.java b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseMcpSyncClientTests.java index 20d717f..823a74e 100644 --- a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseMcpSyncClientTests.java +++ b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseMcpSyncClientTests.java @@ -16,8 +16,8 @@ package org.springframework.ai.mcp.client.sse; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Timeout; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; @@ -38,7 +38,7 @@ class SseMcpSyncClientTests extends AbstractMcpSyncClientTests { // Uses the https://github.com/tzolov/mcp-everything-server-docker-image @SuppressWarnings("resource") - static GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v1") + GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v1") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) .waitingFor(Wait.forHttp("/").forStatusCode(404)); @@ -48,15 +48,15 @@ class SseMcpSyncClientTests extends AbstractMcpSyncClientTests { this.mcpTransport = new SseServerTransport(WebClient.builder().baseUrl(host)); } - @BeforeAll - static void beforeAll() { + @Override + protected void onStart() { container.start(); int port = container.getMappedPort(3001); host = "http://" + container.getHost() + ":" + port; } - @AfterAll - public static void cleanup() { + @Override + protected void onClose() { container.stop(); } diff --git a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseServerTransportTests.java b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseServerTransportTests.java index 7543499..5955c2d 100644 --- a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseServerTransportTests.java +++ b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/sse/SseServerTransportTests.java @@ -51,7 +51,7 @@ class SseServerTransportTests { static String host = "http://localhost:3001"; @SuppressWarnings("resource") - static GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v1") + GenericContainer container = new GenericContainer<>("docker.io/tzolov/mcp-everything-server:v1") .withLogConsumer(outputFrame -> System.out.println(outputFrame.getUtf8String())) .withExposedPorts(3001) .waitingFor(Wait.forHttp("/").forStatusCode(404)); @@ -98,8 +98,7 @@ class SseServerTransportTests { } - @BeforeAll - static void beforeAll() { + void startContainer() { container.start(); int port = container.getMappedPort(3001); host = "http://" + container.getHost() + ":" + port; @@ -107,6 +106,7 @@ class SseServerTransportTests { @BeforeEach void setUp() { + startContainer(); webClientBuilder = WebClient.builder().baseUrl(host); objectMapper = new ObjectMapper(); transport = new TestSseServerTransport(webClientBuilder, objectMapper); @@ -117,10 +117,10 @@ class SseServerTransportTests { if (transport != null) { assertThatCode(() -> transport.closeGracefully().block(Duration.ofSeconds(10))).doesNotThrowAnyException(); } + cleanup(); } - @AfterAll - static void cleanup() { + void cleanup() { container.stop(); } diff --git a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/stdio/McpAsyncClientTests.java b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/stdio/McpAsyncClientTests.java index a303a18..7e72f8b 100644 --- a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/stdio/McpAsyncClientTests.java +++ b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/stdio/McpAsyncClientTests.java @@ -37,4 +37,14 @@ class McpAsyncClientTests extends AbstractMcpAsyncClientTests { this.mcpTransport = new StdioServerTransport(stdioParams); } + @Override + protected void onStart() { + + } + + @Override + protected void onClose() { + + } + } diff --git a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/stdio/McpSyncClientTests.java b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/stdio/McpSyncClientTests.java index 37b06a0..1a76226 100644 --- a/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/stdio/McpSyncClientTests.java +++ b/spring-ai-mcp-core/src/test/java/org/springframework/ai/mcp/client/stdio/McpSyncClientTests.java @@ -37,4 +37,14 @@ class McpSyncClientTests extends AbstractMcpSyncClientTests { this.mcpTransport = new StdioServerTransport(stdioParams); } + @Override + protected void onStart() { + + } + + @Override + protected void onClose() { + + } + }