diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2012-08-12 11:53:09 +0100 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@googlemail.com> | 2012-08-12 11:53:09 +0100 |
commit | e9604b4433cac0627086b1b28983546ed033e41e (patch) | |
tree | e22578077dba8c4efdf7df3118c3ddb6f087e61b /tests/run | |
parent | f686647f58c67d90f051dedf441f9b3eb913899b (diff) | |
download | Nim-e9604b4433cac0627086b1b28983546ed033e41e.tar.gz |
UDP improvements for the sockets module. Renamed ftpclient.fileExists to
existsFile for consistency. Added tasyncudp test.
Diffstat (limited to 'tests/run')
-rw-r--r-- | tests/run/tasynciossl.nim | 8 | ||||
-rw-r--r-- | tests/run/tasyncudp.nim | 77 |
2 files changed, 82 insertions, 3 deletions
diff --git a/tests/run/tasynciossl.nim b/tests/run/tasynciossl.nim index 99e7df172..e5fb9610c 100644 --- a/tests/run/tasynciossl.nim +++ b/tests/run/tasynciossl.nim @@ -18,13 +18,13 @@ const swarmSize = 50 messagesToSend = 100 -proc swarmConnect(s: PAsyncSocket, arg: PObject) {.nimcall.} = +proc swarmConnect(s: PAsyncSocket) = #echo("Connected") for i in 1..messagesToSend: s.send("Message " & $i & "\c\L") s.close() -proc serverRead(s: PAsyncSocket, arg: PObject) {.nimcall.} = +proc serverRead(s: PAsyncSocket) = var line = "" assert s.recvLine(line) if line != "": @@ -36,7 +36,7 @@ proc serverRead(s: PAsyncSocket, arg: PObject) {.nimcall.} = else: s.close() -proc serverAccept(s: PAsyncSocket, arg: Pobject) {.nimcall.} = +proc serverAccept(s: PAsyncSocket) = var client: PAsyncSocket new(client) s.accept(client) @@ -83,6 +83,8 @@ while true: break if not disp.poll(): break if disp.len == serverCount: + # Only the servers are left in the dispatcher. All clients finished, + # we need to therefore break. break assert msgCount == (swarmSize * messagesToSend) * serverCount diff --git a/tests/run/tasyncudp.nim b/tests/run/tasyncudp.nim new file mode 100644 index 000000000..b404169dc --- /dev/null +++ b/tests/run/tasyncudp.nim @@ -0,0 +1,77 @@ +discard """ + file: "tasyncudp.nim" + output: "2000" +""" +import asyncio, sockets, strutils, times + +const + swarmSize = 5 + messagesToSend = 200 + +var + disp = newDispatcher() + msgCount = 0 + currentClient = 0 + +proc serverRead(s: PAsyncSocket) = + var data = "" + var address = "" + if s.recvFromAsync(data, 9, address): + assert address == "127.0.0.1" + msgCount.inc() + + discard """ + + var line = "" + assert s.recvLine(line) + + if line == "": + assert(false) + else: + if line.startsWith("Message "): + msgCount.inc() + else: + assert(false) + """ + +proc swarmConnect(s: PAsyncSocket) = + for i in 1..messagesToSend: + s.send("Message\c\L") + +proc createClient(disp: var PDispatcher, port: TPort, + buffered = true) = + currentClient.inc() + var client = AsyncSocket(typ = SOCK_DGRAM, protocol = IPPROTO_UDP, + buffered = buffered) + client.handleConnect = swarmConnect + disp.register(client) + client.connect("localhost", port) + +proc createServer(port: TPort, buffered = true) = + var server = AsyncSocket(typ = SOCK_DGRAM, protocol = IPPROTO_UDP, + buffered = buffered) + server.handleRead = serverRead + disp.register(server) + server.bindAddr(port) + +let serverCount = 2 + +createServer(TPort(10335), false) +createServer(TPort(10336), true) +var startTime = epochTime() +while true: + if epochTime() - startTime >= 300.0: + break + + if not disp.poll(): + break + + if (msgCount div messagesToSend) * serverCount == currentClient: + createClient(disp, TPort(10335), false) + createClient(disp, TPort(10336), true) + + if msgCount == messagesToSend * serverCount * swarmSize: + break + +assert msgCount == messagesToSend * serverCount * swarmSize +echo(msgCount) \ No newline at end of file |