fix #17456 flaky test tasynchttpserver_transferencoding (#18052)

This commit is contained in:
vabresto 2021-05-28 18:17:37 -04:00 • committed by GitHub
commit 9eae6b4fe3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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()
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 asyncCheck sendData(data, server.getPort)
doAssert(sanity) asyncCheck server.acceptRequest(wrapper)
doAssert await handlerFuture
server.close()
return true
doAssert waitFor runTest()
block: block:
const expected = "hello=world" const expected = "hello=world"