Removed dirties context on any tests
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user