mse6 is designed to test the resilience of your http client. It's a mock HTTP/TLS server that responds with abnormal behaviour such as slow HTTP responses, bad content encoding, sudden crashes, network termination that are otherwise difficult to consistently reproduce under test conditions.
docker pull simonmittag/mse6 && docker run -p8081:8081 simonmittag/mse6 brew tap simonmittag/cli && brew install mse6 && mse6 go install github.com/simonmittag/mse6/cmd/mse6 && mse6λ mse6 -h Usage of mse6: -p int the http port (default 8081) -s self-signed ssl mode -t server self test -u string the path prefix (default "/mse6/") -v print the server version GET /mse6/badcontentlength Sends invalid content length header, too large for response
GET /mse6/badgzip Sends a response gzip content encoding header and garbled binary
GET /mse6/brotli Sends a response with br content encoding header and brotli encoded binary response
CONNECT /mse6/connect?body=true Sends a HTTP 200 OK response to the HTTP connect method. Has no bearing on network connection other than standard keepalive. Will send (illegal) body if body=true
GET /mse6/choose Sends a HTTP response to the client with one of the following content encodings: br, gzip, deflate or identity Content encoding preference is in above order and depends on values found in Accept-Encoding header found on request.
GET /mse6/chunked Sends a chunked HTTP/1.1 response to the client
DELETE /mse6/delete Standard json response with status code 204
GET /mse6/deflate sends a deflate encoded response
GET /mse6/echoheader echoes all request headers sent on response body for testing
GET /mse6/echoquery echoes all query string values sent with request on response body for testing
GET /mse6/echoport sends a response with the http port the server is listening on
GET /mse6/formget simulates a form GET by echoing the raw request
POST /mse6/formpost simulates a form POST by echoing the raw request. Supports both Content-Type: application/x-www-form-urlencoded and Content-Type: multipart/form-data
GET /mse6/get Standard json response with status code 200
HEAD /mse6/getorhead?cl=y GET /mse6/getorhead Sends a HTTP HEAD response or a GET response, depending on request method. If query param cl is appended with any value, the Content-Length header of the body otherwise sent by GET is also included in the HEAD response
GET /mse6/gzip Sends a gzipped response with proper content encoding
GET /mse6/hangupduringheader Sends a partial header only response, waits 2s, then closes the TCP connection.
GET /mse6/hangupafterheader Sends a complete header only response message , waits 2s, then closes the TCP connection.
GET /mse6/hangupduringbody Sends a complete header message, then some of the body, waits 2s, then closes the TCP connection.
GET /mse6/jwks sends a list of RS256 Jwks keys
GET /mse6/jwksmix sends a list of mixed algorithm Jwks keys
GET /mse6/jwkses256 sends a JWKS key of type ES256
GET /mse6/jwksbad sends illegally formatted Jwks key
GET /mse6/jwksrotate sends a rotating Jwks keys that change arbitrarily.
GET /mse6/jwksbadrotate?rc=0 sends a rotating Jwks key that alternates every request. Sends malformed keys. Stateful method, reset good behaviour with rc=0
GET /mse6/nocontentenc Sends a HTTP response without a content encoding header set
OPTIONS /mse6/options?code=n&body=true Sends a HTTP OPTIONS response as per RFC7231, section 4.3.7. Contains Allow headers and a status code. Legal status codes are 200 and 204, the rest is undefined. Will send (illegal) body if body=true
PATCH /mse6/patch Standard json response with status code 200
POST /mse6/post Standard json response with status code 201
PUT /mse6/put Standard json response with status code 200
GET /mse6/send?code=nnn&url=http%3A%2F%2Fwww.google.com Sends arbitrary response code between 100 and 999. For redirects, you can supply a custom location parameter. Don't forget to URL encode your params.
GET /mse6/slowheader?wait=n Sends headers but only after waiting for n seconds. Alternatively configure default with -w=n on cli
GET /mse6/slowbody?wait=n Sends body after initial lag of n/2s, then sends remaining body without chunking after n/2s. Alternatively configure default with -w=n on cli
TRACE /mse6/trace Standard json response with status code 200 and "message/http" content type. Sends boilerplate trace response in body, not actual request echo.
GET /mse6/tiny Tiny JSON response with content encoding identity
GET /mse6/tinygzip Tiny JSON response with content encoding gzip
GET /mse6/unknowncontentenc Sends unknown content-encoding header with json response.
GET /mse6/websocket?n=1&c=true&c1=true&c2=true Upgrade the client connection to a HTTP/1.1 websocket that echoes messages sent to it. Specify n for how often the echo should repeat. Specify c to orderly close the connection from the server side after sending all echo responses. Specify c1 to only send websocket protocol close. Specify c2 to only hang up on TCP connection, without respecting websocket protocol.
The mse6 team welcomes all contributors. Everyone interacting with the project's codebase, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct
