diff --git a/README.adoc b/README.adoc index b484bfe8c2..b41cd390cb 100644 --- a/README.adoc +++ b/README.adoc @@ -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 { ---- diff --git a/docs/src/main/asciidoc/verifier_introduction.adoc b/docs/src/main/asciidoc/verifier_introduction.adoc index d5c36e7f29..a77b3b1957 100644 --- a/docs/src/main/asciidoc/verifier_introduction.adoc +++ b/docs/src/main/asciidoc/verifier_introduction.adoc @@ -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 { ---- diff --git a/samples/standalone/dsl/http-client/src/test/java/com/example/loan/LoanApplicationServiceContextPathTests.java b/samples/standalone/dsl/http-client/src/test/java/com/example/loan/LoanApplicationServiceContextPathTests.java index 13fe27ed58..ceaef58294 100644 --- a/samples/standalone/dsl/http-client/src/test/java/com/example/loan/LoanApplicationServiceContextPathTests.java +++ b/samples/standalone/dsl/http-client/src/test/java/com/example/loan/LoanApplicationServiceContextPathTests.java @@ -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 diff --git a/samples/standalone/dsl/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java b/samples/standalone/dsl/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java index 3ce01ce1a9..d64ff07751 100644 --- a/samples/standalone/dsl/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java +++ b/samples/standalone/dsl/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java @@ -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[] diff --git a/samples/standalone/dsl/http-client/src/test/resources/application.yaml b/samples/standalone/dsl/http-client/src/test/resources/application.yaml index 79ba03fbb4..fcdfd10d16 100644 --- a/samples/standalone/dsl/http-client/src/test/resources/application.yaml +++ b/samples/standalone/dsl/http-client/src/test/resources/application.yaml @@ -1,3 +1,5 @@ server: port: 6565 -logging.level.org.springframework.cloud.contract: DEBUG \ No newline at end of file +logging: + level: + org.springframework.cloud.contract: debug \ No newline at end of file diff --git a/samples/standalone/pact/pact-http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java b/samples/standalone/pact/pact-http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java index 56d33ae6de..3bf935987d 100644 --- a/samples/standalone/pact/pact-http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java +++ b/samples/standalone/pact/pact-http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java @@ -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 diff --git a/samples/standalone/restdocs/http-client/src/main/java/com/example/loan/ServiceProperties.java b/samples/standalone/restdocs/http-client/src/main/java/com/example/loan/ServiceProperties.java new file mode 100644 index 0000000000..0dff3bd2da --- /dev/null +++ b/samples/standalone/restdocs/http-client/src/main/java/com/example/loan/ServiceProperties.java @@ -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; + } +} diff --git a/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java b/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java index 8e8a1462bf..da67975c72 100644 --- a/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java +++ b/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java @@ -28,7 +28,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @AutoConfigureRestDocs(outputDir = "target/snippets") @AutoConfigureMockMvc @AutoConfigureJsonTesters -@DirtiesContext public class StubGeneratorTests { @Autowired diff --git a/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/XmlStubGeneratorTests.java b/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/XmlStubGeneratorTests.java index b36e22bad5..2067526cd7 100644 --- a/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/XmlStubGeneratorTests.java +++ b/samples/standalone/restdocs/http-server/src/test/java/com/example/fraud/XmlStubGeneratorTests.java @@ -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 diff --git a/samples/standalone/webclient/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java b/samples/standalone/webclient/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java index 5363234e1d..2c655c3f96 100644 --- a/samples/standalone/webclient/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java +++ b/samples/standalone/webclient/http-server/src/test/java/com/example/fraud/StubGeneratorTests.java @@ -28,7 +28,6 @@ import static org.springframework.cloud.contract.wiremock.restdocs.WireMockWebTe @AutoConfigureRestDocs(outputDir = "target/snippets") @AutoConfigureWebTestClient @AutoConfigureJsonTesters -@DirtiesContext public class StubGeneratorTests { @Autowired diff --git a/samples/standalone/yml/http-client/src/test/java/com/example/loan/LoanApplicationServiceContextPathTests.java b/samples/standalone/yml/http-client/src/test/java/com/example/loan/LoanApplicationServiceContextPathTests.java index 4a62dad689..e418990149 100644 --- a/samples/standalone/yml/http-client/src/test/java/com/example/loan/LoanApplicationServiceContextPathTests.java +++ b/samples/standalone/yml/http-client/src/test/java/com/example/loan/LoanApplicationServiceContextPathTests.java @@ -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 diff --git a/samples/standalone/yml/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java b/samples/standalone/yml/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java index 7fa34bb0dc..a0949d753c 100644 --- a/samples/standalone/yml/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java +++ b/samples/standalone/yml/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java @@ -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[] diff --git a/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsClassRuleTests.java b/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsClassRuleTests.java index 94aff4b974..8633d32cdb 100644 --- a/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsClassRuleTests.java +++ b/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsClassRuleTests.java @@ -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) diff --git a/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsMockServerApplicationTests.java b/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsMockServerApplicationTests.java index 8bbcec20ff..b46bfc3c80 100644 --- a/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsMockServerApplicationTests.java +++ b/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsMockServerApplicationTests.java @@ -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) diff --git a/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsTests.java b/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsTests.java index 80ee38dd34..fda739e6e9 100644 --- a/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsTests.java +++ b/samples/wiremock-jetty/src/test/java/com/example/WiremockForDocsTests.java @@ -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) diff --git a/samples/wiremock-jetty/src/test/java/com/example/WiremockHttpsServerApplicationTests.java b/samples/wiremock-jetty/src/test/java/com/example/WiremockHttpsServerApplicationTests.java index 93b83c12d5..8e3fc669a5 100644 --- a/samples/wiremock-jetty/src/test/java/com/example/WiremockHttpsServerApplicationTests.java +++ b/samples/wiremock-jetty/src/test/java/com/example/WiremockHttpsServerApplicationTests.java @@ -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 { diff --git a/samples/wiremock-jetty/src/test/java/com/example/WiremockImportApplicationTests.java b/samples/wiremock-jetty/src/test/java/com/example/WiremockImportApplicationTests.java index 121f8e2d50..761c7344c6 100644 --- a/samples/wiremock-jetty/src/test/java/com/example/WiremockImportApplicationTests.java +++ b/samples/wiremock-jetty/src/test/java/com/example/WiremockImportApplicationTests.java @@ -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 { diff --git a/samples/wiremock-jetty/src/test/java/com/example/WiremockMockServerApplicationTests.java b/samples/wiremock-jetty/src/test/java/com/example/WiremockMockServerApplicationTests.java index 6044625d39..ac7d44c007 100644 --- a/samples/wiremock-jetty/src/test/java/com/example/WiremockMockServerApplicationTests.java +++ b/samples/wiremock-jetty/src/test/java/com/example/WiremockMockServerApplicationTests.java @@ -15,7 +15,6 @@ import org.springframework.web.client.RestTemplate; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment=WebEnvironment.NONE) -@DirtiesContext public class WiremockMockServerApplicationTests { @Autowired diff --git a/samples/wiremock-jetty/src/test/java/com/example/WiremockServerApplicationTests.java b/samples/wiremock-jetty/src/test/java/com/example/WiremockServerApplicationTests.java index 9bbb1671d6..cdb6c9e950 100644 --- a/samples/wiremock-jetty/src/test/java/com/example/WiremockServerApplicationTests.java +++ b/samples/wiremock-jetty/src/test/java/com/example/WiremockServerApplicationTests.java @@ -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 diff --git a/samples/wiremock-native/src/test/java/com/example/WiremockServerApplicationTests.java b/samples/wiremock-native/src/test/java/com/example/WiremockServerApplicationTests.java index faef1e5ff2..6c532787db 100644 --- a/samples/wiremock-native/src/test/java/com/example/WiremockServerApplicationTests.java +++ b/samples/wiremock-native/src/test/java/com/example/WiremockServerApplicationTests.java @@ -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 diff --git a/samples/wiremock-tomcat/src/test/java/com/example/WiremockHttpsServerApplicationTests.java b/samples/wiremock-tomcat/src/test/java/com/example/WiremockHttpsServerApplicationTests.java index 9e30002fdf..05e370b069 100644 --- a/samples/wiremock-tomcat/src/test/java/com/example/WiremockHttpsServerApplicationTests.java +++ b/samples/wiremock-tomcat/src/test/java/com/example/WiremockHttpsServerApplicationTests.java @@ -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 { diff --git a/samples/wiremock-tomcat/src/test/java/com/example/WiremockImportApplicationTests.java b/samples/wiremock-tomcat/src/test/java/com/example/WiremockImportApplicationTests.java index 7169d26908..1b4f3916ef 100644 --- a/samples/wiremock-tomcat/src/test/java/com/example/WiremockImportApplicationTests.java +++ b/samples/wiremock-tomcat/src/test/java/com/example/WiremockImportApplicationTests.java @@ -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 { diff --git a/samples/wiremock-tomcat/src/test/java/com/example/WiremockImportContextPathApplicationTests.java b/samples/wiremock-tomcat/src/test/java/com/example/WiremockImportContextPathApplicationTests.java index c46ffe2873..dc091a4653 100644 --- a/samples/wiremock-tomcat/src/test/java/com/example/WiremockImportContextPathApplicationTests.java +++ b/samples/wiremock-tomcat/src/test/java/com/example/WiremockImportContextPathApplicationTests.java @@ -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 { diff --git a/samples/wiremock-tomcat/src/test/java/com/example/WiremockMockServerApplicationTests.java b/samples/wiremock-tomcat/src/test/java/com/example/WiremockMockServerApplicationTests.java index bf75089652..ec44e4a947 100644 --- a/samples/wiremock-tomcat/src/test/java/com/example/WiremockMockServerApplicationTests.java +++ b/samples/wiremock-tomcat/src/test/java/com/example/WiremockMockServerApplicationTests.java @@ -15,7 +15,6 @@ import org.springframework.web.client.RestTemplate; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment=WebEnvironment.NONE) -@DirtiesContext public class WiremockMockServerApplicationTests { @Autowired diff --git a/samples/wiremock-tomcat/src/test/java/com/example/WiremockServerApplicationTests.java b/samples/wiremock-tomcat/src/test/java/com/example/WiremockServerApplicationTests.java index d4c5656527..b47123d10e 100644 --- a/samples/wiremock-tomcat/src/test/java/com/example/WiremockServerApplicationTests.java +++ b/samples/wiremock-tomcat/src/test/java/com/example/WiremockServerApplicationTests.java @@ -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 diff --git a/samples/wiremock-undertow-ssl/src/test/java/com/example/WiremockHttpsServerApplicationTests.java b/samples/wiremock-undertow-ssl/src/test/java/com/example/WiremockHttpsServerApplicationTests.java index 4bd913d950..4fe5fe2426 100644 --- a/samples/wiremock-undertow-ssl/src/test/java/com/example/WiremockHttpsServerApplicationTests.java +++ b/samples/wiremock-undertow-ssl/src/test/java/com/example/WiremockHttpsServerApplicationTests.java @@ -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 { diff --git a/samples/wiremock-undertow/src/test/java/com/example/WiremockImportApplicationTests.java b/samples/wiremock-undertow/src/test/java/com/example/WiremockImportApplicationTests.java index fd6c29e060..12440cbce8 100644 --- a/samples/wiremock-undertow/src/test/java/com/example/WiremockImportApplicationTests.java +++ b/samples/wiremock-undertow/src/test/java/com/example/WiremockImportApplicationTests.java @@ -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 { diff --git a/samples/wiremock-undertow/src/test/java/com/example/WiremockMockServerApplicationTests.java b/samples/wiremock-undertow/src/test/java/com/example/WiremockMockServerApplicationTests.java index f53438fc5a..ae6055a12b 100644 --- a/samples/wiremock-undertow/src/test/java/com/example/WiremockMockServerApplicationTests.java +++ b/samples/wiremock-undertow/src/test/java/com/example/WiremockMockServerApplicationTests.java @@ -15,7 +15,6 @@ import org.springframework.web.client.RestTemplate; @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment=WebEnvironment.NONE) -@DirtiesContext public class WiremockMockServerApplicationTests { @Autowired diff --git a/samples/wiremock-undertow/src/test/java/com/example/WiremockServerApplicationTests.java b/samples/wiremock-undertow/src/test/java/com/example/WiremockServerApplicationTests.java index 9fd429e5b1..1dc0c5d538 100644 --- a/samples/wiremock-undertow/src/test/java/com/example/WiremockServerApplicationTests.java +++ b/samples/wiremock-undertow/src/test/java/com/example/WiremockServerApplicationTests.java @@ -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 diff --git a/spring-cloud-contract-stub-runner/README.adoc b/spring-cloud-contract-stub-runner/README.adoc index 1b3eec708d..cbd8e6ad91 100644 --- a/spring-cloud-contract-stub-runner/README.adoc +++ b/spring-cloud-contract-stub-runner/README.adoc @@ -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: diff --git a/spring-cloud-contract-stub-runner/pom.xml b/spring-cloud-contract-stub-runner/pom.xml index dbd0cbd4ab..bbc93908a3 100644 --- a/spring-cloud-contract-stub-runner/pom.xml +++ b/spring-cloud-contract-stub-runner/pom.xml @@ -82,6 +82,11 @@ com.jcraft jsch.agentproxy.usocket-jna + + org.springframework + spring-test + true + org.springframework.boot spring-boot-autoconfigure-processor diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerExecutor.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerExecutor.java index 551076cf13..80825968fe 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerExecutor.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerExecutor.java @@ -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 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 contracts) { diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubServer.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubServer.java index 73c7ded42f..429edb6ac3 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubServer.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubServer.java @@ -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() + '}'; + } } diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/StubRunnerWireMockTestExecutionListener.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/StubRunnerWireMockTestExecutionListener.java new file mode 100644 index 0000000000..b29e451bf7 --- /dev/null +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/StubRunnerWireMockTestExecutionListener.java @@ -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> STUBS = new ConcurrentHashMap<>(); + + @Override public void beforeTestClass(TestContext testContext) { + Map 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 entry : stubs.entrySet()) { + while (entry.getKey().isRunning()) { + entry.getKey().stop(); + } + List 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(); + } + } +} \ No newline at end of file diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/WireMockHttpServerStub.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/WireMockHttpServerStub.java index 8413c934dd..82c0e13fad 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/WireMockHttpServerStub.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/provider/wiremock/WireMockHttpServerStub.java @@ -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 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())); + } return this; } @@ -159,20 +168,25 @@ public class WireMockHttpServerStub implements HttpServerStub { } private void registerStubMappings(Collection 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 sortedMappings, WireMock wireMock) { + List 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 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 mappings; + + PortAndMappings(Integer port, List mappings) { + this.port = port; + this.mappings = mappings; + } + + @Override public String toString() { + return "PortAndMappings{" + "port=" + this.port + ", mappings=" + this.mappings.size() + '}'; + } +} \ No newline at end of file diff --git a/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories b/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories index 3fec992554..a6042d7383 100644 --- a/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-contract-stub-runner/src/main/resources/META-INF/spring.factories @@ -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 \ No newline at end of file +org.springframework.cloud.contract.stubrunner.messaging.StubRunnerStreamsIntegrationAutoConfiguration + +# Test Execution Listeners +org.springframework.test.context.TestExecutionListener=\ +org.springframework.cloud.contract.stubrunner.provider.wiremock.StubRunnerWireMockTestExecutionListener \ No newline at end of file diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfigurationSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfigurationSpec.groovy index 30a48e4f2d..9dab153375 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfigurationSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfigurationSpec.groovy @@ -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 { diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerSpringCloudAutoConfigurationSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerSpringCloudAutoConfigurationSpec.groovy index f056625880..c18fb30147 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerSpringCloudAutoConfigurationSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerSpringCloudAutoConfigurationSpec.groovy @@ -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 diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerSpec.groovy index 1a207ac896..eba68535f0 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerSpec.groovy @@ -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[] diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerWithConsumerNameSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerWithConsumerNameSpec.groovy index 8b2f2e4557..1e3ed7fed1 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerWithConsumerNameSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerStubsPerConsumerWithConsumerNameSpec.groovy @@ -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[] diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/consul/StubRunnerSpringCloudConsulAutoConfigurationSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/consul/StubRunnerSpringCloudConsulAutoConfigurationSpec.groovy index d9896e3f91..7a2550c394 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/consul/StubRunnerSpringCloudConsulAutoConfigurationSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/consul/StubRunnerSpringCloudConsulAutoConfigurationSpec.groovy @@ -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 diff --git a/spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/StubRunnerSliceTests.java b/spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/StubRunnerSliceTests.java index 0e49703aab..8fa3004be3 100644 --- a/spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/StubRunnerSliceTests.java +++ b/spring-cloud-contract-stub-runner/src/test/java/org/springframework/cloud/contract/stubrunner/StubRunnerSliceTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java index d01c428ac4..466069cc1b 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java @@ -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 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"); + } } } diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockTestExecutionListener.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockTestExecutionListener.java new file mode 100644 index 0000000000..77947f65bf --- /dev/null +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockTestExecutionListener.java @@ -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); + } +} diff --git a/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories b/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories index 3ee4bf2e9f..b81224e5b8 100644 --- a/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-contract-wiremock/src/main/resources/META-INF/spring.factories @@ -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 \ No newline at end of file diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockApplicationTests.java index c7169d2dfa..e884b39ab9 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockApplicationTests.java @@ -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 diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockAutoStubsApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockAutoStubsApplicationTests.java index ad0b1200d1..8007b897ef 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockAutoStubsApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockAutoStubsApplicationTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockConfigurationCustomizerTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockConfigurationCustomizerTests.java index b79c65f012..1ab19f1d8a 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockConfigurationCustomizerTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockConfigurationCustomizerTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockFilesApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockFilesApplicationTests.java index 0ef3869b08..c3fea3d63a 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockFilesApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockFilesApplicationTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockFilesApplicationWithoutSlashTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockFilesApplicationWithoutSlashTests.java index c1508f1d77..6f3f662a04 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockFilesApplicationWithoutSlashTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockFilesApplicationWithoutSlashTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockHttpsPortApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockHttpsPortApplicationTests.java index de9f4e4ec2..d365408fa2 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockHttpsPortApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockHttpsPortApplicationTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockPortApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockPortApplicationTests.java index 63e49e3d2b..6c0282faba 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockPortApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockPortApplicationTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockRandomPortApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockRandomPortApplicationTests.java index aa0dbde681..dd45cc315f 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockRandomPortApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockRandomPortApplicationTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockRandomPortHttpsApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockRandomPortHttpsApplicationTests.java index c36d7e1996..97eb739c5e 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockRandomPortHttpsApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockRandomPortHttpsApplicationTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockSamePortApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockSamePortApplicationTests.java new file mode 100644 index 0000000000..19add19d03 --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockSamePortApplicationTests.java @@ -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!"); + } + +} diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsAndFilesApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsAndFilesApplicationTests.java index 28f96987ab..cba4c7de6f 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsAndFilesApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsAndFilesApplicationTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsAndMultipleFilesApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsAndMultipleFilesApplicationTests.java index 79a0ad2314..02389a3fbe 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsAndMultipleFilesApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsAndMultipleFilesApplicationTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsApplicationTests.java index c286aec9be..1d7039f02e 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsApplicationTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsApplicationWithSlashTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsApplicationWithSlashTests.java index cd24d33aa0..8f565d2f22 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsApplicationWithSlashTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockStubsApplicationWithSlashTests.java @@ -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 { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockHttpsServerApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockHttpsServerApplicationTests.java index 15d73ade30..05ecaa821b 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockHttpsServerApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockHttpsServerApplicationTests.java @@ -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 diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerApplicationTests.java index 062a7e9012..5a3da0fbbb 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerApplicationTests.java @@ -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 diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestDocsApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestDocsApplicationTests.java index 78eca9322a..4405cd49f7 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestDocsApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestDocsApplicationTests.java @@ -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; diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestDocsMatcherApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestDocsMatcherApplicationTests.java index 3017ce6dc6..67aa1252aa 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestDocsMatcherApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerRestDocsMatcherApplicationTests.java @@ -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 diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerWebTestClientApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerWebTestClientApplicationTests.java index d16d6c7c44..d69f682e0f 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerWebTestClientApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockServerWebTestClientApplicationTests.java @@ -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 diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockTestsApplication.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockTestsApplication.java index 2b22fe1708..92c453df68 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockTestsApplication.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockTestsApplication.java @@ -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; } diff --git a/spring-cloud-contract-wiremock/src/test/resources/application.yml b/spring-cloud-contract-wiremock/src/test/resources/application.yml new file mode 100644 index 0000000000..95382003b1 --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/application.yml @@ -0,0 +1,3 @@ +logging: + level: + org.springframework.cloud.contract: debug \ No newline at end of file diff --git a/tests/samples-messaging-integration/src/test/groovy/com/example/IntegrationMessagingApplicationSpec.groovy b/tests/samples-messaging-integration/src/test/groovy/com/example/IntegrationMessagingApplicationSpec.groovy index a50b850083..b3a5ec34e3 100644 --- a/tests/samples-messaging-integration/src/test/groovy/com/example/IntegrationMessagingApplicationSpec.groovy +++ b/tests/samples-messaging-integration/src/test/groovy/com/example/IntegrationMessagingApplicationSpec.groovy @@ -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> contractVerifierMessaging diff --git a/tests/samples-messaging-spring/src/test/groovy/com/example/SpringApplicationSpec.groovy b/tests/samples-messaging-spring/src/test/groovy/com/example/SpringApplicationSpec.groovy index fcb16bc994..402fd0e8dd 100644 --- a/tests/samples-messaging-spring/src/test/groovy/com/example/SpringApplicationSpec.groovy +++ b/tests/samples-messaging-spring/src/test/groovy/com/example/SpringApplicationSpec.groovy @@ -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> contractVerifierMessaging diff --git a/tests/samples-messaging-stream/src/test/groovy/com/example/StreamMessagingApplicationSpec.groovy b/tests/samples-messaging-stream/src/test/groovy/com/example/StreamMessagingApplicationSpec.groovy index abcf7f3a9b..ca305ee7ee 100644 --- a/tests/samples-messaging-stream/src/test/groovy/com/example/StreamMessagingApplicationSpec.groovy +++ b/tests/samples-messaging-stream/src/test/groovy/com/example/StreamMessagingApplicationSpec.groovy @@ -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 { diff --git a/tests/spring-cloud-contract-stub-runner-boot-eureka/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfigurationSpec.groovy b/tests/spring-cloud-contract-stub-runner-boot-eureka/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfigurationSpec.groovy index 5bb90fd8a8..076628cb8a 100644 --- a/tests/spring-cloud-contract-stub-runner-boot-eureka/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfigurationSpec.groovy +++ b/tests/spring-cloud-contract-stub-runner-boot-eureka/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/eureka/StubRunnerSpringCloudEurekaAutoConfigurationSpec.groovy @@ -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 diff --git a/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/zookeeper/StubRunnerSpringCloudZookeeperAutoConfigurationSpec.groovy b/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/zookeeper/StubRunnerSpringCloudZookeeperAutoConfigurationSpec.groovy index 42b5574a45..a1ead5b9d7 100644 --- a/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/zookeeper/StubRunnerSpringCloudZookeeperAutoConfigurationSpec.groovy +++ b/tests/spring-cloud-contract-stub-runner-boot-zookeeper/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/zookeeper/StubRunnerSpringCloudZookeeperAutoConfigurationSpec.groovy @@ -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 diff --git a/tests/spring-cloud-contract-stub-runner-context-path/src/test/java/com/example/loan/LoanApplicationServiceTests.java b/tests/spring-cloud-contract-stub-runner-context-path/src/test/java/com/example/loan/LoanApplicationServiceTests.java index 821ecf0878..f3ed2d3174 100644 --- a/tests/spring-cloud-contract-stub-runner-context-path/src/test/java/com/example/loan/LoanApplicationServiceTests.java +++ b/tests/spring-cloud-contract-stub-runner-context-path/src/test/java/com/example/loan/LoanApplicationServiceTests.java @@ -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[] diff --git a/tests/spring-cloud-contract-stub-runner-moco/src/test/groovy/org/springframework/cloud/contract/stubrunner/provider/moco/MocoHttpServerStubSpec.groovy b/tests/spring-cloud-contract-stub-runner-moco/src/test/groovy/org/springframework/cloud/contract/stubrunner/provider/moco/MocoHttpServerStubSpec.groovy index 69550ed7be..0289147173 100644 --- a/tests/spring-cloud-contract-stub-runner-moco/src/test/groovy/org/springframework/cloud/contract/stubrunner/provider/moco/MocoHttpServerStubSpec.groovy +++ b/tests/spring-cloud-contract-stub-runner-moco/src/test/groovy/org/springframework/cloud/contract/stubrunner/provider/moco/MocoHttpServerStubSpec.groovy @@ -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 {