Skip to main content

chaostoolkit driver for wiremock

Project description

chaostoolkit-wiremock

https://img.shields.io/pypi/v/chaoswm.svg https://img.shields.io/travis/grubert65/chaostoolkit-wiremock.svg Documentation Status

ChaosToolkit driver for wiremock

Installation from Pypi

You need to have a python 3.5+ interpreter:

pip install chaoswm

Installation from source

In order to use it, you need python 3.5+ in your environment

Steps:

python3 -mvenv ~/virtualenvs/chaostoolkit-wiremock
surce  ~/virtualenvs/chaostoolkit-wiremock/bin/activate
git clone git@github.com:sky-uk/chaostoolkit-wiremock.git
cd chaostoolkit-wiremock
pip install -r requirements_dev.txt
make clean && make test && make install

To run in production, first install the requirements:

pip install -r requirements.txt

Supported actions

  • add_mappings: adds a list of mappings to wiremock

  • populate_from_dir: adds all mappings found in a directory

  • delete_mappings: deletes a list of mappings

  • global_fixed_delay: adds a fixed delay to all mappings

  • global_random_delay: adds a random delay to all mappings

  • fixed_delay: adds a fixed delay to a list of mappings

  • random_delay: adds a random delay to a list of mapppings

  • chunked_dribble_delay: adds a chunked dribble delay to a list of mappings

  • down: sets a list of services down

  • up: deletes all delays connected with a list of mappings

  • reset: resets the wiremock server: deletes all mappings!

Supported probes

  • server_running: returns 1 if the configured Wiremock server can be contacted

  • mappings: returns the list of mappings found on the server

Configuration

The following keys can be configured in the experiment global configuration section, under the “wiremock” key:

  • host: the wiremock server host

  • port: the wiremock server port

  • contextPath: the contextPath for your wiremock server (optional)

  • timeout: accepted timeout (defaults to 1 sec)

  • down: the delayDistribution section used by the down action

Configuration example:

{
    "configuration": {
        "wiremock": {
            "host": "localhost",
            "port": 8080,
            "contextPath": "/wiremock",
            "timeout": 10,
            "down": {
                "type": "lognormal",
                "median": 3000,
                "sigma": 0.2
            }
        }
    }
}

Exported Actions

Note: the experiments directory contains json snippets for each of them for you to play with.

Adding a list of mappings:

{
  "method": [
    {
      "type": "action",
      "name": "adding a mapping",
      "provider": {
        "type": "python",
        "module": "chaoswm.actions",
        "func": "add_mappings",
        "arguments": {
          "mappings": [{
            "request": {
               "method": "GET",
               "url": "/hello"
            },
            "response": {
               "status": 200,
               "body": "Hello world!",
               "headers": {
                   "Content-Type": "text/plain"
               }
            }
          }]
        }
      }
    }
  ]
}

Adding all mappings found in a directory (see experiment file populate_from_dir.json):

{
  "type": "action",
  "name": "populate_from_dir",
  "provider": {
    "type": "python",
    "module": "chaoswm.actions",
    "func": "populate_from_dir",
    "arguments": {
      "dir": "experiments/mappings"
    }
  }
}

Deleting a list of mappings:

{
  "method": [
    {
      "type": "action",
      "name": "deleting a mapping",
      "provider": {
        "type": "python",
        "module": "chaoswm.actions",
        "func": "delete_mappings",
        "arguments": {
          "filter": [{
            "method": "GET",
            "url": "/some/thing"
          }]
        }
      }
    }
  ]
}

Adding a global fixed delay:

{
  "method": [
    {
      "type": "action",
      "name": "Adding a global fixed delay",
      "provider": {
        "type": "python",
        "module": "chaoswm.actions",
        "func": "global_fixed_delay"
        "arguments": {
            "fixedDelay": 10
        }
      }
    }
  ]
}

Adding a global random delay:

{
  "method": [
    {
      "type": "action",
      "name": "Adding a global random delay",
      "provider": {
        "type": "python",
        "module": "chaoswm.actions",
        "func": "global_random_delay"
        "arguments": {
          "delayDistribution": {
            "type": "lognormal",
            "median": 20,
            "sigma": 0.1
          }
        }
      }
    }
  ]
}

Adding a fixed delay to a list of mappings:

{
  "method": [
    {
      "type": "action",
      "name": "Adding a fixed delay to a mapping",
      "provider": {
        "type": "python",
        "module": "chaoswm.actions",
        "func": "fixed_delay"
        "arguments": {
          "filter": [{
            "method": "GET",
            "url": "/some/thing"
          }],
          "fixedDelayMilliseconds": 100
        }
      }
    }
  ]
}

Adding a random delay to a list of mappings:

{
  "method": [
    {
      "type": "action",
      "name": "Adding a random delay to a mapping",
      "provider": {
          "type": "python",
          "module": "chaoswm.actions",
          "func": "random_delay"
          "arguments": {
            "filter": [{
              "method": "GET",
              "url": "/some/thing",
            }],
            "delayDistribution": {
              "type": "lognormal",
              "median": 80,
              "sigma": 0.4
            }
          }
      }
    }
  ]
}

Adding a ChunkedDribbleDelay to a list of mappings:

{
  "method": [
    {
      "type": "action",
      "name": "Adding a ChunkedDribbleDelay to a mapping",
      "provider": {
        "type": "python",
        "module": "chaoswm.actions",
        "func": "chunked_dribble_delay"
        "arguments": {
          "filter": [{
            "method": "GET",
            "url": "/some/thing",
          }],
          "chunkedDribbleDelay": {
            "numberOfChunks": 5,
            "totalDuration": 1000
          }
        }
      }
    }
  ]
}

Taking a list of mappings down (heavy distribution delay) This action will use the parameters specified in the “down” key of the configuration section:

{
  "method": [
    {
      "type": "action",
      "name": "Taking a mapping down",
      "provider": {
        "type": "python",
        "module": "chaoswm.actions",
        "func": "down"
        "arguments": {
          "filter": [{
            "method": "GET",
            "url": "/some/thing",
          }]
        }
      }
    }
  ]
}

Taking a list of mappings up back again:

{
  "method": [
    {
      "type": "action",
      "name": "Taking a mapping down",
      "provider": {
        "type": "python",
        "module": "chaoswm.actions",
        "func": "up"
        "arguments": {
          "filter": [{
            "method": "GET",
            "url": "/some/thing",
          }]
        }
      }
    }
  ]
}

Resetting the wiremock server (deleting all mappings):

{
  "method": [
    {
      "type": "action",
      "name": "Taking a mapping down",
      "provider": {
          "type": "python",
          "module": "chaoswm.actions",
          "func": "reset"
      }
    }
  ]
}

Discovery

You may use the Chaos Toolkit to discover the capabilities of this extension:

$ chaos discover chaostoolkit-wiremock  --no-install

Experiments

The experiments directory contains experiments to play against a default WM server (maybe the easiest way is to start a wiremock docker container exposing default port 8080).

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

History

0.0.1 (2019-02-14)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chaoswm-0.1.8.tar.gz (19.8 kB view hashes)

Uploaded Source

Built Distribution

chaoswm-0.1.8-py2.py3-none-any.whl (9.8 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page