Reusing adocs of modules
This commit is contained in:
@@ -631,203 +631,8 @@ Example of AccuREST Gradle setup:
|
|||||||
|
|
||||||
Example of Maven can be found in the [AccuREST Maven Plugin README](https://github.com/Codearte/accurest-maven-plugin/=publishing-wiremock-stubs-projectf-stubsjar)
|
Example of Maven can be found in the [AccuREST Maven Plugin README](https://github.com/Codearte/accurest-maven-plugin/=publishing-wiremock-stubs-projectf-stubsjar)
|
||||||
|
|
||||||
=== Using Stub Runner to automate running stubs
|
include::stubrunner.adoc[]
|
||||||
|
|
||||||
Stub Runner automates downloading stubs from a Maven repository (that includes also the local Maven repository) and starting the WireMock server for each of those stubs.
|
|
||||||
|
|
||||||
==== Modules
|
|
||||||
|
|
||||||
AccuREST comes with a new structure of modules
|
|
||||||
|
|
||||||
[source,indent=0]
|
|
||||||
----
|
|
||||||
└── stub-runner
|
|
||||||
├── stub-runner
|
|
||||||
├── stub-runner-junit
|
|
||||||
├── stub-runner-spring
|
|
||||||
└── stub-runner-spring-cloud
|
|
||||||
----
|
|
||||||
|
|
||||||
===== Stub Runner
|
|
||||||
|
|
||||||
Contains core logic of Stub Runner. Gives you a main class to run Stub Runner from the command line or from Gradle.
|
|
||||||
|
|
||||||
Here you can see a list of options with which you can run Stub Runner:
|
|
||||||
|
|
||||||
[source,indent=0]
|
|
||||||
----
|
|
||||||
java -jar stub-runner.jar [options...]
|
|
||||||
-maxp (--maxPort) N : Maximum port value to be assigned to the
|
|
||||||
Wiremock instance. Defaults to 15000
|
|
||||||
(default: 15000)
|
|
||||||
-minp (--minPort) N : Minimal port value to be assigned to the
|
|
||||||
Wiremock instance. Defaults to 10000
|
|
||||||
(default: 10000)
|
|
||||||
-s (--stubs) VAL : Comma separated list of Ivy representation of
|
|
||||||
jars with stubs. Eg. groupid:artifactid1,group
|
|
||||||
id2:artifactid2:classifier
|
|
||||||
-sr (--stubRepositoryRoot) VAL : Location of a Jar containing server where you
|
|
||||||
keep your stubs (e.g. http://nexus.net/content
|
|
||||||
/repositories/repository)
|
|
||||||
-ss (--stubsSuffix) VAL : Suffix for the jar containing stubs (e.g.
|
|
||||||
'stubs' if the stub jar would have a 'stubs'
|
|
||||||
classifier for stubs: foobar-stubs ).
|
|
||||||
Defaults to 'stubs' (default: stubs)
|
|
||||||
-wo (--workOffline) : Switch to work offline. Defaults to 'false'
|
|
||||||
(default: false)
|
|
||||||
----
|
|
||||||
|
|
||||||
You can either produce a fat-jar and run the app like presented above.
|
|
||||||
|
|
||||||
You can also configure the stub runner by either passing the full arguments list with the `-Pargs` like this:
|
|
||||||
|
|
||||||
`./gradlew stub-runner-root:stub-runner:run -Pargs="-c pl -minp 10000 -maxp 10005 -s a:b:c,d:e,f:g:h"`
|
|
||||||
|
|
||||||
or each parameter separately with a `-P` prefix and without the hyphen (-) in the name of the param
|
|
||||||
|
|
||||||
`./gradlew stub-runner-root:stub-runner:run -Pc=pl -Pminp=10000 -Pmaxp=10005 -Ps=a:b:c,d:e,f:g:h`
|
|
||||||
|
|
||||||
===== Stub Runner JUnit Rule
|
|
||||||
|
|
||||||
Stub Runner comes with a JUnit rule thanks to which you can very easily download and run stubs for given group and artifact id:
|
|
||||||
|
|
||||||
[source,java,indent=0]
|
|
||||||
----
|
|
||||||
@ClassRule public static AccurestRule rule == new AccurestRule()
|
|
||||||
.repoRoot("http://your.repo.com")
|
|
||||||
.downloadStub("io.codearte.accurest.stubs", "loanIssuance")
|
|
||||||
.downloadStub("io.codearte.accurest.stubs:fraudDetectionServer")
|
|
||||||
.downloadStub("io.codearte:stub1", "io.codearte:stub2:classifier", "io.codearte:stub3");
|
|
||||||
----
|
|
||||||
|
|
||||||
After that rule gets executed Stub Runner connects to your Maven repository and for the given list of dependencies tries to:
|
|
||||||
* download them
|
|
||||||
* cache them locally
|
|
||||||
* unzip them to a temporary folder
|
|
||||||
* start a WireMock server for each Maven dependency on a random port from the provided range of ports
|
|
||||||
* feed the WireMock server with all JSON files that are valid WireMock definitions
|
|
||||||
|
|
||||||
Stub Runner uses [Groovy's Grape](http://docs.groovy-lang.org/latest/html/documentation/grape.html) mechanism to download the Maven dependencies. Check their [docs](http://docs.groovy-lang.org/latest/html/documentation/grape.html) for more information.
|
|
||||||
|
|
||||||
Since the `AccurestRule` implements the `StubFinder` it allows you to find the started stubs:
|
|
||||||
|
|
||||||
[source,groovy,indent=0]
|
|
||||||
----
|
|
||||||
interface StubFinder {
|
|
||||||
/**
|
|
||||||
* For the given groupId and artifactId tries to find the matching
|
|
||||||
* URL of the running stub.
|
|
||||||
*
|
|
||||||
* @param groupId - might be null. In that case a search only via artifactId takes place
|
|
||||||
* @return URL of a running stub or null if not found
|
|
||||||
*/
|
|
||||||
URL findStubUrl(String groupId, String artifactId)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For the given Ivy notation {@code groupId:artifactId} tries to find the matching
|
|
||||||
* URL of the running stub. You can also pass only {@code artifactId}.
|
|
||||||
*
|
|
||||||
* @param ivyNotation - Ivy representation of the Maven artifact
|
|
||||||
* @return URL of a running stub or null if not found
|
|
||||||
*/
|
|
||||||
URL findStubUrl(String ivyNotation)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns all running stubs
|
|
||||||
*/
|
|
||||||
RunningStubs findAllRunningStubs()
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
Example of usage in Spock tests:
|
|
||||||
|
|
||||||
[source,groovy,indent=0]
|
|
||||||
----
|
|
||||||
@ClassRule @Shared AccurestRule rule == new AccurestRule()
|
|
||||||
.repoRoot('http://your.repo.com')
|
|
||||||
.downloadStub("io.codearte.accurest.stubs", "loanIssuance")
|
|
||||||
.downloadStub("io.codearte.accurest.stubs:fraudDetectionServer")
|
|
||||||
|
|
||||||
def 'should start WireMock servers'() {
|
|
||||||
expect: 'WireMocks are running'
|
|
||||||
rule.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance') !== null
|
|
||||||
rule.findStubUrl('loanIssuance') !== null
|
|
||||||
rule.findStubUrl('loanIssuance') === rule.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance')
|
|
||||||
rule.findStubUrl('io.codearte.accurest.stubs:fraudDetectionServer') !== null
|
|
||||||
and:
|
|
||||||
rule.findAllRunningStubs().isPresent('loanIssuance')
|
|
||||||
rule.findAllRunningStubs().isPresent('io.codearte.accurest.stubs', 'fraudDetectionServer')
|
|
||||||
rule.findAllRunningStubs().isPresent('io.codearte.accurest.stubs:fraudDetectionServer')
|
|
||||||
and: 'Stubs were registered'
|
|
||||||
"${rule.findStubUrl('loanIssuance').toString()}/name".toURL().text === 'loanIssuance'
|
|
||||||
"${rule.findStubUrl('fraudDetectionServer').toString()}/name".toURL().text === 'fraudDetectionServer'
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
Example of usage in JUnit tests:
|
|
||||||
|
|
||||||
[source,java,indent=0]
|
|
||||||
----
|
|
||||||
@ClassRule public static AccurestRule rule == new AccurestRule()
|
|
||||||
.repoRoot("http://your.repo.com")
|
|
||||||
.downloadStub("io.codearte.accurest.stubs", "loanIssuance")
|
|
||||||
.downloadStub("io.codearte.accurest.stubs:fraudDetectionServer");
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void should_start_wiremock_servers() throws Exception {
|
|
||||||
// expect: 'WireMocks are running'
|
|
||||||
then(rule.findStubUrl("io.codearte.accurest.stubs", "loanIssuance")).isNotNull();
|
|
||||||
then(rule.findStubUrl("loanIssuance")).isNotNull();
|
|
||||||
then(rule.findStubUrl("loanIssuance")).isEqualTo(rule.findStubUrl("io.codearte.accurest.stubs", "loanIssuance"));
|
|
||||||
then(rule.findStubUrl("io.codearte.accurest.stubs:fraudDetectionServer")).isNotNull();
|
|
||||||
// and:
|
|
||||||
then(rule.findAllRunningStubs().isPresent("loanIssuance")).isTrue();
|
|
||||||
then(rule.findAllRunningStubs().isPresent("io.codearte.accurest.stubs", "fraudDetectionServer")).isTrue();
|
|
||||||
then(rule.findAllRunningStubs().isPresent("io.codearte.accurest.stubs:fraudDetectionServer")).isTrue();
|
|
||||||
// and: 'Stubs were registered'
|
|
||||||
then(httpGet(rule.findStubUrl("loanIssuance").toString() + "/name")).isEqualTo("loanIssuance");
|
|
||||||
then(httpGet(rule.findStubUrl("fraudDetectionServer").toString() + "/name")).isEqualTo("fraudDetectionServer");
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
Check the *Common properties for JUnit and Spring* for more information on how to apply global configuration of Stub Runner.
|
|
||||||
|
|
||||||
===== Stub Runner Spring
|
|
||||||
|
|
||||||
If you're using Spring then you can just import the `io.codearte.accurest.stubrunner.spring.StubRunnerConfiguration` and a bean of type `StubFinder` will get registered.
|
|
||||||
|
|
||||||
In order to find a URL and port of a given dependency you can autowire the bean in your test and call its methods:
|
|
||||||
|
|
||||||
[source,groovy,indent=0]
|
|
||||||
----
|
|
||||||
@ContextConfiguration(classes == Config, loader == SpringApplicationContextLoader)
|
|
||||||
class StubRunnerConfigurationSpec extends Specification {
|
|
||||||
|
|
||||||
@Autowired StubFinder stubFinder
|
|
||||||
|
|
||||||
def 'should start WireMock servers'() {
|
|
||||||
expect: 'WireMocks are running'
|
|
||||||
stubFinder.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance') !== null
|
|
||||||
stubFinder.findStubUrl('loanIssuance') !== null
|
|
||||||
stubFinder.findStubUrl('loanIssuance') === stubFinder.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance')
|
|
||||||
stubFinder.findStubUrl('io.codearte.accurest.stubs:fraudDetectionServer') !== null
|
|
||||||
and:
|
|
||||||
stubFinder.findAllRunningStubs().isPresent('loanIssuance')
|
|
||||||
stubFinder.findAllRunningStubs().isPresent('io.codearte.accurest.stubs', 'fraudDetectionServer')
|
|
||||||
stubFinder.findAllRunningStubs().isPresent('io.codearte.accurest.stubs:fraudDetectionServer')
|
|
||||||
and: 'Stubs were registered'
|
|
||||||
"${stubFinder.findStubUrl('loanIssuance').toString()}/name".toURL().text === 'loanIssuance'
|
|
||||||
"${stubFinder.findStubUrl('fraudDetectionServer').toString()}/name".toURL().text === 'fraudDetectionServer'
|
|
||||||
}
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
@Import(StubRunnerConfiguration)
|
|
||||||
@EnableAutoConfiguration
|
|
||||||
static class Config {}
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
Check the *Common properties for JUnit and Spring* for more information on how to apply global configuration of Stub Runner.
|
|
||||||
|
|
||||||
===== Stub Runner Spring Cloud
|
===== Stub Runner Spring Cloud
|
||||||
|
|
||||||
|
|||||||
37
docs/src/docs/asciidoc/stubrunner.adoc
Normal file
37
docs/src/docs/asciidoc/stubrunner.adoc
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
== Using Stub Runner to automate running stubs
|
||||||
|
|
||||||
|
Stub Runner automates downloading stubs from a Maven repository (that includes also the local Maven repository) and starting the WireMock server for each of those stubs.
|
||||||
|
|
||||||
|
=== Modules
|
||||||
|
|
||||||
|
AccuREST comes with a new structure of modules
|
||||||
|
|
||||||
|
[source,indent=0]
|
||||||
|
----
|
||||||
|
└── stub-runner
|
||||||
|
├── stub-runner
|
||||||
|
├── stub-runner-junit
|
||||||
|
├── stub-runner-spring
|
||||||
|
└── stub-runner-spring-cloud
|
||||||
|
----
|
||||||
|
|
||||||
|
include::../../../../stub-runner/stub-runner/README.adoc[]
|
||||||
|
include::../../../../stub-runner/stub-runner-junit/README.adoc[]
|
||||||
|
include::../../../../stub-runner/stub-runner-spring/README.adoc[]
|
||||||
|
include::../../../../stub-runner/stub-runner-spring-cloud/README.adoc[]
|
||||||
|
|
||||||
|
|
||||||
|
===== Common properties for JUnit and Spring
|
||||||
|
|
||||||
|
Some of the properties that are repetitive can be set using system properties or property sources (for Spring). Here are their names with their default values:
|
||||||
|
|
||||||
|
[width="60%",frame="topbot",options="header"]
|
||||||
|
|======================
|
||||||
|
| Property name | Default value | Description |
|
||||||
|
|stubrunner.port.range.min|10000| Minimal value of a port for a started WireMock with stubs|
|
||||||
|
|stubrunner.port.range.max|15000| Minimal value of a port for a started WireMock with stubs|
|
||||||
|
|stubrunner.stubs.repository.root|| Maven repo url. If blank then will call the local maven repo|
|
||||||
|
|stubrunner.stubs.classifier|stubs| Default classifier for the stub artifacts|
|
||||||
|
|stubrunner.work-offline|false| If true then will not contact any remote repositories to download stubs|
|
||||||
|
|stubrunner.stubs|| Comma separated list of Ivy notation of stubs to download|
|
||||||
|
|======================
|
||||||
106
stub-runner/stub-runner-junit/README.adoc
Normal file
106
stub-runner/stub-runner-junit/README.adoc
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
=== Stub Runner JUnit Rule
|
||||||
|
|
||||||
|
Stub Runner comes with a JUnit rule thanks to which you can very easily download and run stubs for given group and artifact id:
|
||||||
|
|
||||||
|
[source,java,indent=0]
|
||||||
|
----
|
||||||
|
@ClassRule public static AccurestRule rule == new AccurestRule()
|
||||||
|
.repoRoot("http://your.repo.com")
|
||||||
|
.downloadStub("io.codearte.accurest.stubs", "loanIssuance")
|
||||||
|
.downloadStub("io.codearte.accurest.stubs:fraudDetectionServer")
|
||||||
|
.downloadStub("io.codearte:stub1", "io.codearte:stub2:classifier", "io.codearte:stub3");
|
||||||
|
----
|
||||||
|
|
||||||
|
After that rule gets executed Stub Runner connects to your Maven repository and for the given list of dependencies tries to:
|
||||||
|
* download them
|
||||||
|
* cache them locally
|
||||||
|
* unzip them to a temporary folder
|
||||||
|
* start a WireMock server for each Maven dependency on a random port from the provided range of ports
|
||||||
|
* feed the WireMock server with all JSON files that are valid WireMock definitions
|
||||||
|
|
||||||
|
Stub Runner uses http://docs.groovy-lang.org/latest/html/documentation/grape.html[Groovy's Grape] mechanism to download the Maven dependencies.
|
||||||
|
Check their http://docs.groovy-lang.org/latest/html/documentation/grape.html[docs] for more information.
|
||||||
|
|
||||||
|
Since the `AccurestRule` implements the `StubFinder` it allows you to find the started stubs:
|
||||||
|
|
||||||
|
[source,groovy,indent=0]
|
||||||
|
----
|
||||||
|
interface StubFinder {
|
||||||
|
/**
|
||||||
|
* For the given groupId and artifactId tries to find the matching
|
||||||
|
* URL of the running stub.
|
||||||
|
*
|
||||||
|
* @param groupId - might be null. In that case a search only via artifactId takes place
|
||||||
|
* @return URL of a running stub or null if not found
|
||||||
|
*/
|
||||||
|
URL findStubUrl(String groupId, String artifactId)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For the given Ivy notation {@code groupId:artifactId} tries to find the matching
|
||||||
|
* URL of the running stub. You can also pass only {@code artifactId}.
|
||||||
|
*
|
||||||
|
* @param ivyNotation - Ivy representation of the Maven artifact
|
||||||
|
* @return URL of a running stub or null if not found
|
||||||
|
*/
|
||||||
|
URL findStubUrl(String ivyNotation)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all running stubs
|
||||||
|
*/
|
||||||
|
RunningStubs findAllRunningStubs()
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Example of usage in Spock tests:
|
||||||
|
|
||||||
|
[source,groovy,indent=0]
|
||||||
|
----
|
||||||
|
@ClassRule @Shared AccurestRule rule == new AccurestRule()
|
||||||
|
.repoRoot('http://your.repo.com')
|
||||||
|
.downloadStub("io.codearte.accurest.stubs", "loanIssuance")
|
||||||
|
.downloadStub("io.codearte.accurest.stubs:fraudDetectionServer")
|
||||||
|
|
||||||
|
def 'should start WireMock servers'() {
|
||||||
|
expect: 'WireMocks are running'
|
||||||
|
rule.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance') !== null
|
||||||
|
rule.findStubUrl('loanIssuance') !== null
|
||||||
|
rule.findStubUrl('loanIssuance') === rule.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance')
|
||||||
|
rule.findStubUrl('io.codearte.accurest.stubs:fraudDetectionServer') !== null
|
||||||
|
and:
|
||||||
|
rule.findAllRunningStubs().isPresent('loanIssuance')
|
||||||
|
rule.findAllRunningStubs().isPresent('io.codearte.accurest.stubs', 'fraudDetectionServer')
|
||||||
|
rule.findAllRunningStubs().isPresent('io.codearte.accurest.stubs:fraudDetectionServer')
|
||||||
|
and: 'Stubs were registered'
|
||||||
|
"${rule.findStubUrl('loanIssuance').toString()}/name".toURL().text === 'loanIssuance'
|
||||||
|
"${rule.findStubUrl('fraudDetectionServer').toString()}/name".toURL().text === 'fraudDetectionServer'
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Example of usage in JUnit tests:
|
||||||
|
|
||||||
|
[source,java,indent=0]
|
||||||
|
----
|
||||||
|
@ClassRule public static AccurestRule rule == new AccurestRule()
|
||||||
|
.repoRoot("http://your.repo.com")
|
||||||
|
.downloadStub("io.codearte.accurest.stubs", "loanIssuance")
|
||||||
|
.downloadStub("io.codearte.accurest.stubs:fraudDetectionServer");
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void should_start_wiremock_servers() throws Exception {
|
||||||
|
// expect: 'WireMocks are running'
|
||||||
|
then(rule.findStubUrl("io.codearte.accurest.stubs", "loanIssuance")).isNotNull();
|
||||||
|
then(rule.findStubUrl("loanIssuance")).isNotNull();
|
||||||
|
then(rule.findStubUrl("loanIssuance")).isEqualTo(rule.findStubUrl("io.codearte.accurest.stubs", "loanIssuance"));
|
||||||
|
then(rule.findStubUrl("io.codearte.accurest.stubs:fraudDetectionServer")).isNotNull();
|
||||||
|
// and:
|
||||||
|
then(rule.findAllRunningStubs().isPresent("loanIssuance")).isTrue();
|
||||||
|
then(rule.findAllRunningStubs().isPresent("io.codearte.accurest.stubs", "fraudDetectionServer")).isTrue();
|
||||||
|
then(rule.findAllRunningStubs().isPresent("io.codearte.accurest.stubs:fraudDetectionServer")).isTrue();
|
||||||
|
// and: 'Stubs were registered'
|
||||||
|
then(httpGet(rule.findStubUrl("loanIssuance").toString() + "/name")).isEqualTo("loanIssuance");
|
||||||
|
then(httpGet(rule.findStubUrl("fraudDetectionServer").toString() + "/name")).isEqualTo("fraudDetectionServer");
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
Check the *Common properties for JUnit and Spring* for more information on how to apply global configuration of Stub Runner.
|
||||||
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
stub-runner-junit
|
|
||||||
=================
|
|
||||||
|
|
||||||
Contains a JUnit Rule for Stub Runner.
|
|
||||||
|
|
||||||
Example of usage:
|
|
||||||
|
|
||||||
```
|
|
||||||
class AccurestRuleSpec extends Specification {
|
|
||||||
|
|
||||||
@ClassRule @Shared AccurestRule rule = new AccurestRule()
|
|
||||||
.repoRoot(AccurestRuleSpec.getResource("/m2repo").path)
|
|
||||||
.downloadStub("io.codearte.accurest.stubs", "loanIssuance")
|
|
||||||
.downloadStub("io.codearte.accurest.stubs:fraudDetectionServer")
|
|
||||||
|
|
||||||
def 'should start WireMock servers'() {
|
|
||||||
expect: 'WireMocks are running'
|
|
||||||
rule.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance') != null
|
|
||||||
rule.findStubUrl('loanIssuance') != null
|
|
||||||
rule.findStubUrl('loanIssuance') == rule.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance')
|
|
||||||
rule.findStubUrl('io.codearte.accurest.stubs:fraudDetectionServer') != null
|
|
||||||
and:
|
|
||||||
rule.findAllRunningStubs().isPresent('loanIssuance')
|
|
||||||
rule.findAllRunningStubs().isPresent('io.codearte.accurest.stubs', 'fraudDetectionServer')
|
|
||||||
rule.findAllRunningStubs().isPresent('io.codearte.accurest.stubs:fraudDetectionServer')
|
|
||||||
and: 'Stubs were registered'
|
|
||||||
"${rule.findStubUrl('loanIssuance').toString()}/name".toURL().text == 'loanIssuance'
|
|
||||||
"${rule.findStubUrl('fraudDetectionServer').toString()}/name".toURL().text == 'fraudDetectionServer'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
You can set the default value of the Maven repository by means of a system property:
|
|
||||||
|
|
||||||
```
|
|
||||||
-Dstubrunner.stubs.repository.root=http://your.maven.repo.com
|
|
||||||
```
|
|
||||||
|
|
||||||
The list of configurable properties contains:
|
|
||||||
|
|
||||||
| Name | Default value | Description |
|
|
||||||
|------|---------------|-------------|
|
|
||||||
| stubrunner.port.range.min | 10000 | Minimal value of a port for a WireMock server |
|
|
||||||
| stubrunner.port.range.max | 15000 | Maximum value of a port for a WireMock server |
|
|
||||||
| stubrunner.stubs.repository.root | | Address to your M2 repo (will point to local M2 repo if none is provided) |
|
|
||||||
| stubrunner.stubs.classifier | stubs | Default classifier for the JARs containing stubs |
|
|
||||||
| stubrunner.work-offline | false | Should try to connect to any repo to download stubs (useful if there's no internet) |
|
|
||||||
| stubrunner.stubs | | Default comma separated list of stubs to download |
|
|
||||||
|
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
stub-runner-spring-cloud
|
=== Stub Runner Spring Cloud
|
||||||
========================
|
|
||||||
|
|
||||||
Registers the stubs in the provided Service Discovery. It's enough to add the jar
|
Registers the stubs in the provided Service Discovery. It's enough to add the jar
|
||||||
|
|
||||||
```
|
[source,groovy,indent=0]
|
||||||
|
----
|
||||||
io.codearte.accurest:stub-runner-spring-cloud
|
io.codearte.accurest:stub-runner-spring-cloud
|
||||||
```
|
----
|
||||||
|
|
||||||
and the Stub Runner autoconfiguration should be picked up.
|
and the Stub Runner autoconfiguration should be picked up.
|
||||||
|
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
stub-runner-spring
|
=== Stub Runner Spring
|
||||||
=======================
|
|
||||||
|
|
||||||
Sets up Spring configuration of the Stub Runner project.
|
Sets up Spring configuration of the Stub Runner project.
|
||||||
|
|
||||||
@@ -9,28 +8,39 @@ and registers in WireMock the selected stubs.
|
|||||||
If you want to find the URL of your stubbed dependency you can autowire the `StubFinder` interface and use
|
If you want to find the URL of your stubbed dependency you can autowire the `StubFinder` interface and use
|
||||||
its methods as presented below:
|
its methods as presented below:
|
||||||
|
|
||||||
```
|
[source,groovy,indent=0]
|
||||||
|
----
|
||||||
|
@ContextConfiguration(classes == Config, loader == SpringApplicationContextLoader)
|
||||||
|
class StubRunnerConfigurationSpec extends Specification {
|
||||||
|
|
||||||
@Autowired StubFinder stubFinder
|
@Autowired StubFinder stubFinder
|
||||||
|
|
||||||
def 'should start WireMock servers'() {
|
def 'should start WireMock servers'() {
|
||||||
expect: 'WireMocks are running'
|
expect: 'WireMocks are running'
|
||||||
stubFinder.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance') != null
|
stubFinder.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance') !== null
|
||||||
stubFinder.findStubUrl('loanIssuance') != null
|
stubFinder.findStubUrl('loanIssuance') !== null
|
||||||
stubFinder.findStubUrl('loanIssuance') == stubFinder.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance')
|
stubFinder.findStubUrl('loanIssuance') === stubFinder.findStubUrl('io.codearte.accurest.stubs', 'loanIssuance')
|
||||||
stubFinder.findStubUrl('io.codearte.accurest.stubs:fraudDetectionServer') != null
|
stubFinder.findStubUrl('io.codearte.accurest.stubs:fraudDetectionServer') !== null
|
||||||
and:
|
and:
|
||||||
stubFinder.findAllRunningStubs().isPresent('loanIssuance')
|
stubFinder.findAllRunningStubs().isPresent('loanIssuance')
|
||||||
stubFinder.findAllRunningStubs().isPresent('io.codearte.accurest.stubs', 'fraudDetectionServer')
|
stubFinder.findAllRunningStubs().isPresent('io.codearte.accurest.stubs', 'fraudDetectionServer')
|
||||||
stubFinder.findAllRunningStubs().isPresent('io.codearte.accurest.stubs:fraudDetectionServer')
|
stubFinder.findAllRunningStubs().isPresent('io.codearte.accurest.stubs:fraudDetectionServer')
|
||||||
and: 'Stubs were registered'
|
and: 'Stubs were registered'
|
||||||
"${stubFinder.findStubUrl('loanIssuance').toString()}/name".toURL().text == 'loanIssuance'
|
"${stubFinder.findStubUrl('loanIssuance').toString()}/name".toURL().text === 'loanIssuance'
|
||||||
"${stubFinder.findStubUrl('fraudDetectionServer').toString()}/name".toURL().text == 'fraudDetectionServer'
|
"${stubFinder.findStubUrl('fraudDetectionServer').toString()}/name".toURL().text === 'fraudDetectionServer'
|
||||||
}
|
}
|
||||||
```
|
|
||||||
|
@Configuration
|
||||||
|
@Import(StubRunnerConfiguration)
|
||||||
|
@EnableAutoConfiguration
|
||||||
|
static class Config {}
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
for the following configuration file:
|
for the following configuration file:
|
||||||
|
|
||||||
```
|
[source,groovy,indent=0]
|
||||||
|
----
|
||||||
stubrunner.stubs.repository.root: classpath:m2repo
|
stubrunner.stubs.repository.root: classpath:m2repo
|
||||||
stubrunner.stubs.ids: io.codearte.accurest.stubs:loanIssuance,io.codearte.accurest.stubs:fraudDetectionServer
|
stubrunner.stubs.ids: io.codearte.accurest.stubs:loanIssuance,io.codearte.accurest.stubs:fraudDetectionServer
|
||||||
```
|
----
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
Stub-runner
|
=== Stub Runner core
|
||||||
===========
|
|
||||||
|
|
||||||
Runs stubs for service collaborators. Treating stubs as contracts of services allows to use stub-runner as an implementation of
|
Runs stubs for service collaborators. Treating stubs as contracts of services allows to use stub-runner as an implementation of
|
||||||
[Consumer Driven Contracts](http://martinfowler.com/articles/consumerDrivenContracts.html).
|
http://martinfowler.com/articles/consumerDrivenContracts.html[Consumer Driven Contracts].
|
||||||
|
|
||||||
### Running stubs
|
==== Running stubs
|
||||||
|
|
||||||
#### Running using main app
|
===== Running using main app
|
||||||
|
|
||||||
You can set the following options to the main class:
|
You can set the following options to the main class:
|
||||||
|
|
||||||
```
|
[source,groovy,indent=0]
|
||||||
|
----
|
||||||
-maxp (--maxPort) N : Maximum port value to be assigned to the
|
-maxp (--maxPort) N : Maximum port value to be assigned to the
|
||||||
Wiremock instance. Defaults to 15000
|
Wiremock instance. Defaults to 15000
|
||||||
(default: 15000)
|
(default: 15000)
|
||||||
@@ -29,45 +29,49 @@ You can set the following options to the main class:
|
|||||||
Defaults to 'stubs' (default: stubs)
|
Defaults to 'stubs' (default: stubs)
|
||||||
-wo (--workOffline) : Switch to work offline. Defaults to 'false'
|
-wo (--workOffline) : Switch to work offline. Defaults to 'false'
|
||||||
(default: false)
|
(default: false)
|
||||||
|
----
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
#### Building a Fat Jar
|
===== Building a Fat Jar
|
||||||
|
|
||||||
Just call the following command:
|
Just call the following command:
|
||||||
|
|
||||||
```
|
[source,groovy,indent=0]
|
||||||
|
----
|
||||||
./gradlew stub-runner-root:stub-runner:shadowJar -PfatJar
|
./gradlew stub-runner-root:stub-runner:shadowJar -PfatJar
|
||||||
```
|
----
|
||||||
|
|
||||||
and inside the `build/lib` there will be a Fat Jar with classifier `fatJar` waiting for you to execute. E.g.
|
and inside the `build/lib` there will be a Fat Jar with classifier `fatJar` waiting for you to execute. E.g.
|
||||||
|
|
||||||
```
|
[source,groovy,indent=0]
|
||||||
|
----
|
||||||
java -jar stub-runner/stub-runner/build/libs/stub-runner-1.0.1-SNAPSHOT-fatJar.jar -sr http://a.b.com -s a:b:c,d:e,f:g:h
|
java -jar stub-runner/stub-runner/build/libs/stub-runner-1.0.1-SNAPSHOT-fatJar.jar -sr http://a.b.com -s a:b:c,d:e,f:g:h
|
||||||
```
|
----
|
||||||
|
|
||||||
### Stub runner configuration
|
==== Stub runner configuration
|
||||||
|
|
||||||
You can configure the stub runner by either passing the full arguments list with the `-Pargs` like this:
|
You can configure the stub runner by either passing the full arguments list with the `-Pargs` like this:
|
||||||
|
|
||||||
```
|
[source,groovy,indent=0]
|
||||||
|
----
|
||||||
./gradlew stub-runner-root:stub-runner:run -Pargs="-c pl -minp 10000 -maxp 10005 -s a:b:c,d:e,f:g:h"
|
./gradlew stub-runner-root:stub-runner:run -Pargs="-c pl -minp 10000 -maxp 10005 -s a:b:c,d:e,f:g:h"
|
||||||
```
|
----
|
||||||
|
|
||||||
or each parameter separately with a `-P` prefix and without the hyphen `-` in the name of the param
|
or each parameter separately with a `-P` prefix and without the hyphen `-` in the name of the param
|
||||||
|
|
||||||
```
|
[source,groovy,indent=0]
|
||||||
|
----
|
||||||
./gradlew stub-runner-root:stub-runner:run -Pc=pl -Pminp=10000 -Pmaxp=10005 -Ps=a:b:c,d:e,f:g:h
|
./gradlew stub-runner-root:stub-runner:run -Pc=pl -Pminp=10000 -Pmaxp=10005 -Ps=a:b:c,d:e,f:g:h
|
||||||
```
|
----
|
||||||
|
|
||||||
|
===== Stubs
|
||||||
|
|
||||||
#### Stubs
|
Stubs are defined in JSON documents, whose syntax is defined in http://wiremock.org/stubbing.html[WireMock documentation]
|
||||||
|
|
||||||
Stubs are defined in JSON documents, whose syntax is defined in [WireMock documentation](http://wiremock.org/stubbing.html)
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
```json
|
|
||||||
|
[source,javascript,indent=0]
|
||||||
|
----
|
||||||
{
|
{
|
||||||
"request": {
|
"request": {
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
@@ -81,10 +85,10 @@ Example:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
----
|
||||||
|
|
||||||
In the provided JAR file we're harvesting all JSON files and try to put them inside running WireMock instance.
|
In the provided JAR file we're harvesting all JSON files and try to put them inside running WireMock instance.
|
||||||
|
|
||||||
#### Viewing registered mappings
|
===== Viewing registered mappings
|
||||||
|
|
||||||
Every stubbed collaborator exposes list of defined mappings under `__/admin/` endpoint.
|
Every stubbed collaborator exposes list of defined mappings under `__/admin/` endpoint.
|
||||||
Reference in New Issue
Block a user