Skip to content

Commit 9eae6b4

Browse files
authored
fix #17456 flaky test tasynchttpserver_transferencoding (#18052)
1 parent d62a298 commit 9eae6b4

File tree

1 file changed

+32
-23
lines changed

1 file changed

+32
-23
lines changed

tests/stdlib/tasynchttpserver_transferencoding.nim

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
discard """
2+
matrix: "--gc:arc --threads:on; --gc:arc --threads:on -d:danger; --threads:on"
3+
"""
4+
15
import httpclient, asynchttpserver, asyncdispatch, asyncfutures
26
import net
37

@@ -10,33 +14,38 @@ Transfer-Encoding:chunked
1014
1115
"""
1216

13-
template genTest(input, expected) =
14-
var sanity = false
15-
proc handler(request: Request) {.async.} =
16-
doAssert(request.body == expected)
17-
doAssert(request.headers.hasKey("Transfer-Encoding"))
18-
doAssert(not request.headers.hasKey("Content-Length"))
19-
sanity = true
20-
await request.respond(Http200, "Good")
17+
template genTest(input, expected: string) =
18+
proc handler(request: Request, future: Future[bool]) {.async, gcsafe.} =
19+
doAssert(request.body == expected)
20+
doAssert(request.headers.hasKey("Transfer-Encoding"))
21+
doAssert(not request.headers.hasKey("Content-Length"))
22+
future.complete(true)
23+
await request.respond(Http200, "Good")
24+
25+
proc sendData(data: string, port: Port) {.async.} =
26+
var socket = newSocket()
27+
defer: socket.close()
28+
29+
socket.connect("127.0.0.1", port)
30+
socket.send(data)
2131

22-
proc runSleepLoop(server: AsyncHttpServer) {.async.} =
32+
proc runTest(): Future[bool] {.async.} =
33+
var handlerFuture = newFuture[bool]("runTest")
34+
let data = postBegin & input
35+
let server = newAsyncHttpServer()
2336
server.listen(Port(0))
24-
proc wrapper() =
25-
waitFor server.acceptRequest(handler)
26-
asyncdispatch.callSoon wrapper
2737

28-
let server = newAsyncHttpServer()
29-
waitFor runSleepLoop(server)
30-
let data = postBegin & input
31-
var socket = newSocket()
32-
socket.connect("127.0.0.1", server.getPort)
33-
socket.send(data)
34-
waitFor sleepAsync(10)
35-
socket.close()
36-
server.close()
38+
proc wrapper(request: Request): Future[void] {.gcsafe, closure.} =
39+
handler(request, handlerFuture)
40+
41+
asyncCheck sendData(data, server.getPort)
42+
asyncCheck server.acceptRequest(wrapper)
43+
doAssert await handlerFuture
44+
45+
server.close()
46+
return true
3747

38-
# Verify we ran the handler and its asserts
39-
doAssert(sanity)
48+
doAssert waitFor runTest()
4049

4150
block:
4251
const expected = "hello=world"

0 commit comments

Comments
 (0)