Download JAR files tagged by jetty with all dependencies
org.wso2.carbon.http.bridge from group org.wso2.carbon (version 4.10.21)
There are two ways to use OSGi in server-side[1].
In Carbon, what we have done is, embedding an OSGi framework inside a servlet container.
So BridgeServlet delegates all the request from the servlet container to the
HttpServiceServlet registered by the http.bridge bundle. This is required only
when Carbon is running inside a webapp.
There is a possibility to embed an HTTP server(ex. jetty) inside equinox and
start a server with all our carbon bundles. This is same as running carbon
inside spring DM server. For this scenario, we do not need
org.wso2.carbon.http.bridge bundles and the org.wso2.carbon.bridge extension bundle.
1. http://eclipse.org/equinox/server/http_quickstart.php
Group: org.wso2.carbon Artifact: org.wso2.carbon.http.bridge
Show all versions Show documentation Show source
Show all versions Show documentation Show source
0 downloads
Artifact org.wso2.carbon.http.bridge
Group org.wso2.carbon
Version 4.10.21
Last update 26. August 2024
Organization not specified
URL http://wso2.org
License not specified
Dependencies amount 3
Dependencies org.eclipse.osgi, org.wso2.carbon.bridge, org.eclipse.equinox.http.servlet,
There are maybe transitive dependencies!
Group org.wso2.carbon
Version 4.10.21
Last update 26. August 2024
Organization not specified
URL http://wso2.org
License not specified
Dependencies amount 3
Dependencies org.eclipse.osgi, org.wso2.carbon.bridge, org.eclipse.equinox.http.servlet,
There are maybe transitive dependencies!
jmockring-core from group org.jmockring (version 0.7.0)
jmockring - Java test MOCKing tool for spRING.
A test harness tool for projects using the following technology stack:
- Java 6+
- Spring 3.1 or greater as a DI/Deployment container
- JUnit 4 and Mockito for testing
- Jetty/Servlet API 3.0 for web app (war) deployment - for testing only
Main features:
1) Partial Spring context deployment with automatic bean mocking for unavailable beans
2) Bootstrapping embedded Jetty server via JUnit runners
3) Configurable web application contexts
4) Automatic injection of Spring beans and mocks in JUnit tests via Java5 annotations
0 downloads
Artifact jmockring-core
Group org.jmockring
Version 0.7.0
Last update 13. March 2017
Organization not specified
URL https://github.com/plechev/jmockring
License not specified
Dependencies amount 15
Dependencies javax.servlet-api, commons-collections, javax.inject, hibernate-jpa-2.0-api, spring-core, spring-beans, spring-expression, spring-context, spring-context-support, spring-web, spring-tx, commons-lang3, junit-dep, mockito-core, hamcrest-junit,
There are maybe transitive dependencies!
Group org.jmockring
Version 0.7.0
Last update 13. March 2017
Organization not specified
URL https://github.com/plechev/jmockring
License not specified
Dependencies amount 15
Dependencies javax.servlet-api, commons-collections, javax.inject, hibernate-jpa-2.0-api, spring-core, spring-beans, spring-expression, spring-context, spring-context-support, spring-web, spring-tx, commons-lang3, junit-dep, mockito-core, hamcrest-junit,
There are maybe transitive dependencies!
ks-server-http from group eu.fbk.knowledgestore (version 1.7.1)
The HTTP server module (ks-server-http) implements the Web API of
the KnowledgeStore, which includes the two CRUD and SPARQL endpoints.
The CRUD Endpoint supports the retrieval and manipulation of
semi-structured data about resource, mention, entity and axiom records
(encoded in RDF, possibly using JSONLD), and the upload / download of
resource representation. The SPARQL Endpoint supports SPARQL SELECT,
CONSTRUCT, DESCRIBE and ASK queries according to the W3C SPARQL
protocol. The two endpoints are implemented on top of a component
implementing the KnowledgeStore Java API (the Store interface), which
can be either the the KnowledgeStore frontend (ks-frontend) or the Java
Client. The implementation of the module is based on the Jetty Web sever
(run in embedded mode) and the Jersey JAX-RS implementation. Reference
documentation of the Web API is automatically generated using the
Enunciate tool.
Group: eu.fbk.knowledgestore Artifact: ks-server-http
Show all versions Show documentation Show source
Show all versions Show documentation Show source
1 downloads
Artifact ks-server-http
Group eu.fbk.knowledgestore
Version 1.7.1
Last update 08. October 2015
Organization not specified
URL http://www.fbk.eu
License not specified
Dependencies amount 19
Dependencies slf4j-api, guava, sesame-model, jetty-server, jetty-jmx, jetty-webapp, jetty-security, jetty-util, javax.servlet-api, javax.ws.rs-api, jersey-server, jersey-common, jersey-media-multipart, jersey-mvc, jersey-mvc-mustache, logback-access, sesame-query, ks-core, ks-server,
There are maybe transitive dependencies!
Group eu.fbk.knowledgestore
Version 1.7.1
Last update 08. October 2015
Organization not specified
URL http://www.fbk.eu
License not specified
Dependencies amount 19
Dependencies slf4j-api, guava, sesame-model, jetty-server, jetty-jmx, jetty-webapp, jetty-security, jetty-util, javax.servlet-api, javax.ws.rs-api, jersey-server, jersey-common, jersey-media-multipart, jersey-mvc, jersey-mvc-mustache, logback-access, sesame-query, ks-core, ks-server,
There are maybe transitive dependencies!
jetty-conf-maven-plugin from group net.uvavru.maven.plugin (version 1.0)
Jetty context XML configuration plugin generator helper.
This plugin helps you to generate your Context XML file with a dynamic content such as:
* classpath entries
* web app resources
* maven properties
Plugin needs a template Jetty context XML file where the dynamic content is injected.
Injection of dynamic content is supported as:
* altering the DOM with new values
* with enabled filtering dynamic values can be replaced as properties (see bellow)
Filtering of the template file is supported.
Basically it means you can include content from your maven properties in your context XML file.
If desired plugin sets two maven properties with the dynamic content:
* jetty.conf-plugin.classpath
* jetty.conf-plugin.webapp
These properties might be used for filtering as well.
Plugin resolves project dependency artifacts.
These artifacts are transformed into webapp resources and classpath entries.
Works with multi-module projects.
Works in Eclipse with enabled m2e.
0 downloads
Artifact jetty-conf-maven-plugin
Group net.uvavru.maven.plugin
Version 1.0
Last update 31. May 2012
Organization not specified
URL https://github.com/stepanv/jetty-conf-maven-plugin
License The Apache Software License, Version 2.0
Dependencies amount 2
Dependencies maven-core, maven-filtering,
There are maybe transitive dependencies!
Group net.uvavru.maven.plugin
Version 1.0
Last update 31. May 2012
Organization not specified
URL https://github.com/stepanv/jetty-conf-maven-plugin
License The Apache Software License, Version 2.0
Dependencies amount 2
Dependencies maven-core, maven-filtering,
There are maybe transitive dependencies!
stop from group jetty (version 5.1.10)
Jetty is an open-source, standards-based, full-featured web server implemented entirely in Java. It is released under the Apache 2.0 licence and is therefore free for commercial use and distribution. First created in 1995, Jetty has benefitted from input from a vast user community and consistent and focused development by a stable core of lead developers. There are many more examples of Jetty in action on the Jetty Powered Page that has selections from among the tens of thousands of production Jetty instances. However, as Jetty aims to be as unobtrusive as possible, countless websites and products are based around Jetty, but Jetty is invisible!
1 downloads
Artifact stop
Group jetty
Version 5.1.10
Last update 25. October 2007
Organization not specified
URL http://jetty.mortbay.org/
License Apache 2.0
Dependencies amount 0
Dependencies No dependencies
There are maybe transitive dependencies!
Group jetty
Version 5.1.10
Last update 25. October 2007
Organization not specified
URL http://jetty.mortbay.org/
License Apache 2.0
Dependencies amount 0
Dependencies No dependencies
There are maybe transitive dependencies!
superpom from group it.tidalwave.thesefoolishthings (version 5.2)
[![Build Status](https://drone.io/bitbucket.org/tidalwave/thesefoolishthings-superpom-src/status.png)]
(https://drone.io/bitbucket.org/tidalwave/thesefoolishthings-superpom-src/latest)
A feature-rich SuperPOM for building Java projects. It features:
* explicit version configuration for a number of plugins;
* easy configurability by means of pre-defined properties to avoid cut & copy of plugin sections.
A number of profiles, that can be easily activated, are available for:
* Spring-AOP configuration;
* different kinds of Continuous Integration tasks, including a full run of QA tools such as JaCoCo, FindBugs, PMD, etc...
* deploying WARs and locally running them with Tomcat or Jetty;
* creating a Mac OS X bundle for JavaFX applications;
* creating .deb packages for both application and services;
* a customized release cycle, including all requirements for the Maven Central such as signing, with a 'transactional' behaviour
(all artifacts, both the DSCM and the Maven artifacts are prepared on the local disk, so they can be uploaded in a second moment);
Remember to customise it
------------------------
If you use it, please remember to change the ```description```,```url```, ```organization```, ```developers```, ```license```, etc...
to override those related to the development of this POM.
Group: it.tidalwave.thesefoolishthings Artifact: superpom
Show all versions
Show all versions
There is no JAR file uploaded. A download is not possible! Please choose another version.
0 downloads
Artifact superpom
Group it.tidalwave.thesefoolishthings
Version 5.2
Last update 01. May 2023
Organization Tidalwave s.a.s.
URL http://tidalwave.it
License Apache-2.0
Dependencies amount 0
Dependencies No dependencies
There are maybe transitive dependencies!
Group it.tidalwave.thesefoolishthings
Version 5.2
Last update 01. May 2023
Organization Tidalwave s.a.s.
URL http://tidalwave.it
License Apache-2.0
Dependencies amount 0
Dependencies No dependencies
There are maybe transitive dependencies!
prolobjectlink-jpi from group io.github.prolobjectlink (version 1.1)
Java Prolog Interface (JPI) is an Application Provider Interface (API) for interaction between Java and Prolog programming languages. Is a bidirectional interface that communicate Java applications with Prolog program or database and Prolog procedures with Java class and methods.
JPI is an abstraction layer over concrete prolog drivers over Prolog Engines. This API define all mechanism to interact with any Prolog Engine and maintain the application independent to a specific underlying engine. JPI have several connectors to open source prolog engines like SWI, YAP, XSB native engines and tuProlog, jTrolog, jLog Java based prolog engines.
JPI study all related Java-Prolog integration libraries and take the betters features from each solution with the propose to achieve a common integration interface. The last feature allows switch the under laying Prolog Engine driver and the application code still be the same.
JPI run over any Java Virtual Machine that support Java SE 5 or above. The project was tested over HotSpot, Open J9 and JRockit Virtual Machines over Operating Systems like Windows (7,8,10), Linux (Debian, Ubuntu) and Mac OS X. Can be deployed on Servlets Containers like Jetty, Tomcat or Glassfish Application Server.
JPI can be include in any Java Project using the commonest Java Integration Development Enviroment (IDE) like Eclipse, Netbeans, IntelijIDEA and so on.
JPI is developed and maintained by Prolobjectlink Project an open source initiative for build logic based applications using Prolog like fundamental Logic Programming Language in the persistence layer and application programming.
Group: io.github.prolobjectlink Artifact: prolobjectlink-jpi
Show all versions Show documentation Show source
Show all versions Show documentation Show source
0 downloads
Artifact prolobjectlink-jpi
Group io.github.prolobjectlink
Version 1.1
Last update 02. June 2022
Organization Prolobjectlink Project
URL https://prolobjectlink.github.io/${project.name}
License MIT
Dependencies amount 0
Dependencies No dependencies
There are maybe transitive dependencies!
Group io.github.prolobjectlink
Version 1.1
Last update 02. June 2022
Organization Prolobjectlink Project
URL https://prolobjectlink.github.io/${project.name}
License MIT
Dependencies amount 0
Dependencies No dependencies
There are maybe transitive dependencies!
pact-jvm-provider-gradle_2.12 from group au.com.dius (version 3.6.15)
pact-jvm-provider-gradle
========================
Gradle plugin for verifying pacts against a provider.
The Gradle plugin creates a task `pactVerify` to your build which will verify all configured pacts against your provider.
## To Use It
### For Gradle versions prior to 2.1
#### 1.1. Add the pact-jvm-provider-gradle jar file to your build script class path:
```groovy
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'au.com.dius:pact-jvm-provider-gradle_2.10:3.2.11'
}
}
```
#### 1.2. Apply the pact plugin
```groovy
apply plugin: 'au.com.dius.pact'
```
### For Gradle versions 2.1+
```groovy
plugins {
id "au.com.dius.pact" version "3.2.11"
}
```
### 2. Define the pacts between your consumers and providers
```groovy
pact {
serviceProviders {
// You can define as many as you need, but each must have a unique name
provider1 {
// All the provider properties are optional, and have sensible defaults (shown below)
protocol = 'http'
host = 'localhost'
port = 8080
path = '/'
// Again, you can define as many consumers for each provider as you need, but each must have a unique name
hasPactWith('consumer1') {
// currently supports a file path using file() or a URL using url()
pactSource = file('path/to/provider1-consumer1-pact.json')
}
// Or if you have many pact files in a directory
hasPactsWith('manyConsumers') {
// Will define a consumer for each pact file in the directory.
// Consumer name is read from contents of pact file
pactFileLocation = file('path/to/pacts')
}
}
}
}
```
### 3. Execute `gradle pactVerify`
## Specifying the provider hostname at runtime
If you need to calculate the provider hostname at runtime, you can give a Closure as the provider `host`.
```groovy
pact {
serviceProviders {
provider1 {
host = { lookupHostName() }
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
_Since version 3.3.2+/2.4.17+_ you can also give a Closure as the provider `port`.
## Specifying the pact file or URL at runtime [versions 3.2.7/2.4.9+]
If you need to calculate the pact file or URL at runtime, you can give a Closure as the provider `pactFile`.
```groovy
pact {
serviceProviders {
provider1 {
host = 'localhost'
hasPactWith('consumer1') {
pactFile = { lookupPactFile() }
}
}
}
}
```
## Starting and shutting down your provider
If you need to start-up or shutdown your provider, define Gradle tasks for each action and set
`startProviderTask` and `terminateProviderTask` properties of each provider.
You could use the jetty tasks here if you provider is built as a WAR file.
```groovy
// This will be called before the provider task
task('startTheApp') {
doLast {
// start up your provider here
}
}
// This will be called after the provider task
task('killTheApp') {
doLast {
// kill your provider here
}
}
pact {
serviceProviders {
provider1 {
startProviderTask = startTheApp
terminateProviderTask = killTheApp
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
Following typical Gradle behaviour, you can set the provider task properties to the actual tasks, or to the task names
as a string (for the case when they haven't been defined yet).
## Preventing the chaining of provider verify task to `pactVerify` [version 3.4.1+]
Normally a gradle task named `pactVerify_${provider.name}` is created and added as a task dependency for `pactVerify`. You
can disable this dependency on a provider by setting `isDependencyForPactVerify` to `false` (defaults to `true`).
```groovy
pact {
serviceProviders {
provider1 {
isDependencyForPactVerify = false
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
To run this task, you would then have to explicitly name it as in ```gradle pactVerify_provider1```, a normal ```gradle pactVerify```
would skip it. This can be useful when you want to define two providers, one with `startProviderTask`/`terminateProviderTask`
and as second without, so you can manually start your provider (to debug it from your IDE, for example) but still want a `pactVerify`
to run normally from your CI build.
## Enabling insecure SSL [version 2.2.8+]
For providers that are running on SSL with self-signed certificates, you need to enable insecure SSL mode by setting
`insecure = true` on the provider.
```groovy
pact {
serviceProviders {
provider1 {
insecure = true // allow SSL with a self-signed cert
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
## Specifying a custom trust store [version 2.2.8+]
For environments that are running their own certificate chains:
```groovy
pact {
serviceProviders {
provider1 {
trustStore = new File('relative/path/to/trustStore.jks')
trustStorePassword = 'changeit'
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
`trustStore` is either relative to the current working (build) directory. `trustStorePassword` defaults to `changeit`.
NOTE: The hostname will still be verified against the certificate.
## Modifying the HTTP Client Used [version 2.2.4+]
The default HTTP client is used for all requests to providers (created with a call to `HttpClients.createDefault()`).
This can be changed by specifying a closure assigned to createClient on the provider that returns a CloseableHttpClient. For example:
```groovy
pact {
serviceProviders {
provider1 {
createClient = { provider ->
// This will enable the client to accept self-signed certificates
HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier())
.setSslcontext(new SSLContextBuilder().loadTrustMaterial(null, { x509Certificates, s -> true })
.build())
.build()
}
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
## Modifying the requests before they are sent
**NOTE on breaking change: Version 2.1.8+ uses Apache HttpClient instead of HttpBuilder so the closure will receive a
HttpRequest object instead of a request Map.**
Sometimes you may need to add things to the requests that can't be persisted in a pact file. Examples of these would
be authentication tokens, which have a small life span. The Pact Gradle plugin provides a request filter that can be
set to a closure on the provider that will be called before the request is made. This closure will receive the HttpRequest
prior to it being executed.
```groovy
pact {
serviceProviders {
provider1 {
requestFilter = { req ->
// Add an authorization header to each request
req.addHeader('Authorization', 'OAUTH eyJhbGciOiJSUzI1NiIsImN0eSI6ImFw...')
}
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
__*Important Note:*__ You should only use this feature for things that can not be persisted in the pact file. By modifying
the request, you are potentially modifying the contract from the consumer tests!
## Turning off URL decoding of the paths in the pact file [version 3.3.3+]
By default the paths loaded from the pact file will be decoded before the request is sent to the provider. To turn this
behaviour off, set the system property `pact.verifier.disableUrlPathDecoding` to `true`.
__*Important Note:*__ If you turn off the url path decoding, you need to ensure that the paths in the pact files are
correctly encoded. The verifier will not be able to make a request with an invalid encoded path.
## Project Properties
The following project properties can be specified with `-Pproperty=value` on the command line:
|Property|Description|
|--------|-----------|
|pact.showStacktrace|This turns on stacktrace printing for each request. It can help with diagnosing network errors|
|pact.showFullDiff|This turns on displaying the full diff of the expected versus actual bodies [version 3.3.6+]|
|pact.filter.consumers|Comma seperated list of consumer names to verify|
|pact.filter.description|Only verify interactions whose description match the provided regular expression|
|pact.filter.providerState|Only verify interactions whose provider state match the provided regular expression. An empty string matches interactions that have no state|
|pact.verifier.publishResults|Publishing of verification results will be skipped unless this property is set to 'true'|
|pact.matching.wildcard|Enables matching of map values ignoring the keys when this property is set to 'true'|
|pact.verifier.disableUrlPathDecoding|Disables decoding of request paths|
|pact.pactbroker.httpclient.usePreemptiveAuthentication|Enables preemptive authentication with the pact broker when set to `true`|
## Provider States
For a description of what provider states are, see the pact documentations: http://docs.pact.io/documentation/provider_states.html
### Using a state change URL
For each provider you can specify a state change URL to use to switch the state of the provider. This URL will
receive the providerState description and all the parameters from the pact file before each interaction via a POST.
As for normal requests, a request filter (`stateChangeRequestFilter`) can also be set to manipulate the request before it is sent.
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
stateChangeUrl = url('http://localhost:8001/tasks/pactStateChange')
stateChangeUsesBody = false // defaults to true
stateChangeRequestFilter = { req ->
// Add an authorization header to each request
req.addHeader('Authorization', 'OAUTH eyJhbGciOiJSUzI1NiIsImN0eSI6ImFw...')
}
}
// or
hasPactsWith('consumers') {
pactFileLocation = file('path/to/pacts')
stateChangeUrl = url('http://localhost:8001/tasks/pactStateChange')
stateChangeUsesBody = false // defaults to true
}
}
}
}
```
If the `stateChangeUsesBody` is not specified, or is set to true, then the provider state description and parameters
will be sent as JSON in the body of the request :
```json
{ "state" : "a provider state description", "params": { "a": "1", "b": "2" } }
```
If it is set to false, they will be passed as query parameters.
#### Teardown calls for state changes [version 3.2.5/2.4.7+]
You can enable teardown state change calls by setting the property `stateChangeTeardown = true` on the provider. This
will add an `action` parameter to the state change call. The setup call before the test will receive `action=setup`, and
then a teardown call will be made afterwards to the state change URL with `action=teardown`.
### Using a Closure [version 2.2.2+]
You can set a closure to be called before each verification with a defined provider state. The closure will be
called with the state description and parameters from the pact file.
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
// Load a fixture file based on the provider state and then setup some database
// data. Does not require a state change request so returns false
stateChange = { providerState ->
// providerState is an instance of ProviderState
def fixture = loadFixtuerForProviderState(providerState)
setupDatabase(fixture)
}
}
}
}
}
```
#### Teardown calls for state changes [version 3.2.5/2.4.7+]
You can enable teardown state change calls by setting the property `stateChangeTeardown = true` on the provider. This
will add an `action` parameter to the state change closure call. The setup call before the test will receive `setup`,
as the second parameter, and then a teardown call will be made afterwards with `teardown` as the second parameter.
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
// Load a fixture file based on the provider state and then setup some database
// data. Does not require a state change request so returns false
stateChange = { providerState, action ->
if (action == 'setup') {
def fixture = loadFixtuerForProviderState(providerState)
setupDatabase(fixture)
} else {
cleanupDatabase()
}
false
}
}
}
}
}
```
#### Returning values that can be injected (3.6.11+)
You can have values from the provider state callbacks be injected into most places (paths, query parameters, headers,
bodies, etc.). This works by using the V3 spec generators with provider state callbacks that return values. One example
of where this would be useful is API calls that require an ID which would be auto-generated by the database on the
provider side, so there is no way to know what the ID would be beforehand.
There are methods on the consumer DSLs that can provider an expression that contains variables (like '/api/user/${id}'
for the path). The provider state callback can then return a map for values, and the `id` attribute from the map will
be expanded in the expression. For URL callbacks, the values need to be returned as JSON in the response body.
## Filtering the interactions that are verified
You can filter the interactions that are run using three project properties: `pact.filter.consumers`, `pact.filter.description` and `pact.filter.providerState`.
Adding `-Ppact.filter.consumers=consumer1,consumer2` to the command line will only run the pact files for those
consumers (consumer1 and consumer2). Adding `-Ppact.filter.description=a request for payment.*` will only run those interactions
whose descriptions start with 'a request for payment'. `-Ppact.filter.providerState=.*payment` will match any interaction that
has a provider state that ends with payment, and `-Ppact.filter.providerState=` will match any interaction that does not have a
provider state.
## Verifying pact files from a pact broker [version 3.1.1+/2.3.1+]
You can setup your build to validate against the pacts stored in a pact broker. The pact gradle plugin will query
the pact broker for all consumers that have a pact with the provider based on its name.
For example:
```groovy
pact {
serviceProviders {
provider1 {
// You can get the latest pacts from the broker
hasPactsFromPactBroker('http://pact-broker:5000/')
// And/or you can get the latest pact with a specific tag
hasPactsFromPactBrokerWithTag('http://pact-broker:5000/',"tagname")
}
}
}
```
This will verify all pacts found in the pact broker where the provider name is 'provider1'. If you need to set any
values on the consumers from the pact broker, you can add a Closure to configure them.
```groovy
pact {
serviceProviders {
provider1 {
hasPactsFromPactBroker('http://pact-broker:5000/') { consumer ->
stateChange = { providerState -> /* state change code here */ true }
}
}
}
}
```
**NOTE: Currently the pacts are fetched from the broker during the configuration phase of the build. This means that
if the broker is not available, you will not be able to run any Gradle tasks.** This should be fixed in a forth coming
release.
In the mean time, to only load the pacts when running the validate task, you can do something like:
```groovy
pact {
serviceProviders {
provider1 {
// Only load the pacts from the broker if the start tasks from the command line include pactVerify
if ('pactVerify' in gradle.startParameter.taskNames) {
hasPactsFromPactBroker('http://pact-broker:5000/') { consumer ->
stateChange = { providerState -> /* state change code here */ true }
}
}
}
}
}
```
### Using an authenticated Pact Broker
You can add the authentication details for the Pact Broker like so:
```groovy
pact {
serviceProviders {
provider1 {
hasPactsFromPactBroker('http://pact-broker:5000/', authentication: ['Basic', pactBrokerUser, pactBrokerPassword])
}
}
}
```
`pactBrokerUser` and `pactBrokerPassword` can be defined in the gradle properties.
Or with a bearer token:
```groovy
pact {
serviceProviders {
provider1 {
hasPactsFromPactBroker('http://pact-broker:5000/', authentication: ['Bearer', pactBrokerToken])
}
}
}
```
Preemptive Authentication can be enabled by setting the `pact.pactbroker.httpclient.usePreemptiveAuthentication` Java
system property to `true`.
## Verifying pact files from a S3 bucket [version 3.3.2+/2.4.17+]
Pact files stored in an S3 bucket can be verified by using an S3 URL to the pact file. I.e.,
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = 's3://bucketname/path/to/provider1-consumer1-pact.json'
}
}
}
}
```
**NOTE:** you can't use the `url` function with S3 URLs, as the URL and URI classes from the Java SDK
don't support URLs with the s3 scheme.
# Publishing pact files to a pact broker [version 2.2.7+]
The pact gradle plugin provides a `pactPublish` task that can publish all pact files in a directory
to a pact broker. To use it, you need to add a publish configuration to the pact configuration that defines the
directory where the pact files are and the URL to the pact broker.
For example:
```groovy
pact {
publish {
pactDirectory = '/pact/dir' // defaults to $buildDir/pacts
pactBrokerUrl = 'http://pactbroker:1234'
}
}
```
You can set any tags that the pacts should be published with by setting the `tags` property. A common use of this
is setting the tag to the current source control branch. This supports using pact with feature branches.
```groovy
pact {
publish {
pactDirectory = '/pact/dir' // defaults to $buildDir/pacts
pactBrokerUrl = 'http://pactbroker:1234'
tags = [project.pactBrokerTag]
}
}
```
_NOTE:_ The pact broker requires a version for all published pacts. The `pactPublish` task will use the version of the
gradle project by default. Make sure you have set one otherwise the broker will reject the pact files.
_Version 3.2.2/2.4.3+_ you can override the version in the publish block.
## Publishing to an authenticated pact broker
To publish to a broker protected by basic auth, include the username/password in the `pactBrokerUrl`.
For example:
```groovy
pact {
publish {
pactBrokerUrl = 'https://username:[email protected]'
}
}
```
### [version 3.3.9+]
You can add the username and password as properties since version 3.3.9+
```groovy
pact {
publish {
pactBrokerUrl = 'https://mypactbroker.com'
pactBrokerUsername = 'username'
pactBrokerPassword = 'password'
}
}
```
or with a bearer token
```groovy
pact {
publish {
pactBrokerUrl = 'https://mypactbroker.com'
pactBrokerToken = 'token'
}
}
```
## Excluding pacts from being published [version 3.5.19+]
You can exclude some of the pact files from being published by providing a list of regular expressions that match
against the base names of the pact files.
For example:
```groovy
pact {
publish {
pactBrokerUrl = 'https://mypactbroker.com'
excludes = [ '.*\\-\\d+$' ] // exclude all pact files that end with a dash followed by a number in the name
}
}
```
# Verifying a message provider [version 2.2.12+]
The Gradle plugin has been updated to allow invoking test methods that can return the message contents from a message
producer. To use it, set the way to invoke the verification to `ANNOTATED_METHOD`. This will allow the pact verification
task to scan for test methods that return the message contents.
Add something like the following to your gradle build file:
```groovy
pact {
serviceProviders {
messageProvider {
verificationType = 'ANNOTATED_METHOD'
packagesToScan = ['au.com.example.messageprovider.*'] // This is optional, but leaving it out will result in the entire
// test classpath being scanned
hasPactWith('messageConsumer') {
pactFile = url('url/to/messagepact.json')
}
}
}
}
```
Now when the `pactVerify` task is run, will look for methods annotated with `@PactVerifyProvider` in the test classpath
that have a matching description to what is in the pact file.
```groovy
class ConfirmationKafkaMessageBuilderTest {
@PactVerifyProvider('an order confirmation message')
String verifyMessageForOrder() {
Order order = new Order()
order.setId(10000004)
order.setExchange('ASX')
order.setSecurityCode('CBA')
order.setPrice(BigDecimal.TEN)
order.setUnits(15)
order.setGst(new BigDecimal('15.0'))
order.setFees(BigDecimal.TEN)
def message = new ConfirmationKafkaMessageBuilder()
.withOrder(order)
.build()
JsonOutput.toJson(message)
}
}
```
It will then validate that the returned contents matches the contents for the message in the pact file.
## Publishing to the Gradle Community Portal
To publish the plugin to the community portal:
$ ./gradlew :pact-jvm-provider-gradle_2.11:publishPlugins
# Verification Reports [versions 3.2.7/2.4.9+]
The default behaviour is to display the verification being done to the console, and pass or fail the build via the normal
Gradle mechanism. From versions 3.2.7/2.4.9+, additional reports can be generated from the verification.
## Enabling additional reports
The verification reports can be controlled by adding a reports section to the pact configuration in the gradle build file.
For example:
```groovy
pact {
reports {
defaultReports() // adds the standard console output
markdown // report in markdown format
json // report in json format
}
}
```
Any report files will be written to "build/reports/pact".
## Additional Reports
The following report types are available in addition to console output (which is enabled by default):
`markdown`, `json`.
# Publishing verification results to a Pact Broker [version 3.5.4+]
For pacts that are loaded from a Pact Broker, the results of running the verification can be published back to the
broker against the URL for the pact. You will be able to see the result on the Pact Broker home screen.
To turn on the verification publishing, set the project property `pact.verifier.publishResults` to `true` [version 3.5.18+].
Group: au.com.dius Artifact: pact-jvm-provider-gradle_2.12
Show all versions Show documentation Show source
Show all versions Show documentation Show source
1 downloads
Artifact pact-jvm-provider-gradle_2.12
Group au.com.dius
Version 3.6.15
Last update 29. April 2020
Organization not specified
URL https://github.com/DiUS/pact-jvm
License Apache 2
Dependencies amount 2
Dependencies pact-jvm-provider_2.12, jansi,
There are maybe transitive dependencies!
Group au.com.dius
Version 3.6.15
Last update 29. April 2020
Organization not specified
URL https://github.com/DiUS/pact-jvm
License Apache 2
Dependencies amount 2
Dependencies pact-jvm-provider_2.12, jansi,
There are maybe transitive dependencies!
pact-jvm-provider-gradle from group au.com.dius (version 4.0.10)
pact-jvm-provider-gradle
========================
Gradle plugin for verifying pacts against a provider.
The Gradle plugin creates a task `pactVerify` to your build which will verify all configured pacts against your provider.
__*Important Note: Any properties that need to be set when using the Gradle plugin need to be provided with `-P` and
not `-D` as with the other Pact-JVM modules!*__
## To Use It
### For Gradle versions prior to 2.1
#### 1.1. Add the pact-jvm-provider-gradle jar file to your build script class path:
```groovy
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'au.com.dius:pact-jvm-provider-gradle:4.0.0'
}
}
```
#### 1.2. Apply the pact plugin
```groovy
apply plugin: 'au.com.dius.pact'
```
### For Gradle versions 2.1+
```groovy
plugins {
id "au.com.dius.pact" version "4.0.0"
}
```
### 2. Define the pacts between your consumers and providers
```groovy
pact {
serviceProviders {
// You can define as many as you need, but each must have a unique name
provider1 {
// All the provider properties are optional, and have sensible defaults (shown below)
protocol = 'http'
host = 'localhost'
port = 8080
path = '/'
// Again, you can define as many consumers for each provider as you need, but each must have a unique name
hasPactWith('consumer1') {
// currently supports a file path using file() or a URL using url()
pactSource = file('path/to/provider1-consumer1-pact.json')
}
// Or if you have many pact files in a directory
hasPactsWith('manyConsumers') {
// Will define a consumer for each pact file in the directory.
// Consumer name is read from contents of pact file
pactFileLocation = file('path/to/pacts')
}
}
}
}
```
### 3. Execute `gradle pactVerify`
## Specifying the provider hostname at runtime
If you need to calculate the provider hostname at runtime, you can give a Closure as the provider `host`.
```groovy
pact {
serviceProviders {
provider1 {
host = { lookupHostName() }
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
You can also give a Closure as the provider `port`.
## Specifying the pact file or URL at runtime
If you need to calculate the pact file or URL at runtime, you can give a Closure as the provider `pactFile`.
```groovy
pact {
serviceProviders {
provider1 {
host = 'localhost'
hasPactWith('consumer1') {
pactFile = { lookupPactFile() }
}
}
}
}
```
## Starting and shutting down your provider
If you need to start-up or shutdown your provider, define Gradle tasks for each action and set
`startProviderTask` and `terminateProviderTask` properties of each provider.
You could use the jetty tasks here if you provider is built as a WAR file.
```groovy
// This will be called before the provider task
task('startTheApp') {
doLast {
// start up your provider here
}
}
// This will be called after the provider task
task('killTheApp') {
doLast {
// kill your provider here
}
}
pact {
serviceProviders {
provider1 {
startProviderTask = startTheApp
terminateProviderTask = killTheApp
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
Following typical Gradle behaviour, you can set the provider task properties to the actual tasks, or to the task names
as a string (for the case when they haven't been defined yet).
## Preventing the chaining of provider verify task to `pactVerify`
Normally a gradle task named `pactVerify_${provider.name}` is created and added as a task dependency for `pactVerify`. You
can disable this dependency on a provider by setting `isDependencyForPactVerify` to `false` (defaults to `true`).
```groovy
pact {
serviceProviders {
provider1 {
isDependencyForPactVerify = false
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
To run this task, you would then have to explicitly name it as in ```gradle pactVerify_provider1```, a normal ```gradle pactVerify```
would skip it. This can be useful when you want to define two providers, one with `startProviderTask`/`terminateProviderTask`
and as second without, so you can manually start your provider (to debug it from your IDE, for example) but still want a `pactVerify`
to run normally from your CI build.
## Enabling insecure SSL
For providers that are running on SSL with self-signed certificates, you need to enable insecure SSL mode by setting
`insecure = true` on the provider.
```groovy
pact {
serviceProviders {
provider1 {
insecure = true // allow SSL with a self-signed cert
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
## Specifying a custom trust store
For environments that are running their own certificate chains:
```groovy
pact {
serviceProviders {
provider1 {
trustStore = new File('relative/path/to/trustStore.jks')
trustStorePassword = 'changeit'
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
`trustStore` is either relative to the current working (build) directory. `trustStorePassword` defaults to `changeit`.
NOTE: The hostname will still be verified against the certificate.
## Modifying the HTTP Client Used
The default HTTP client is used for all requests to providers (created with a call to `HttpClients.createDefault()`).
This can be changed by specifying a closure assigned to createClient on the provider that returns a CloseableHttpClient. For example:
```groovy
pact {
serviceProviders {
provider1 {
createClient = { provider ->
// This will enable the client to accept self-signed certificates
HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier())
.setSslcontext(new SSLContextBuilder().loadTrustMaterial(null, { x509Certificates, s -> true })
.build())
.build()
}
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
## Modifying the requests before they are sent
Sometimes you may need to add things to the requests that can't be persisted in a pact file. Examples of these would
be authentication tokens, which have a small life span. The Pact Gradle plugin provides a request filter that can be
set to a closure on the provider that will be called before the request is made. This closure will receive the HttpRequest
prior to it being executed.
```groovy
pact {
serviceProviders {
provider1 {
requestFilter = { req ->
// Add an authorization header to each request
req.addHeader('Authorization', 'OAUTH eyJhbGciOiJSUzI1NiIsImN0eSI6ImFw...')
}
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
__*Important Note:*__ You should only use this feature for things that can not be persisted in the pact file. By modifying
the request, you are potentially modifying the contract from the consumer tests!
## Turning off URL decoding of the paths in the pact file
By default the paths loaded from the pact file will be decoded before the request is sent to the provider. To turn this
behaviour off, set the property `pact.verifier.disableUrlPathDecoding` to `true`.
__*Important Note:*__ If you turn off the url path decoding, you need to ensure that the paths in the pact files are
correctly encoded. The verifier will not be able to make a request with an invalid encoded path.
## Project Properties
The following project properties can be specified with `-Pproperty=value` on the command line:
|Property|Description|
|--------|-----------|
|`pact.showStacktrace`|This turns on stacktrace printing for each request. It can help with diagnosing network errors|
|`pact.showFullDiff`|This turns on displaying the full diff of the expected versus actual bodies|
|`pact.filter.consumers`|Comma seperated list of consumer names to verify|
|`pact.filter.description`|Only verify interactions whose description match the provided regular expression|
|`pact.filter.providerState`|Only verify interactions whose provider state match the provided regular expression. An empty string matches interactions that have no state|
|`pact.filter.pacturl`|This filter allows just the just the changed pact specified in a webhook to be run. It should be used in conjunction with `pact.filter.consumers` |
|`pact.verifier.publishResults`|Publishing of verification results will be skipped unless this property is set to 'true'|
|`pact.matching.wildcard`|Enables matching of map values ignoring the keys when this property is set to 'true'|
|`pact.verifier.disableUrlPathDecoding`|Disables decoding of request paths|
|`pact.pactbroker.httpclient.usePreemptiveAuthentication`|Enables preemptive authentication with the pact broker when set to `true`|
|`pact.provider.tag`|Sets the provider tag to push before publishing verification results|
## Provider States
For a description of what provider states are, see the pact documentations: http://docs.pact.io/documentation/provider_states.html
### Using a state change URL
For each provider you can specify a state change URL to use to switch the state of the provider. This URL will
receive the providerState description and all the parameters from the pact file before each interaction via a POST.
As for normal requests, a request filter (`stateChangeRequestFilter`) can also be set to manipulate the request before it is sent.
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
stateChangeUrl = url('http://localhost:8001/tasks/pactStateChange')
stateChangeUsesBody = false // defaults to true
stateChangeRequestFilter = { req ->
// Add an authorization header to each request
req.addHeader('Authorization', 'OAUTH eyJhbGciOiJSUzI1NiIsImN0eSI6ImFw...')
}
}
// or
hasPactsWith('consumers') {
pactFileLocation = file('path/to/pacts')
stateChangeUrl = url('http://localhost:8001/tasks/pactStateChange')
stateChangeUsesBody = false // defaults to true
}
}
}
}
```
If the `stateChangeUsesBody` is not specified, or is set to true, then the provider state description and parameters
will be sent as JSON in the body of the request :
```json
{ "state" : "a provider state description", "params": { "a": "1", "b": "2" } }
```
If it is set to false, they will be passed as query parameters.
#### Teardown calls for state changes
You can enable teardown state change calls by setting the property `stateChangeTeardown = true` on the provider. This
will add an `action` parameter to the state change call. The setup call before the test will receive `action=setup`, and
then a teardown call will be made afterwards to the state change URL with `action=teardown`.
### Using a Closure
You can set a closure to be called before each verification with a defined provider state. The closure will be
called with the state description and parameters from the pact file.
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
// Load a fixture file based on the provider state and then setup some database
// data. Does not require a state change request so returns false
stateChange = { providerState ->
// providerState is an instance of ProviderState
def fixture = loadFixtuerForProviderState(providerState)
setupDatabase(fixture)
}
}
}
}
}
```
#### Teardown calls for state changes
You can enable teardown state change calls by setting the property `stateChangeTeardown = true` on the provider. This
will add an `action` parameter to the state change closure call. The setup call before the test will receive `setup`,
as the second parameter, and then a teardown call will be made afterwards with `teardown` as the second parameter.
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
// Load a fixture file based on the provider state and then setup some database
// data. Does not require a state change request so returns false
stateChange = { providerState, action ->
if (action == 'setup') {
def fixture = loadFixtuerForProviderState(providerState)
setupDatabase(fixture)
} else {
cleanupDatabase()
}
false
}
}
}
}
}
```
#### Returning values that can be injected
You can have values from the provider state callbacks be injected into most places (paths, query parameters, headers,
bodies, etc.). This works by using the V3 spec generators with provider state callbacks that return values. One example
of where this would be useful is API calls that require an ID which would be auto-generated by the database on the
provider side, so there is no way to know what the ID would be beforehand.
There are methods on the consumer DSLs that can provider an expression that contains variables (like '/api/user/${id}'
for the path). The provider state callback can then return a map for values, and the `id` attribute from the map will
be expanded in the expression. For URL callbacks, the values need to be returned as JSON in the response body.
## Filtering the interactions that are verified
You can filter the interactions that are run using three project properties: `pact.filter.consumers`, `pact.filter.description` and `pact.filter.providerState`.
Adding `-Ppact.filter.consumers=consumer1,consumer2` to the command line will only run the pact files for those
consumers (consumer1 and consumer2). Adding `-Ppact.filter.description=a request for payment.*` will only run those interactions
whose descriptions start with 'a request for payment'. `-Ppact.filter.providerState=.*payment` will match any interaction that
has a provider state that ends with payment, and `-Ppact.filter.providerState=` will match any interaction that does not have a
provider state.
## Verifying pact files from a pact broker
You can setup your build to validate against the pacts stored in a pact broker. The pact gradle plugin will query
the pact broker for all consumers that have a pact with the provider based on its name.
For example:
```groovy
pact {
serviceProviders {
provider1 {
// You can get the latest pacts from the broker
hasPactsFromPactBroker('http://pact-broker:5000/')
// And/or you can get the latest pact with a specific tag
hasPactsFromPactBrokerWithTag('http://pact-broker:5000/',"tagname")
}
}
}
```
This will verify all pacts found in the pact broker where the provider name is 'provider1'. If you need to set any
values on the consumers from the pact broker, you can add a Closure to configure them.
```groovy
pact {
serviceProviders {
provider1 {
hasPactsFromPactBroker('http://pact-broker:5000/') { consumer ->
stateChange = { providerState -> /* state change code here */ true }
}
}
}
}
```
**NOTE: Currently the pacts are fetched from the broker during the configuration phase of the build. This means that
if the broker is not available, you will not be able to run any Gradle tasks.** This should be fixed in a forth coming
release.
In the mean time, to only load the pacts when running the validate task, you can do something like:
```groovy
pact {
serviceProviders {
provider1 {
// Only load the pacts from the broker if the start tasks from the command line include pactVerify
if ('pactVerify' in gradle.startParameter.taskNames) {
hasPactsFromPactBroker('http://pact-broker:5000/') { consumer ->
stateChange = { providerState -> /* state change code here */ true }
}
}
}
}
}
```
### Using an authenticated Pact Broker
You can add the authentication details for the Pact Broker like so:
```groovy
pact {
serviceProviders {
provider1 {
hasPactsFromPactBroker('http://pact-broker:5000/', authentication: ['Basic', pactBrokerUser, pactBrokerPassword])
}
}
}
```
`pactBrokerUser` and `pactBrokerPassword` can be defined in the gradle properties.
Or with a bearer token:
```groovy
pact {
serviceProviders {
provider1 {
hasPactsFromPactBroker('http://pact-broker:5000/', authentication: ['Bearer', pactBrokerToken])
}
}
}
```
Preemptive Authentication can be enabled by setting the `pact.pactbroker.httpclient.usePreemptiveAuthentication` property to `true`.
### Allowing just the changed pact specified in a webhook to be verified [4.0.6+]
When a consumer publishes a new version of a pact file, the Pact broker can fire off a webhook with the URL of the changed
pact file. To allow only the changed pact file to be verified, you can override the URL by using the `pact.filter.consumers`
and `pact.filter.pacturl` project properties.
For example, running:
```console
gradle pactVerify -Ppact.filter.consumers='Foo Web Client' -Ppact.filter.pacturl=https://test.pact.dius.com.au/pacts/provider/Activity%20Service/consumer/Foo%20Web%20Client/version/1.0.1
```
will only run the verification for Foo Web Client with the given pact file URL.
## Verifying pact files from a S3 bucket
**NOTE:** You will need to add the Amazon S3 SDK jar file to your project.
Pact files stored in an S3 bucket can be verified by using an S3 URL to the pact file. I.e.,
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = 's3://bucketname/path/to/provider1-consumer1-pact.json'
}
}
}
}
```
**NOTE:** you can't use the `url` function with S3 URLs, as the URL and URI classes from the Java SDK
don't support URLs with the s3 scheme.
# Publishing pact files to a pact broker
The pact gradle plugin provides a `pactPublish` task that can publish all pact files in a directory
to a pact broker. To use it, you need to add a publish configuration to the pact configuration that defines the
directory where the pact files are and the URL to the pact broker.
For example:
```groovy
pact {
publish {
pactDirectory = '/pact/dir' // defaults to $buildDir/pacts
pactBrokerUrl = 'http://pactbroker:1234'
}
}
```
You can set any tags that the pacts should be published with by setting the `tags` property. A common use of this
is setting the tag to the current source control branch. This supports using pact with feature branches.
```groovy
pact {
publish {
pactDirectory = '/pact/dir' // defaults to $buildDir/pacts
pactBrokerUrl = 'http://pactbroker:1234'
tags = [project.pactBrokerTag]
}
}
```
_NOTE:_ The pact broker requires a version for all published pacts. The `pactPublish` task will use the version of the
gradle project by default. You can override this with the `providerVersion` property. Make sure you have set one
otherwise the broker will reject the pact files.
## Publishing to an authenticated pact broker
To publish to a broker protected by basic auth, include the username/password in the `pactBrokerUrl`.
For example:
```groovy
pact {
publish {
pactBrokerUrl = 'https://username:[email protected]'
}
}
```
You can add the username and password as properties.
```groovy
pact {
publish {
pactBrokerUrl = 'https://mypactbroker.com'
pactBrokerUsername = 'username'
pactBrokerPassword = 'password'
}
}
```
or with a bearer token
```groovy
pact {
publish {
pactBrokerUrl = 'https://mypactbroker.com'
pactBrokerToken = 'token'
}
}
```
## Excluding pacts from being published
You can exclude some of the pact files from being published by providing a list of regular expressions that match
against the base names of the pact files.
For example:
```groovy
pact {
publish {
pactBrokerUrl = 'https://mypactbroker.com'
excludes = [ '.*\\-\\d+$' ] // exclude all pact files that end with a dash followed by a number in the name
}
}
```
# Verifying a message provider
The Gradle plugin has been updated to allow invoking test methods that can return the message contents from a message
producer. To use it, set the way to invoke the verification to `ANNOTATED_METHOD`. This will allow the pact verification
task to scan for test methods that return the message contents.
Add something like the following to your gradle build file:
```groovy
pact {
serviceProviders {
messageProvider {
verificationType = 'ANNOTATED_METHOD'
packagesToScan = ['au.com.example.messageprovider.*'] // This is optional, but leaving it out will result in the entire
// test classpath being scanned
hasPactWith('messageConsumer') {
pactFile = url('url/to/messagepact.json')
}
}
}
}
```
Now when the `pactVerify` task is run, will look for methods annotated with `@PactVerifyProvider` in the test classpath
that have a matching description to what is in the pact file.
```groovy
class ConfirmationKafkaMessageBuilderTest {
@PactVerifyProvider('an order confirmation message')
String verifyMessageForOrder() {
Order order = new Order()
order.setId(10000004)
order.setExchange('ASX')
order.setSecurityCode('CBA')
order.setPrice(BigDecimal.TEN)
order.setUnits(15)
order.setGst(new BigDecimal('15.0'))
order.setFees(BigDecimal.TEN)
def message = new ConfirmationKafkaMessageBuilder()
.withOrder(order)
.build()
JsonOutput.toJson(message)
}
}
```
It will then validate that the returned contents matches the contents for the message in the pact file.
## Publishing to the Gradle Community Portal
To publish the plugin to the community portal:
$ ./gradlew :pact-jvm-provider-gradle_2.11:publishPlugins
# Verification Reports
The default behaviour is to display the verification being done to the console, and pass or fail the build via the normal
Gradle mechanism. Additional reports can be generated from the verification.
## Enabling additional reports
The verification reports can be controlled by adding a reports section to the pact configuration in the gradle build file.
For example:
```groovy
pact {
reports {
defaultReports() // adds the standard console output
markdown // report in markdown format
json // report in json format
}
}
```
Any report files will be written to "build/reports/pact".
## Additional Reports
The following report types are available in addition to console output (which is enabled by default):
`markdown`, `json`.
# Publishing verification results to a Pact Broker
For pacts that are loaded from a Pact Broker, the results of running the verification can be published back to the
broker against the URL for the pact. You will be able to see the result on the Pact Broker home screen.
To turn on the verification publishing, set the project property `pact.verifier.publishResults` to `true`.
By default, the Gradle project version will be used as the provider version. You can override this by setting the
`providerVersion` property.
```groovy
pact {
serviceProviders {
provider1 {
providerVersion = { branchName() + '-' + abbreviatedId() }
hasPactsFromPactBroker('http://pact-broker:5000/', authentication: ['Basic', pactBrokerUser, pactBrokerPassword])
}
}
}
```
## Tagging the provider before verification results are published [4.0.1+]
You can have a tag pushed against the provider version before the verification results are published. There are two ways
to do this with the Gradle plugin. You can provide a closure in a similar way to the provider version, i.e.
```groovy
pact {
serviceProviders {
provider1 {
providerVersion = { branchName() + '-' + abbreviatedId() }
providerTag = { branchName() }
hasPactsFromPactBroker('http://pact-broker:5000/', authentication: ['Basic', pactBrokerUser, pactBrokerPassword])
}
}
}
```
or you can set the `pact.provider.tag` JVM system property. For example:
```console
$ ./gradlew -d pactverify -Ppact.verifier.publishResults=true -Dpact.provider.tag=Test2
```
Group: au.com.dius Artifact: pact-jvm-provider-gradle
Show all versions Show documentation Show source
Show all versions Show documentation Show source
0 downloads
Artifact pact-jvm-provider-gradle
Group au.com.dius
Version 4.0.10
Last update 18. April 2020
Organization not specified
URL https://github.com/DiUS/pact-jvm
License Apache 2
Dependencies amount 2
Dependencies pact-jvm-provider, jansi,
There are maybe transitive dependencies!
Group au.com.dius
Version 4.0.10
Last update 18. April 2020
Organization not specified
URL https://github.com/DiUS/pact-jvm
License Apache 2
Dependencies amount 2
Dependencies pact-jvm-provider, jansi,
There are maybe transitive dependencies!
pact-jvm-provider-gradle_2.11 from group au.com.dius (version 3.5.24)
pact-jvm-provider-gradle
========================
Gradle plugin for verifying pacts against a provider.
The Gradle plugin creates a task `pactVerify` to your build which will verify all configured pacts against your provider.
## To Use It
### For Gradle versions prior to 2.1
#### 1.1. Add the pact-jvm-provider-gradle jar file to your build script class path:
```groovy
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'au.com.dius:pact-jvm-provider-gradle_2.10:3.2.11'
}
}
```
#### 1.2. Apply the pact plugin
```groovy
apply plugin: 'au.com.dius.pact'
```
### For Gradle versions 2.1+
```groovy
plugins {
id "au.com.dius.pact" version "3.2.11"
}
```
### 2. Define the pacts between your consumers and providers
```groovy
pact {
serviceProviders {
// You can define as many as you need, but each must have a unique name
provider1 {
// All the provider properties are optional, and have sensible defaults (shown below)
protocol = 'http'
host = 'localhost'
port = 8080
path = '/'
// Again, you can define as many consumers for each provider as you need, but each must have a unique name
hasPactWith('consumer1') {
// currently supports a file path using file() or a URL using url()
pactSource = file('path/to/provider1-consumer1-pact.json')
}
// Or if you have many pact files in a directory
hasPactsWith('manyConsumers') {
// Will define a consumer for each pact file in the directory.
// Consumer name is read from contents of pact file
pactFileLocation = file('path/to/pacts')
}
}
}
}
```
### 3. Execute `gradle pactVerify`
## Specifying the provider hostname at runtime
If you need to calculate the provider hostname at runtime, you can give a Closure as the provider `host`.
```groovy
pact {
serviceProviders {
provider1 {
host = { lookupHostName() }
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
_Since version 3.3.2+/2.4.17+_ you can also give a Closure as the provider `port`.
## Specifying the pact file or URL at runtime [versions 3.2.7/2.4.9+]
If you need to calculate the pact file or URL at runtime, you can give a Closure as the provider `pactFile`.
```groovy
pact {
serviceProviders {
provider1 {
host = 'localhost'
hasPactWith('consumer1') {
pactFile = { lookupPactFile() }
}
}
}
}
```
## Starting and shutting down your provider
If you need to start-up or shutdown your provider, define Gradle tasks for each action and set
`startProviderTask` and `terminateProviderTask` properties of each provider.
You could use the jetty tasks here if you provider is built as a WAR file.
```groovy
// This will be called before the provider task
task('startTheApp') {
doLast {
// start up your provider here
}
}
// This will be called after the provider task
task('killTheApp') {
doLast {
// kill your provider here
}
}
pact {
serviceProviders {
provider1 {
startProviderTask = startTheApp
terminateProviderTask = killTheApp
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
Following typical Gradle behaviour, you can set the provider task properties to the actual tasks, or to the task names
as a string (for the case when they haven't been defined yet).
## Preventing the chaining of provider verify task to `pactVerify` [version 3.4.1+]
Normally a gradle task named `pactVerify_${provider.name}` is created and added as a task dependency for `pactVerify`. You
can disable this dependency on a provider by setting `isDependencyForPactVerify` to `false` (defaults to `true`).
```groovy
pact {
serviceProviders {
provider1 {
isDependencyForPactVerify = false
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
To run this task, you would then have to explicitly name it as in ```gradle pactVerify_provider1```, a normal ```gradle pactVerify```
would skip it. This can be useful when you want to define two providers, one with `startProviderTask`/`terminateProviderTask`
and as second without, so you can manually start your provider (to debug it from your IDE, for example) but still want a `pactVerify`
to run normally from your CI build.
## Enabling insecure SSL [version 2.2.8+]
For providers that are running on SSL with self-signed certificates, you need to enable insecure SSL mode by setting
`insecure = true` on the provider.
```groovy
pact {
serviceProviders {
provider1 {
insecure = true // allow SSL with a self-signed cert
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
## Specifying a custom trust store [version 2.2.8+]
For environments that are running their own certificate chains:
```groovy
pact {
serviceProviders {
provider1 {
trustStore = new File('relative/path/to/trustStore.jks')
trustStorePassword = 'changeit'
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
`trustStore` is either relative to the current working (build) directory. `trustStorePassword` defaults to `changeit`.
NOTE: The hostname will still be verified against the certificate.
## Modifying the HTTP Client Used [version 2.2.4+]
The default HTTP client is used for all requests to providers (created with a call to `HttpClients.createDefault()`).
This can be changed by specifying a closure assigned to createClient on the provider that returns a CloseableHttpClient. For example:
```groovy
pact {
serviceProviders {
provider1 {
createClient = { provider ->
// This will enable the client to accept self-signed certificates
HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier())
.setSslcontext(new SSLContextBuilder().loadTrustMaterial(null, { x509Certificates, s -> true })
.build())
.build()
}
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
## Modifying the requests before they are sent
**NOTE on breaking change: Version 2.1.8+ uses Apache HttpClient instead of HttpBuilder so the closure will receive a
HttpRequest object instead of a request Map.**
Sometimes you may need to add things to the requests that can't be persisted in a pact file. Examples of these would
be authentication tokens, which have a small life span. The Pact Gradle plugin provides a request filter that can be
set to a closure on the provider that will be called before the request is made. This closure will receive the HttpRequest
prior to it being executed.
```groovy
pact {
serviceProviders {
provider1 {
requestFilter = { req ->
// Add an authorization header to each request
req.addHeader('Authorization', 'OAUTH eyJhbGciOiJSUzI1NiIsImN0eSI6ImFw...')
}
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
}
}
}
}
```
__*Important Note:*__ You should only use this feature for things that can not be persisted in the pact file. By modifying
the request, you are potentially modifying the contract from the consumer tests!
## Turning off URL decoding of the paths in the pact file [version 3.3.3+]
By default the paths loaded from the pact file will be decoded before the request is sent to the provider. To turn this
behaviour off, set the system property `pact.verifier.disableUrlPathDecoding` to `true`.
__*Important Note:*__ If you turn off the url path decoding, you need to ensure that the paths in the pact files are
correctly encoded. The verifier will not be able to make a request with an invalid encoded path.
## Project Properties
The following project properties can be specified with `-Pproperty=value` on the command line:
|Property|Description|
|--------|-----------|
|pact.showStacktrace|This turns on stacktrace printing for each request. It can help with diagnosing network errors|
|pact.showFullDiff|This turns on displaying the full diff of the expected versus actual bodies [version 3.3.6+]|
|pact.filter.consumers|Comma seperated list of consumer names to verify|
|pact.filter.description|Only verify interactions whose description match the provided regular expression|
|pact.filter.providerState|Only verify interactions whose provider state match the provided regular expression. An empty string matches interactions that have no state|
|pact.verifier.publishResults|Publishing of verification results will be skipped unless this property is set to 'true'|
|pact.matching.wildcard|Enables matching of map values ignoring the keys when this property is set to 'true'|
## Provider States
For a description of what provider states are, see the pact documentations: http://docs.pact.io/documentation/provider_states.html
### Using a state change URL
For each provider you can specify a state change URL to use to switch the state of the provider. This URL will
receive the providerState description and all the parameters from the pact file before each interaction via a POST.
As for normal requests, a request filter (`stateChangeRequestFilter`) can also be set to manipulate the request before it is sent.
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
stateChangeUrl = url('http://localhost:8001/tasks/pactStateChange')
stateChangeUsesBody = false // defaults to true
stateChangeRequestFilter = { req ->
// Add an authorization header to each request
req.addHeader('Authorization', 'OAUTH eyJhbGciOiJSUzI1NiIsImN0eSI6ImFw...')
}
}
// or
hasPactsWith('consumers') {
pactFileLocation = file('path/to/pacts')
stateChangeUrl = url('http://localhost:8001/tasks/pactStateChange')
stateChangeUsesBody = false // defaults to true
}
}
}
}
```
If the `stateChangeUsesBody` is not specified, or is set to true, then the provider state description and parameters
will be sent as JSON in the body of the request :
```json
{ "state" : "a provider state description", "params": { "a": "1", "b": "2" } }
```
If it is set to false, they will be passed as query parameters.
#### Teardown calls for state changes [version 3.2.5/2.4.7+]
You can enable teardown state change calls by setting the property `stateChangeTeardown = true` on the provider. This
will add an `action` parameter to the state change call. The setup call before the test will receive `action=setup`, and
then a teardown call will be made afterwards to the state change URL with `action=teardown`.
### Using a Closure [version 2.2.2+]
You can set a closure to be called before each verification with a defined provider state. The closure will be
called with the state description and parameters from the pact file.
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
// Load a fixture file based on the provider state and then setup some database
// data. Does not require a state change request so returns false
stateChange = { providerState ->
// providerState is an instance of ProviderState
def fixture = loadFixtuerForProviderState(providerState)
setupDatabase(fixture)
}
}
}
}
}
```
#### Teardown calls for state changes [version 3.2.5/2.4.7+]
You can enable teardown state change calls by setting the property `stateChangeTeardown = true` on the provider. This
will add an `action` parameter to the state change closure call. The setup call before the test will receive `setup`,
as the second parameter, and then a teardown call will be made afterwards with `teardown` as the second parameter.
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = file('path/to/provider1-consumer1-pact.json')
// Load a fixture file based on the provider state and then setup some database
// data. Does not require a state change request so returns false
stateChange = { providerState, action ->
if (action == 'setup') {
def fixture = loadFixtuerForProviderState(providerState)
setupDatabase(fixture)
} else {
cleanupDatabase()
}
false
}
}
}
}
}
```
## Filtering the interactions that are verified
You can filter the interactions that are run using three project properties: `pact.filter.consumers`, `pact.filter.description` and `pact.filter.providerState`.
Adding `-Ppact.filter.consumers=consumer1,consumer2` to the command line will only run the pact files for those
consumers (consumer1 and consumer2). Adding `-Ppact.filter.description=a request for payment.*` will only run those interactions
whose descriptions start with 'a request for payment'. `-Ppact.filter.providerState=.*payment` will match any interaction that
has a provider state that ends with payment, and `-Ppact.filter.providerState=` will match any interaction that does not have a
provider state.
## Verifying pact files from a pact broker [version 3.1.1+/2.3.1+]
You can setup your build to validate against the pacts stored in a pact broker. The pact gradle plugin will query
the pact broker for all consumers that have a pact with the provider based on its name.
For example:
```groovy
pact {
serviceProviders {
provider1 {
// You can get the latest pacts from the broker
hasPactsFromPactBroker('http://pact-broker:5000/')
// And/or you can get the latest pact with a specific tag
hasPactsFromPactBrokerWithTag('http://pact-broker:5000/',"tagname")
}
}
}
```
This will verify all pacts found in the pact broker where the provider name is 'provider1'. If you need to set any
values on the consumers from the pact broker, you can add a Closure to configure them.
```groovy
pact {
serviceProviders {
provider1 {
hasPactsFromPactBroker('http://pact-broker:5000/') { consumer ->
stateChange = { providerState -> /* state change code here */ true }
}
}
}
}
```
**NOTE: Currently the pacts are fetched from the broker during the configuration phase of the build. This means that
if the broker is not available, you will not be able to run any Gradle tasks.** This should be fixed in a forth coming
release.
In the mean time, to only load the pacts when running the validate task, you can do something like:
```groovy
pact {
serviceProviders {
provider1 {
// Only load the pacts from the broker if the start tasks from the command line include pactVerify
if ('pactVerify' in gradle.startParameter.taskNames) {
hasPactsFromPactBroker('http://pact-broker:5000/') { consumer ->
stateChange = { providerState -> /* state change code here */ true }
}
}
}
}
}
```
### Using an authenticated Pact Broker
You can add the authentication details for the Pact Broker like so:
```groovy
pact {
serviceProviders {
provider1 {
hasPactsFromPactBroker('http://pact-broker:5000/', authentication: ['Basic', pactBrokerUser, pactBrokerPassword])
}
}
}
```
`pactBrokerUser` and `pactBrokerPassword` can be defined in the gradle properties.
## Verifying pact files from a S3 bucket [version 3.3.2+/2.4.17+]
Pact files stored in an S3 bucket can be verified by using an S3 URL to the pact file. I.e.,
```groovy
pact {
serviceProviders {
provider1 {
hasPactWith('consumer1') {
pactFile = 's3://bucketname/path/to/provider1-consumer1-pact.json'
}
}
}
}
```
**NOTE:** you can't use the `url` function with S3 URLs, as the URL and URI classes from the Java SDK
don't support URLs with the s3 scheme.
# Publishing pact files to a pact broker [version 2.2.7+]
The pact gradle plugin provides a `pactPublish` task that can publish all pact files in a directory
to a pact broker. To use it, you need to add a publish configuration to the pact configuration that defines the
directory where the pact files are and the URL to the pact broker.
For example:
```groovy
pact {
publish {
pactDirectory = '/pact/dir' // defaults to $buildDir/pacts
pactBrokerUrl = 'http://pactbroker:1234'
}
}
```
You can set any tags that the pacts should be published with by setting the `tags` property. A common use of this
is setting the tag to the current source control branch. This supports using pact with feature branches.
```groovy
pact {
publish {
pactDirectory = '/pact/dir' // defaults to $buildDir/pacts
pactBrokerUrl = 'http://pactbroker:1234'
tags = [project.pactBrokerTag]
}
}
```
_NOTE:_ The pact broker requires a version for all published pacts. The `pactPublish` task will use the version of the
gradle project by default. Make sure you have set one otherwise the broker will reject the pact files.
_Version 3.2.2/2.4.3+_ you can override the version in the publish block.
## Publishing to an authenticated pact broker
To publish to a broker protected by basic auth, include the username/password in the `pactBrokerUrl`.
For example:
```groovy
pact {
publish {
pactBrokerUrl = 'https://username:[email protected]'
}
}
```
### [version 3.3.9+]
You can add the username and password as properties since version 3.3.9+
```groovy
pact {
publish {
pactBrokerUrl = 'https://mypactbroker.com'
pactBrokerUsername = 'username'
pactBrokerPassword = 'password'
}
}
```
## Excluding pacts from being published [version 3.5.19+]
You can exclude some of the pact files from being published by providing a list of regular expressions that match
against the base names of the pact files.
For example:
```groovy
pact {
publish {
pactBrokerUrl = 'https://mypactbroker.com'
excludes = [ '.*\\-\\d+$' ] // exclude all pact files that end with a dash followed by a number in the name
}
}
```
# Verifying a message provider [version 2.2.12+]
The Gradle plugin has been updated to allow invoking test methods that can return the message contents from a message
producer. To use it, set the way to invoke the verification to `ANNOTATED_METHOD`. This will allow the pact verification
task to scan for test methods that return the message contents.
Add something like the following to your gradle build file:
```groovy
pact {
serviceProviders {
messageProvider {
verificationType = 'ANNOTATED_METHOD'
packagesToScan = ['au.com.example.messageprovider.*'] // This is optional, but leaving it out will result in the entire
// test classpath being scanned
hasPactWith('messageConsumer') {
pactFile = url('url/to/messagepact.json')
}
}
}
}
```
Now when the `pactVerify` task is run, will look for methods annotated with `@PactVerifyProvider` in the test classpath
that have a matching description to what is in the pact file.
```groovy
class ConfirmationKafkaMessageBuilderTest {
@PactVerifyProvider('an order confirmation message')
String verifyMessageForOrder() {
Order order = new Order()
order.setId(10000004)
order.setExchange('ASX')
order.setSecurityCode('CBA')
order.setPrice(BigDecimal.TEN)
order.setUnits(15)
order.setGst(new BigDecimal('15.0'))
order.setFees(BigDecimal.TEN)
def message = new ConfirmationKafkaMessageBuilder()
.withOrder(order)
.build()
JsonOutput.toJson(message)
}
}
```
It will then validate that the returned contents matches the contents for the message in the pact file.
## Publishing to the Gradle Community Portal
To publish the plugin to the community portal:
$ ./gradlew :pact-jvm-provider-gradle_2.11:publishPlugins
# Verification Reports [versions 3.2.7/2.4.9+]
The default behaviour is to display the verification being done to the console, and pass or fail the build via the normal
Gradle mechanism. From versions 3.2.7/2.4.9+, additional reports can be generated from the verification.
## Enabling additional reports
The verification reports can be controlled by adding a reports section to the pact configuration in the gradle build file.
For example:
```groovy
pact {
reports {
defaultReports() // adds the standard console output
markdown // report in markdown format
json // report in json format
}
}
```
Any report files will be written to "build/reports/pact".
## Additional Reports
The following report types are available in addition to console output (which is enabled by default):
`markdown`, `json`.
# Publishing verification results to a Pact Broker [version 3.5.4+]
For pacts that are loaded from a Pact Broker, the results of running the verification can be published back to the
broker against the URL for the pact. You will be able to see the result on the Pact Broker home screen.
To turn on the verification publishing, set the project property `pact.verifier.publishResults` to `true` [version 3.5.18+].
Group: au.com.dius Artifact: pact-jvm-provider-gradle_2.11
Show all versions Show documentation Show source
Show all versions Show documentation Show source
1 downloads
Artifact pact-jvm-provider-gradle_2.11
Group au.com.dius
Version 3.5.24
Last update 04. November 2018
Organization not specified
URL https://github.com/DiUS/pact-jvm
License Apache 2
Dependencies amount 9
Dependencies kotlin-stdlib-jdk8, kotlin-reflect, slf4j-api, groovy-all, kotlin-logging, scala-library, scala-logging_2.11, pact-jvm-provider_2.11, jansi,
There are maybe transitive dependencies!
Group au.com.dius
Version 3.5.24
Last update 04. November 2018
Organization not specified
URL https://github.com/DiUS/pact-jvm
License Apache 2
Dependencies amount 9
Dependencies kotlin-stdlib-jdk8, kotlin-reflect, slf4j-api, groovy-all, kotlin-logging, scala-library, scala-logging_2.11, pact-jvm-provider_2.11, jansi,
There are maybe transitive dependencies!
Page 160 from 3 (items total 1601)