Fix tests by restarting the container in each test

The reason is that the server performs shutdown after SSE connection is
closed.
This commit is contained in:
Dariusz Jędrzejczyk 2024-12-17 15:33:41 +01:00
commit 8b2ce26e8a
No known key found for this signature in database
GPG key ID: FD786A4E2335C448
7 changed files with 49 additions and 20 deletions

View file

@ -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

View file

@ -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

View file

@ -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();
}

View file

@ -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();
}

View file

@ -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();
}

View file

@ -37,4 +37,14 @@ class McpAsyncClientTests extends AbstractMcpAsyncClientTests {
this.mcpTransport = new StdioServerTransport(stdioParams);
}
@Override
protected void onStart() {
}
@Override
protected void onClose() {
}
}

View file

@ -37,4 +37,14 @@ class McpSyncClientTests extends AbstractMcpSyncClientTests {
this.mcpTransport = new StdioServerTransport(stdioParams);
}
@Override
protected void onStart() {
}
@Override
protected void onClose() {
}
}