diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/RunMojo.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/RunMojo.java index 013d53b9d0..cce6c5f9df 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/RunMojo.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/main/java/org/springframework/cloud/contract/maven/verifier/RunMojo.java @@ -54,7 +54,7 @@ public class RunMojo extends AbstractMojo { private File destination; /** - * HTTP port for WireMock server + * HTTP port for the WireMock server that serves stubs */ @Parameter(property = "spring.cloud.contract.verifier.http.port", defaultValue = "8080") private int httpPort; @@ -71,15 +71,30 @@ public class RunMojo extends AbstractMojo { @Parameter(property = "spring.cloud.contract.verifier.skipTestOnly", defaultValue = "false") private boolean skipTestOnly; + /** + * List of stubs to be downloaded and ran in a colon separated Ivy notation + */ @Parameter(property = "spring.cloud.contract.verifier.stubs") private String stubs; + /** + * Minimal port at which the stub should start + */ @Parameter(property = "spring.cloud.contract.verifier.http.minPort", defaultValue = "10000") private int minPort; + /** + * Maximal port at which the stub should start + */ @Parameter(property = "spring.cloud.contract.verifier.http.maxPort", defaultValue = "15000") private int maxPort; + /** + * Should the plugin wait for the user to press the key after starting the stubs + */ + @Parameter(property = "spring.cloud.contract.verifier.wait-for-key-pressed", defaultValue = "true") + private boolean waitForKeyPressed; + /** * Classifier used by stubs artifacts. */ @@ -109,7 +124,7 @@ public class RunMojo extends AbstractMojo { .withStubsClassifier(this.stubsClassifier); if (isNullOrEmpty(this.stubs)) { StubRunnerOptions options = optionsBuilder - .withPort(this.httpPort) + .withMinMaxPort(this.httpPort, this.httpPort) .build(); StubRunner stubRunner = this.localStubRunner.run(resolveStubsDirectory().getAbsolutePath(), options); batchStubRunner = new BatchStubRunner(Collections.singleton(stubRunner)); @@ -139,6 +154,9 @@ public class RunMojo extends AbstractMojo { } private void pressAnyKeyToContinue() { + if (!this.waitForKeyPressed) { + return; + } getLog().info("Press ENTER to continue..."); try { System.in.read(); diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/site/asciidoc/usage.adoc b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/site/asciidoc/usage.adoc index 2f8635c8f2..9b3c68a039 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/site/asciidoc/usage.adoc +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/site/asciidoc/usage.adoc @@ -2,9 +2,9 @@ == Converting Spring Cloud Contract DSL into WireMock stub mappings - mvn org.springramework.cloud:spring-cloud-contract-maven-plugin:convert + mvn org.springframework.cloud:spring-cloud-contract-maven-plugin:convert -or shortly footnoteref:[prefix,Additional configuration inside `~/.m2/settings.xml` is required: ` org.springramework.cloud:spring-cloud-contract-maven-plugin`.] +or shortly footnoteref:[prefix,Additional configuration inside `~/.m2/settings.xml` is required: ` org.springframework.cloud:spring-cloud-contract-maven-plugin`.] mvn spring-cloud-contract-verifier:convert @@ -14,7 +14,7 @@ For more information please go to the Spring Cloud Contract Wiki or Plugin Docum Run stubs mappings from current directory: - mvn org.springramework.cloud:spring-cloud-contract-maven-plugin:run + mvn org.springframework.cloud:spring-cloud-contract-maven-plugin:run or shortly footnoteref:[prefix] diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginIT.java b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginIT.java index 586f8caa0f..e75b90a2e5 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginIT.java +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/java/org/springframework/cloud/contract/maven/verifier/PluginIT.java @@ -29,6 +29,7 @@ import io.takari.maven.testing.TestResources; import io.takari.maven.testing.executor.MavenRuntime; import io.takari.maven.testing.executor.MavenVersions; import io.takari.maven.testing.executor.junit.MavenJUnitTestRunner; +import org.springframework.util.SocketUtils; @RunWith(MavenJUnitTestRunner.class) @MavenVersions({ "3.3.3" }) @@ -108,4 +109,19 @@ public class PluginIT { .assertLogText("Creating new stub") .assertErrorFreeLog(); } + + @Test + public void should_run_WireMock_Stubs_mappings() throws Exception { + int availableTcpPort = SocketUtils.findAvailableTcpPort(); + File basedir = this.resources.getBasedir("generatedStubsOnly"); + this.properties.getPluginVersion(); + this.maven.forProject(basedir) + .withCliOption("-X") + .withCliOption("-Dspring.cloud.contract.verifier.http.port=" + availableTcpPort) + .withCliOption("-Dspring.cloud.contract.verifier.wait-for-key-pressed=false") + .execute(String.format("org.springframework.cloud:spring-cloud-contract-maven-plugin:%s:run", + this.properties.getPluginVersion())) + .assertLogText("All stubs are now running RunningStubs [namesAndPorts={=" + availableTcpPort + "}]") + .assertErrorFreeLog(); + } } \ No newline at end of file diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/generatedStubsOnly/.gitignore b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/generatedStubsOnly/.gitignore new file mode 100644 index 0000000000..8dc6c7308d --- /dev/null +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/generatedStubsOnly/.gitignore @@ -0,0 +1 @@ +!target \ No newline at end of file diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/generatedStubsOnly/target/stubs/Sample.json b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/generatedStubsOnly/target/stubs/Sample.json new file mode 100644 index 0000000000..6641a7d26f --- /dev/null +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/generatedStubsOnly/target/stubs/Sample.json @@ -0,0 +1,22 @@ +{ + "request" : { + "url" : "/users", + "method" : "POST", + "bodyPatterns" : [ { + "matchesJsonPath" : "$[?(@.login == 'john')]" + }, { + "matchesJsonPath" : "$[?(@.name == 'John The Contract')]" + } ], + "headers" : { + "Content-Type" : { + "equalTo" : "application/json" + } + } + }, + "response" : { + "status" : 200, + "headers" : { + "Location" : "/users/john" + } + } +} \ No newline at end of file