stream is a test utility for streaming data via:
- UDP
- TCP
- TLS
- Webhook
- GCP Pub-Sub
- HTTP Mock Server
stream
can also serve logs setting up a complete HTTP mock server.
Usage:
stream http-server --addr=":8080" --config="./config.yml"
The server can be configured to serve specific log files on certain routes. The config should be defined in a yaml file of the following format:
---
rules:
- path: "/path1/test"
methods: ["GET"]
user: username
password: passwd
query_params:
p1: ["v1"]
request_headers:
accept: ["application/json"]
responses:
- headers:
x-foo: ["test"]
status_code: 200
body: |-
{"next": "http://{{ hostname }}/page/{{ sum (.req_num) 1 }}"}
- path: "/page/{pagenum:[0-9]}" params.
methods: ["POST"]
responses:
- status_code: 200
body: "{{ .request.vars.pagenum }}"
headers:
content-type: ["text/plain"]
The rules will be defined in order, and will only match if all criteria is true for a request. This means that you need to define the more restrictive rules on top.
rules
: a list of rules. More restrictive rules need to go on top.path
: the path to match. It can use gorilla/mux parameters patterns.methods
: a list of methods to match with the rule.user
andpassword
: username and password for basic auth matching.query_params
: Key-Value definitions of the query parameters to match. It can use gorilla/mux parameters patterns for the values. Web form params will also be added and compared against this for simplicity.request_headers
: Key-Value definitions of the headers to match. Any headers outside of this list will be ignored. The matches can be defined as regular expressions.request_body
: a string defining the expected body to match for the request.responses
: a list of zero or more responses to return on matches. If more than one are set, they will be returned in rolling sequence.status_code
: the status code to return.headers
: Key-Value list of the headers to return with the response. The values will be evaluated as Go templates.body
: a string defining the body that will be returned as a response. It will be evaluated as a Go template.
When using Go templates as part of the response.headers
or response.body
, some functions and data will be available:
hostname
: function that returns the hostname.env KEY
: function that returns the KEY from environment.sum A B
: function that returns the sum of numbers A and B (only for integers)..req_num
: variable containing the current request number, auto incremented after every request for the rule..request.vars
: map containing the variables received in the request (both query and form)..request.url
: the url object. Can be used as per the Go URL documentation..request.headers
the headers object. Can be used as per the Go http.Header documentation.