From efeb972763a3dcb08e2355c458f9cf9b8db0d196 Mon Sep 17 00:00:00 2001 From: coffeepots Date: Tue, 5 Jun 2018 10:45:54 +0100 Subject: [PATCH] Update tests to use async better, no shared server --- tests/testethcalls.nim | 84 +++++++++++++++++++++++++------------- tests/testserverclient.nim | 28 +++++-------- 2 files changed, 66 insertions(+), 46 deletions(-) diff --git a/tests/testethcalls.nim b/tests/testethcalls.nim index de646da..4c76b39 100644 --- a/tests/testethcalls.nim +++ b/tests/testethcalls.nim @@ -1,48 +1,76 @@ import ../ rpcclient, ../ rpcserver import unittest, asyncdispatch, json, tables +import stint, ethtypes, ethprocs, stintjson from os import getCurrentDir, DirSep from strutils import rsplit template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0] -var srv = sharedRpcServer() -srv.address = "localhost" -srv.port = Port(8546) +var + server = newRpcServer() + client = newRpcClient() -# importing ethprocs creates the server rpc calls -import stint, ethtypes, ethprocs, stintjson -# generate all client ethereum rpc calls +## Generate Ethereum server RPCs +server.addEthRpcs() + +## Generate client convenience marshalling wrappers from forward declarations createRpcSigs(sourceDir & DirSep & "ethcallsigs.nim") -srv.rpc("rpc.uint256param") do(i: UInt256): +## Create custom RPC with StUint input parameter +server.rpc("rpc.uint256param") do(i: UInt256): let r = i + 1.stUint(256) result = %r - -srv.rpc("rpc.testreturnuint256") do() -> UInt256: + +## Create custom RPC with StUInt return parameter +server.rpc("rpc.testreturnuint256") do() -> UInt256: let r: UInt256 = "0x1234567890abcdef".parse(UInt256, 16) return r -asyncCheck srv.serve +proc testLocalCalls: Future[seq[JsonNode]] = + ## Call RPCs created with `rpc` locally. + ## This simply demonstrates async calls of the procs generated by the `rpc` macro. + var + uint256Param = rpcUInt256Param(%[%"0x1234567890"]) + returnUint256 = rpcTestReturnUInt256(%[]) + result = all(uint256Param, returnUint256) -suite "Ethereum RPCs": - proc main {.async.} = - var client = newRpcClient() - await client.connect("localhost", Port(8546)) +proc testRemoteUInt256: Future[seq[Response]] = + ## Call function remotely on server, testing `stint` types + var + uint256Param = client.call("rpc.uint256param", %[%"0x1234567890"]) + returnUint256 = client.call("rpc.testreturnuint256", %[]) + result = all(uint256Param, returnUint256) - test "UInt256 param": - let r = waitFor rpcUInt256Param(%[%"0x1234567890"]) - check r == %"0x1234567891" +proc testSigCalls: Future[seq[string]] = + ## Remote call using proc generated from signatures in `ethcallsigs.nim` + var + version = client.web3_clientVersion() + sha3 = client.web3_sha3("0x68656c6c6f20776f726c64") + result = all(version, sha3) - test "Return UInt256": - let r = waitFor rpcTestReturnUInt256(%[]) - check r == %"0x1234567890abcdef" +server.address = "localhost" +server.port = Port(8546) +asyncCheck server.serve +waitFor client.connect("localhost", Port(8546)) - test "Version": - var - response = waitFor client.web3_clientVersion() - check response == "Nimbus-RPC-Test" - test "SHA3": - var response = waitFor client.web3_sha3("0x68656c6c6f20776f726c64") - check response == "0x47173285A8D7341E5E972FC677286384F802F8EF42A5EC5F03BBFA254CB01FAD" - waitFor main() +suite "Local calls": + let localResults = testLocalCalls().waitFor + test "UInt256 param local": + check localResults[0] == %"0x1234567891" + test "Return UInt256 local": + check localResults[1] == %"0x1234567890abcdef" + +suite "Remote calls": + let remoteResults = testRemoteUInt256().waitFor + test "UInt256 param": + check remoteResults[0].result == %"0x1234567891" + test "Return UInt256": + check remoteResults[1].result == %"0x1234567890abcdef" + +suite "Generated from signatures": + let sigResults = testSigCalls().waitFor + test "Version": + check sigResults[0] == "Nimbus-RPC-Test" + test "SHA3": + check sigResults[1] == "0x47173285A8D7341E5E972FC677286384F802F8EF42A5EC5F03BBFA254CB01FAD" diff --git a/tests/testserverclient.nim b/tests/testserverclient.nim index 407c248..3dd30be 100644 --- a/tests/testserverclient.nim +++ b/tests/testserverclient.nim @@ -1,28 +1,20 @@ import ../ rpcclient, ../ rpcserver -import unittest, asyncdispatch, json +import unittest, json var srv = newRpcServer() srv.address = "localhost" srv.port = Port(8545) +var client = newRpcClient() -proc makeProc(server: RpcServer) = - server.rpc("myProc") do(input: string, data: array[0..3, int]): - result = %("Hello " & input & " data: " & $data) +# Create RPC on server +srv.rpc("myProc") do(input: string, data: array[0..3, int]): + result = %("Hello " & input & " data: " & $data) asyncCheck srv.serve +waitFor client.connect("localhost", Port(8545)) -srv.makeProc - +# TODO: When an error occurs during a test, stop the server suite "Server/Client RPC": - proc main {.async.} = - var client = newRpcClient() - await client.connect("localhost", Port(8545)) - - test "Custom RPC": - # Custom async RPC call - var response = waitFor client.call("myProc", %[%"abc", %[1, 2, 3, 4]]) - check response.result.getStr == "Hello abc data: [1, 2, 3, 4]" - - # TODO: When an error occurs during a test, stop the server - asyncCheck main() - \ No newline at end of file + test "Custom RPC": + var r = waitFor client.call("myProc", %[%"abc", %[1, 2, 3, 4]]) + check r.result.getStr == "Hello abc data: [1, 2, 3, 4]" \ No newline at end of file