1.3.0 • Published 3 years ago

http-testing-server v1.3.0

Weekly downloads
1
License
MIT
Repository
github
Last release
3 years ago

http-testing-server

npm NPM npm bundle size Travis (.org)

Express HTTP server meant for testing HTTP clients and how they behave in certain situations, written in typescript.

Features

  • Specify listen port
  • Request server to redirect given number of times
  • Login with cookies
  • Request server to make client wait n number of ms, useful for testing timeouts
  • Endpoint that responds with copy of request

Installation

npm install --save http-testing-server

Usage

//Typescript
import createTestServer from "http-testing-server"
//Javascript
const createTestServer = require("http-testing-server")


async function runTest(){
    const testServer = await createTestServer("localhost", 3099);

    const res = axios.get("http://localhost:3099/redirects/4");

    assert(res.code === 302);
    
    await testServer.close();
}

runTest().catch(err=>console.error(err));

Endpoints

GET /wait/:ms

Responds after $(ms) milliseconds or 1000ms default, with 200 json {waited: $(:ms)}

GET /redirects/:redirectCount

Will send 302 as many times as redirectCount with location /redirects/(redirectCount-1) while redirectCount is greater than 0

When requesting /redirects/0, the server will respond with json {ok: true}

Each request it will also send set-cookie header redirCookie=${redirCount}, to test if the client parses cookies on each redirect, so you should check if at the end redirCookie=0.

Ex: /redirects/2 will redirect to /redirects/1 which will redirect to /redirects/0

ANY_METHOD /redirects/method/:code

Will redirect to /redirects/method/mirror, using response code code if present, or 302 as a default.

Valid status codes for redirecting are 301, 302, 303, 307, 308

ANY_METHOD /redirects/method/mirror

Responds with json {method: $(METHOD_USED)} where METHOD_USED is the HTTP method used when requesting.

Useful for testing if your client uses GET when redirected from a POST/PUT/DELETE/... request.

POST /auth

Post json or x-www-form-urlencoded data to receive a cookie allowed=true. Should post username=test and password=test

Responds with 200 json {contentType: $(CONTENT TYPE USED FOR POST)} and cookie allowed=true if username and password is correct
Responds with 401 otherwise

GET /afterAuth

Responds with 200 json {ok: true} if allowed=true cookie is present
Responds with 401 text No cookie man 🍪😨 otherwise

GET /mirror

Responds with a json copy of the request, containing:

  • Headers
  • HTTP method
  • Query
  • Body

GET /mirror/:key

Returns same as mirror but only the key requested

ex: /mirror/headers will only send the headers of the request