1+ discard """
2+ matrix: "--gc:arc --threads:on; --gc:arc --threads:on -d:danger; --threads:on"
3+ """
4+
15import httpclient, asynchttpserver, asyncdispatch, asyncfutures
26import 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
4150block :
4251 const expected = " hello=world"
0 commit comments