
mse6 is a mock HTTP/TLS server for integration tests and edge cases. It supports slow HTTP responses, bad
content encoding, sudden crashes, network termination and other abnormal
behaviour that is otherwise difficult to observe or reproduce under test conditions.


Up and running
Docker
docker pull simonmittag/mse6 &&
docker run -p8081:8081 simonmittag/mse6
Osx
brew install simonmittag/cli/mse6 &&
mse6
Golang
go get github.com/simonmittag/mse6 &&
go install github.com/simonmittag/mse6/cmd/mse6 &&
mse6
Usage
λ 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
-w int
wait time for server to respond in seconds (default 3)
Routes
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
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/die
Kills the server process without sending a 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/jwksmix
sends a list of mixed algorithm Jwks keys
GET /mse6/jwksbad
sends illegally formatted Jwks key
GET /mse6/jwksbadrotate?rc=0
sends a rotating Jwks key that alternates every request. Sends malformed keys. Reset good behaviour with rc=0
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.
OPTIONS /mse6/options?code=n
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.
POST /mse6/post
Standard json response with status code 201
PATCH /mse6/patch
Standard json response with status code 200
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
GET /mse6/tiny
Tiny JSON response with content encoding identity
GET /mse6/tinygzip
Tiny JSON response with content encoding gzip
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.
Contributions
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