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