Skip to content

Commit 16c82a4

Browse files
lanwenbsideup
andauthored
Make MockServer compatible with newer (5.11.x) versions (#3437)
Co-authored-by: Sergei Egorov <[email protected]>
1 parent f033c13 commit 16c82a4

File tree

5 files changed

+80
-44
lines changed

5 files changed

+80
-44
lines changed

docs/modules/mockserver.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ Mock Server can be used to mock HTTP services by matching requests against user-
77
The following example shows how to start Mockserver.
88

99
<!--codeinclude-->
10-
[Creating a MockServer container](../../modules/mockserver/src/test/java/org/testcontainers/containers/MockServerContainerTest.java) inside_block:creatingProxy
10+
[Creating a MockServer container](../../modules/mockserver/src/test/java/org/testcontainers/containers/MockServerContainerRuleTest.java) inside_block:creatingProxy
1111
<!--/codeinclude-->
1212

1313
And how to set a simple expectation using the Java MockServerClient.
1414

1515
<!--codeinclude-->
16-
[Setting a simple expectation](../../modules/mockserver/src/test/java/org/testcontainers/containers/MockServerContainerTest.java) inside_block:testSimpleExpectation
16+
[Setting a simple expectation](../../modules/mockserver/src/test/java/org/testcontainers/containers/MockServerContainerRuleTest.java) inside_block:testSimpleExpectation
1717
<!--/codeinclude-->
1818

1919
## Adding this module to your project dependencies
@@ -33,3 +33,5 @@ testCompile "org.testcontainers:mockserver:{{latest_version}}"
3333
</dependency>
3434
```
3535

36+
Additionally, don't forget to add a [client dependency `org.mock-server:mockserver-client-java`](https://search.maven.org/search?q=mockserver-client-java)
37+
to be able to set expectations, it's not provided by the testcontainers module. Client version should match to the version in a container tag.

modules/mockserver/src/main/java/org/testcontainers/containers/MockServerContainer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.testcontainers.containers;
22

33
import lombok.extern.slf4j.Slf4j;
4+
import org.testcontainers.containers.wait.strategy.Wait;
45
import org.testcontainers.utility.DockerImageName;
56

67
@Slf4j
@@ -33,7 +34,9 @@ public MockServerContainer(String version) {
3334
public MockServerContainer(DockerImageName dockerImageName) {
3435
super(dockerImageName);
3536

36-
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
37+
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME, DockerImageName.parse("mockserver/mockserver"));
38+
39+
waitingFor(Wait.forHttp("/mockserver/status").withMethod("PUT").forStatusCode(200));
3740

3841
withCommand("-logLevel INFO -serverPort " + PORT);
3942
addExposedPorts(PORT);
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.testcontainers.containers;
2+
3+
import org.junit.Rule;
4+
import org.junit.Test;
5+
import org.mockserver.client.MockServerClient;
6+
import org.testcontainers.utility.DockerImageName;
7+
8+
import static org.hamcrest.CoreMatchers.containsString;
9+
import static org.mockserver.model.HttpRequest.request;
10+
import static org.mockserver.model.HttpResponse.response;
11+
import static org.rnorth.visibleassertions.VisibleAssertions.assertThat;
12+
13+
public class MockServerContainerRuleTest {
14+
15+
public static final DockerImageName MOCKSERVER_IMAGE = DockerImageName.parse("jamesdbloom/mockserver:mockserver-5.5.4");
16+
17+
// creatingProxy {
18+
@Rule
19+
public MockServerContainer mockServer = new MockServerContainer(MOCKSERVER_IMAGE);
20+
// }
21+
22+
@Test
23+
public void shouldReturnExpectation() throws Exception {
24+
// testSimpleExpectation {
25+
new MockServerClient(mockServer.getHost(), mockServer.getServerPort())
26+
.when(request()
27+
.withPath("/person")
28+
.withQueryStringParameter("name", "peter"))
29+
.respond(response()
30+
.withBody("Peter the person!"));
31+
32+
// ...a GET request to '/person?name=peter' returns "Peter the person!"
33+
// }
34+
35+
assertThat("Expectation returns expected response body",
36+
SimpleHttpClient.responseFromMockserver(mockServer, "/person?name=peter"),
37+
containsString("Peter the person")
38+
);
39+
}
40+
}
Lines changed: 15 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,19 @@
11
package org.testcontainers.containers;
22

3-
import lombok.Cleanup;
4-
import org.junit.Rule;
53
import org.junit.Test;
64
import org.mockserver.client.MockServerClient;
75
import org.testcontainers.utility.DockerImageName;
86

9-
import java.io.BufferedReader;
10-
import java.io.IOException;
11-
import java.io.InputStreamReader;
12-
import java.net.URL;
13-
import java.net.URLConnection;
14-
15-
import static org.hamcrest.CoreMatchers.containsString;
167
import static org.hamcrest.CoreMatchers.equalTo;
178
import static org.mockserver.model.HttpRequest.request;
189
import static org.mockserver.model.HttpResponse.response;
1910
import static org.rnorth.visibleassertions.VisibleAssertions.assertThat;
11+
import static org.rnorth.visibleassertions.VisibleAssertions.assertTrue;
2012

2113
public class MockServerContainerTest {
2214

2315
public static final DockerImageName MOCKSERVER_IMAGE = DockerImageName.parse("jamesdbloom/mockserver:mockserver-5.5.4");
2416

25-
// creatingProxy {
26-
@Rule
27-
public MockServerContainer mockServer = new MockServerContainer(MOCKSERVER_IMAGE);
28-
// }
29-
30-
private static String responseFromMockserver(MockServerContainer mockServer, String path) throws IOException {
31-
URLConnection urlConnection = new URL(mockServer.getEndpoint() + path).openConnection();
32-
@Cleanup BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
33-
return reader.readLine();
34-
}
35-
36-
@Test
37-
public void shouldReturnExpectation() throws Exception {
38-
// testSimpleExpectation {
39-
new MockServerClient(mockServer.getHost(), mockServer.getServerPort())
40-
.when(request()
41-
.withPath("/person")
42-
.withQueryStringParameter("name", "peter"))
43-
.respond(response()
44-
.withBody("Peter the person!"));
45-
46-
// ...a GET request to '/person?name=peter' returns "Peter the person!"
47-
// }
48-
49-
assertThat("Expectation returns expected response body",
50-
responseFromMockserver(mockServer, "/person?name=peter"),
51-
containsString("Peter the person")
52-
);
53-
}
54-
5517
@Test
5618
public void shouldCallActualMockserverVersion() throws Exception {
5719
String actualVersion = MockServerClient.class.getPackage().getImplementationVersion();
@@ -60,14 +22,26 @@ public void shouldCallActualMockserverVersion() throws Exception {
6022

6123
String expectedBody = "Hello World!";
6224

63-
new MockServerClient(mockServer.getHost(), mockServer.getServerPort())
25+
MockServerClient client = new MockServerClient(mockServer.getHost(), mockServer.getServerPort());
26+
27+
assertTrue("Mockserver running", client.isRunning());
28+
29+
client
6430
.when(request().withPath("/hello"))
6531
.respond(response().withBody(expectedBody));
6632

6733
assertThat("MockServer returns correct result",
68-
responseFromMockserver(mockServer, "/hello"),
34+
SimpleHttpClient.responseFromMockserver(mockServer, "/hello"),
6935
equalTo(expectedBody)
7036
);
7137
}
7238
}
39+
40+
@Test
41+
public void newVersionStartsWithDefaultWaitStrategy() {
42+
DockerImageName dockerImageName = DockerImageName.parse("mockserver/mockserver:mockserver-5.11.2");
43+
try (MockServerContainer mockServer = new MockServerContainer(dockerImageName)) {
44+
mockServer.start();
45+
}
46+
}
7347
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.testcontainers.containers;
2+
3+
import lombok.Cleanup;
4+
5+
import java.io.BufferedReader;
6+
import java.io.IOException;
7+
import java.io.InputStreamReader;
8+
import java.net.URL;
9+
import java.net.URLConnection;
10+
11+
public class SimpleHttpClient {
12+
public static String responseFromMockserver(MockServerContainer mockServer, String path) throws IOException {
13+
URLConnection urlConnection = new URL(mockServer.getEndpoint() + path).openConnection();
14+
@Cleanup BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
15+
return reader.readLine();
16+
}
17+
}

0 commit comments

Comments
 (0)