parent
d62a298a28
commit
9eae6b4fe3
1 changed files with 32 additions and 23 deletions
|
|
@ -1,3 +1,7 @@
|
||||||
|
discard """
|
||||||
|
matrix: "--gc:arc --threads:on; --gc:arc --threads:on -d:danger; --threads:on"
|
||||||
|
"""
|
||||||
|
|
||||||
import httpclient, asynchttpserver, asyncdispatch, asyncfutures
|
import httpclient, asynchttpserver, asyncdispatch, asyncfutures
|
||||||
import net
|
import net
|
||||||
|
|
||||||
|
|
@ -10,33 +14,38 @@ Transfer-Encoding:chunked
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
template genTest(input, expected) =
|
template genTest(input, expected: string) =
|
||||||
var sanity = false
|
proc handler(request: Request, future: Future[bool]) {.async, gcsafe.} =
|
||||||
proc handler(request: Request) {.async.} =
|
doAssert(request.body == expected)
|
||||||
doAssert(request.body == expected)
|
doAssert(request.headers.hasKey("Transfer-Encoding"))
|
||||||
doAssert(request.headers.hasKey("Transfer-Encoding"))
|
doAssert(not request.headers.hasKey("Content-Length"))
|
||||||
doAssert(not request.headers.hasKey("Content-Length"))
|
future.complete(true)
|
||||||
sanity = true
|
await request.respond(Http200, "Good")
|
||||||
await request.respond(Http200, "Good")
|
|
||||||
|
|
||||||
proc runSleepLoop(server: AsyncHttpServer) {.async.} =
|
proc sendData(data: string, port: Port) {.async.} =
|
||||||
|
var socket = newSocket()
|
||||||
|
defer: socket.close()
|
||||||
|
|
||||||
|
socket.connect("127.0.0.1", port)
|
||||||
|
socket.send(data)
|
||||||
|
|
||||||
|
proc runTest(): Future[bool] {.async.} =
|
||||||
|
var handlerFuture = newFuture[bool]("runTest")
|
||||||
|
let data = postBegin & input
|
||||||
|
let server = newAsyncHttpServer()
|
||||||
server.listen(Port(0))
|
server.listen(Port(0))
|
||||||
proc wrapper() =
|
|
||||||
waitFor server.acceptRequest(handler)
|
|
||||||
asyncdispatch.callSoon wrapper
|
|
||||||
|
|
||||||
let server = newAsyncHttpServer()
|
proc wrapper(request: Request): Future[void] {.gcsafe, closure.} =
|
||||||
waitFor runSleepLoop(server)
|
handler(request, handlerFuture)
|
||||||
let data = postBegin & input
|
|
||||||
var socket = newSocket()
|
asyncCheck sendData(data, server.getPort)
|
||||||
socket.connect("127.0.0.1", server.getPort)
|
asyncCheck server.acceptRequest(wrapper)
|
||||||
socket.send(data)
|
doAssert await handlerFuture
|
||||||
waitFor sleepAsync(10)
|
|
||||||
socket.close()
|
server.close()
|
||||||
server.close()
|
return true
|
||||||
|
|
||||||
# Verify we ran the handler and its asserts
|
doAssert waitFor runTest()
|
||||||
doAssert(sanity)
|
|
||||||
|
|
||||||
block:
|
block:
|
||||||
const expected = "hello=world"
|
const expected = "hello=world"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue