Files
Nim/tests/stdlib/tasynchttpserver_transferencoding.nim
Timothee Cour 72988509ba add getPort to resolve Port(0) (#17559)
* add getPort to resolve Port(0)

* fixup

* use getPort in examples + tests

* address comments: do not re-export Port
2021-03-30 20:14:39 +02:00

81 lines
2.2 KiB
Nim

import httpclient, asynchttpserver, asyncdispatch, asyncfutures
import net
import std/asyncnet
import std/nativesockets
const postBegin = """
POST / HTTP/1.1
Transfer-Encoding:chunked
"""
template genTest(input, expected) =
var sanity = false
proc handler(request: Request) {.async.} =
doAssert(request.body == expected)
doAssert(request.headers.hasKey("Transfer-Encoding"))
doAssert(not request.headers.hasKey("Content-Length"))
sanity = true
await request.respond(Http200, "Good")
proc runSleepLoop(server: AsyncHttpServer) {.async.} =
server.listen(Port(0))
proc wrapper() =
waitFor server.acceptRequest(handler)
asyncdispatch.callSoon wrapper
let server = newAsyncHttpServer()
waitFor runSleepLoop(server)
let data = postBegin & input
var socket = newSocket()
socket.connect("127.0.0.1", server.getPort)
socket.send(data)
waitFor sleepAsync(10)
socket.close()
server.close()
# Verify we ran the handler and its asserts
doAssert(sanity)
block:
const expected = "hello=world"
const input = ("b\r\n" &
"hello=world\r\n" &
"0\r\n" &
"\r\n")
genTest(input, expected)
block:
const expected = "hello encoding"
const input = ("e\r\n" &
"hello encoding\r\n" &
"0\r\n" &
"\r\n")
genTest(input, expected)
block:
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding
const expected = "MozillaDeveloperNetwork"
const input = ("7\r\n" &
"Mozilla\r\n" &
"9\r\n" &
"Developer\r\n" &
"7\r\n" &
"Network\r\n" &
"0\r\n" &
"\r\n")
genTest(input, expected)
block:
# https://en.wikipedia.org/wiki/Chunked_transfer_encoding#Example
const expected = "Wikipedia in \r\n\r\nchunks."
const input = ("4\r\n" &
"Wiki\r\n" &
"6\r\n" &
"pedia \r\n" &
"E\r\n" &
"in \r\n" &
"\r\n" &
"chunks.\r\n" &
"0\r\n" &
"\r\n")
genTest(input, expected)