/ tests / test_close.nim
test_close.nim
 1  import news, asyncdispatch, asynchttpserver, asyncnet
 2  
 3  proc cb(req: Request): Future[void] {.async.} =
 4    echo "cb ", req
 5    var ws = await newWebsocket(req)
 6    await ws.send("Welcome to simple echo server")
 7    while ws.readyState == Open:
 8      let packet = await ws.receivePacket()
 9      await ws.send(packet)
10      await ws.shutdown()
11    await req.respond(Http200, "Hello World")
12  
13  
14  proc sendMsg() {.async.} =
15    var ws = await newWebSocket("ws://localhost:9001")
16    await ws.send("hi")
17    while ws.readyState == Open:
18      let str = await ws.receiveString()
19      echo "received ", str
20    ws.close()
21  
22  
23  proc sendClose() {.async.} =
24    var ws = await newWebSocket("ws://echo.websocket.org:80")
25    await ws.sendPing()
26    let pong = await ws.receivePacket()
27    assert(pong.kind == Pong)
28    await ws.shutdown()
29    let close = await ws.receivePacket()
30    assert(close.kind == Close)
31    ws.close()
32  
33  proc run() {.async.} =
34    var server = newAsyncHttpServer()
35    asyncCheck server.serve(Port(9001), cb)
36    await sendMsg()
37    await sendClose()
38    server.close()
39  
40  waitFor run()