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.