Removed dirties context on any tests
This commit is contained in:
@@ -234,7 +234,6 @@ run the collaborators' stubs for you, as shown in the following example:
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceTests {
|
||||
----
|
||||
|
||||
@@ -519,7 +518,6 @@ the collaborators' stubs for you, as shown in the following example:
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceTests {
|
||||
----
|
||||
|
||||
@@ -693,7 +691,6 @@ Annotate your test class with `@AutoConfigureStubRunner`. In the annotation prov
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceTests {
|
||||
----
|
||||
|
||||
@@ -1179,7 +1176,6 @@ can also provide the offline work switch (`StubRunnerProperties.StubsMode.LOCAL`
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceTests {
|
||||
----
|
||||
|
||||
|
||||
@@ -200,7 +200,6 @@ run the collaborators' stubs for you, as shown in the following example:
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceTests {
|
||||
----
|
||||
|
||||
@@ -475,7 +474,6 @@ the collaborators' stubs for you, as shown in the following example:
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceTests {
|
||||
----
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.example.loan.model.LoanApplicationStatus;
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE, properties="server.context-path=/app")
|
||||
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceContextPathTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -27,7 +27,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceTests {
|
||||
// end::autoconfigure_stubrunner[]
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
server:
|
||||
port: 6565
|
||||
logging.level.org.springframework.cloud.contract: DEBUG
|
||||
logging:
|
||||
level:
|
||||
org.springframework.cloud.contract: debug
|
||||
@@ -11,7 +11,6 @@ import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import com.example.loan.model.Client;
|
||||
@@ -23,7 +22,6 @@ import com.example.loan.model.LoanApplicationStatus;
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@AutoConfigureStubRunner(ids = {"com.example:pact-http-server:+:stubs"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.example.loan;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
|
||||
@ConfigurationProperties("service")
|
||||
public class ServiceProperties {
|
||||
|
||||
private int port = 8080;
|
||||
|
||||
public void setPort(int port) {
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public int getPort() {
|
||||
return this.port;
|
||||
}
|
||||
}
|
||||
@@ -28,7 +28,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
@AutoConfigureRestDocs(outputDir = "target/snippets")
|
||||
@AutoConfigureMockMvc
|
||||
@AutoConfigureJsonTesters
|
||||
@DirtiesContext
|
||||
public class StubGeneratorTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -31,7 +31,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
@SpringBootTest(classes = Application.class)
|
||||
@AutoConfigureRestDocs(outputDir = "target/snippets")
|
||||
@AutoConfigureMockMvc
|
||||
@DirtiesContext
|
||||
public class XmlStubGeneratorTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -28,7 +28,6 @@ import static org.springframework.cloud.contract.wiremock.restdocs.WireMockWebTe
|
||||
@AutoConfigureRestDocs(outputDir = "target/snippets")
|
||||
@AutoConfigureWebTestClient
|
||||
@AutoConfigureJsonTesters
|
||||
@DirtiesContext
|
||||
public class StubGeneratorTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import com.example.loan.model.Client;
|
||||
@@ -21,7 +20,6 @@ import com.example.loan.model.LoanApplicationStatus;
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE, properties="server.context-path=/app")
|
||||
@AutoConfigureStubRunner(ids = {"com.example:http-server-yml:+:stubs:6569"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceContextPathTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -7,7 +7,6 @@ import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import com.example.loan.model.Client;
|
||||
@@ -22,7 +21,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@AutoConfigureStubRunner(ids = {"com.example:http-server-yml:+:stubs:6569"},
|
||||
stubsMode = StubRunnerProperties.StubsMode.LOCAL)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceTests {
|
||||
// end::autoconfigure_stubrunner[]
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
import com.github.tomakehurst.wiremock.junit.WireMockClassRule;
|
||||
|
||||
@ActiveProfiles("classrule")
|
||||
@DirtiesContext
|
||||
//tag::wiremock_test1[]
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
|
||||
|
||||
@@ -13,7 +13,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.web.client.MockRestServiceServer;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@DirtiesContext
|
||||
// tag::wiremock_test[]
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(webEnvironment = WebEnvironment.NONE)
|
||||
|
||||
@@ -19,7 +19,6 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@ActiveProfiles("docs")
|
||||
@DirtiesContext
|
||||
//tag::wiremock_test1[]
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
|
||||
|
||||
@@ -21,7 +21,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest("app.baseUrl=https://localhost:8443")
|
||||
@DirtiesContext
|
||||
@AutoConfigureHttpClient
|
||||
public class WiremockHttpsServerApplicationTests {
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(properties="app.baseUrl=http://localhost:6060", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port = 6060)
|
||||
public class WiremockImportApplicationTests {
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
public class WiremockMockServerApplicationTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -28,7 +28,6 @@ import static org.hamcrest.CoreMatchers.instanceOf;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(properties="app.baseUrl=http://localhost:6061", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
public class WiremockServerApplicationTests {
|
||||
|
||||
@ClassRule
|
||||
|
||||
@@ -19,7 +19,6 @@ import com.github.tomakehurst.wiremock.junit.WireMockClassRule;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(properties="app.baseUrl=http://localhost:6063", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
public class WiremockServerApplicationTests {
|
||||
|
||||
@ClassRule
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.github.tomakehurst.wiremock.junit.WireMockClassRule;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest("app.baseUrl=https://localhost:6443")
|
||||
@DirtiesContext
|
||||
@AutoConfigureHttpClient
|
||||
public class WiremockHttpsServerApplicationTests {
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(properties="app.baseUrl=http://localhost:6065", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port = 6065)
|
||||
public class WiremockImportApplicationTests {
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(properties = { "app.baseUrl=http://localhost:6066",
|
||||
"server.context-path=/app" }, webEnvironment = WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port = 6066)
|
||||
public class WiremockImportContextPathApplicationTests {
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
public class WiremockMockServerApplicationTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -29,7 +29,6 @@ import static org.hamcrest.CoreMatchers.instanceOf;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(properties="app.baseUrl=http://localhost:6067", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
public class WiremockServerApplicationTests {
|
||||
|
||||
@ClassRule
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.github.tomakehurst.wiremock.junit.WireMockClassRule;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest("app.baseUrl=https://localhost:7443")
|
||||
@DirtiesContext
|
||||
@ActiveProfiles("ssl")
|
||||
public class WiremockHttpsServerApplicationTests {
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(properties="app.baseUrl=http://localhost:7070", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port = 7070)
|
||||
public class WiremockImportApplicationTests {
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
public class WiremockMockServerApplicationTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -20,7 +20,6 @@ import com.github.tomakehurst.wiremock.junit.WireMockClassRule;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(properties="app.baseUrl=http://localhost:7071", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
public class WiremockServerApplicationTests {
|
||||
|
||||
@ClassRule
|
||||
|
||||
@@ -148,14 +148,6 @@ HTTP stubs without the need to download artifacts.
|
||||
|
||||
==== Running stubs
|
||||
|
||||
===== Limitations
|
||||
|
||||
IMPORTANT: There might be a problem with StubRunner shutting down ports between tests. You might
|
||||
have a situation in which you get port conflicts. As long as you use the same context across tests
|
||||
everything works fine. But when the context are different (e.g. different stubs or different profiles)
|
||||
then you have to either use `@DirtiesContext` to shut down the stub servers, or else run them on
|
||||
different ports per test.
|
||||
|
||||
===== Running using main app
|
||||
|
||||
You can set the following options to the main class:
|
||||
|
||||
@@ -82,6 +82,11 @@
|
||||
<groupId>com.jcraft</groupId>
|
||||
<artifactId>jsch.agentproxy.usocket-jna</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-autoconfigure-processor</artifactId>
|
||||
|
||||
@@ -25,6 +25,7 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import groovy.json.JsonOutput;
|
||||
import org.slf4j.Logger;
|
||||
@@ -38,12 +39,15 @@ import org.springframework.cloud.contract.stubrunner.provider.wiremock.WireMockH
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier;
|
||||
import org.springframework.cloud.contract.verifier.messaging.noop.NoOpStubMessages;
|
||||
import org.springframework.cloud.contract.verifier.util.BodyExtractor;
|
||||
import wiremock.org.eclipse.jetty.util.ConcurrentHashSet;
|
||||
|
||||
/**
|
||||
* Runs stubs for a particular {@link StubServer}
|
||||
*/
|
||||
class StubRunnerExecutor implements StubFinder {
|
||||
|
||||
static final Set<StubServer> STUB_SERVERS = new ConcurrentHashSet<>();
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(StubRunnerExecutor.class);
|
||||
private final AvailablePortScanner portScanner;
|
||||
private final MessageVerifier<?> contractVerifierMessaging;
|
||||
@@ -261,6 +265,7 @@ class StubRunnerExecutor implements StubFinder {
|
||||
}
|
||||
});
|
||||
}
|
||||
STUB_SERVERS.add(this.stubServer);
|
||||
}
|
||||
|
||||
private boolean hasRequest(Collection<Contract> contracts) {
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.io.File;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -59,7 +60,14 @@ class StubServer {
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
return this.httpServerStub.isRunning();
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Stopping the server at port [" + this.getPort() + "]");
|
||||
}
|
||||
this.httpServerStub.stop();
|
||||
}
|
||||
|
||||
@@ -95,4 +103,22 @@ class StubServer {
|
||||
return this.httpServerStub.registeredMappings();
|
||||
}
|
||||
|
||||
@Override public boolean equals(Object o) {
|
||||
if (this == o)
|
||||
return true;
|
||||
if (o == null || getClass() != o.getClass())
|
||||
return false;
|
||||
StubServer that = (StubServer) o;
|
||||
return Objects.equals(this.stubConfiguration, that.stubConfiguration) && Objects
|
||||
.equals(this.contracts, that.contracts);
|
||||
}
|
||||
|
||||
@Override public int hashCode() {
|
||||
return Objects.hash(this.stubConfiguration, this.contracts);
|
||||
}
|
||||
|
||||
@Override public String toString() {
|
||||
return "StubServer{" + "stubConfiguration=" + this.stubConfiguration + ", mappingsSize="
|
||||
+ this.mappings.size() + '}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
package org.springframework.cloud.contract.stubrunner.provider.wiremock;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import com.github.tomakehurst.wiremock.stubbing.StubMapping;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.cloud.contract.stubrunner.HttpServerStub;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.test.context.TestContext;
|
||||
import org.springframework.test.context.support.AbstractTestExecutionListener;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
/**
|
||||
* Stops the {@link HttpServerStub} after each test class
|
||||
*
|
||||
* @author Marcin Grzejszczak
|
||||
* @since 1.2.6
|
||||
*/
|
||||
public final class StubRunnerWireMockTestExecutionListener extends AbstractTestExecutionListener {
|
||||
|
||||
private static final Log log = LogFactory.getLog(StubRunnerWireMockTestExecutionListener.class);
|
||||
|
||||
private static Map<ApplicationContext, Map<WireMockHttpServerStub, PortAndMappings>> STUBS = new ConcurrentHashMap<>();
|
||||
|
||||
@Override public void beforeTestClass(TestContext testContext) {
|
||||
Map<WireMockHttpServerStub, PortAndMappings> stubs = STUBS
|
||||
.get(testContext.getApplicationContext());
|
||||
if (stubs != null) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Found a matching application context from [" + testContext.getTestClass().getName() + "]");
|
||||
}
|
||||
for (Map.Entry<WireMockHttpServerStub, PortAndMappings> entry : stubs.entrySet()) {
|
||||
while (entry.getKey().isRunning()) {
|
||||
entry.getKey().stop();
|
||||
}
|
||||
List<StubMapping> mappings = entry.getValue().mappings;
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Stopped a running WireMock instance at "
|
||||
+ "port [" + entry.getValue().port + "] with stub mappings "
|
||||
+ "size [" + mappings.size() + "]. Restarting the stub.");
|
||||
}
|
||||
entry.getKey().start(entry.getValue().port);
|
||||
entry.getKey().registerDescriptors(mappings);
|
||||
Assert.isTrue(new RestTemplate().getForEntity("http://localhost:" + entry.getValue().port + "/__admin/mappings", String.class)
|
||||
.getStatusCode().is2xxSuccessful(), "__admin/mappings endpoint wasn't accessible");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void afterTestClass(TestContext testContext) {
|
||||
STUBS.put(testContext.getApplicationContext(), WireMockHttpServerStub.SERVERS);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Stopping servers " + WireMockHttpServerStub.SERVERS);
|
||||
}
|
||||
for (HttpServerStub serverStub : WireMockHttpServerStub.SERVERS.keySet()) {
|
||||
serverStub.stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import com.github.tomakehurst.wiremock.WireMockServer;
|
||||
import com.github.tomakehurst.wiremock.client.WireMock;
|
||||
@@ -43,6 +44,8 @@ public class WireMockHttpServerStub implements HttpServerStub {
|
||||
private static final Logger log = LoggerFactory.getLogger(WireMockHttpServerStub.class);
|
||||
private static final int INVALID_PORT = -1;
|
||||
|
||||
static final Map<WireMockHttpServerStub, PortAndMappings> SERVERS = new ConcurrentHashMap<>();
|
||||
|
||||
private WireMockServer wireMockServer;
|
||||
|
||||
private WireMockConfiguration config() {
|
||||
@@ -107,6 +110,12 @@ public class WireMockHttpServerStub implements HttpServerStub {
|
||||
this.wireMockServer = new WireMockServer(config().port(port)
|
||||
.notifier(new Slf4jNotifier(true)));
|
||||
this.wireMockServer.start();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Started WireMock at port [" + port + "]");
|
||||
}
|
||||
if (!SERVERS.containsKey(this)) {
|
||||
SERVERS.put(this, new PortAndMappings(port, new ArrayList<StubMapping>()));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -159,20 +168,25 @@ public class WireMockHttpServerStub implements HttpServerStub {
|
||||
}
|
||||
|
||||
private void registerStubMappings(Collection<File> stubFiles) {
|
||||
WireMock wireMock = new WireMock("localhost", port(), "");
|
||||
WireMock wireMock = wireMock();
|
||||
registerDefaultHealthChecks(wireMock);
|
||||
registerStubs(stubFiles, wireMock);
|
||||
}
|
||||
|
||||
private WireMock wireMock() {
|
||||
return new WireMock("localhost", port(), "");
|
||||
}
|
||||
|
||||
private void registerDefaultHealthChecks(WireMock wireMock) {
|
||||
registerHealthCheck(wireMock, "/ping");
|
||||
registerHealthCheck(wireMock, "/health");
|
||||
}
|
||||
|
||||
private void registerStubs(Collection<File> sortedMappings, WireMock wireMock) {
|
||||
List<StubMapping> stubMappings = new ArrayList<>();
|
||||
for (File mappingDescriptor : sortedMappings) {
|
||||
try {
|
||||
wireMock.register(getMapping(mappingDescriptor));
|
||||
stubMappings.add(registerDescriptor(wireMock, mappingDescriptor));
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Registered stub mappings from [" + mappingDescriptor + "]");
|
||||
}
|
||||
@@ -183,6 +197,23 @@ public class WireMockHttpServerStub implements HttpServerStub {
|
||||
}
|
||||
}
|
||||
}
|
||||
PortAndMappings portAndMappings = SERVERS.get(this);
|
||||
SERVERS.put(this, new PortAndMappings(portAndMappings.port, stubMappings));
|
||||
}
|
||||
|
||||
private StubMapping registerDescriptor(WireMock wireMock, File mappingDescriptor) {
|
||||
StubMapping mapping = getMapping(mappingDescriptor);
|
||||
wireMock.register(mapping);
|
||||
return mapping;
|
||||
}
|
||||
|
||||
void registerDescriptors(List<StubMapping> stubMappings) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Registering stub mappings size [" + stubMappings.size() + "] at port [" + port() + "]");
|
||||
}
|
||||
for (StubMapping mapping : stubMappings) {
|
||||
wireMock().register(mapping);
|
||||
}
|
||||
}
|
||||
|
||||
private void registerHealthCheck(WireMock wireMock, String url) {
|
||||
@@ -194,3 +225,17 @@ public class WireMockHttpServerStub implements HttpServerStub {
|
||||
WireMock.get(WireMock.urlEqualTo(url)).willReturn(WireMock.aResponse().withBody(body).withStatus(200)));
|
||||
}
|
||||
}
|
||||
|
||||
class PortAndMappings {
|
||||
final Integer port;
|
||||
final List<StubMapping> mappings;
|
||||
|
||||
PortAndMappings(Integer port, List<StubMapping> mappings) {
|
||||
this.port = port;
|
||||
this.mappings = mappings;
|
||||
}
|
||||
|
||||
@Override public String toString() {
|
||||
return "PortAndMappings{" + "port=" + this.port + ", mappings=" + this.mappings.size() + '}';
|
||||
}
|
||||
}
|
||||
@@ -8,4 +8,8 @@ org.springframework.cloud.contract.stubrunner.messaging.integration.StubRunnerIn
|
||||
org.springframework.cloud.contract.stubrunner.spring.cloud.zookeeper.StubRunnerSpringCloudZookeeperAutoConfiguration,\
|
||||
org.springframework.cloud.contract.stubrunner.spring.cloud.eureka.StubRunnerSpringCloudEurekaAutoConfiguration,\
|
||||
org.springframework.cloud.contract.stubrunner.spring.cloud.consul.StubRunnerSpringCloudConsulAutoConfiguration,\
|
||||
org.springframework.cloud.contract.stubrunner.messaging.StubRunnerStreamsIntegrationAutoConfiguration
|
||||
org.springframework.cloud.contract.stubrunner.messaging.StubRunnerStreamsIntegrationAutoConfiguration
|
||||
|
||||
# Test Execution Listeners
|
||||
org.springframework.test.context.TestExecutionListener=\
|
||||
org.springframework.cloud.contract.stubrunner.provider.wiremock.StubRunnerWireMockTestExecutionListener
|
||||
@@ -29,7 +29,6 @@ import org.springframework.cloud.contract.stubrunner.StubFinder
|
||||
import org.springframework.cloud.contract.stubrunner.StubNotFoundException
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.core.env.Environment
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ActiveProfiles
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
import spock.lang.Specification
|
||||
@@ -44,7 +43,6 @@ import spock.lang.Specification
|
||||
'foo=${stubrunner.runningstubs.fraudDetectionServer.port}',
|
||||
'fooWithGroup=${stubrunner.runningstubs.org.springframework.cloud.contract.verifier.stubs.fraudDetectionServer.port}'])
|
||||
@AutoConfigureStubRunner(mappingsOutputFolder = "target/outputmappings/")
|
||||
@DirtiesContext
|
||||
@ActiveProfiles("test")
|
||||
class StubRunnerConfigurationSpec extends Specification {
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@ import org.springframework.cloud.zookeeper.ZookeeperAutoConfiguration
|
||||
import org.springframework.cloud.zookeeper.discovery.RibbonZookeeperAutoConfiguration
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ActiveProfiles
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
import org.springframework.web.client.RestTemplate
|
||||
@@ -50,7 +49,6 @@ import spock.lang.Specification
|
||||
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
|
||||
repositoryRoot = "classpath:m2repo/repository/")
|
||||
// end::autoconfigure[]
|
||||
@DirtiesContext
|
||||
class StubRunnerSpringCloudAutoConfigurationSpec extends Specification {
|
||||
|
||||
@Autowired StubFinder stubFinder
|
||||
|
||||
@@ -33,7 +33,6 @@ import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.core.env.Environment
|
||||
import org.springframework.http.ResponseEntity
|
||||
import org.springframework.messaging.Message
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
@@ -45,7 +44,6 @@ import org.springframework.test.context.ContextConfiguration
|
||||
repositoryRoot = "classpath:m2repo/repository/",
|
||||
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
|
||||
stubsPerConsumer = true)
|
||||
@DirtiesContext
|
||||
class StubRunnerStubsPerConsumerSpec extends Specification {
|
||||
// end::test[]
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.core.env.Environment
|
||||
import org.springframework.http.ResponseEntity
|
||||
import org.springframework.messaging.Message
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
@@ -46,7 +45,6 @@ import org.springframework.test.context.ContextConfiguration
|
||||
consumerName = "foo-consumer",
|
||||
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
|
||||
stubsPerConsumer = true)
|
||||
@DirtiesContext
|
||||
class StubRunnerStubsPerConsumerWithConsumerNameSpec extends Specification {
|
||||
// end::test[]
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRun
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
|
||||
import static org.mockito.BDDMockito.then
|
||||
@@ -58,7 +57,6 @@ import static org.mockito.Mockito.mock
|
||||
"org.springframework.cloud.contract.verifier.stubs:bootService"],
|
||||
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
|
||||
repositoryRoot = "classpath:m2repo/repository/")
|
||||
@DirtiesContext
|
||||
class StubRunnerSpringCloudConsulAutoConfigurationSpec extends Specification {
|
||||
|
||||
@Autowired ConsulClient client
|
||||
|
||||
@@ -47,7 +47,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
maxPort = 10020,
|
||||
mappingsOutputFolder = "target/outputmappings/",
|
||||
properties = {"hello=world", "foo=bar"})
|
||||
@DirtiesContext
|
||||
@ActiveProfiles("test")
|
||||
public class StubRunnerSliceTests {
|
||||
|
||||
|
||||
@@ -27,6 +27,9 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
import com.github.tomakehurst.wiremock.common.Slf4jNotifier;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
@@ -37,9 +40,15 @@ import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.core.io.ResourceLoader;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StreamUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import com.github.tomakehurst.wiremock.WireMockServer;
|
||||
import com.github.tomakehurst.wiremock.client.WireMock;
|
||||
import com.github.tomakehurst.wiremock.core.Options;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
/**
|
||||
* Configuration and lifecycle for a Spring Application context that wants to run a
|
||||
* WireMock server. Can be used by adding
|
||||
@@ -55,6 +64,10 @@ import org.springframework.util.StringUtils;
|
||||
@EnableConfigurationProperties(WireMockProperties.class)
|
||||
public class WireMockConfiguration implements SmartLifecycle {
|
||||
|
||||
private static final Log log = LogFactory.getLog(WireMockConfiguration.class);
|
||||
|
||||
static final String WIREMOCK_SERVER_BEAN_NAME = "wireMockServer";
|
||||
|
||||
private volatile boolean running;
|
||||
|
||||
private WireMockServer server;
|
||||
@@ -91,10 +104,15 @@ public class WireMockConfiguration implements SmartLifecycle {
|
||||
this.customizer.customize(factory);
|
||||
}
|
||||
}
|
||||
this.server = new WireMockServer(this.options);
|
||||
if (this.server == null) {
|
||||
this.server = new WireMockServer(this.options);
|
||||
}
|
||||
registerStubs();
|
||||
if (!this.beanFactory.containsBean("wireMockServer")) {
|
||||
this.beanFactory.registerSingleton("wireMockServer", this.server);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("WireMock server has [" + this.server.getStubMappings().size() + "] registered");
|
||||
}
|
||||
if (!this.beanFactory.containsBean(WIREMOCK_SERVER_BEAN_NAME)) {
|
||||
this.beanFactory.registerSingleton(WIREMOCK_SERVER_BEAN_NAME, this.server);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,6 +136,10 @@ public class WireMockConfiguration implements SmartLifecycle {
|
||||
}
|
||||
}
|
||||
|
||||
void reset() {
|
||||
this.server.resetAll();
|
||||
}
|
||||
|
||||
private void registerFiles(com.github.tomakehurst.wiremock.core.WireMockConfiguration factory) throws IOException {
|
||||
List<Resource> resources = new ArrayList<>();
|
||||
for (String files : this.wireMock.getServer().getFiles()) {
|
||||
@@ -142,6 +164,11 @@ public class WireMockConfiguration implements SmartLifecycle {
|
||||
this.server.start();
|
||||
WireMock.configureFor("localhost", this.server.port());
|
||||
this.running = true;
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Started WireMock at port [" + this.server.port() + "]. It has [" + this.server.getStubMappings().size() + "] mappings registered");
|
||||
}
|
||||
Assert.isTrue(new RestTemplate().getForEntity("http://localhost:" + this.server.port() + "/__admin/mappings", String.class)
|
||||
.getStatusCode().is2xxSuccessful(), "__admin/mappings endpoint wasn't accessible");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -149,6 +176,9 @@ public class WireMockConfiguration implements SmartLifecycle {
|
||||
if (this.running) {
|
||||
this.server.stop();
|
||||
this.running = false;
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Stopped WireMock instance");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
package org.springframework.cloud.contract.wiremock;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.test.context.TestContext;
|
||||
import org.springframework.test.context.support.AbstractTestExecutionListener;
|
||||
|
||||
/**
|
||||
* Stops the WireMock server after each test class and restarts it before every class
|
||||
*
|
||||
* @author Marcin Grzejszczak
|
||||
* @since 1.2.6
|
||||
*/
|
||||
public final class WireMockTestExecutionListener extends AbstractTestExecutionListener {
|
||||
|
||||
private static final Log log = LogFactory.getLog(WireMockTestExecutionListener.class);
|
||||
|
||||
@Override public void beforeTestClass(TestContext testContext) {
|
||||
try {
|
||||
if (wireMockConfigMissing(testContext)) {
|
||||
return;
|
||||
}
|
||||
WireMockConfiguration wireMockConfiguration = wireMockConfiguration(testContext);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("WireMock configuration is running [" + wireMockConfiguration.isRunning() + "]");
|
||||
}
|
||||
if (!wireMockConfiguration.isRunning()) {
|
||||
wireMockConfiguration.reset();
|
||||
wireMockConfiguration.init();
|
||||
wireMockConfiguration.start();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Exception occurred while trying to init WireMock configuration", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean wireMockConfigMissing(TestContext testContext) {
|
||||
boolean missing = !testContext.getApplicationContext().containsBean(WireMockConfiguration.class.getName());
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("WireMockConfig is missing [" + missing + "]");
|
||||
}
|
||||
return missing;
|
||||
}
|
||||
|
||||
@Override public void afterTestClass(TestContext testContext) {
|
||||
try {
|
||||
if (wireMockConfigMissing(testContext)) {
|
||||
return;
|
||||
}
|
||||
stopWireMockConfiguration(testContext);
|
||||
} catch (Exception e) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Exception occurred while trying to init WireMock configuration", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void stopWireMockConfiguration(TestContext testContext) {
|
||||
WireMockConfiguration wireMockConfiguration = wireMockConfiguration(testContext);
|
||||
if (wireMockConfiguration.isRunning()) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("WireMock is running, will stop it");
|
||||
}
|
||||
wireMockConfiguration.stop();
|
||||
}
|
||||
}
|
||||
|
||||
private WireMockConfiguration wireMockConfiguration(TestContext testContext) {
|
||||
return testContext.getApplicationContext().getBean(WireMockConfiguration.class);
|
||||
}
|
||||
}
|
||||
@@ -7,3 +7,7 @@ org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs=\
|
||||
org.springframework.cloud.contract.wiremock.restdocs.WireMockRestDocsConfiguration,\
|
||||
org.springframework.cloud.contract.wiremock.restdocs.WireMockWebTestClientConfiguration,\
|
||||
org.springframework.cloud.contract.wiremock.restdocs.WireMockRestAssuredConfiguration
|
||||
|
||||
# Test Execution Listeners
|
||||
org.springframework.test.context.TestExecutionListener=\
|
||||
org.springframework.cloud.contract.wiremock.WireMockTestExecutionListener
|
||||
@@ -1,23 +1,24 @@
|
||||
package org.springframework.cloud.contract.wiremock;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.get;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import com.github.tomakehurst.wiremock.WireMockServer;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port = 5432)
|
||||
@AutoConfigureWireMock(port = 12345)
|
||||
public class AutoConfigureWireMockApplicationTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -12,7 +12,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port=0)
|
||||
// Default stubs work at classpath:/mappings
|
||||
public class AutoConfigureWireMockAutoStubsApplicationTests {
|
||||
|
||||
@@ -18,7 +18,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
AutoConfigureWireMockConfigurationCustomizerTests.Config.class},
|
||||
properties="app.baseUrl=http://localhost:${wiremock.server.port}",
|
||||
webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port=0, stubs="file:src/test/resources/io.stubs/mappings")
|
||||
public class AutoConfigureWireMockConfigurationCustomizerTests {
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port=0, files="classpath:/root/")
|
||||
public class AutoConfigureWireMockFilesApplicationTests {
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port=0, files="classpath:root")
|
||||
public class AutoConfigureWireMockFilesApplicationWithoutSlashTests {
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = WiremockTestsApplication.class, properties = "app.baseUrl=https://localhost:${wiremock.server.https-port}", webEnvironment = WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(httpsPort = 9999, port=0)
|
||||
public class AutoConfigureWireMockHttpsPortApplicationTests {
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = WiremockTestsApplication.class, properties = "app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment = WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port = 9999)
|
||||
public class AutoConfigureWireMockPortApplicationTests {
|
||||
|
||||
|
||||
@@ -1,22 +1,20 @@
|
||||
package org.springframework.cloud.contract.wiremock;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.get;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port=0)
|
||||
public class AutoConfigureWireMockRandomPortApplicationTests {
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=https://localhost:${wiremock.server.https-port}", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port=0, httpsPort=0)
|
||||
public class AutoConfigureWireMockRandomPortHttpsApplicationTests {
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.springframework.cloud.contract.wiremock;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.get;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
|
||||
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = WiremockTestsApplication.class, properties = "app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment = WebEnvironment.NONE)
|
||||
@AutoConfigureWireMock(port = 9999)
|
||||
// Should manage to register
|
||||
public class AutoConfigureWireMockSamePortApplicationTests {
|
||||
|
||||
@Autowired
|
||||
private Service service;
|
||||
|
||||
@Test
|
||||
public void contextLoads() throws Exception {
|
||||
stubFor(get(urlEqualTo("/test2")).willReturn(aResponse()
|
||||
.withHeader("Content-Type", "text/plain").withBody("Hello World2!")));
|
||||
assertThat(this.service.go2()).isEqualTo("Hello World2!");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -12,7 +12,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port=0, files="classpath:/root/", stubs="file:src/test/resources/io.stubs/mappings")
|
||||
public class AutoConfigureWireMockStubsAndFilesApplicationTests {
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port=0, files={"classpath:/", "classpath:/root/", "classpath:/nonexistent/"}, stubs="file:src/test/resources/io.stubs/mappings")
|
||||
public class AutoConfigureWireMockStubsAndMultipleFilesApplicationTests {
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port=0, stubs="file:src/test/resources/io.stubs/mappings")
|
||||
public class AutoConfigureWireMockStubsApplicationTests {
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=http://localhost:${wiremock.server.port}", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
@AutoConfigureWireMock(port=0, stubs="file:src/test/resources/io.stubs/mappings/")
|
||||
public class AutoConfigureWireMockStubsApplicationWithSlashTests {
|
||||
|
||||
|
||||
@@ -18,7 +18,6 @@ import com.github.tomakehurst.wiremock.junit.WireMockClassRule;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=https://localhost:8443")
|
||||
@DirtiesContext
|
||||
public class WiremockHttpsServerApplicationTests {
|
||||
|
||||
@ClassRule
|
||||
|
||||
@@ -20,7 +20,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes=WiremockTestsApplication.class, properties="app.baseUrl=http://localhost:5435", webEnvironment=WebEnvironment.NONE)
|
||||
@DirtiesContext
|
||||
public class WiremockServerApplicationTests {
|
||||
|
||||
@ClassRule
|
||||
|
||||
@@ -39,7 +39,6 @@ import wiremock.org.eclipse.jetty.http.HttpStatus;
|
||||
@SpringBootTest(classes = TestConfiguration.class)
|
||||
@AutoConfigureRestDocs(outputDir = "target/snippets")
|
||||
@AutoConfigureMockMvc
|
||||
@DirtiesContext
|
||||
public class WiremockServerRestDocsApplicationTests {
|
||||
|
||||
@Autowired private MockMvc mockMvc;
|
||||
|
||||
@@ -30,7 +30,6 @@ import com.github.tomakehurst.wiremock.client.WireMock;
|
||||
@SpringBootTest(classes = TestConfiguration.class)
|
||||
@AutoConfigureRestDocs(outputDir = "target/snippets")
|
||||
@AutoConfigureMockMvc
|
||||
@DirtiesContext
|
||||
public class WiremockServerRestDocsMatcherApplicationTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -26,7 +26,6 @@ import wiremock.org.eclipse.jetty.http.HttpStatus;
|
||||
@ContextConfiguration(classes = TestConfiguration.class)
|
||||
@AutoConfigureRestDocs(outputDir = "target/snippets/webtestclient")
|
||||
@AutoConfigureWebTestClient
|
||||
@DirtiesContext
|
||||
public class WiremockServerWebTestClientApplicationTests {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -51,7 +51,7 @@ class Controller {
|
||||
class Service {
|
||||
|
||||
@Value("${app.baseUrl:http://example.org}")
|
||||
private String base;
|
||||
String base;
|
||||
|
||||
private RestTemplate restTemplate;
|
||||
|
||||
@@ -76,6 +76,10 @@ class Service {
|
||||
.map(MediaType::valueOf).toArray(MediaType[]::new);
|
||||
}
|
||||
|
||||
public String go2() {
|
||||
return this.restTemplate.getForEntity(this.base + "/test2", String.class).getBody();
|
||||
}
|
||||
|
||||
public void setBase(String base) {
|
||||
this.base = base;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
logging:
|
||||
level:
|
||||
org.springframework.cloud.contract: debug
|
||||
@@ -25,7 +25,6 @@ import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper;
|
||||
import org.springframework.messaging.Message
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
|
||||
import spock.lang.Specification
|
||||
@@ -35,9 +34,8 @@ import com.jayway.jsonpath.JsonPath
|
||||
import com.toomuchcoding.jsonassert.JsonAssertion
|
||||
// Context configuration would end up in base class
|
||||
@ContextConfiguration(classes = [IntegrationMessagingApplication], loader = SpringBootContextLoader)
|
||||
@DirtiesContext
|
||||
@AutoConfigureMessageVerifier
|
||||
public class IntegrationMessagingApplicationSpec extends Specification {
|
||||
class IntegrationMessagingApplicationSpec extends Specification {
|
||||
|
||||
// ALL CASES
|
||||
@Inject MessageVerifier<Message<?>> contractVerifierMessaging
|
||||
|
||||
@@ -25,8 +25,7 @@ import org.springframework.cloud.contract.spec.Contract
|
||||
import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.messaging.Message
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
|
||||
import spock.lang.Specification
|
||||
@@ -40,9 +39,8 @@ import com.toomuchcoding.jsonassert.JsonAssertion
|
||||
*/
|
||||
// Context configuration would end up in base class
|
||||
@ContextConfiguration(classes = [SpringMessagingApplication], loader = SpringBootContextLoader)
|
||||
@DirtiesContext
|
||||
@AutoConfigureMessageVerifier
|
||||
public class SpringApplicationSpec extends Specification {
|
||||
class SpringApplicationSpec extends Specification {
|
||||
|
||||
// ALL CASES
|
||||
@Inject MessageVerifier<Message<?>> contractVerifierMessaging
|
||||
|
||||
@@ -27,7 +27,6 @@ import org.springframework.cloud.contract.verifier.messaging.MessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier
|
||||
import org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierObjectMapper
|
||||
import org.springframework.messaging.Message
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
import spock.lang.Specification
|
||||
|
||||
@@ -37,7 +36,6 @@ import javax.inject.Inject
|
||||
*/
|
||||
// Context configuration would end up in base class
|
||||
@ContextConfiguration(classes = [StreamMessagingApplication], loader = SpringBootContextLoader)
|
||||
@DirtiesContext
|
||||
@SpringBootTest(properties = "debug=true")
|
||||
@AutoConfigureMessageVerifier
|
||||
class StreamMessagingApplicationSpec extends Specification {
|
||||
|
||||
@@ -32,7 +32,6 @@ import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.http.HttpMethod
|
||||
import org.springframework.http.client.ClientHttpResponse
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
import org.springframework.web.client.*
|
||||
import spock.lang.AutoCleanup
|
||||
@@ -58,7 +57,6 @@ import spock.util.concurrent.PollingConditions
|
||||
"org.springframework.cloud.contract.verifier.stubs:bootService"],
|
||||
repositoryRoot = "classpath:m2repo/repository/",
|
||||
stubsMode = StubRunnerProperties.StubsMode.REMOTE)
|
||||
@DirtiesContext
|
||||
class StubRunnerSpringCloudEurekaAutoConfigurationSpec extends Specification {
|
||||
|
||||
@Autowired StubFinder stubFinder
|
||||
|
||||
@@ -32,7 +32,6 @@ import org.springframework.cloud.zookeeper.ZookeeperProperties
|
||||
import org.springframework.cloud.zookeeper.discovery.ZookeeperDiscoveryClient
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
import org.springframework.util.SocketUtils
|
||||
import org.springframework.web.client.RestTemplate
|
||||
@@ -51,7 +50,6 @@ import spock.lang.Specification
|
||||
"org.springframework.cloud.contract.verifier.stubs:bootService"],
|
||||
repositoryRoot = "classpath:m2repo/repository/",
|
||||
stubsMode = StubRunnerProperties.StubsMode.REMOTE)
|
||||
@DirtiesContext
|
||||
class StubRunnerSpringCloudZookeeperAutoConfigurationSpec extends Specification {
|
||||
|
||||
@Autowired StubFinder stubFinder
|
||||
|
||||
@@ -10,7 +10,6 @@ import org.springframework.boot.web.server.LocalServerPort;
|
||||
import org.springframework.cloud.contract.stubrunner.StubFinder;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner;
|
||||
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
@@ -27,7 +26,6 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
@AutoConfigureStubRunner(repositoryRoot = "classpath:m2repo/repository/",
|
||||
ids = { "org.springframework.cloud.contract.verifier.stubs:contextPathFraudDetectionServer" },
|
||||
stubsMode = StubRunnerProperties.StubsMode.REMOTE)
|
||||
@DirtiesContext
|
||||
public class LoanApplicationServiceTests {
|
||||
// end::autoconfigure_stubrunner[]
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ import org.springframework.cloud.stream.messaging.Sink
|
||||
import org.springframework.context.annotation.Bean
|
||||
import org.springframework.context.annotation.Configuration
|
||||
import org.springframework.stereotype.Component
|
||||
import org.springframework.test.annotation.DirtiesContext
|
||||
import org.springframework.test.context.ActiveProfiles
|
||||
import org.springframework.test.context.ContextConfiguration
|
||||
import spock.lang.Specification
|
||||
@@ -43,7 +42,6 @@ import spock.lang.Specification
|
||||
@AutoConfigureStubRunner( ids = ["com.example:fraudDetectionServerMoco"],
|
||||
stubsMode = StubRunnerProperties.StubsMode.CLASSPATH)
|
||||
// end::[classpath_stub_runner]
|
||||
@DirtiesContext
|
||||
@ActiveProfiles("test")
|
||||
class MocoHttpServerStubSpec extends Specification {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user