Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/pact-foundation/pact-stub-server

Standalone pact stub server
https://github.com/pact-foundation/pact-stub-server

smartbear-supported

Last synced: about 1 month ago
JSON representation

Standalone pact stub server

Lists

README

        

# Standalone Pact Stub Server

[![Build](https://github.com/uglyog/pact-stub-server/workflows/Build/badge.svg)](https://github.com/uglyog/pact-stub-server/actions?query=workflow%3ABuild)

This project provides a server that can generate responses based on pact files. It is a single executable binary.
It implements the [V4 Pact specification](https://github.com/pact-foundation/pact-specification/tree/version-4).

[Docker Image](https://hub.docker.com/r/pactfoundation/pact-stub-server)

[Online rust docs](https://docs.rs/crate/pact-stub-server)

The stub server works by taking all the interactions (requests and responses) from a number of pact files.
For each interaction, it will compare any incoming request against those defined in the pact files. If there is a match
(based on method, path and query parameters), it will return the response from the pact file.

**Note:** The stub server was designed to supporting prototyping of mobile applications by stubbing out the
backend servers. It will always try to return a response, even when there is not an extract match with the
pact files.

## Command line interface

The pact stub server is bundled as a single binary executable `pact-stub-server`. Running this without any options displays the standard help.

```console,ignore
$ pact-stub-server
Pact Stub Server 0.5.3

Usage: pact-stub-server [OPTIONS]

Options:
-l, --loglevel
Log level (defaults to info) [default: info] [possible values: error, warn, info, debug, trace, none]
-f, --file
Pact file to load (can be repeated)
-d, --dir
Directory of pact files to load (can be repeated)
-e, --extension
File extension to use when loading from a directory (default is json)
-u, --url
URL of pact file to fetch (can be repeated)
-b, --broker-url
URL of the pact broker to fetch pacts from [env: PACT_BROKER_BASE_URL=]
--user
User and password to use when fetching pacts from URLS or Pact Broker in user:password form
-t, --token
Bearer token to use when fetching pacts from URLS or Pact Broker
-p, --port
Port to run on (defaults to random port assigned by the OS)
-o, --cors
Automatically respond to OPTIONS requests and return default CORS headers
--cors-referer
Set the CORS Access-Control-Allow-Origin header to the Referer
--insecure-tls
Disables TLS certificate validation
-s, --provider-state
Provider state regular expression to filter the responses by
--provider-state-header-name
Name of the header parameter containing the provider state to be used in case multiple matching interactions are found
--empty-provider-state
Include empty provider states when filtering with --provider-state
--consumer-name
Consumer name or regex to use to filter the Pacts fetched from the Pact broker (can be repeated)
--provider-name
Provider name or regex to use to filter the Pacts fetched from the Pact broker (can be repeated)
-v, --version
Print version information
-h, --help
Print help

```

## Options

### Log Level

You can control the log level with the `-l, --loglevel ` option. It defaults to info, and the options that you can specify are: error, warn, info, debug, trace, none.

### CORS pre-flight requests

If you specify the `-o, --cors` option, then any un-matched OPTION request will result in a default 200 response. By default the
Access-Control-Allow-Origin header will be set to `*`. If you provide the `--cors-referer` flag, then it will be set to the
value of the Referer header from the request.

### Pact File Sources

You can specify the pacts to verify with the following options. They can be repeated to set multiple sources.

| Option | Type | Description |
|--------|------|-------------|
| `-f, --file ` | File | Loads a pact from the given file |
| `-u, --url ` | URL | Loads a pact from a URL resource |
| `-d, --dir ` | Directory | Loads all the pacts from the given directory |
| `-b, --broker-url ` | URL | Loads all the latest pacts from the Pact Broker |

*Note:* For URLs and Pact Brokers that are authenticated, you can use the `--user` option to set the username and password or the
`--token` to use a bearer token.

#### Disabling TLS certificate validation

If you need to load pact files from a HTTPS URL that is using a self-signed certificate, you can use the `--insecure-tls`
flag to disable the TLS certificate validation. WARNING: this disables all certificate validations, including expired
certificates.

### Filtering interactions by provider state

You can filter the interactions by provider state by supplying the `--provider-state` option. This takes a regular
expression that is applied to all interactions before the requests are matched.

### Filtering interactions by consumer and provider name (Pact Broker)

For Pacts fetched from a Pact broker, you can filter the Pacts by the consumer and/or provider names using:

```ignore
--consumer-names ...
Consumer names to use to filter the Pacts fetched from the Pact broker

--provider-names ...
Provider names to use to filter the Pacts fetched from the Pact broker
```

### Server Options

The running server can be controlled with the following options:

| Option | Description |
|--------|-------------|
| `-p, --port ` | The port to bind to. If not specified, a random port will be allocated by the operating system. |

## Running with docker

A docker image is published to `pactfoundation/pact-stub-server`.

Example of using it:

```console,ignore
# Create a Stub API
docker pull pactfoundation/pact-stub-server
docker run -t -p 8080:8080 -v "$(pwd)/pacts/:/app/pacts" pactfoundation/pact-stub-server -p 8080 -d pacts

# Test your stub endpoints
curl -v $(docker-machine ip $(docker-machine active)):8080/bazbat
curl -v $(docker-machine ip $(docker-machine active)):8080/foobar
```