diff --git a/circle.yml b/circle.yml index e70fb39110..b6ab0c9d53 100644 --- a/circle.yml +++ b/circle.yml @@ -28,6 +28,8 @@ dependencies: - ./scripts/downloadDependencies.sh test: override: + - rm -rf ~/.m2/repository/org/springframework/cloud/contract + - rm -rf ~/.m2/repository/com/example - ./mvnw -s .settings.xml clean org.jacoco:jacoco-maven-plugin:prepare-agent install -U -Pdocs,integration,sonar -nsu --batch-mode -Dmaven.test.redirectTestOutputToFile=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn post: - mkdir -p $CIRCLE_TEST_REPORTS/junit/ diff --git a/docs/src/main/asciidoc/verifier/stubrunner.adoc b/docs/src/main/asciidoc/verifier/stubrunner.adoc index 0c1a1fb942..661776e027 100644 --- a/docs/src/main/asciidoc/verifier/stubrunner.adoc +++ b/docs/src/main/asciidoc/verifier/stubrunner.adoc @@ -55,15 +55,15 @@ Some of the properties that are repetitive can be set using system properties or | Property name | Default value | Description |stubrunner.minPort|10000| Minimal value of a port for a started WireMock with stubs |stubrunner.maxPort|15000| Minimal value of a port for a started WireMock with stubs -|stubrunner.stubs.repositoryRoot|| Maven repo url. If blank then will call the local maven repo -|stubrunner.stubs.classifier|stubs| Default classifier for the stub artifacts +|stubrunner.repositoryRoot|| Maven repo url. If blank then will call the local maven repo +|stubrunner.classifier|stubs| Default classifier for the stub artifacts |stubrunner.workOffline|false| If true then will not contact any remote repositories to download stubs -|stubrunner.stubs.ids|| Array of Ivy notation stubs to download +|stubrunner.ids|| Array of Ivy notation stubs to download |====================== ===== Stub runner stubs ids -You can provide the stubs to download via the `stubrunner.stubs.ids` system property. They follow the following pattern: +You can provide the stubs to download via the `stubrunner.ids` system property. They follow the following pattern: [source,java,indent=0] ---- diff --git a/pom.xml b/pom.xml index b9ad39a70d..06b02c18a4 100644 --- a/pom.xml +++ b/pom.xml @@ -200,12 +200,6 @@ target - - ${env.HOME}/.m2/repository/org/springframework/cloud/contract/verifier/stubs/ - - **/* - - 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 a425bfdbc1..b9e3b437cb 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 @@ -17,7 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; // tag::autoconfigure_stubrunner[] @RunWith(SpringRunner.class) @SpringBootTest -@AutoConfigureStubRunner +@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:8080"}, workOffline = true) public class LoanApplicationServiceTests { // end::autoconfigure_stubrunner[] diff --git a/samples/standalone/dsl/http-client/src/test/resources/application-test-repo.yaml b/samples/standalone/dsl/http-client/src/test/resources/application-test-repo.yaml index f35e838cbf..0fe0e54c25 100644 --- a/samples/standalone/dsl/http-client/src/test/resources/application-test-repo.yaml +++ b/samples/standalone/dsl/http-client/src/test/resources/application-test-repo.yaml @@ -1,3 +1,3 @@ -stubrunner.stubs: +stubrunner: ids: 'com.example:http-server-dsl:+:stubs:8080' repositoryRoot: http://repo.spring.io/libs-snapshot 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 34d4b78432..0d73045e2e 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,3 @@ stubrunner: work-offline: true - stubs.ids: 'com.example:http-server-dsl:+:stubs:8080' \ No newline at end of file + ids: 'com.example:http-server-dsl:+:stubs:8080' \ No newline at end of file diff --git a/samples/standalone/messaging/stream-sink/src/test/resources/application.yml b/samples/standalone/messaging/stream-sink/src/test/resources/application.yml index f0d7e365c4..2b8a53b307 100644 --- a/samples/standalone/messaging/stream-sink/src/test/resources/application.yml +++ b/samples/standalone/messaging/stream-sink/src/test/resources/application.yml @@ -1,3 +1,3 @@ stubrunner: work-offline: true - stubs.ids: 'com.example:stream-source' \ No newline at end of file + ids: 'com.example:stream-source' \ No newline at end of file diff --git a/spring-cloud-contract-stub-runner/README.adoc b/spring-cloud-contract-stub-runner/README.adoc index 98390d995e..9cab8698f4 100644 --- a/spring-cloud-contract-stub-runner/README.adoc +++ b/spring-cloud-contract-stub-runner/README.adoc @@ -182,7 +182,7 @@ include::src/test/resources/application.yml[] ==== Additional Configuration -You can match the artifactId of the stub with the name of your app by using the `stubrunner.stubs.idsToServiceIds:` map. +You can match the artifactId of the stub with the name of your app by using the `stubrunner.idsToServiceIds:` map. You can disable Stub Runner Ribbon support by providing: `stubrunner.cloud.ribbon.enabled` equal to `false` You can disable Stub Runner support by providing: `stubrunner.cloud.enabled` equal to `false` diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/AetherStubDownloader.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/AetherStubDownloader.java index 2360f62193..47d42bf6fa 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/AetherStubDownloader.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/AetherStubDownloader.java @@ -64,14 +64,30 @@ public class AetherStubDownloader implements StubDownloader { private final RepositorySystemSession session; public AetherStubDownloader(StubRunnerOptions stubRunnerOptions) { + if (log.isDebugEnabled()) { + log.debug("Will be resolving versions for the following options: [" + stubRunnerOptions + "]"); + } this.remoteRepos = remoteRepositories(stubRunnerOptions); - if (remoteRepos == null || remoteRepos.isEmpty()) { - log.error("Remote repositories for stubs are not specified!"); + boolean remoteReposMissing = remoteReposMissing(); + if (remoteReposMissing && stubRunnerOptions.workOffline) { + log.info("Remote repos not passed but the switch to work offline was set. " + + "Stubs will be used from your local Maven repository."); + } + if (remoteReposMissing && !stubRunnerOptions.workOffline) { + throw new IllegalStateException("Remote repositories for stubs are not specified and work offline flag wasn't passed"); + } + if (!remoteReposMissing && stubRunnerOptions.workOffline) { + throw new IllegalStateException("Remote repositories for stubs are specified and work offline flag is set. " + + "You have to provide one of them."); } this.repositorySystem = newRepositorySystem(); this.session = newSession(this.repositorySystem, stubRunnerOptions.workOffline); } + private boolean remoteReposMissing() { + return remoteRepos == null || remoteRepos.isEmpty(); + } + /** * Used by the Maven Plugin * @@ -84,15 +100,19 @@ public class AetherStubDownloader implements StubDownloader { this.remoteRepos = remoteRepositories; this.repositorySystem = repositorySystem; this.session = session; - if (remoteRepos == null || remoteRepos.isEmpty()) { - log.error("Remote remoteRepositories for stubs are not specified!"); + if (remoteReposMissing()) { + log.error("Remote repositories for stubs are not specified and work offline flag wasn't passed"); } } private List remoteRepositories( StubRunnerOptions stubRunnerOptions) { - return newRepositories( + List remoteRepos = newRepositories( Arrays.asList(stubRunnerOptions.stubRepositoryRoot.split(","))); + if (log.isDebugEnabled()) { + log.debug("Using the following remote repos " + remoteRepos); + } + return remoteRepos; } private File unpackedJar(String resolvedVersion, String stubsGroup, @@ -146,6 +166,9 @@ public class AetherStubDownloader implements StubDownloader { String version = getVersion(stubConfiguration.groupId, stubConfiguration.artifactId, stubConfiguration.version, stubConfiguration.classifier); + if (log.isDebugEnabled()) { + log.debug("Will download the stub for version [" + version + "]"); + } File unpackedJar = unpackedJar(version, stubConfiguration.groupId, stubConfiguration.artifactId, stubConfiguration.classifier); if (unpackedJar == null) { @@ -166,12 +189,16 @@ public class AetherStubDownloader implements StubDownloader { try { rangeResult = repositorySystem.resolveVersionRange(session, versionRangeRequest); + if (log.isDebugEnabled()) { + log.debug("Resolved version range is [" + rangeResult + "]"); + } } catch (VersionRangeResolutionException e) { throw new IllegalStateException("Cannot resolve version range", e); } if (rangeResult.getHighestVersion() == null) { - log.error("Version was not resolved!"); + log.error("For groupId [" + stubsGroup + "] artifactId [" + stubsModule + "] " + + "and classifier [" + classifier + "] the version was not resolved!"); } return rangeResult.getHighestVersion() == null ? null : rangeResult.getHighestVersion().toString(); } diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerFactory.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerFactory.java index 365ad9007a..863ee5c105 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerFactory.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/StubRunnerFactory.java @@ -17,10 +17,13 @@ package org.springframework.cloud.contract.stubrunner; import java.io.File; +import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.Collection; import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; /** @@ -29,6 +32,8 @@ import org.springframework.cloud.contract.verifier.messaging.MessageVerifier; */ class StubRunnerFactory { + private static final Log log = LogFactory.getLog(MethodHandles.lookup().lookupClass()); + private final StubRunnerOptions stubRunnerOptions; private final StubDownloader stubDownloader; private final MessageVerifier contractVerifierMessaging; @@ -42,10 +47,20 @@ class StubRunnerFactory { } public Collection createStubsFromServiceConfiguration() { + if (log.isDebugEnabled()) { + log.debug("Will download stubs for dependencies " + this.stubRunnerOptions.getDependencies()); + } + if (this.stubRunnerOptions.getDependencies().isEmpty()) { + log.warn("No stubs to download have been passed. Most likely you have forgotten to pass " + + "them either via annotation or a property"); + } Collection result = new ArrayList<>(); for (StubConfiguration stubsConfiguration : stubRunnerOptions.getDependencies()) { Map.Entry entry = stubDownloader .downloadAndUnpackStubJar(stubRunnerOptions, stubsConfiguration); + if (log.isDebugEnabled()) { + log.debug("For stub configuration [" + stubsConfiguration + "] the downloaded entry is [" + entry + "]"); + } if (entry != null) { result.add(createStubRunner(entry.getKey(), entry.getValue())); } diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRule.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRule.java index 771cbb2ed6..a650f8b12f 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRule.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRule.java @@ -67,10 +67,10 @@ public class StubRunnerRule implements TestRule, StubFinder { return new StubRunnerOptionsBuilder() .withMinPort(Integer.valueOf(System.getProperty("stubrunner.port.range.min", "10000"))) .withMaxPort(Integer.valueOf(System.getProperty("stubrunner.port.range.max", "15000"))) - .withStubRepositoryRoot(System.getProperty("stubrunner.stubs.repository.root", "")) + .withStubRepositoryRoot(System.getProperty("stubrunner.repository.root", "")) .withWorkOffline(Boolean.parseBoolean(System.getProperty("stubrunner.work-offline", "false"))) - .withStubsClassifier(System.getProperty("stubrunner.stubs.classifier", "stubs")) - .withStubs(System.getProperty("stubrunner.stubs.ids", "")) + .withStubsClassifier(System.getProperty("stubrunner.classifier", "stubs")) + .withStubs(System.getProperty("stubrunner.ids", "")) .build(); } diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/AutoConfigureStubRunner.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/AutoConfigureStubRunner.java index d61112beb0..d414ad2b19 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/AutoConfigureStubRunner.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/AutoConfigureStubRunner.java @@ -23,6 +23,8 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.test.autoconfigure.properties.PropertyMapping; +import org.springframework.boot.test.autoconfigure.properties.SkipPropertyMapping; import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier; /** @@ -34,6 +36,36 @@ import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureM @Documented @ImportAutoConfiguration @AutoConfigureMessageVerifier +@PropertyMapping(value = "stubrunner", skip = SkipPropertyMapping.ON_DEFAULT_VALUE) public @interface AutoConfigureStubRunner { + /** + * Min value of a port for the automatically started WireMock server + */ + int minPort() default 10000; + + /** + * Max value of a port for the automatically started WireMock server + */ + int maxPort() default 15000; + + /** + * Should the stubs be checked for presence only locally + */ + boolean workOffline() default false; + + /** + * The repository root to use (defaults to local Maven repo). + */ + String repositoryRoot() default ""; + + /** + * The ids of the stubs to run in "ivy" notation (groupId:artifactId[:classifier]:version[:port]). + */ + String[] ids() default {}; + + /** + * The classifier to use by default in ivy co-ordinates for a stub. + */ + String classifier() default "stubs"; } diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfiguration.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfiguration.java index 1b309881d6..2678999fc5 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfiguration.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/StubRunnerConfiguration.java @@ -54,25 +54,17 @@ public class StubRunnerConfiguration { * Bean that initializes stub runners, runs them and on shutdown closes them. Upon its * instantiation JAR with stubs is downloaded and unpacked to a temporary folder and * WireMock server are started for each of those stubs - * - * @param minPortValue min port value of the WireMock instance for stubs - * @param maxPortValue max port value of the WireMock instance for stubs - * @param stubRepositoryRoot root URL from where the JAR with stub mappings will be - * downloaded - * @param stubsSuffix classifier for the jar containing stubs - * @param workOffline forces offline work - * @param stubs comma separated list of stubs presented in Ivy notation */ @Bean public BatchStubRunner batchStubRunner() throws IOException { StubRunnerOptions stubRunnerOptions = new StubRunnerOptionsBuilder() .withMinMaxPort(props.getMinPort(), props.getMaxPort()) .withStubRepositoryRoot( - uriStringOrEmpty(props.getStubs().getRepositoryRoot())) - .withWorkOffline(props.getStubs().getRepositoryRoot() == null + uriStringOrEmpty(props.getRepositoryRoot())) + .withWorkOffline(props.getRepositoryRoot() == null || props.isWorkOffline()) - .withStubsClassifier(props.getStubs().getClassifier()) - .withStubs(props.getStubs().getIds()).build(); + .withStubsClassifier(props.getClassifier()) + .withStubs(props.getIds()).build(); BatchStubRunner batchStubRunner = new BatchStubRunnerFactory(stubRunnerOptions, stubDownloader != null ? stubDownloader : new AetherStubDownloader(stubRunnerOptions), diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/StubRunnerProperties.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/StubRunnerProperties.java index de038d0d45..e1f862862b 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/StubRunnerProperties.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/StubRunnerProperties.java @@ -16,7 +16,10 @@ package org.springframework.cloud.contract.stubrunner.spring; +import java.util.Arrays; + import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; /** @@ -27,21 +30,34 @@ import org.springframework.core.io.Resource; public class StubRunnerProperties { /** - * + * Min value of a port for the automatically started WireMock server */ private int minPort = 10000; /** - * + * Max value of a port for the automatically started WireMock server */ private int maxPort = 15000; /** - * + * Should the stubs be checked for presence only locally */ private boolean workOffline; - private Stubs stubs = new Stubs(); + /** + * The repository root to use (defaults to local Maven repo). + */ + private Resource repositoryRoot; + + /** + * The ids of the stubs to run in "ivy" notation (groupId:artifactId[:classifier]:version[:port]). + */ + private String[] ids = new String[0]; + + /** + * The classifier to use by default in ivy co-ordinates for a stub. + */ + private String classifier = "stubs"; public int getMinPort() { return minPort; @@ -67,51 +83,34 @@ public class StubRunnerProperties { this.workOffline = workOffline; } - public Stubs getStubs() { - return stubs; + public Resource getRepositoryRoot() { + return repositoryRoot; } - public void setStubs(Stubs stubs) { - this.stubs = stubs; + public void setRepositoryRoot(String repositoryRoot) { + this.repositoryRoot = new DefaultResourceLoader().getResource(repositoryRoot); } - public static class Stubs { - /** - * The repository root to use (defaults to local Maven repo). - */ - private Resource repositoryRoot; - /** - * The ids of the stubs to run in "ivy" notation (groupId:artifactId[:classifier]:version[:port]). - */ - private String[] ids = new String[0]; - /** - * The classifier to use by default in ivy co-ordinates for a stub. - */ - private String classifier = "stubs"; - - public Resource getRepositoryRoot() { - return repositoryRoot; - } - - public void setRepositoryRoot(Resource repositoryRoot) { - this.repositoryRoot = repositoryRoot; - } - - public String[] getIds() { - return ids; - } - - public void setIds(String[] ids) { - this.ids = ids; - } - - public String getClassifier() { - return classifier; - } - - public void setClassifier(String classifier) { - this.classifier = classifier; - } + public String[] getIds() { + return ids; } + public void setIds(String[] ids) { + this.ids = ids; + } + + public String getClassifier() { + return classifier; + } + + public void setClassifier(String classifier) { + this.classifier = classifier; + } + + @Override public String toString() { + return "StubRunnerProperties{" + "minPort=" + minPort + ", maxPort=" + maxPort + + ", workOffline=" + workOffline + ", repositoryRoot=" + repositoryRoot + + ", ids=" + Arrays.toString(ids) + ", classifier='" + classifier + '\'' + + '}'; + } } diff --git a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/StubMapperProperties.java b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/StubMapperProperties.java index 79d405b9b0..6706ae5497 100644 --- a/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/StubMapperProperties.java +++ b/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/cloud/StubMapperProperties.java @@ -28,7 +28,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; * * Just provide in your properties file for example: * - * stubrunner.stubs.idsToServiceIds: + * stubrunner.idsToServiceIds: * ivyNotation: someValueInsideYourCode * fraudDetectionServer: someNameThatShouldMapFraudDetectionServer * @@ -36,7 +36,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; * * @since 1.0.0 */ -@ConfigurationProperties("stubrunner.stubs") +@ConfigurationProperties("stubrunner") public class StubMapperProperties { /** diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleCustomPortJUnitTest.java b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleCustomPortJUnitTest.java index 6418f7a3b6..57fdf2d175 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleCustomPortJUnitTest.java +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleCustomPortJUnitTest.java @@ -36,8 +36,8 @@ public class StubRunnerRuleCustomPortJUnitTest { @BeforeClass @AfterClass public static void setupProps() { - System.clearProperty("stubrunner.stubs.repository.root"); - System.clearProperty("stubrunner.stubs.classifier"); + System.clearProperty("stubrunner.repository.root"); + System.clearProperty("stubrunner.classifier"); } // tag::classrule_with_port[] diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleJUnitTest.java b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleJUnitTest.java index 512180121e..b22189508e 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleJUnitTest.java +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleJUnitTest.java @@ -36,8 +36,8 @@ public class StubRunnerRuleJUnitTest { @BeforeClass @AfterClass public static void setupProps() { - System.clearProperty("stubrunner.stubs.repository.root"); - System.clearProperty("stubrunner.stubs.classifier"); + System.clearProperty("stubrunner.repository.root"); + System.clearProperty("stubrunner.classifier"); } // tag::classrule[] diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleSpec.groovy index 241226de4d..c43e6a127b 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/junit/StubRunnerRuleSpec.groovy @@ -30,8 +30,8 @@ class StubRunnerRuleSpec extends Specification { @BeforeClass @AfterClass void setupProps() { - System.clearProperty("stubrunner.stubs.repository.root"); - System.clearProperty("stubrunner.stubs.classifier"); + System.clearProperty("stubrunner.repository.root"); + System.clearProperty("stubrunner.classifier"); } // tag::classrule[] diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/server/StubRunnerBootSpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/server/StubRunnerBootSpec.groovy index 307da54b07..225855993b 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/server/StubRunnerBootSpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/server/StubRunnerBootSpec.groovy @@ -16,25 +16,22 @@ package org.springframework.cloud.contract.stubrunner.server +import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc import groovy.json.JsonSlurper - import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.IntegrationTest; +import org.springframework.boot.test.IntegrationTest import org.springframework.boot.test.context.SpringBootContextLoader import org.springframework.cloud.contract.stubrunner.StubRunning -import org.springframework.context.annotation.Configuration +import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.ContextConfiguration - import spock.lang.Specification - -import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc - /** * @author Marcin Grzejszczak */ // tag::boot_usage[] @ContextConfiguration(classes = StubRunnerBoot, loader = SpringBootContextLoader) @IntegrationTest("spring.cloud.zookeeper.enabled=false") +@ActiveProfiles("test") class StubRunnerBootSpec extends Specification { @Autowired StubRunning stubRunning 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 594339bb4f..42c97883d3 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 @@ -25,6 +25,7 @@ import org.springframework.boot.test.context.SpringBootContextLoader import org.springframework.cloud.contract.stubrunner.StubFinder 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 spock.lang.Specification @@ -39,6 +40,7 @@ import spock.lang.Specification @IntegrationTest(["stubrunner.cloud.enabled=false", "stubrunner.camel.enabled=false"]) @AutoConfigureStubRunner @DirtiesContext +@ActiveProfiles("test") class StubRunnerConfigurationSpec extends Specification { @Autowired StubFinder stubFinder @@ -46,8 +48,8 @@ class StubRunnerConfigurationSpec extends Specification { @BeforeClass @AfterClass void setupProps() { - System.clearProperty("stubrunner.stubs.repository.root"); - System.clearProperty("stubrunner.stubs.classifier"); + System.clearProperty("stubrunner.repository.root"); + System.clearProperty("stubrunner.classifier"); } def 'should start WireMock servers'() { 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 8af8d00144..1a276c137d 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 @@ -27,9 +27,9 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient import org.springframework.cloud.client.loadbalancer.LoadBalanced 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.cloud.zookeeper.ZookeeperProperties import org.springframework.cloud.zookeeper.discovery.ZookeeperServiceDiscovery -import org.springframework.context.ConfigurableApplicationContext import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.test.annotation.DirtiesContext @@ -37,26 +37,36 @@ import org.springframework.test.context.ContextConfiguration import org.springframework.util.SocketUtils import org.springframework.web.client.RestTemplate import spock.lang.Specification + /** * @author Marcin Grzejszczak */ @ContextConfiguration(classes = Config, loader = SpringBootContextLoader) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = ["stubrunner.camel.enabled=false"]) -@AutoConfigureStubRunner +@AutoConfigureStubRunner(ids = + ["org.springframework.cloud.contract.verifier.stubs:loanIssuance", + "org.springframework.cloud.contract.verifier.stubs:fraudDetectionServer", + "org.springframework.cloud.contract.verifier.stubs:bootService"], + repositoryRoot = "classpath:m2repo/repository/") @DirtiesContext class StubRunnerSpringCloudAutoConfigurationSpec extends Specification { @Autowired StubFinder stubFinder @Autowired @LoadBalanced RestTemplate restTemplate + // TODO: this shouldn't be needed? @Autowired ZookeeperServiceDiscovery zookeeperServiceDiscovery - @Autowired ConfigurableApplicationContext applicationContext + @Autowired StubRunnerProperties stubRunnerProperties @BeforeClass @AfterClass static void setupProps() { - System.clearProperty("stubrunner.stubs.repository.root"); - System.clearProperty("stubrunner.stubs.classifier"); + System.clearProperty("stubrunner.repository.root") + System.clearProperty("stubrunner.classifier") + } + + def setup() { + println "StubRunner properties are [$stubRunnerProperties]" } // tag::test[] diff --git a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerSpringCloudAutoConfigurationWithoutDiscoverySpec.groovy b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerSpringCloudAutoConfigurationWithoutDiscoverySpec.groovy index d20c0e153e..8ac02c2a95 100644 --- a/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerSpringCloudAutoConfigurationWithoutDiscoverySpec.groovy +++ b/spring-cloud-contract-stub-runner/src/test/groovy/org/springframework/cloud/contract/stubrunner/spring/cloud/StubRunnerSpringCloudAutoConfigurationWithoutDiscoverySpec.groovy @@ -41,7 +41,11 @@ import spock.lang.Specification properties = ["stubrunner.camel.enabled=false", "spring.cloud.zookeeper.enabled=false", "spring.cloud.zookeeper.discovery.enabled=false"]) -@AutoConfigureStubRunner +@AutoConfigureStubRunner( ids = + ["org.springframework.cloud.contract.verifier.stubs:loanIssuance", + "org.springframework.cloud.contract.verifier.stubs:fraudDetectionServer", + "org.springframework.cloud.contract.verifier.stubs:bootService"], + repositoryRoot = "classpath:m2repo/repository/") @DirtiesContext class StubRunnerSpringCloudAutoConfigurationWithoutDiscoverySpec extends Specification { diff --git a/spring-cloud-contract-stub-runner/src/test/resources/application-test.yml b/spring-cloud-contract-stub-runner/src/test/resources/application-test.yml new file mode 100644 index 0000000000..3342bec09d --- /dev/null +++ b/spring-cloud-contract-stub-runner/src/test/resources/application-test.yml @@ -0,0 +1,6 @@ +stubrunner: + repositoryRoot: classpath:m2repo/repository/ + ids: + - org.springframework.cloud.contract.verifier.stubs:loanIssuance + - org.springframework.cloud.contract.verifier.stubs:fraudDetectionServer + - org.springframework.cloud.contract.verifier.stubs:bootService \ No newline at end of file diff --git a/spring-cloud-contract-stub-runner/src/test/resources/application.yml b/spring-cloud-contract-stub-runner/src/test/resources/application.yml index 8d88487059..2eaffb52e9 100644 --- a/spring-cloud-contract-stub-runner/src/test/resources/application.yml +++ b/spring-cloud-contract-stub-runner/src/test/resources/application.yml @@ -1,9 +1,4 @@ -stubrunner.stubs.repositoryRoot: classpath:m2repo/repository/ -stubrunner.stubs.ids: - - org.springframework.cloud.contract.verifier.stubs:loanIssuance - - org.springframework.cloud.contract.verifier.stubs:fraudDetectionServer - - org.springframework.cloud.contract.verifier.stubs:bootService - -stubrunner.stubs.idsToServiceIds: - ivyNotation: someValueInsideYourCode - fraudDetectionServer: someNameThatShouldMapFraudDetectionServer \ No newline at end of file +stubrunner: + idsToServiceIds: + ivyNotation: someValueInsideYourCode + fraudDetectionServer: someNameThatShouldMapFraudDetectionServer \ No newline at end of file diff --git a/spring-cloud-contract-stub-runner/src/test/resources/logback.xml b/spring-cloud-contract-stub-runner/src/test/resources/logback.xml index 7eecabf2f2..df6a2daa72 100644 --- a/spring-cloud-contract-stub-runner/src/test/resources/logback.xml +++ b/spring-cloud-contract-stub-runner/src/test/resources/logback.xml @@ -16,15 +16,10 @@ - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - + + - + \ No newline at end of file diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/src/test/resources/logback-test.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/src/test/resources/logback-test.groovy index 0b49bdfb4a..bc9c497741 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/src/test/resources/logback-test.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/src/test/resources/logback-test.groovy @@ -27,4 +27,4 @@ appender(console, ConsoleAppender) { } root(INFO, [console]) -logger("org.springframework.cloud.contract.verifier", DEBUG) +logger("org.springframework.cloud", DEBUG) diff --git a/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/application.yml b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/application.yml index 4eef5ea578..94fda10348 100644 --- a/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/application.yml +++ b/tests/spring-cloud-contract-stub-runner-camel/src/test/resources/application.yml @@ -1,2 +1,2 @@ -stubrunner.stubs.repositoryRoot: classpath:m2repo/repository/ -stubrunner.stubs.ids: org.springframework.cloud.contract.verifier.stubs:camelService \ No newline at end of file +stubrunner.repositoryRoot: classpath:m2repo/repository/ +stubrunner.ids: org.springframework.cloud.contract.verifier.stubs:camelService \ No newline at end of file diff --git a/tests/spring-cloud-contract-stub-runner-integration/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/IntegrationStubRunnerSpec.groovy b/tests/spring-cloud-contract-stub-runner-integration/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/IntegrationStubRunnerSpec.groovy index bfa4a2c3be..86a3e434d4 100644 --- a/tests/spring-cloud-contract-stub-runner-integration/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/IntegrationStubRunnerSpec.groovy +++ b/tests/spring-cloud-contract-stub-runner-integration/src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/integration/IntegrationStubRunnerSpec.groovy @@ -18,9 +18,6 @@ package org.springframework.cloud.contract.stubrunner.messaging.integration import groovy.json.JsonOutput import groovy.json.JsonSlurper - -import java.util.concurrent.TimeUnit - import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.EnableAutoConfiguration import org.springframework.boot.test.context.SpringBootContextLoader @@ -33,16 +30,13 @@ import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.ImportResource import org.springframework.messaging.Message import org.springframework.test.context.ContextConfiguration - import spock.lang.Specification +import java.util.concurrent.TimeUnit /** * @author Marcin Grzejszczak */ -@Configuration -@ComponentScan -@EnableAutoConfiguration -@ContextConfiguration(classes = IntegrationStubRunnerSpec, loader = SpringBootContextLoader) +@ContextConfiguration(classes = Config, loader = SpringBootContextLoader) @ImportResource("classpath*:integration-context.xml") @AutoConfigureStubRunner class IntegrationStubRunnerSpec extends Specification { @@ -226,4 +220,11 @@ class IntegrationStubRunnerSpec extends Specification { } // end::sample_dsl_3[] + @Configuration + @ComponentScan + @EnableAutoConfiguration + static class Config { + + } + } diff --git a/tests/spring-cloud-contract-stub-runner-integration/src/test/resources/application.yml b/tests/spring-cloud-contract-stub-runner-integration/src/test/resources/application.yml index 32d7427875..b05ec59fad 100644 --- a/tests/spring-cloud-contract-stub-runner-integration/src/test/resources/application.yml +++ b/tests/spring-cloud-contract-stub-runner-integration/src/test/resources/application.yml @@ -1,2 +1,2 @@ -stubrunner.stubs.repositoryRoot: classpath:m2repo/repository/ -stubrunner.stubs.ids: org.springframework.cloud.contract.verifier.stubs:integrationService:0.0.1-SNAPSHOT \ No newline at end of file +stubrunner.repositoryRoot: classpath:m2repo/repository/ +stubrunner.ids: org.springframework.cloud.contract.verifier.stubs:integrationService:0.0.1-SNAPSHOT \ No newline at end of file diff --git a/tests/spring-cloud-contract-stub-runner-stream/src/test/resources/application.yml b/tests/spring-cloud-contract-stub-runner-stream/src/test/resources/application.yml index baaaa1d38e..260fbdc91c 100644 --- a/tests/spring-cloud-contract-stub-runner-stream/src/test/resources/application.yml +++ b/tests/spring-cloud-contract-stub-runner-stream/src/test/resources/application.yml @@ -1,5 +1,5 @@ -stubrunner.stubs.repositoryRoot: classpath:m2repo/repository/ -stubrunner.stubs.ids: org.springframework.cloud.contract.verifier.stubs:streamService:0.0.1-SNAPSHOT:stubs +stubrunner.repositoryRoot: classpath:m2repo/repository/ +stubrunner.ids: org.springframework.cloud.contract.verifier.stubs:streamService:0.0.1-SNAPSHOT:stubs spring: cloud: