diff --git a/.gitignore b/.gitignore index 0f74b6cf02..5eed16c58b 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ hs_err_pid* .gradle/ target/ build/ +out/ hs_err_pid* .DS_Store diff --git a/docker/spring-cloud-contract-docker/get_dependencies.sh b/docker/spring-cloud-contract-docker/get_dependencies.sh index 520e770abb..3da068eb59 100755 --- a/docker/spring-cloud-contract-docker/get_dependencies.sh +++ b/docker/spring-cloud-contract-docker/get_dependencies.sh @@ -2,7 +2,7 @@ set -e -WRAPPER_VERSION="4.4.1" +WRAPPER_VERSION="4.10" GRADLE_BIN_DIR="gradle-${WRAPPER_VERSION}-bin" GRADLE_WRAPPER_DIR="${HOME}/.gradle/wrapper/dists/${GRADLE_BIN_DIR}" CURRENT_DIR="$( pwd )" diff --git a/docker/spring-cloud-contract-docker/project/gradle/wrapper/gradle-wrapper.jar b/docker/spring-cloud-contract-docker/project/gradle/wrapper/gradle-wrapper.jar index 99340b4ad1..28861d273a 100644 Binary files a/docker/spring-cloud-contract-docker/project/gradle/wrapper/gradle-wrapper.jar and b/docker/spring-cloud-contract-docker/project/gradle/wrapper/gradle-wrapper.jar differ diff --git a/docker/spring-cloud-contract-docker/project/gradle/wrapper/gradle-wrapper.properties b/docker/spring-cloud-contract-docker/project/gradle/wrapper/gradle-wrapper.properties index 2c2bbe5f9a..115e6ac0aa 100644 --- a/docker/spring-cloud-contract-docker/project/gradle/wrapper/gradle-wrapper.properties +++ b/docker/spring-cloud-contract-docker/project/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-bin.zip diff --git a/pom.xml b/pom.xml index 9ad5a9e448..cf35a25857 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,8 @@ 4.0.6 4.6.0.201612231935-r 1 + + 2.4.15 @@ -228,6 +230,97 @@ pom import + + + org.codehaus.groovy + groovy + ${groovy.version} + + + org.codehaus.groovy + groovy-ant + ${groovy.version} + + + org.codehaus.groovy + groovy-bsf + ${groovy.version} + + + org.codehaus.groovy + groovy-console + ${groovy.version} + + + org.codehaus.groovy + groovy-docgenerator + ${groovy.version} + + + org.codehaus.groovy + groovy-groovydoc + ${groovy.version} + + + org.codehaus.groovy + groovy-groovysh + ${groovy.version} + + + org.codehaus.groovy + groovy-jmx + ${groovy.version} + + + org.codehaus.groovy + groovy-json + ${groovy.version} + + + org.codehaus.groovy + groovy-jsr223 + ${groovy.version} + + + org.codehaus.groovy + groovy-nio + ${groovy.version} + + + org.codehaus.groovy + groovy-servlet + ${groovy.version} + + + org.codehaus.groovy + groovy-sql + ${groovy.version} + + + org.codehaus.groovy + groovy-swing + ${groovy.version} + + + org.codehaus.groovy + groovy-templates + ${groovy.version} + + + org.codehaus.groovy + groovy-test + ${groovy.version} + + + org.codehaus.groovy + groovy-testng + ${groovy.version} + + + org.codehaus.groovy + groovy-xml + ${groovy.version} + diff --git a/samples/standalone/contracts/com/example/server/pom.xml b/samples/standalone/contracts/com/example/server/pom.xml index 2d9d8c745d..46e83e1cb4 100644 --- a/samples/standalone/contracts/com/example/server/pom.xml +++ b/samples/standalone/contracts/com/example/server/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.3.RELEASE + 2.1.0.M2 @@ -21,7 +21,7 @@ UTF-8 1.8 2.1.0.BUILD-SNAPSHOT - Finchley.BUILD-SNAPSHOT + Greenwich.BUILD-SNAPSHOT true diff --git a/samples/standalone/dsl/http-client/build.gradle b/samples/standalone/dsl/http-client/build.gradle index d94f4e1306..632fc1e96d 100644 --- a/samples/standalone/dsl/http-client/build.gradle +++ b/samples/standalone/dsl/http-client/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" } } diff --git a/samples/standalone/dsl/http-client/gradle.properties b/samples/standalone/dsl/http-client/gradle.properties index 57ed1c5339..3e2eb84942 100644 --- a/samples/standalone/dsl/http-client/gradle.properties +++ b/samples/standalone/dsl/http-client/gradle.properties @@ -1,2 +1,2 @@ org.gradle.daemon=false -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Greenwich.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..1e5e33908b 100644 Binary files a/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.jar and b/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.jar differ diff --git a/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..7ef53d35d1 100644 --- a/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/dsl/http-client/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:41:49 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/dsl/http-client/gradlew b/samples/standalone/dsl/http-client/gradlew index 4453ccea33..cccdd3d517 100755 --- a/samples/standalone/dsl/http-client/gradlew +++ b/samples/standalone/dsl/http-client/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/samples/standalone/dsl/http-client/pom.xml b/samples/standalone/dsl/http-client/pom.xml index c18744c4af..d260444499 100644 --- a/samples/standalone/dsl/http-client/pom.xml +++ b/samples/standalone/dsl/http-client/pom.xml @@ -20,7 +20,7 @@ UTF-8 1.8 - Finchley.BUILD-SNAPSHOT + Greenwich.BUILD-SNAPSHOT diff --git a/samples/standalone/dsl/http-server/build.gradle b/samples/standalone/dsl/http-server/build.gradle index 596cdefcc2..cb9fdbcf70 100644 --- a/samples/standalone/dsl/http-server/build.gradle +++ b/samples/standalone/dsl/http-server/build.gradle @@ -10,7 +10,7 @@ buildscript { // end::repos[] dependencies { classpath 'org.codehaus.groovy:groovy-all:2.5.0-beta-1' - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${findProperty('verifierVersion') ?: verifierVersion}" } } diff --git a/samples/standalone/dsl/http-server/gradle.properties b/samples/standalone/dsl/http-server/gradle.properties index 558d820385..88a97742d7 100644 --- a/samples/standalone/dsl/http-server/gradle.properties +++ b/samples/standalone/dsl/http-server/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false verifierVersion=2.1.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Greenwich.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..258e37c4e6 100644 Binary files a/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.jar and b/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.jar differ diff --git a/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..68ec43b5c6 100644 --- a/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/dsl/http-server/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:41:57 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/dsl/http-server/gradlew b/samples/standalone/dsl/http-server/gradlew index 4453ccea33..cccdd3d517 100755 --- a/samples/standalone/dsl/http-server/gradlew +++ b/samples/standalone/dsl/http-server/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/samples/standalone/dsl/http-server/pom.xml b/samples/standalone/dsl/http-server/pom.xml index 0b42b068c7..692483290d 100644 --- a/samples/standalone/dsl/http-server/pom.xml +++ b/samples/standalone/dsl/http-server/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.3.RELEASE + 2.1.0.M2 @@ -21,7 +21,7 @@ UTF-8 1.8 2.1.0.BUILD-SNAPSHOT - Finchley.BUILD-SNAPSHOT + Greenwich.BUILD-SNAPSHOT diff --git a/samples/standalone/messaging/stream-sink/build.gradle b/samples/standalone/messaging/stream-sink/build.gradle index 434697f360..4ed306b40d 100644 --- a/samples/standalone/messaging/stream-sink/build.gradle +++ b/samples/standalone/messaging/stream-sink/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" } } diff --git a/samples/standalone/messaging/stream-sink/gradle.properties b/samples/standalone/messaging/stream-sink/gradle.properties index 558d820385..88a97742d7 100644 --- a/samples/standalone/messaging/stream-sink/gradle.properties +++ b/samples/standalone/messaging/stream-sink/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false verifierVersion=2.1.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Greenwich.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..3fc01f4742 100644 Binary files a/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.jar and b/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.jar differ diff --git a/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..e9f0600549 100644 --- a/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/messaging/stream-sink/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:42:27 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/messaging/stream-sink/gradlew b/samples/standalone/messaging/stream-sink/gradlew index 4453ccea33..cccdd3d517 100755 --- a/samples/standalone/messaging/stream-sink/gradlew +++ b/samples/standalone/messaging/stream-sink/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/samples/standalone/messaging/stream-sink/pom.xml b/samples/standalone/messaging/stream-sink/pom.xml index 140b2d18fe..b1ed1d69d6 100644 --- a/samples/standalone/messaging/stream-sink/pom.xml +++ b/samples/standalone/messaging/stream-sink/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.3.RELEASE + 2.1.0.M2 @@ -48,7 +48,7 @@ org.springframework.cloud spring-cloud-dependencies - Finchley.BUILD-SNAPSHOT + Greenwich.BUILD-SNAPSHOT pom import diff --git a/samples/standalone/messaging/stream-source/build.gradle b/samples/standalone/messaging/stream-source/build.gradle index 99d89d5d6e..3bc8fbd40a 100644 --- a/samples/standalone/messaging/stream-source/build.gradle +++ b/samples/standalone/messaging/stream-source/build.gradle @@ -7,10 +7,11 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${findProperty('verifierVersion') ?: verifierVersion}" - classpath "com.jayway.restassured:rest-assured:2.9.0" - classpath "com.jayway.restassured:spring-mock-mvc:2.9.0" +// Example of using Rest Assured 3.x. If you don't add this section Rest Assured 2.9.0 will be used +// classpath "com.jayway.restassured:rest-assured:2.9.0" +// classpath "com.jayway.restassured:spring-mock-mvc:2.9.0" } } @@ -55,8 +56,9 @@ dependencies { testCompile 'org.springframework.cloud:spring-cloud-starter-contract-verifier' testCompile "org.springframework.cloud:spring-cloud-stream-test-support" - testCompile "com.jayway.restassured:rest-assured:2.9.0" - testCompile "com.jayway.restassured:spring-mock-mvc:2.9.0" + // Example of using Rest Assured 3.x. If you don't add this section Rest Assured 2.9.0 will be used + // testCompile "com.jayway.restassured:rest-assured:2.9.0" + // testCompile "com.jayway.restassured:spring-mock-mvc:2.9.0" } task stubsJar(type: Jar, dependsOn: "generateClientStubs") { diff --git a/samples/standalone/messaging/stream-source/gradle.properties b/samples/standalone/messaging/stream-source/gradle.properties index 558d820385..88a97742d7 100644 --- a/samples/standalone/messaging/stream-source/gradle.properties +++ b/samples/standalone/messaging/stream-source/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false verifierVersion=2.1.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Greenwich.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..275158bd43 100644 Binary files a/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.jar and b/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.jar differ diff --git a/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..862babf24f 100644 --- a/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/messaging/stream-source/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:42:35 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/messaging/stream-source/gradlew b/samples/standalone/messaging/stream-source/gradlew index 4453ccea33..cccdd3d517 100755 --- a/samples/standalone/messaging/stream-source/gradlew +++ b/samples/standalone/messaging/stream-source/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/samples/standalone/messaging/stream-source/pom.xml b/samples/standalone/messaging/stream-source/pom.xml index 945c289b86..c0977606a6 100644 --- a/samples/standalone/messaging/stream-source/pom.xml +++ b/samples/standalone/messaging/stream-source/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.3.RELEASE + 2.1.0.M2 @@ -41,23 +41,12 @@ org.springframework.cloud - spring-cloud-contract-verifier - ${spring-cloud-contract.version} + spring-cloud-starter-contract-verifier test - - - io.rest-assured - rest-assured - - - io.rest-assured - spring-mock-mvc - - - + @@ -76,7 +65,7 @@ org.springframework.cloud spring-cloud-dependencies - Finchley.BUILD-SNAPSHOT + Greenwich.BUILD-SNAPSHOT pom import @@ -104,7 +93,7 @@ - + diff --git a/samples/standalone/messaging/stream-source/src/test/java/com/example/source/SensorSourceTestBase.java b/samples/standalone/messaging/stream-source/src/test/java/com/example/source/SensorSourceTestBase.java index 7070d24c91..63d504e5f8 100644 --- a/samples/standalone/messaging/stream-source/src/test/java/com/example/source/SensorSourceTestBase.java +++ b/samples/standalone/messaging/stream-source/src/test/java/com/example/source/SensorSourceTestBase.java @@ -16,7 +16,7 @@ package com.example.source; -import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc; +import io.restassured.module.mockmvc.RestAssuredMockMvc; import org.junit.Before; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; diff --git a/samples/standalone/pact/pact-http-client/build.gradle b/samples/standalone/pact/pact-http-client/build.gradle index edfc27350c..5f80e75981 100644 --- a/samples/standalone/pact/pact-http-client/build.gradle +++ b/samples/standalone/pact/pact-http-client/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" } } diff --git a/samples/standalone/pact/pact-http-client/gradle.properties b/samples/standalone/pact/pact-http-client/gradle.properties index 57ed1c5339..3e2eb84942 100644 --- a/samples/standalone/pact/pact-http-client/gradle.properties +++ b/samples/standalone/pact/pact-http-client/gradle.properties @@ -1,2 +1,2 @@ org.gradle.daemon=false -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Greenwich.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..a281a3f7d8 100644 Binary files a/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.jar and b/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.jar differ diff --git a/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..60a50fd5c3 100644 --- a/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/pact/pact-http-client/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:42:45 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/pact/pact-http-client/gradlew b/samples/standalone/pact/pact-http-client/gradlew index 4453ccea33..cccdd3d517 100755 --- a/samples/standalone/pact/pact-http-client/gradlew +++ b/samples/standalone/pact/pact-http-client/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/samples/standalone/pact/pact-http-client/pom.xml b/samples/standalone/pact/pact-http-client/pom.xml index 3c83c95a2f..4fef2721c1 100644 --- a/samples/standalone/pact/pact-http-client/pom.xml +++ b/samples/standalone/pact/pact-http-client/pom.xml @@ -20,7 +20,7 @@ UTF-8 1.8 - Finchley.BUILD-SNAPSHOT + Greenwich.BUILD-SNAPSHOT diff --git a/samples/standalone/pact/pact-http-server/build.gradle b/samples/standalone/pact/pact-http-server/build.gradle index 28d2a09cba..77f0c962e7 100644 --- a/samples/standalone/pact/pact-http-server/build.gradle +++ b/samples/standalone/pact/pact-http-server/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${findProperty('verifierVersion') ?: verifierVersion}" //tag::pact_dependency[] classpath "org.springframework.cloud:spring-cloud-contract-pact:${findProperty('verifierVersion') ?: verifierVersion}" diff --git a/samples/standalone/pact/pact-http-server/gradle.properties b/samples/standalone/pact/pact-http-server/gradle.properties index 558d820385..88a97742d7 100644 --- a/samples/standalone/pact/pact-http-server/gradle.properties +++ b/samples/standalone/pact/pact-http-server/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false verifierVersion=2.1.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Greenwich.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..9689b2f157 100644 Binary files a/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.jar and b/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.jar differ diff --git a/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..45f69f9cb3 100644 --- a/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/pact/pact-http-server/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:42:54 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/pact/pact-http-server/gradlew b/samples/standalone/pact/pact-http-server/gradlew index 4453ccea33..cccdd3d517 100755 --- a/samples/standalone/pact/pact-http-server/gradlew +++ b/samples/standalone/pact/pact-http-server/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/samples/standalone/pact/pact-http-server/pom.xml b/samples/standalone/pact/pact-http-server/pom.xml index 2a2a8b3fa3..ee2b7cbeda 100644 --- a/samples/standalone/pact/pact-http-server/pom.xml +++ b/samples/standalone/pact/pact-http-server/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.3.RELEASE + 2.1.0.M2 @@ -21,7 +21,7 @@ UTF-8 1.8 2.1.0.BUILD-SNAPSHOT - Finchley.BUILD-SNAPSHOT + Greenwich.BUILD-SNAPSHOT diff --git a/samples/standalone/restdocs/http-client/build.gradle b/samples/standalone/restdocs/http-client/build.gradle index bf8d56ccc5..843d6d68ae 100644 --- a/samples/standalone/restdocs/http-client/build.gradle +++ b/samples/standalone/restdocs/http-client/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" } } diff --git a/samples/standalone/restdocs/http-client/gradle.properties b/samples/standalone/restdocs/http-client/gradle.properties index 558d820385..88a97742d7 100644 --- a/samples/standalone/restdocs/http-client/gradle.properties +++ b/samples/standalone/restdocs/http-client/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false verifierVersion=2.1.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Greenwich.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..64b0894d0e 100644 Binary files a/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.jar and b/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.jar differ diff --git a/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..024f10d7e4 100644 --- a/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/restdocs/http-client/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:43:04 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/restdocs/http-client/gradlew b/samples/standalone/restdocs/http-client/gradlew index 4453ccea33..cccdd3d517 100755 --- a/samples/standalone/restdocs/http-client/gradlew +++ b/samples/standalone/restdocs/http-client/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/samples/standalone/restdocs/http-client/pom.xml b/samples/standalone/restdocs/http-client/pom.xml index 937207d83e..87282005b2 100644 --- a/samples/standalone/restdocs/http-client/pom.xml +++ b/samples/standalone/restdocs/http-client/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.3.RELEASE + 2.1.0.M2 diff --git a/samples/standalone/restdocs/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java b/samples/standalone/restdocs/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java index fef4e71669..ab17861df9 100644 --- a/samples/standalone/restdocs/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java +++ b/samples/standalone/restdocs/http-client/src/test/java/com/example/loan/LoanApplicationServiceTests.java @@ -29,10 +29,10 @@ public class LoanApplicationServiceTests { @Autowired private LoanApplicationService service; - @Value("classpath:META-INF/com.example/http-server-restdocs/0.0.1-SNAPSHOT/mappings/markClientAsFraud.json") + @Value("classpath:META-INF/com.example/http-server-restdocs/0.0.1-SNAPSHOT/mappings/standalone/shouldMarkClientAsFraud.json") private Resource markClientAsFraud; - @Value("classpath:META-INF/com.example/http-server-restdocs/0.0.1-SNAPSHOT/mappings/markClientAsNotFraud.json") + @Value("classpath:META-INF/com.example/http-server-restdocs/0.0.1-SNAPSHOT/mappings/webapp/shouldMarkClientAsNotFraud.json") private Resource markClientAsNotFraud; @Autowired diff --git a/samples/standalone/restdocs/http-server/build.gradle b/samples/standalone/restdocs/http-server/build.gradle index 5797f5c1f7..61478d402d 100644 --- a/samples/standalone/restdocs/http-server/build.gradle +++ b/samples/standalone/restdocs/http-server/build.gradle @@ -10,7 +10,7 @@ buildscript { maven { url "http://repo.spring.io/plugins-staging-local/" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${project.findProperty('verifierVersion') ?: verifierVersion}" } } @@ -70,7 +70,7 @@ contracts { generateClientStubs.enabled = false task wrapper(type: Wrapper) { - gradleVersion = '4.0.2' + gradleVersion = '4.10' } task stubsJar(type: Jar, dependsOn: ['copySnippets', 'copySources', 'copyClasses']) { diff --git a/samples/standalone/restdocs/http-server/gradle.properties b/samples/standalone/restdocs/http-server/gradle.properties index 558d820385..88a97742d7 100644 --- a/samples/standalone/restdocs/http-server/gradle.properties +++ b/samples/standalone/restdocs/http-server/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false verifierVersion=2.1.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Greenwich.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..b1d61a8bce 100644 Binary files a/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.jar and b/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.jar differ diff --git a/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..79022e9646 100644 --- a/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/restdocs/http-server/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:43:13 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/restdocs/http-server/gradlew b/samples/standalone/restdocs/http-server/gradlew index 4453ccea33..cccdd3d517 100755 --- a/samples/standalone/restdocs/http-server/gradlew +++ b/samples/standalone/restdocs/http-server/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/samples/standalone/restdocs/http-server/pom.xml b/samples/standalone/restdocs/http-server/pom.xml index e7d221cade..7fdd22744d 100644 --- a/samples/standalone/restdocs/http-server/pom.xml +++ b/samples/standalone/restdocs/http-server/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.3.RELEASE + 2.1.0.M2 @@ -21,7 +21,7 @@ UTF-8 1.8 2.1.0.BUILD-SNAPSHOT - true + true diff --git a/samples/standalone/restdocs/http-server/settings.gradle b/samples/standalone/restdocs/http-server/settings.gradle index a27eed8db1..06780ec1e9 100644 --- a/samples/standalone/restdocs/http-server/settings.gradle +++ b/samples/standalone/restdocs/http-server/settings.gradle @@ -1 +1 @@ -rootProject.name = 'http-server-restdocs-gradle' +rootProject.name = 'http-server-restdocs' diff --git a/samples/standalone/restdocs/http-server/src/assembly/stub.xml b/samples/standalone/restdocs/http-server/src/assembly/stub.xml index 914f265c70..b459d2a636 100644 --- a/samples/standalone/restdocs/http-server/src/assembly/stub.xml +++ b/samples/standalone/restdocs/http-server/src/assembly/stub.xml @@ -29,5 +29,12 @@ **/* + + ${project.build.directory}/stubs + / + + **/* + + \ No newline at end of file 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 182979b8ec..60cb3ab6f5 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 @@ -24,7 +24,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) -@AutoConfigureRestDocs(outputDir = "target/snippets") +@AutoConfigureRestDocs @AutoConfigureMockMvc @AutoConfigureJsonTesters public class StubGeneratorTests { diff --git a/samples/standalone/webclient/http-client/build.gradle b/samples/standalone/webclient/http-client/build.gradle index 3bbcea3bea..69bcfe6ad2 100644 --- a/samples/standalone/webclient/http-client/build.gradle +++ b/samples/standalone/webclient/http-client/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" } } diff --git a/samples/standalone/webclient/http-client/gradle.properties b/samples/standalone/webclient/http-client/gradle.properties index 558d820385..88a97742d7 100644 --- a/samples/standalone/webclient/http-client/gradle.properties +++ b/samples/standalone/webclient/http-client/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false verifierVersion=2.1.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Greenwich.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/webclient/http-client/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/webclient/http-client/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..36df4eded6 100644 Binary files a/samples/standalone/webclient/http-client/gradle/wrapper/gradle-wrapper.jar and b/samples/standalone/webclient/http-client/gradle/wrapper/gradle-wrapper.jar differ diff --git a/samples/standalone/webclient/http-client/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/webclient/http-client/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..d456add56b 100644 --- a/samples/standalone/webclient/http-client/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/webclient/http-client/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:43:22 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/webclient/http-client/gradlew b/samples/standalone/webclient/http-client/gradlew index 4453ccea33..cccdd3d517 100755 --- a/samples/standalone/webclient/http-client/gradlew +++ b/samples/standalone/webclient/http-client/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/samples/standalone/webclient/http-client/pom.xml b/samples/standalone/webclient/http-client/pom.xml index a5a02119ae..cd865fd7b8 100644 --- a/samples/standalone/webclient/http-client/pom.xml +++ b/samples/standalone/webclient/http-client/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.3.RELEASE + 2.1.0.M2 diff --git a/samples/standalone/webclient/http-server/build.gradle b/samples/standalone/webclient/http-server/build.gradle index a033d304e7..f31960b114 100644 --- a/samples/standalone/webclient/http-server/build.gradle +++ b/samples/standalone/webclient/http-server/build.gradle @@ -10,7 +10,7 @@ buildscript { maven { url "http://repo.spring.io/plugins-staging-local/" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" } } diff --git a/samples/standalone/webclient/http-server/gradle.properties b/samples/standalone/webclient/http-server/gradle.properties index 558d820385..88a97742d7 100644 --- a/samples/standalone/webclient/http-server/gradle.properties +++ b/samples/standalone/webclient/http-server/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false verifierVersion=2.1.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT \ No newline at end of file +BOM_VERSION=Greenwich.BUILD-SNAPSHOT \ No newline at end of file diff --git a/samples/standalone/webclient/http-server/gradle/wrapper/gradle-wrapper.jar b/samples/standalone/webclient/http-server/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..48cdc59515 100644 Binary files a/samples/standalone/webclient/http-server/gradle/wrapper/gradle-wrapper.jar and b/samples/standalone/webclient/http-server/gradle/wrapper/gradle-wrapper.jar differ diff --git a/samples/standalone/webclient/http-server/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/webclient/http-server/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..155630a64b 100644 --- a/samples/standalone/webclient/http-server/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/webclient/http-server/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:43:29 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/webclient/http-server/gradlew b/samples/standalone/webclient/http-server/gradlew index 4453ccea33..cccdd3d517 100755 --- a/samples/standalone/webclient/http-server/gradlew +++ b/samples/standalone/webclient/http-server/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/samples/standalone/webclient/http-server/pom.xml b/samples/standalone/webclient/http-server/pom.xml index 9c8db657ff..4fa059f70d 100644 --- a/samples/standalone/webclient/http-server/pom.xml +++ b/samples/standalone/webclient/http-server/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.3.RELEASE + 2.1.0.M2 diff --git a/samples/standalone/yml/http-client/build.gradle b/samples/standalone/yml/http-client/build.gradle index 42387d97af..0e035eaeee 100644 --- a/samples/standalone/yml/http-client/build.gradle +++ b/samples/standalone/yml/http-client/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "http://repo.spring.io/release" } } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" } } @@ -48,7 +48,7 @@ test { } task wrapper(type: Wrapper) { - gradleVersion = '2.14' + gradleVersion = '4.10' } task resolveDependencies { diff --git a/samples/standalone/yml/http-client/gradle.properties b/samples/standalone/yml/http-client/gradle.properties index d765e1c4aa..72d5eb58b7 100644 --- a/samples/standalone/yml/http-client/gradle.properties +++ b/samples/standalone/yml/http-client/gradle.properties @@ -1,2 +1,2 @@ org.gradle.daemon=false -BOM_VERSION=Finchley.BUILD-SNAPSHOT +BOM_VERSION=Greenwich.BUILD-SNAPSHOT diff --git a/samples/standalone/yml/http-client/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/yml/http-client/gradle/wrapper/gradle-wrapper.properties index 2c2bbe5f9a..c1714705ed 100644 --- a/samples/standalone/yml/http-client/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/yml/http-client/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/yml/http-client/pom.xml b/samples/standalone/yml/http-client/pom.xml index 8a53b767b7..36cc7fd03a 100644 --- a/samples/standalone/yml/http-client/pom.xml +++ b/samples/standalone/yml/http-client/pom.xml @@ -20,7 +20,7 @@ UTF-8 1.8 - Finchley.BUILD-SNAPSHOT + Greenwich.BUILD-SNAPSHOT diff --git a/samples/standalone/yml/http-server/build.gradle b/samples/standalone/yml/http-server/build.gradle index 00149b07a1..49c98fa6cd 100644 --- a/samples/standalone/yml/http-server/build.gradle +++ b/samples/standalone/yml/http-server/build.gradle @@ -9,7 +9,7 @@ buildscript { } // end::repos[] dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE" + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.0.M2" classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${findProperty('verifierVersion') ?: verifierVersion}" } } @@ -59,7 +59,7 @@ test { } task wrapper(type: Wrapper) { - gradleVersion = '4.4.1' + gradleVersion = '4.10' } clean.doFirst { diff --git a/samples/standalone/yml/http-server/gradle.properties b/samples/standalone/yml/http-server/gradle.properties index 711450aac9..c3a4cd72dc 100644 --- a/samples/standalone/yml/http-server/gradle.properties +++ b/samples/standalone/yml/http-server/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=false verifierVersion=2.1.0.BUILD-SNAPSHOT -BOM_VERSION=Finchley.BUILD-SNAPSHOT +BOM_VERSION=Greenwich.BUILD-SNAPSHOT diff --git a/samples/standalone/yml/http-server/gradle/wrapper/gradle-wrapper.properties b/samples/standalone/yml/http-server/gradle/wrapper/gradle-wrapper.properties index 2c2bbe5f9a..c1714705ed 100644 --- a/samples/standalone/yml/http-server/gradle/wrapper/gradle-wrapper.properties +++ b/samples/standalone/yml/http-server/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/samples/standalone/yml/http-server/pom.xml b/samples/standalone/yml/http-server/pom.xml index 1df451ee2d..6b982b9ef7 100644 --- a/samples/standalone/yml/http-server/pom.xml +++ b/samples/standalone/yml/http-server/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.3.RELEASE + 2.1.0.M2 @@ -21,7 +21,7 @@ UTF-8 1.8 2.1.0.BUILD-SNAPSHOT - Finchley.BUILD-SNAPSHOT + Greenwich.BUILD-SNAPSHOT diff --git a/spring-cloud-contract-starters/spring-cloud-starter-contract-verifier/pom.xml b/spring-cloud-contract-starters/spring-cloud-starter-contract-verifier/pom.xml index e2df9aa5c6..58ef90bb12 100644 --- a/spring-cloud-contract-starters/spring-cloud-starter-contract-verifier/pom.xml +++ b/spring-cloud-contract-starters/spring-cloud-starter-contract-verifier/pom.xml @@ -37,6 +37,10 @@ org.springframework.boot spring-boot-starter-test + + org.springframework.boot + spring-boot-starter-web + diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle/wrapper/gradle-wrapper.jar b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle/wrapper/gradle-wrapper.jar index 96d36c23c8..0ab4ff82ef 100644 Binary files a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle/wrapper/gradle-wrapper.jar and b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle/wrapper/gradle-wrapper.jar differ diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle/wrapper/gradle-wrapper.properties b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle/wrapper/gradle-wrapper.properties index 64ffcab3bf..dc3996502f 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle/wrapper/gradle-wrapper.properties +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 31 11:13:36 CEST 2017 +#Tue Aug 28 16:43:49 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-bin.zip diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradlew b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradlew index 4453ccea33..cccdd3d517 100755 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradlew +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/MessagingSCContractCreator.groovy b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/MessagingSCContractCreator.groovy index 447b4cfc74..7278b1e598 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/MessagingSCContractCreator.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/MessagingSCContractCreator.groovy @@ -138,6 +138,95 @@ class MessagingSCContractCreator { }) } + protected Closure process() { + return { Message message -> + Contract.make { + label("$message.description") + if (!message.providerStates.isEmpty()) { + input { + triggeredBy(getTriggeredBy(message)) + } + } + outputMessage { + if (message.contents.present) { + body(BodyConverter.toSCCBody(message)) + Category bodyRules = message.matchingRules.rulesForCategory('body') + if (bodyRules && !bodyRules.matchingRules.isEmpty()) { + bodyMatchers { + bodyRules.matchingRules.each { String key, MatchingRuleGroup ruleGroup -> + if (ruleGroup.ruleLogic != RuleLogic.AND) { + throw new UnsupportedOperationException("Currently only the AND combination rule logic is supported") + } + + if (FULL_BODY.equals(key)) { + JsonPaths jsonPaths = JsonToJsonPathsConverter.transformToJsonPathWithStubsSideValuesAndNoArraySizeCheck(message.contents.value) + jsonPaths.each { + jsonPath(it.keyBeforeChecking(), byType()) + } + } else { + ruleGroup.rules.each { MatchingRule rule -> + if (rule instanceof NullMatcher) { + jsonPath(key, byNull()) + } else if (rule instanceof RegexMatcher) { + jsonPath(key, byRegex(rule.regex)) + } else if (rule instanceof DateMatcher) { + jsonPath(key, byDate()) + } else if (rule instanceof TimeMatcher) { + jsonPath(key, byTime()) + } else if (rule instanceof TimestampMatcher) { + jsonPath(key, byTimestamp()) + } else if (rule instanceof MinTypeMatcher) { + jsonPath(key, byType() { + minOccurrence((rule as MinTypeMatcher).min) + }) + } else if (rule instanceof MinMaxTypeMatcher) { + jsonPath(key, byType() { + minOccurrence((rule as MinMaxTypeMatcher).min) + maxOccurrence((rule as MinMaxTypeMatcher).max) + }) + } else if (rule instanceof MaxTypeMatcher) { + jsonPath(key, byType() { + maxOccurrence((rule as MaxTypeMatcher).max) + }) + } else if (rule instanceof TypeMatcher) { + jsonPath(key, byType()) + } else if (rule instanceof NumberTypeMatcher) { + switch (rule.numberType) { + case NumberTypeMatcher.NumberType.NUMBER: + jsonPath(key, byRegex(number())) + break + case NumberTypeMatcher.NumberType.INTEGER: + jsonPath(key, byRegex(anInteger())) + break + case NumberTypeMatcher.NumberType.DECIMAL: + jsonPath(key, byRegex(aDouble())) + break + default: + throw new RuntimeException("Unsupported number type!") + } + } + } + } + } + } + } + } + if (!message.metaData.isEmpty()) { + headers { + message.metaData.each { String k, String v -> + if (k.equalsIgnoreCase("contentType")) { + messagingContentType(v) + } else { + header(k, v) + } + } + } + } + } + } + } + } + private String getTriggeredBy(Message message) { return message.providerStates.first().name .replace(':', ' ') diff --git a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/PactContractConverter.groovy b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/PactContractConverter.groovy index 8c2a5184e2..fb83d7a008 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/PactContractConverter.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/PactContractConverter.groovy @@ -64,14 +64,14 @@ class PactContractConverter implements ContractConverter> { @Override Collection convertTo(Collection contracts) { List pactContracts = new ArrayList<>() - contracts.collect({ Contract contract -> + for (Contract contract : contracts) { if (contract.request) { pactContracts.add(requestResponsePactCreator.createFromContract(contract)) } if (contract.input) { pactContracts.add(messagePactCreator.createFromContract(contract)) } - }) + } return pactContracts } } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/RequestResponseSCContractCreator.groovy b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/RequestResponseSCContractCreator.groovy index 46f94491ab..62df3da3e2 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/RequestResponseSCContractCreator.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/main/groovy/org/springframework/cloud/contract/verifier/spec/pact/RequestResponseSCContractCreator.groovy @@ -246,6 +246,193 @@ class RequestResponseSCContractCreator { } } + protected Closure process() { + return { RequestResponseInteraction interaction -> + Contract.make { + description(buildDescription(interaction)) + request { + Request request = interaction.request + method(request.method) + if (request.query) { + url(request.path) { + queryParameters { + request.query.each { String key, List value -> + value.each { String singleValue -> + parameter(key, singleValue) + } + } + } + } + } else { + url(request.path) + } + if (request.headers) { + Category headerRules = request.matchingRules.rulesForCategory('header') + headers { + request.headers.each { k, v -> + if (headerRules.matchingRules.containsKey(k)) { + MatchingRuleGroup ruleGroup = headerRules.matchingRules.get(k) + if (ruleGroup.rules.size() > 1) { + throw new UnsupportedOperationException("Currently only 1 rule at a time for a header is supported") + } + MatchingRule rule = ruleGroup.rules[0] + if (rule instanceof RegexMatcher) { + header(k, new DslProperty((Object)Pattern.compile(rule.getRegex()), (Object)v)) + } else { + throw new UnsupportedOperationException("Currently only the header matcher of type regex is supported") + } + } else { + header(k, v) + } + } + } + } + if (request.body.state == OptionalBody.State.PRESENT) { + def parsedBody = BodyConverter.toSCCBody(request) + if (parsedBody instanceof Map) { + body(parsedBody as Map) + } else if (parsedBody instanceof List) { + body(parsedBody as List) + } else { + body(parsedBody.toString()) + } + } + Category bodyRules = request.matchingRules.rulesForCategory('body') + if (bodyRules && !bodyRules.matchingRules.isEmpty()) { + bodyMatchers { + bodyRules.matchingRules.each { String key, MatchingRuleGroup ruleGroup -> + if (ruleGroup.ruleLogic != RuleLogic.AND) { + throw new UnsupportedOperationException("Currently only the AND combination rule logic is supported") + } + + ruleGroup.rules.each { MatchingRule rule -> + if (rule instanceof RegexMatcher) { + jsonPath(key, byRegex(rule.regex)) + } else if (rule instanceof DateMatcher) { + jsonPath(key, byDate()) + } else if (rule instanceof TimeMatcher) { + jsonPath(key, byTime()) + } else if (rule instanceof TimestampMatcher) { + jsonPath(key, byTimestamp()) + } else if (rule instanceof NumberTypeMatcher) { + switch (rule.numberType) { + case NumberTypeMatcher.NumberType.NUMBER: + jsonPath(key, byRegex(regexPatterns.number())) + break + case NumberTypeMatcher.NumberType.INTEGER: + jsonPath(key, byRegex(regexPatterns.anInteger())) + break + case NumberTypeMatcher.NumberType.DECIMAL: + jsonPath(key, byRegex(regexPatterns.aDouble())) + break + default: + throw new RuntimeException("Unsupported number type!") + } + } + } + } + } + } + } + response { + Response response = interaction.response + status(response.status) + if (response.body.present) { + def parsedBody = BodyConverter.toSCCBody(response) + if (parsedBody instanceof Map) { + body(parsedBody as Map) + } else if (parsedBody instanceof List) { + body(parsedBody as List) + } else { + body(parsedBody.toString()) + } + } + Category bodyRules = response.matchingRules.rulesForCategory('body') + if (bodyRules && !bodyRules.matchingRules.isEmpty()) { + bodyMatchers { + bodyRules.matchingRules.each { String key, MatchingRuleGroup ruleGroup -> + if (ruleGroup.ruleLogic != RuleLogic.AND) { + throw new UnsupportedOperationException("Currently only the AND combination rule logic is supported") + } + + if (FULL_BODY.equals(key)) { + JsonPaths jsonPaths = JsonToJsonPathsConverter.transformToJsonPathWithStubsSideValuesAndNoArraySizeCheck(response.body.value) + jsonPaths.each { + jsonPath(it.keyBeforeChecking(), byType()) + } + } else { + ruleGroup.rules.each { MatchingRule rule -> + if (rule instanceof NullMatcher) { + jsonPath(key, byNull()) + } else if (rule instanceof RegexMatcher) { + jsonPath(key, byRegex(rule.regex)) + } else if (rule instanceof DateMatcher) { + jsonPath(key, byDate()) + } else if (rule instanceof TimeMatcher) { + jsonPath(key, byTime()) + } else if (rule instanceof TimestampMatcher) { + jsonPath(key, byTimestamp()) + } else if (rule instanceof MinTypeMatcher) { + jsonPath(key, byType() { + minOccurrence((rule as MinTypeMatcher).min) + }) + } else if (rule instanceof MinMaxTypeMatcher) { + jsonPath(key, byType() { + minOccurrence((rule as MinMaxTypeMatcher).min) + maxOccurrence((rule as MinMaxTypeMatcher).max) + }) + } else if (rule instanceof MaxTypeMatcher) { + jsonPath(key, byType() { + maxOccurrence((rule as MaxTypeMatcher).max) + }) + } else if (rule instanceof TypeMatcher) { + jsonPath(key, byType()) + } else if (rule instanceof NumberTypeMatcher) { + switch (rule.numberType) { + case NumberTypeMatcher.NumberType.NUMBER: + jsonPath(key, byRegex(regexPatterns.number())) + break + case NumberTypeMatcher.NumberType.INTEGER: + jsonPath(key, byRegex(regexPatterns.anInteger())) + break + case NumberTypeMatcher.NumberType.DECIMAL: + jsonPath(key, byRegex(regexPatterns.aDouble())) + break + default: + throw new UnsupportedOperationException("Unsupported number type!") + } + } + } + } + } + } + } + if (response.headers) { + Category headerRules = response.matchingRules.rulesForCategory('header') + headers { + response.headers.forEach({ String k, String v -> + if (headerRules.matchingRules.containsKey(k)) { + MatchingRuleGroup ruleGroup = headerRules.matchingRules.get(k) + if (ruleGroup.rules.size() > 1) { + throw new UnsupportedOperationException("Currently only 1 rule at a time for a header is supported") + } + MatchingRule rule = ruleGroup.rules[0] + if (rule instanceof RegexMatcher) { + header(k, new DslProperty(new DslProperty(v), new NotToEscapePattern(Pattern.compile(rule.getRegex())))) + } else { + throw new UnsupportedOperationException("Currently only the header matcher of type regex is supported") + } + } else { + header(k, v) + } + }) + } + } + } + } + } + } + private String buildDescription(RequestResponseInteraction interaction) { String description = "$interaction.description" interaction.providerStates.forEach({ ProviderState it -> diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverter.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverter.groovy index 042ff77db4..74abe2d6ee 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverter.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverter.groovy @@ -73,172 +73,295 @@ class YamlContractConverter implements ContractConverter> { ClassLoader classLoader = YamlContractConverter.getClassLoader() ObjectMapper mapper = new ObjectMapper() try { - return new Yaml().loadAll(Files.newInputStream(contractFile.toPath())).collect { - YamlContract yamlContract = mapper.convertValue(it, YamlContract.class); - Thread.currentThread().setContextClassLoader(updatedClassLoader(contractFile.getParentFile(), classLoader)) - return Contract.make { - if (yamlContract.description) description(yamlContract.description) - if (yamlContract.label) label(yamlContract.label) - if (yamlContract.name) name(yamlContract.name) - if (yamlContract.priority) priority(yamlContract.priority) - if (yamlContract.ignored) ignored() - if (yamlContract.request?.method) { - request { - method(yamlContract.request?.method) - if (yamlContract.request?.url) { - url(yamlContract.request?.url) { - if (yamlContract.request.queryParameters) { - queryParameters { - yamlContract.request.queryParameters.each { String key, Object value -> - if (value instanceof List) { - ((List) value).each { - parameter(key, it) - } - } else { - parameter(key, value) - } - } - } - } - } - } - if (yamlContract.request?.urlPath) { - urlPath(yamlContract.request?.urlPath) { - if (yamlContract.request.queryParameters) { - queryParameters { - yamlContract.request.queryParameters.each { String key, Object value -> - if (value instanceof List) { - ((List) value).each { - parameter(key, it) - } - } else { - parameter(key, value) - } - } - } - } - } - } - if (yamlContract.request?.headers) { - headers { - yamlContract.request?.headers?.each { String key, Object value -> - KeyValueMatcher matcher = yamlContract.request.matchers.headers.find { it.key == key } - if (value instanceof List) { - ((List) value).each { - Object clientValue = clientValue(it, matcher, key) - header(key, new DslProperty(clientValue, it)) - } - } else { - Object clientValue = clientValue(value, matcher, key) - header(key, new DslProperty(clientValue, value)) - } - } - } - } - if (yamlContract.request?.cookies) { - cookies { - yamlContract.request?.cookies?.each { String key, Object value -> - KeyValueMatcher matcher = yamlContract.request.matchers.cookies.find { it.key == key } - Object clientValue = clientValue(value, matcher, key) + Iterable iterables = new Yaml().loadAll(Files.newInputStream(contractFile.toPath())) + Collection contracts = [] + for (Object o : iterables) { + Closure processYaml = processYaml(mapper, classLoader, contractFile) + contracts.add(processYaml(o)) + } + return contracts + } + catch (FileNotFoundException e) { + throw new IllegalStateException(e) + } + catch (IllegalStateException ise) { + throw ise + } + catch (Exception e1) { + throw new IllegalStateException("Exception occurred while processing the file [" + contractFile + "]", e1) + } finally { + Thread.currentThread().setContextClassLoader(classLoader) + } + } - cookie(key, new DslProperty(clientValue, value)) - } - } - } - if (yamlContract.request.body) body(yamlContract.request.body) - if (yamlContract.request.bodyFromFile) body(file(yamlContract.request.bodyFromFile)) - if (yamlContract.request.multipart) { - Map multipartMap = [:] - Map multiPartParams = yamlContract.request.multipart.params.collectEntries { String paramKey, String paramValue -> - KeyValueMatcher matcher = yamlContract.request.matchers.multipart.params.find { - it.key == paramKey - } - Object value = paramValue - if (matcher) { - value = matcher.regex ? Pattern.compile(matcher.regex) : - predefinedToPattern(matcher.predefined) - } - return [(paramKey), new DslProperty<>(value, paramValue)] - } as Map - multipartMap.putAll(multiPartParams) - yamlContract.request.multipart.named.each { Named namedParam -> - YamlContract.MultipartNamedStubMatcher matcher = yamlContract.request.matchers.multipart.named.find { - it.paramName == namedParam.paramName - } - Object fileNameValue = namedParam.fileName - Object fileContentValue = namedParam.fileContent - if (matcher && matcher.fileName) { - fileNameValue = matcher.fileName.regex ? Pattern.compile(matcher.fileName.regex) : - predefinedToPattern(matcher.fileName.predefined) - } - if (matcher && matcher.fileContent) { - fileContentValue = matcher.fileContent.regex ? Pattern.compile(matcher.fileContent.regex) : - predefinedToPattern(matcher.fileContent.predefined) - } - multipartMap.put(namedParam.paramName, new NamedProperty(new DslProperty<>(fileNameValue, namedParam.fileName), - new DslProperty<>(fileContentValue, namedParam.fileContent))) - } - multipart(multipartMap) - } - bodyMatchers { - yamlContract.request.matchers?.body?.each { BodyStubMatcher matcher -> - MatchingTypeValue value = null - switch (matcher.type) { - case StubMatcherType.by_date: - value = byDate() - break - case StubMatcherType.by_time: - value = byTime() - break - case StubMatcherType.by_timestamp: - value = byTimestamp() - break - case StubMatcherType.by_regex: - String regex = matcher.value - if (matcher.predefined) { - regex = predefinedToPattern(matcher.predefined).pattern() + protected Closure processYaml(ObjectMapper mapper, ClassLoader classLoader, File contractFile) { + return { + YamlContract yamlContract = mapper.convertValue(it, YamlContract.class) + Thread.currentThread().setContextClassLoader(updatedClassLoader(contractFile.getParentFile(), classLoader)) + return Contract.make { + if (yamlContract.description) description(yamlContract.description) + if (yamlContract.label) label(yamlContract.label) + if (yamlContract.name) name(yamlContract.name) + if (yamlContract.priority) priority(yamlContract.priority) + if (yamlContract.ignored) ignored() + if (yamlContract.request?.method) { + request { + method(yamlContract.request?.method) + if (yamlContract.request?.url) { + url(yamlContract.request?.url) { + if (yamlContract.request.queryParameters) { + queryParameters { + yamlContract.request.queryParameters.each { String key, Object value -> + if (value instanceof List) { + ((List) value).each { + parameter(key, it) + } + } else { + parameter(key, value) } - value = byRegex(regex) - break - case StubMatcherType.by_equality: - value = byEquality() - break + } } - jsonPath(matcher.path, value) } } } - response { - status(yamlContract.response.status) + if (yamlContract.request?.urlPath) { + urlPath(yamlContract.request?.urlPath) { + if (yamlContract.request.queryParameters) { + queryParameters { + yamlContract.request.queryParameters.each { String key, Object value -> + if (value instanceof List) { + ((List) value).each { + parameter(key, it) + } + } else { + parameter(key, value) + } + } + } + } + } + } + if (yamlContract.request?.headers) { headers { - yamlContract.response?.headers?.each { String key, Object value -> - TestHeaderMatcher matcher = yamlContract.response.matchers.headers.find { it.key == key } + yamlContract.request?.headers?.each { String key, Object value -> + KeyValueMatcher matcher = yamlContract.request.matchers.headers.find { it.key == key } if (value instanceof List) { ((List) value).each { - Object serverValue = serverValue(it, matcher, key) - header(key, new DslProperty(it, serverValue)) + Object clientValue = clientValue(it, matcher, key) + header(key, new DslProperty(clientValue, it)) } } else { - Object serverValue = serverValue(value, matcher, key) - header(key, new DslProperty(value, serverValue)) + Object clientValue = clientValue(value, matcher, key) + header(key, new DslProperty(clientValue, value)) } } } - if (yamlContract.response?.cookies) { - cookies { - yamlContract.response?.cookies?.each { String key, Object value -> - TestCookieMatcher matcher = yamlContract.response.matchers.cookies.find { it.key == key } - Object serverValue = serverCookieValue(value, matcher, key) + } + if (yamlContract.request?.cookies) { + cookies { + yamlContract.request?.cookies?.each { String key, Object value -> + KeyValueMatcher matcher = yamlContract.request.matchers.cookies.find { it.key == key } + Object clientValue = clientValue(value, matcher, key) - cookie(key, new DslProperty(value, serverValue)) - } + cookie(key, new DslProperty(clientValue, value)) } } - if (yamlContract.response.body) body(yamlContract.response.body) - if (yamlContract.response.bodyFromFile) body(file(yamlContract.response.bodyFromFile)) - if (yamlContract.response.async) async() + } + if (yamlContract.request.body) body(yamlContract.request.body) + if (yamlContract.request.bodyFromFile) body(file(yamlContract.request.bodyFromFile)) + if (yamlContract.request.multipart) { + Map multipartMap = [:] + Map multiPartParams = yamlContract.request.multipart.params.collectEntries { String paramKey, String paramValue -> + KeyValueMatcher matcher = yamlContract.request.matchers.multipart.params.find { + it.key == paramKey + } + Object value = paramValue + if (matcher) { + value = matcher.regex ? Pattern.compile(matcher.regex) : + predefinedToPattern(matcher.predefined) + } + return [(paramKey), new DslProperty<>(value, paramValue)] + } as Map + multipartMap.putAll(multiPartParams) + yamlContract.request.multipart.named.each { Named namedParam -> + YamlContract.MultipartNamedStubMatcher matcher = yamlContract.request.matchers.multipart.named.find { + it.paramName == namedParam.paramName + } + Object fileNameValue = namedParam.fileName + Object fileContentValue = namedParam.fileContent + if (matcher && matcher.fileName) { + fileNameValue = matcher.fileName.regex ? Pattern.compile(matcher.fileName.regex) : + predefinedToPattern(matcher.fileName.predefined) + } + if (matcher && matcher.fileContent) { + fileContentValue = matcher.fileContent.regex ? Pattern.compile(matcher.fileContent.regex) : + predefinedToPattern(matcher.fileContent.predefined) + } + multipartMap.put(namedParam.paramName, new NamedProperty(new DslProperty<>(fileNameValue, namedParam.fileName), + new DslProperty<>(fileContentValue, namedParam.fileContent))) + } + multipart(multipartMap) + } + bodyMatchers { + yamlContract.request.matchers?.body?.each { BodyStubMatcher matcher -> + MatchingTypeValue value = null + switch (matcher.type) { + case StubMatcherType.by_date: + value = byDate() + break + case StubMatcherType.by_time: + value = byTime() + break + case StubMatcherType.by_timestamp: + value = byTimestamp() + break + case StubMatcherType.by_regex: + String regex = matcher.value + if (matcher.predefined) { + regex = predefinedToPattern(matcher.predefined).pattern() + } + value = byRegex(regex) + break + case StubMatcherType.by_equality: + value = byEquality() + break + } + jsonPath(matcher.path, value) + } + } + } + response { + status(yamlContract.response.status) + headers { + yamlContract.response?.headers?.each { String key, Object value -> + TestHeaderMatcher matcher = yamlContract.response.matchers.headers.find { it.key == key } + if (value instanceof List) { + ((List) value).each { + Object serverValue = serverValue(it, matcher, key) + header(key, new DslProperty(it, serverValue)) + } + } else { + Object serverValue = serverValue(value, matcher, key) + header(key, new DslProperty(value, serverValue)) + } + } + } + if (yamlContract.response?.cookies) { + cookies { + yamlContract.response?.cookies?.each { String key, Object value -> + TestCookieMatcher matcher = yamlContract.response.matchers.cookies.find { it.key == key } + Object serverValue = serverCookieValue(value, matcher, key) + + cookie(key, new DslProperty(value, serverValue)) + } + } + } + if (yamlContract.response.body) body(yamlContract.response.body) + if (yamlContract.response.bodyFromFile) body(file(yamlContract.response.bodyFromFile)) + if (yamlContract.response.async) async() + bodyMatchers { + yamlContract.response?.matchers?.body?.each { BodyTestMatcher testMatcher -> + MatchingTypeValue value = null + switch (testMatcher.type) { + case TestMatcherType.by_date: + value = byDate() + break + case TestMatcherType.by_time: + value = byTime() + break + case TestMatcherType.by_timestamp: + value = byTimestamp() + break + case TestMatcherType.by_regex: + String regex = testMatcher.value + if (testMatcher.predefined) { + regex = predefinedToPattern(testMatcher.predefined).pattern() + } + value = byRegex(regex) + break + case TestMatcherType.by_equality: + value = byEquality() + break + case TestMatcherType.by_type: + value = byType() { + if (testMatcher.minOccurrence != null) minOccurrence(testMatcher.minOccurrence) + if (testMatcher.maxOccurrence != null) maxOccurrence(testMatcher.maxOccurrence) + } + break + case TestMatcherType.by_command: + value = byCommand(testMatcher.value) + break + case TestMatcherType.by_null: + value = byNull() + break + } + jsonPath(testMatcher.path, value) + } + } + } + } + if (yamlContract.input) { + input { + if (yamlContract.input.messageFrom) messageFrom(yamlContract.input.messageFrom) + if (yamlContract.input.assertThat) assertThat(yamlContract.input.assertThat) + if (yamlContract.input.triggeredBy) triggeredBy(yamlContract.input.triggeredBy) + messageHeaders { + yamlContract.input?.messageHeaders?.each { String key, Object value -> + KeyValueMatcher matcher = yamlContract.input.matchers?.headers?.find { it.key == key } + Object clientValue = clientValue(value, matcher, key) + header(key, new DslProperty(clientValue, value)) + } + } + if (yamlContract.input.messageBody) messageBody(yamlContract.input.messageBody) + if (yamlContract.input.messageBodyFromFile) messageBody(file(yamlContract.input.messageBodyFromFile)) + bodyMatchers { + yamlContract.input.matchers.body?.each { BodyStubMatcher matcher -> + MatchingTypeValue value = null + switch (matcher.type) { + case StubMatcherType.by_date: + value = byDate() + break + case StubMatcherType.by_time: + value = byTime() + break + case StubMatcherType.by_timestamp: + value = byTimestamp() + break + case StubMatcherType.by_regex: + String regex = matcher.value + if (matcher.predefined) { + regex = predefinedToPattern(matcher.predefined).pattern() + } + value = byRegex(regex) + break + case StubMatcherType.by_equality: + value = byEquality() + break + default: + throw new UnsupportedOperationException("The type [" + matcher.type + "] is unsupported. Hint: If you're using remember to pass ") + } + jsonPath(matcher.path, value) + } + } + } + } + OutputMessage outputMsg = yamlContract.outputMessage + if (outputMsg) { + outputMessage { + if (outputMsg.assertThat) assertThat(outputMsg.assertThat) + if (outputMsg.sentTo) sentTo(outputMsg.sentTo) + headers { + outputMsg.headers?.each { String key, Object value -> + TestHeaderMatcher matcher = outputMsg.matchers?.headers?.find { it.key == key } + Object serverValue = serverValue(value, matcher, key) + header(key, new DslProperty(value, serverValue)) + } + } + if (outputMsg.body) body(outputMsg.body) + if (outputMsg.bodyFromFile) body(file(outputMsg.bodyFromFile)) + if (outputMsg.matchers) { bodyMatchers { - yamlContract.response?.matchers?.body?.each { BodyTestMatcher testMatcher -> + yamlContract.outputMessage?.matchers?.body?.each { BodyTestMatcher testMatcher -> MatchingTypeValue value = null switch (testMatcher.type) { case TestMatcherType.by_date: @@ -272,130 +395,17 @@ class YamlContractConverter implements ContractConverter> { case TestMatcherType.by_null: value = byNull() break + default: + throw new UnsupportedOperationException("The type [" + testMatcher.type + "] is unsupported. Hint: If you're using remember to pass ") } jsonPath(testMatcher.path, value) } } } } - if (yamlContract.input) { - input { - if (yamlContract.input.messageFrom) messageFrom(yamlContract.input.messageFrom) - if (yamlContract.input.assertThat) assertThat(yamlContract.input.assertThat) - if (yamlContract.input.triggeredBy) triggeredBy(yamlContract.input.triggeredBy) - messageHeaders { - yamlContract.input?.messageHeaders?.each { String key, Object value -> - KeyValueMatcher matcher = yamlContract.input.matchers?.headers?.find { it.key == key } - Object clientValue = clientValue(value, matcher, key) - header(key, new DslProperty(clientValue, value)) - } - } - if (yamlContract.input.messageBody) messageBody(yamlContract.input.messageBody) - if (yamlContract.input.messageBodyFromFile) messageBody(file(yamlContract.input.messageBodyFromFile)) - bodyMatchers { - yamlContract.input.matchers.body?.each { BodyStubMatcher matcher -> - MatchingTypeValue value = null - switch (matcher.type) { - case StubMatcherType.by_date: - value = byDate() - break - case StubMatcherType.by_time: - value = byTime() - break - case StubMatcherType.by_timestamp: - value = byTimestamp() - break - case StubMatcherType.by_regex: - String regex = matcher.value - if (matcher.predefined) { - regex = predefinedToPattern(matcher.predefined).pattern() - } - value = byRegex(regex) - break - case StubMatcherType.by_equality: - value = byEquality() - break - default: - throw new UnsupportedOperationException("The type [" + matcher.type + "] is unsupported. Hint: If you're using remember to pass ") - } - jsonPath(matcher.path, value) - } - } - } - } - OutputMessage outputMsg = yamlContract.outputMessage - if (outputMsg) { - outputMessage { - if (outputMsg.assertThat) assertThat(outputMsg.assertThat) - if (outputMsg.sentTo) sentTo(outputMsg.sentTo) - headers { - outputMsg.headers?.each { String key, Object value -> - TestHeaderMatcher matcher = outputMsg.matchers?.headers?.find { it.key == key } - Object serverValue = serverValue(value, matcher, key) - header(key, new DslProperty(value, serverValue)) - } - } - if (outputMsg.body) body(outputMsg.body) - if (outputMsg.bodyFromFile) body(file(outputMsg.bodyFromFile)) - if (outputMsg.matchers) { - bodyMatchers { - yamlContract.outputMessage?.matchers?.body?.each { BodyTestMatcher testMatcher -> - MatchingTypeValue value = null - switch (testMatcher.type) { - case TestMatcherType.by_date: - value = byDate() - break - case TestMatcherType.by_time: - value = byTime() - break - case TestMatcherType.by_timestamp: - value = byTimestamp() - break - case TestMatcherType.by_regex: - String regex = testMatcher.value - if (testMatcher.predefined) { - regex = predefinedToPattern(testMatcher.predefined).pattern() - } - value = byRegex(regex) - break - case TestMatcherType.by_equality: - value = byEquality() - break - case TestMatcherType.by_type: - value = byType() { - if (testMatcher.minOccurrence != null) minOccurrence(testMatcher.minOccurrence) - if (testMatcher.maxOccurrence != null) maxOccurrence(testMatcher.maxOccurrence) - } - break - case TestMatcherType.by_command: - value = byCommand(testMatcher.value) - break - case TestMatcherType.by_null: - value = byNull() - break - default: - throw new UnsupportedOperationException("The type [" + testMatcher.type + "] is unsupported. Hint: If you're using remember to pass ") - } - jsonPath(testMatcher.path, value) - } - } - } - } - } } } } - catch (FileNotFoundException e) { - throw new IllegalStateException(e) - } - catch (IllegalStateException ise) { - throw ise - } - catch (Exception e1) { - throw new IllegalStateException("Exception occurred while processing the file [" + contractFile + "]", e1) - } finally { - Thread.currentThread().setContextClassLoader(classLoader) - } } protected Object serverValue(Object value, TestHeaderMatcher matcher, String key) { diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractResultHandler.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractResultHandler.java index d161a7abd4..2c35665f58 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractResultHandler.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/restdocs/ContractResultHandler.java @@ -48,7 +48,6 @@ import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.ResultHandler; -import org.springframework.util.StreamUtils; import wiremock.com.google.common.base.Function; import wiremock.com.google.common.base.Joiner; import wiremock.com.google.common.base.Optional; @@ -123,12 +122,7 @@ public class ContractResultHandler } @Override protected byte[] getRequestBodyContent(MvcResult result) { - try { - return StreamUtils.copyToByteArray(result.getRequest().getInputStream()); - } - catch (IOException e) { - throw new IllegalStateException("Cannot create request body", e); - } + return new WireMockHttpServletRequestAdapter(result.getRequest()).getBody(); } }