mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
122 lines
3.5 KiB
Nim
122 lines
3.5 KiB
Nim
discard """
|
|
cmd: "nim c --threads:on $file"
|
|
exitcode: 0
|
|
output: "OK"
|
|
disabled: false
|
|
"""
|
|
|
|
import strutils
|
|
from net import TimeoutError
|
|
import std/assertions
|
|
|
|
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")
|
|
doAssert contentLength(response) == 0 # bug #22778
|
|
|
|
runTest(handler, request, test)
|
|
|
|
waitFor(test200())
|
|
waitFor(test404())
|
|
waitFor(testCustomEmptyHeaders())
|
|
waitFor(testCustomContentLength())
|
|
|
|
echo "OK"
|