diff --git a/tests/teststream2.nim b/tests/teststream2.nim new file mode 100644 index 00000000..2ef1cbab --- /dev/null +++ b/tests/teststream2.nim @@ -0,0 +1,60 @@ +# Asyncdispatch2 Test Suite +# (c) Copyright 2018 +# Status Research & Development GmbH +# +# Licensed under either of +# Apache License, version 2.0, (LICENSE-APACHEv2) +# MIT license (LICENSE-MIT) + +import strutils, unittest +import ../asyncdispatch2, ../asyncdispatch2/timer + +const TimeoutPeriod = 2000 + +proc serveClient1(server: StreamServer, + transp: StreamTransport, udata: pointer) {.async.} = + var data = await transp.readLine() + if len(data) == 0: + doAssert(transp.atEof()) + if data == "PAUSE": + server.pause() + data = "DONE\r\n" + var res = await transp.write(cast[pointer](addr data[0]), len(data)) + doAssert(res == len(data)) + await sleepAsync(TimeoutPeriod) + server.start() + elif data == "CHECK": + data = "CONFIRM\r\n" + var res = await transp.write(cast[pointer](addr data[0]), len(data)) + doAssert(res == len(data)) + transp.close() + +proc swarmWorker1(address: TransportAddress): Future[int] {.async.} = + var transp1 = await connect(address) + var data = "PAUSE\r\n" + var res = await transp1.write(cast[pointer](addr data[0]), len(data)) + doAssert(res == len(data)) + var answer = await transp1.readLine() + doAssert(answer == "DONE") + var st = fastEpochTime() + var transp2 = await connect(address) + data = "CHECK\r\n" + res = await transp2.write(cast[pointer](addr data[0]), len(data)) + doAssert(res == len(data)) + var confirm = await transp2.readLine() + doAssert(confirm == "CONFIRM") + var et = fastEpochTime() + result = int(et - st) + +proc test1(): Future[int] {.async.} = + var ta = strAddress("127.0.0.1:31354") + var server = createStreamServer(ta, {ReuseAddr}, serveClient1) + server.start() + result = await swarmWorker1(ta) + server.stop() + server.close() + +when isMainModule: + suite "Additional Stream Transport test suite": + test "Server pause/resume test": + check waitFor(test1()) >= TimeoutPeriod