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.userandpassword: 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.headersthe headers object. Can be used as per the Go http.Header documentation.