diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-09-08 08:57:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-09-08 08:57:47 +0200 |
commit | 1f6b2c4d119960c1e0f5bf7791e2c4aa3b4fafb0 (patch) | |
tree | 32fdb7a3c8685fae0aedbbadb34267b93dc6eb79 /tests/async/tasyncssl.nim | |
parent | 4cb4961f7ca137af216024e1cb7a9754ac62b4ee (diff) | |
parent | cc2a8409e170cb96a3141c9ad8a9077c0c98174f (diff) | |
download | Nim-1f6b2c4d119960c1e0f5bf7791e2c4aa3b4fafb0.tar.gz |
Merge pull request #4733 from cheatfate/asyncssl_and_tests
async: small ssl fix and updated tests
Diffstat (limited to 'tests/async/tasyncssl.nim')
-rw-r--r-- | tests/async/tasyncssl.nim | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/async/tasyncssl.nim b/tests/async/tasyncssl.nim new file mode 100644 index 000000000..3dc131036 --- /dev/null +++ b/tests/async/tasyncssl.nim @@ -0,0 +1,66 @@ +discard """ + file: "tasyncssl.nim" + cmd: "nim $target --hints:on --define:ssl $options $file" + output: "500" +""" +import asyncdispatch, asyncnet, net, strutils, os + +when defined(ssl): + var msgCount = 0 + + const + swarmSize = 10 + messagesToSend = 50 + + var clientCount = 0 + + proc sendMessages(client: AsyncSocket) {.async.} = + for i in 0 .. <messagesToSend: + await send(client, "Message " & $i & "\c\L") + + proc launchSwarm(port: Port) {.async.} = + for i in 0 .. <swarmSize: + var sock = newAsyncSocket() + var clientContext = newContext(verifyMode = CVerifyNone) + clientContext.wrapSocket(sock) + await connect(sock, "localhost", port) + await sendMessages(sock) + close(sock) + + proc readMessages(client: AsyncSocket) {.async.} = + while true: + var line = await recvLine(client) + if line == "": + close(client) + inc(clientCount) + break + else: + if line.startswith("Message "): + inc(msgCount) + else: + doAssert false + + proc createServer(port: Port) {.async.} = + let serverContext = newContext(verifyMode = CVerifyNone, + certFile = "tests/testdata/mycert.pem", + keyFile = "tests/testdata/mycert.pem") + var server = newAsyncSocket() + serverContext.wrapSocket(server) + server.setSockOpt(OptReuseAddr, true) + bindAddr(server, port) + server.listen() + while true: + let client = await accept(server) + serverContext.wrapConnectedSocket(client, handshakeAsServer) + asyncCheck readMessages(client) + + asyncCheck createServer(Port(10335)) + asyncCheck launchSwarm(Port(10335)) + while true: + poll() + if clientCount == swarmSize: break + + assert msgCount == swarmSize * messagesToSend + echo msgCount + + |