From 87847150bfc89b9b1823c3dfe2b37ebaeadc9ba0 Mon Sep 17 00:00:00 2001 From: supakeen <39536295+supakeen@users.noreply.github.com> Date: Sun, 5 Apr 2020 21:16:13 +0200 Subject: [PATCH] Add barebones asynchttpserver tests (#13883) * Add isNil check to custom Content-Length. Related to #13866. * Setup barebones asynchttpserver tests. --- tests/stdlib/tasynchttpserver.nim | 119 ++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 tests/stdlib/tasynchttpserver.nim diff --git a/tests/stdlib/tasynchttpserver.nim b/tests/stdlib/tasynchttpserver.nim new file mode 100644 index 0000000000000..77ad7a071a826 --- /dev/null +++ b/tests/stdlib/tasynchttpserver.nim @@ -0,0 +1,119 @@ +discard """ + cmd: "nim c --threads:on $file" + exitcode: 0 + output: "OK" + disabled: false +""" + +import strutils +from net import TimeoutError + +import httpclient, asynchttpserver, asyncdispatch, asyncfutures + +template runTest( + handler: proc (request: Request): Future[void] {.gcsafe.}, + request: proc (server: AsyncHttpServer): Future[AsyncResponse], + test: proc (response: AsyncResponse, body: string): Future[void]) = + + let server = newAsyncHttpServer() + + discard server.serve(Port(64123), handler) + + let + response = waitFor(request(server)) + body = waitFor(response.body) + + discard test(response, body) + +proc test200() {.async.} = + proc handler(request: Request) {.async.} = + await request.respond(Http200, "Hello World, 200") + + proc request(server: AsyncHttpServer): Future[AsyncResponse] {.async.} = + let + client = newAsyncHttpClient() + clientResponse = await client.request("http://localhost:64123/") + + server.close() + + return clientResponse + + proc test(response: AsyncResponse, body: string) {.async.} = + doAssert(response.status == Http200) + doAssert(body == "Hello World, 200") + doAssert(response.headers.hasKey("Content-Length")) + doAssert(response.headers["Content-Length"] == "16") + + runTest(handler, request, test) + +proc test404() {.async.} = + proc handler(request: Request) {.async.} = + await request.respond(Http404, "Hello World, 404") + + proc request(server: AsyncHttpServer): Future[AsyncResponse] {.async.} = + let + client = newAsyncHttpClient() + clientResponse = await client.request("http://localhost:64123/") + + server.close() + + return clientResponse + + proc test(response: AsyncResponse, body: string) {.async.} = + doAssert(response.status == Http404) + doAssert(body == "Hello World, 404") + doAssert(response.headers.hasKey("Content-Length")) + doAssert(response.headers["Content-Length"] == "16") + + runTest(handler, request, test) + +proc testCustomEmptyHeaders() {.async.} = + proc handler(request: Request) {.async.} = + await request.respond(Http200, "Hello World, 200", newHttpHeaders()) + + proc request(server: AsyncHttpServer): Future[AsyncResponse] {.async.} = + let + client = newAsyncHttpClient() + clientResponse = await client.request("http://localhost:64123/") + + server.close() + + return clientResponse + + proc test(response: AsyncResponse, body: string) {.async.} = + doAssert(response.status == Http200) + doAssert(body == "Hello World, 200") + doAssert(response.headers.hasKey("Content-Length")) + doAssert(response.headers["Content-Length"] == "16") + + runTest(handler, request, test) + +proc testCustomContentLength() {.async.} = + proc handler(request: Request) {.async.} = + let headers = newHttpHeaders() + headers["Content-Length"] = "0" + await request.respond(Http200, "Hello World, 200", headers) + + proc request(server: AsyncHttpServer): Future[AsyncResponse] {.async.} = + let + client = newAsyncHttpClient() + clientResponse = await client.request("http://localhost:64123/") + + server.close() + + return clientResponse + + proc test(response: AsyncResponse, body: string) {.async.} = + doAssert(response.status == Http200) + doAssert(body == "") + doAssert(response.headers.hasKey("Content-Length")) + doAssert(response.headers["Content-Length"] == "0") + + runTest(handler, request, test) + +waitfor(test200()) +waitfor(test404()) +waitfor(testCustomEmptyHeaders()) +waitfor(testCustomContentLength()) + +echo "OK"