nim-libp2p/tests/testtransport.nim

134 lines
4.7 KiB
Nim
Raw Normal View History

2019-08-21 04:58:12 +00:00
import unittest
import chronos
2019-09-06 07:13:17 +00:00
import ../libp2p/connection,
../libp2p/transports/transport,
../libp2p/transports/tcptransport,
../libp2p/multiaddress,
../libp2p/wire
2019-08-21 04:58:12 +00:00
suite "TCP transport":
2019-08-21 22:53:16 +00:00
test "test listener: handle write":
2019-08-30 15:28:07 +00:00
proc testListener(): Future[bool] {.async, gcsafe.} =
2019-09-25 17:36:39 +00:00
let ma: MultiAddress = Multiaddress.init("/ip4/0.0.0.0/tcp/0")
2019-08-26 15:37:15 +00:00
proc connHandler(conn: Connection): Future[void] {.async, gcsafe.} =
2019-08-21 19:15:51 +00:00
result = conn.write(cstring("Hello!"), 6)
2019-08-21 04:58:12 +00:00
let transport: TcpTransport = newTransport(TcpTransport)
2019-09-12 02:10:38 +00:00
asyncCheck await transport.listen(ma, connHandler)
2019-09-25 17:36:39 +00:00
let streamTransport: StreamTransport = await connect(transport.ma)
2019-08-21 19:15:51 +00:00
let msg = await streamTransport.read(6)
2019-08-21 22:53:16 +00:00
await transport.close()
await streamTransport.closeWait()
2019-08-21 04:58:12 +00:00
result = cast[string](msg) == "Hello!"
check:
2019-08-26 15:37:15 +00:00
waitFor(testListener()) == true
2019-08-21 22:53:16 +00:00
test "test listener: handle read":
proc testListener(): Future[bool] {.async.} =
2019-09-25 17:36:39 +00:00
let ma: MultiAddress = Multiaddress.init("/ip4/0.0.0.0/tcp/0")
2019-08-26 15:37:15 +00:00
proc connHandler(conn: Connection): Future[void] {.async, gcsafe.} =
2019-08-21 22:53:16 +00:00
let msg = await conn.read(6)
check cast[string](msg) == "Hello!"
let transport: TcpTransport = newTransport(TcpTransport)
2019-09-12 02:10:38 +00:00
asyncCheck await transport.listen(ma, connHandler)
2019-09-25 17:36:39 +00:00
let streamTransport: StreamTransport = await connect(transport.ma)
2019-08-21 22:53:16 +00:00
let sent = await streamTransport.write("Hello!", 6)
result = sent == 6
check:
2019-08-26 15:37:15 +00:00
waitFor(testListener()) == true
2019-08-21 22:53:16 +00:00
test "test dialer: handle write":
proc testDialer(address: TransportAddress): Future[bool] {.async.} =
proc serveClient(server: StreamServer,
2019-08-30 15:28:07 +00:00
transp: StreamTransport) {.async, gcsafe.} =
2019-08-21 22:53:16 +00:00
var wstream = newAsyncStreamWriter(transp)
await wstream.write("Hello!")
await wstream.finish()
await wstream.closeWait()
await transp.closeWait()
server.stop()
server.close()
var server = createStreamServer(address, serveClient, {ReuseAddr})
server.start()
2019-09-25 17:36:39 +00:00
let ma: MultiAddress = server.sock.getLocalAddress().toMultiAddr()
let transport: TcpTransport = newTransport(TcpTransport)
2019-08-21 22:53:16 +00:00
let conn = await transport.dial(ma)
let msg = await conn.read(6)
result = cast[string](msg) == "Hello!"
server.stop()
server.close()
await server.join()
2019-09-25 17:36:39 +00:00
check waitFor(testDialer(initTAddress("0.0.0.0:0"))) == true
2019-08-21 22:53:16 +00:00
test "test dialer: handle write":
2019-08-30 15:28:07 +00:00
proc testDialer(address: TransportAddress): Future[bool] {.async, gcsafe.} =
2019-08-26 15:37:15 +00:00
proc serveClient(server: StreamServer,
2019-08-30 15:28:07 +00:00
transp: StreamTransport) {.async, gcsafe.} =
2019-08-26 15:37:15 +00:00
var rstream = newAsyncStreamReader(transp)
let msg = await rstream.read(6)
check cast[string](msg) == "Hello!"
2019-08-26 15:37:15 +00:00
await rstream.closeWait()
await transp.closeWait()
server.stop()
server.close()
2019-08-26 15:37:15 +00:00
var server = createStreamServer(address, serveClient, {ReuseAddr})
server.start()
2019-09-25 17:36:39 +00:00
let ma: MultiAddress = server.sock.getLocalAddress().toMultiAddr()
2019-08-26 15:37:15 +00:00
let transport: TcpTransport = newTransport(TcpTransport)
let conn = await transport.dial(ma)
await conn.write(cstring("Hello!"), 6)
result = true
2019-08-21 22:53:16 +00:00
2019-08-26 15:37:15 +00:00
server.stop()
server.close()
await server.join()
2019-09-25 17:36:39 +00:00
check waitFor(testDialer(initTAddress("0.0.0.0:0"))) == true
2019-08-21 22:53:16 +00:00
2019-08-26 15:37:15 +00:00
test "e2e: handle write":
proc testListenerDialer(): Future[bool] {.async.} =
2019-09-25 17:36:39 +00:00
let ma: MultiAddress = Multiaddress.init("/ip4/0.0.0.0/tcp/0")
2019-08-26 15:37:15 +00:00
proc connHandler(conn: Connection): Future[void] {.async, gcsafe.} =
result = conn.write(cstring("Hello!"), 6)
2019-08-21 22:53:16 +00:00
let transport1: TcpTransport = newTransport(TcpTransport)
2019-09-12 02:10:38 +00:00
asyncCheck await transport1.listen(ma, connHandler)
let transport2: TcpTransport = newTransport(TcpTransport)
2019-09-25 17:36:39 +00:00
let conn = await transport2.dial(transport1.ma)
let msg = await conn.read(6)
await transport1.close()
result = cast[string](msg) == "Hello!"
check:
2019-08-26 15:37:15 +00:00
waitFor(testListenerDialer()) == true
2019-08-26 15:37:15 +00:00
test "e2e: handle read":
proc testListenerDialer(): Future[bool] {.async.} =
2019-09-25 17:36:39 +00:00
let ma: MultiAddress = Multiaddress.init("/ip4/0.0.0.0/tcp/0")
2019-08-26 15:37:15 +00:00
proc connHandler(conn: Connection): Future[void] {.async, gcsafe.} =
let msg = await conn.read(6)
check cast[string](msg) == "Hello!"
let transport1: TcpTransport = newTransport(TcpTransport)
2019-09-12 02:10:38 +00:00
asyncCheck await transport1.listen(ma, connHandler)
let transport2: TcpTransport = newTransport(TcpTransport)
2019-09-25 17:36:39 +00:00
let conn = await transport2.dial(transport1.ma)
2019-08-21 22:53:16 +00:00
await conn.write(cstring("Hello!"), 6)
await transport1.close()
2019-08-21 22:53:16 +00:00
result = true
check:
2019-08-26 15:37:15 +00:00
waitFor(testListenerDialer()) == true