161 lines
4.9 KiB
Plaintext
161 lines
4.9 KiB
Plaintext
=== Stub Runner Stream
|
|
|
|
Spring Cloud Contract Verifier Stub Runner's messaging module gives you an easy way to
|
|
integrate with Spring Stream. For the provided artifacts, it automatically downloads the
|
|
stubs and registers the required routes.
|
|
|
|
WARNING: If Stub Runner's integration with Stream the `messageFrom` or `sentTo` Strings
|
|
are resolved first as a `destination` of a channel and no such `destination` exists, the
|
|
destination is resolved as a channel name.
|
|
|
|
IMPORTANT: If you want to use Spring Cloud Stream remember, to add a dependency on
|
|
`org.springframework.cloud:spring-cloud-stream-test-support`.
|
|
|
|
[source,xml,indent=0,subs="verbatim,attributes",role="primary"]
|
|
.Maven
|
|
----
|
|
<dependency>
|
|
<groupId>org.springframework.cloud</groupId>
|
|
<artifactId>spring-cloud-stream-test-support</artifactId>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
----
|
|
|
|
[source,groovy,indent=0,subs="verbatim,attributes",role="secondary"]
|
|
.Gradle
|
|
----
|
|
testCompile "org.springframework.cloud:spring-cloud-stream-test-support"
|
|
----
|
|
|
|
==== Adding the Runner to the Project
|
|
|
|
You can have both Spring Cloud Stream and Spring Cloud Contract Stub Runner on the
|
|
classpath. Remember to annotate your test class with `@AutoConfigureStubRunner`.
|
|
|
|
==== Disabling the functionality
|
|
|
|
If you need to disable this functionality, set the `stubrunner.stream.enabled=false`
|
|
property.
|
|
|
|
Assume that you have the following Maven repository with a deployed stubs for the
|
|
`streamService` application:
|
|
|
|
[source,bash,indent=0]
|
|
----
|
|
└── .m2
|
|
└── repository
|
|
└── io
|
|
└── codearte
|
|
└── accurest
|
|
└── stubs
|
|
└── streamService
|
|
├── 0.0.1-SNAPSHOT
|
|
│ ├── streamService-0.0.1-SNAPSHOT.pom
|
|
│ ├── streamService-0.0.1-SNAPSHOT-stubs.jar
|
|
│ └── maven-metadata-local.xml
|
|
└── maven-metadata-local.xml
|
|
----
|
|
|
|
Further assume the stubs contain the following structure:
|
|
|
|
[source,bash,indent=0]
|
|
----
|
|
├── META-INF
|
|
│ └── MANIFEST.MF
|
|
└── repository
|
|
├── accurest
|
|
│ ├── bookDeleted.groovy
|
|
│ ├── bookReturned1.groovy
|
|
│ └── bookReturned2.groovy
|
|
└── mappings
|
|
----
|
|
|
|
Consider the following contracts (numbered *1*):
|
|
|
|
[source,groovy]
|
|
----
|
|
include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=sample_dsl,indent=0]
|
|
----
|
|
|
|
Now consider *2*:
|
|
|
|
[source,groovy]
|
|
----
|
|
include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=sample_dsl_2,indent=0]
|
|
----
|
|
|
|
Now consider the following Spring configuration:
|
|
|
|
[source,yaml]
|
|
----
|
|
include::src/test/resources/application.yml[]
|
|
----
|
|
|
|
These examples lend themselves to three scenarios:
|
|
|
|
* <<stream-scenario-1>>
|
|
* <<stream-scenario-2>>
|
|
* <<stream-scenario-3>>
|
|
|
|
[[stream-scenario-1]]
|
|
===== Scenario 1 (no input message)
|
|
|
|
To trigger a message via the `return_book_1` label, use the `StubTrigger` interface as
|
|
follows:
|
|
|
|
[source,groovy]
|
|
----
|
|
include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=client_trigger,indent=0]
|
|
----
|
|
|
|
To listen to the output of the message sent to a channel whose `destination` is
|
|
`returnBook`:
|
|
|
|
[source,groovy]
|
|
----
|
|
include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=client_trigger_receive,indent=0]
|
|
----
|
|
|
|
The received message passes the following assertions:
|
|
|
|
[source,groovy]
|
|
----
|
|
include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=client_trigger_message,indent=0]
|
|
----
|
|
|
|
[[stream-scenario-2]]
|
|
===== Scenario 2 (output triggered by input)
|
|
|
|
Since the route is set for you, you can send a message to the `bookStorage`
|
|
`destination`:
|
|
|
|
[source,groovy]
|
|
----
|
|
include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=client_send,indent=0]
|
|
----
|
|
|
|
To listen to the output of the message sent to `returnBook`:
|
|
|
|
[source,groovy]
|
|
----
|
|
include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=client_receive,indent=0]
|
|
----
|
|
|
|
The received message passes the following assertions:
|
|
|
|
[source,groovy]
|
|
----
|
|
include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=client_receive_message,indent=0]
|
|
----
|
|
|
|
[[stream-scenario-3]]
|
|
===== Scenario 3 (input with no output)
|
|
|
|
Since the route is set for you, you can send a message to the `{output_name}`
|
|
destination:
|
|
|
|
[source,groovy]
|
|
----
|
|
include::src/test/groovy/org/springframework/cloud/contract/stubrunner/messaging/stream/StreamStubRunnerSpec.groovy[tags=trigger_no_output,indent=0]
|
|
----
|