Skip to content

Commit

Permalink
Improving tests
Browse files Browse the repository at this point in the history
  • Loading branch information
diegomrsantos committed Oct 25, 2022
1 parent 3132813 commit 2e22e85
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 49 deletions.
57 changes: 25 additions & 32 deletions tests/commontransport.nim
Original file line number Diff line number Diff line change
Expand Up @@ -56,31 +56,27 @@ template commonTransportTest*(prov: TransportProvider, ma1: string, ma2: string

asyncTest "e2e: handle write":
let ma = @[MultiAddress.init(ma1).tryGet()]
let server = transpProvider()
await server.start(ma)

let transport1 = transpProvider()
await transport1.start(ma)
proc runClient() {.async.} =
let client = transpProvider()
let conn = await client.dial(server.addrs[0])
var msg = newSeq[byte](6)
await conn.readExactly(addr msg[0], 6)

proc acceptHandler() {.async, gcsafe.} =
let conn = await transport1.accept()
await conn.close() #for some protocols, closing requires actively reading, so we must close here
check string.fromBytes(msg) == "Hello!"
await client.stop()

proc serverAcceptHandler() {.async, gcsafe.} =
let conn = await server.accept()
await conn.write("Hello!")
await conn.close()
await server.stop()

let handlerWait = acceptHandler()

let transport2 = transpProvider()
let conn = await transport2.dial(transport1.addrs[0])
var msg = newSeq[byte](6)
await conn.readExactly(addr msg[0], 6)

await conn.close() #for some protocols, closing requires actively reading, so we must close here

await allFuturesThrowing(
allFinished(
transport1.stop(),
transport2.stop()))

check string.fromBytes(msg) == "Hello!"
await handlerWait.wait(1.seconds) # when no issues will not wait that long!
asyncSpawn serverAcceptHandler()
await runClient()

asyncTest "e2e: handle read":
let ma = @[MultiAddress.init(ma1).tryGet()]
Expand All @@ -93,20 +89,17 @@ template commonTransportTest*(prov: TransportProvider, ma1: string, ma2: string
await conn.readExactly(addr msg[0], 6)
check string.fromBytes(msg) == "Hello!"
await conn.close()
await transport1.stop()

let handlerWait = acceptHandler()

let transport2 = transpProvider()
let conn = await transport2.dial(transport1.addrs[0])
await conn.write("Hello!")

await conn.close() #for some protocols, closing requires actively reading, so we must close here
await handlerWait.wait(1.seconds) # when no issues will not wait that long!
proc startClient() {.async, gcsafe.} =
let transport2 = transpProvider()
let conn = await transport2.dial(transport1.addrs[0])
await conn.write("Hello!")
await conn.close() #for some protocols, closing requires actively reading, so we must close here
await transport2.stop()

await allFuturesThrowing(
allFinished(
transport1.stop(),
transport2.stop()))
asyncSpawn startClient()
await acceptHandler()

asyncTest "e2e: handle dial cancellation":
let ma = @[MultiAddress.init(ma1).tryGet()]
Expand Down
34 changes: 17 additions & 17 deletions tests/testtortransport.nim
Original file line number Diff line number Diff line change
Expand Up @@ -33,37 +33,36 @@ suite "Tor transport":
checkTrackers()

asyncTest "test dial and start":
proc startClient() {.async.} =
let s = TorTransport.new(transportAddress = torServer, upgrade = Upgrade())
let ma = MultiAddress.init("/onion3/a2mncbqsbullu7thgm4e6zxda2xccmcgzmaq44oayhdtm6rav5vovcad:80")
let conn = await s.dial("", ma.tryGet())

let server = TorTransport.new(torServer, {ReuseAddr}, Upgrade())
let ma2 = @[MultiAddress.init("/ip4/127.0.0.1/tcp/8080/onion3/a2mncbqsbullu7thgm4e6zxda2xccmcgzmaq44oayhdtm6rav5vovcad:80").tryGet()]
await server.start(ma2)

proc runClient() {.async.} =
let client = TorTransport.new(transportAddress = torServer, upgrade = Upgrade())
let conn = await client.dial("", server.addrs[0])

await conn.write("client")
var resp: array[6, byte]
discard await conn.readOnce(addr resp, 6)
await conn.readExactly(addr resp, 6)
await conn.close()

check string.fromBytes(resp) == "server"
await client.stop()

let server = TorTransport.new(torServer, {ReuseAddr}, Upgrade())
let ma2 = @[MultiAddress.init("/ip4/127.0.0.1/tcp/8080/onion3/a2mncbqsbullu7thgm4e6zxda2xccmcgzmaq44oayhdtm6rav5vovcad:80").tryGet()]
await server.start(ma2)

proc acceptHandler() {.async, gcsafe.} =
proc serverAcceptHandler() {.async, gcsafe.} =
let conn = await server.accept()

var resp: array[6, byte]
discard await conn.readOnce(addr resp, 6)
await conn.readExactly(addr resp, 6)
check string.fromBytes(resp) == "client"

await conn.write("server")
await conn.close()
await server.stop()

asyncSpawn acceptHandler()

await startClient()

await server.stop()
asyncSpawn serverAcceptHandler()
await runClient()

asyncTest "test dial and start with builder":
const TestCodec = "/test/proto/1.0.0" # custom protocol string identifier
Expand All @@ -77,7 +76,7 @@ suite "Tor transport":
proc handle(conn: Connection, proto: string) {.async, gcsafe.} =

var resp: array[6, byte]
discard await conn.readOnce(addr resp, 6)
await conn.readExactly(addr resp, 6)
check string.fromBytes(resp) == "client"
await conn.write("server")

Expand Down Expand Up @@ -123,6 +122,7 @@ suite "Tor transport":
await conn.readExactly(addr resp, 6)
check string.fromBytes(resp) == "server"
await conn.close()
await clientSwitch.stop()

await startClient()

Expand Down

0 comments on commit 2e22e85

Please sign in to comment.