mirror of
https://github.com/status-im/nim-json-rpc.git
synced 2025-02-20 16:28:29 +00:00
Let the OS choose the port for tests
This commit is contained in:
parent
31b741720b
commit
20b4c9a0fb
@ -78,6 +78,11 @@ proc connect*(client: RpcSocketClient, address: string, port: Port) {.async.} =
|
||||
client.address = addresses[0]
|
||||
client.loop = processData(client)
|
||||
|
||||
proc connect*(client: RpcSocketClient, address: TransportAddress) {.async.} =
|
||||
client.transport = await connect(address)
|
||||
client.address = address
|
||||
client.loop = processData(client)
|
||||
|
||||
method close*(client: RpcSocketClient) {.async.} =
|
||||
await client.loop.cancelAndWait()
|
||||
if not client.transport.isNil:
|
||||
|
@ -127,4 +127,7 @@ proc stop*(proxy: RpcProxy) {.async.} =
|
||||
proc closeWait*(proxy: RpcProxy) {.async.} =
|
||||
await proxy.rpcHttpServer.closeWait()
|
||||
|
||||
func localAddress*(proxy: RpcProxy): seq[TransportAddress] =
|
||||
proxy.rpcHttpServer.localAddress()
|
||||
|
||||
{.pop.}
|
||||
|
@ -291,3 +291,7 @@ proc closeWait*(server: RpcHttpServer) {.async.} =
|
||||
## Cleanup resources of RPC server.
|
||||
for item in server.httpServers:
|
||||
await item.closeWait()
|
||||
|
||||
proc localAddress*(server: RpcHttpServer): seq[TransportAddress] =
|
||||
for item in server.httpServers:
|
||||
result.add item.instance.localAddress()
|
||||
|
@ -174,3 +174,7 @@ proc closeWait*(server: RpcSocketServer) {.async.} =
|
||||
## Cleanup resources of RPC server.
|
||||
for item in server.servers:
|
||||
await item.closeWait()
|
||||
|
||||
proc localAddress*(server: RpcSocketServer): seq[TransportAddress] =
|
||||
for x in server.servers:
|
||||
result.add x.localAddress
|
||||
|
@ -206,3 +206,6 @@ proc close*(server: RpcWebSocketServer) =
|
||||
proc closeWait*(server: RpcWebSocketServer) {.async.} =
|
||||
## Cleanup resources of RPC server.
|
||||
await server.server.closeWait()
|
||||
|
||||
proc localAddress*(server: RpcWebSocketServer): TransportAddress =
|
||||
server.server.localAddress()
|
||||
|
@ -79,12 +79,12 @@ proc installHandlers(s: RpcServer) =
|
||||
return "meow"
|
||||
|
||||
suite "test callsigs":
|
||||
var server = newRpcSocketServer(["127.0.0.1:8545"])
|
||||
var server = newRpcSocketServer(["127.0.0.1:0"])
|
||||
server.installHandlers()
|
||||
var client = newRpcSocketClient()
|
||||
|
||||
server.start()
|
||||
waitFor client.connect("127.0.0.1", Port(8545))
|
||||
waitFor client.connect(server.localAddress()[0])
|
||||
|
||||
test "callsigs from file":
|
||||
let res = waitFor client.shh_uninstallFilter(123)
|
||||
|
@ -1,3 +1,12 @@
|
||||
# json-rpc
|
||||
# Copyright (c) 2023 Status Research & Development GmbH
|
||||
# Licensed under either of
|
||||
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
|
||||
# * MIT license ([LICENSE-MIT](LICENSE-MIT))
|
||||
# at your option.
|
||||
# This file may not be copied, modified, or distributed except according to
|
||||
# those terms.
|
||||
|
||||
import
|
||||
unittest2,
|
||||
../json_rpc/router,
|
||||
|
@ -21,7 +21,7 @@ from strutils import rsplit
|
||||
template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0]
|
||||
|
||||
var
|
||||
server = newRpcSocketServer("localhost", Port(8545))
|
||||
server = newRpcSocketServer("127.0.0.1", Port(0))
|
||||
client = newRpcSocketClient()
|
||||
|
||||
## Generate Ethereum server RPCs
|
||||
@ -66,7 +66,7 @@ proc testSigCalls: Future[seq[string]] =
|
||||
return all(version, sha3)
|
||||
|
||||
server.start()
|
||||
waitFor client.connect("localhost", Port(8545))
|
||||
waitFor client.connect(server.localAddress()[0])
|
||||
|
||||
|
||||
suite "Local calls":
|
||||
|
@ -14,7 +14,7 @@ import
|
||||
|
||||
const
|
||||
serverHost = "127.0.0.1"
|
||||
serverPort = 8547
|
||||
serverPort = 0 # let the OS choose the port
|
||||
serverAddress = serverHost & ":" & $serverPort
|
||||
|
||||
proc setupServer*(srv: RpcServer) =
|
||||
@ -37,14 +37,14 @@ suite "HTTP server hook test":
|
||||
|
||||
test "no auth token":
|
||||
let client = newRpcHttpClient()
|
||||
waitFor client.connect(serverHost, Port(serverPort), false)
|
||||
waitFor client.connect("http://" & $srv.localAddress()[0])
|
||||
expect ErrorResponse:
|
||||
let r = waitFor client.call("testHook", %[%"abc"])
|
||||
discard r
|
||||
|
||||
test "good auth token":
|
||||
let client = newRpcHttpClient(getHeaders = authHeaders)
|
||||
waitFor client.connect(serverHost, Port(serverPort), false)
|
||||
waitFor client.connect("http://" & $srv.localAddress()[0])
|
||||
let r = waitFor client.call("testHook", %[%"abc"])
|
||||
check r.string == "\"Hello abc\""
|
||||
|
||||
@ -72,8 +72,8 @@ suite "Websocket server hook test":
|
||||
return true
|
||||
|
||||
let srv = newRpcWebSocketServer(
|
||||
"127.0.0.1",
|
||||
Port(8545),
|
||||
serverHost,
|
||||
Port(serverPort),
|
||||
authHooks = @[WsAuthHook(mockAuth)]
|
||||
)
|
||||
srv.setupServer()
|
||||
@ -82,13 +82,13 @@ suite "Websocket server hook test":
|
||||
|
||||
test "no auth token":
|
||||
try:
|
||||
waitFor client.connect("ws://127.0.0.1:8545/")
|
||||
waitFor client.connect("ws://" & $srv.localAddress())
|
||||
check false
|
||||
except CatchableError as e:
|
||||
check e.msg == "Server did not reply with a websocket upgrade: Header code: 403 Header reason: Forbidden Address: 127.0.0.1:8545"
|
||||
check e.msg == "Server did not reply with a websocket upgrade: Header code: 403 Header reason: Forbidden Address: " & $srv.localAddress()
|
||||
|
||||
test "good auth token":
|
||||
waitFor client.connect("ws://127.0.0.1:8545/", hooks = @[hook])
|
||||
waitFor client.connect("ws://" & $srv.localAddress(), hooks = @[hook])
|
||||
let r = waitFor client.call("testHook", %[%"abc"])
|
||||
check r.string == "\"Hello abc\""
|
||||
|
||||
|
@ -12,26 +12,26 @@ import ../json_rpc/[rpcserver, rpcclient]
|
||||
|
||||
const TestsCount = 100
|
||||
|
||||
proc simpleTest(address: string, port: Port): Future[bool] {.async.} =
|
||||
proc simpleTest(address: string): Future[bool] {.async.} =
|
||||
var client = newRpcHttpClient()
|
||||
await client.connect(address, port, secure = false)
|
||||
await client.connect("http://" & address)
|
||||
var r = await client.call("noParamsProc", %[])
|
||||
if r.string == "\"Hello world\"":
|
||||
result = true
|
||||
|
||||
proc continuousTest(address: string, port: Port): Future[int] {.async.} =
|
||||
proc continuousTest(address: string): Future[int] {.async.} =
|
||||
var client = newRpcHttpClient()
|
||||
result = 0
|
||||
for i in 0..<TestsCount:
|
||||
await client.connect(address, port, secure = false)
|
||||
await client.connect("http://" & address)
|
||||
var r = await client.call("myProc", %[%"abc", %[1, 2, 3, i]])
|
||||
if r.string == "\"Hello abc data: [1, 2, 3, " & $i & "]\"":
|
||||
result += 1
|
||||
await client.close()
|
||||
|
||||
proc invalidTest(address: string, port: Port): Future[bool] {.async.} =
|
||||
proc invalidTest(address: string): Future[bool] {.async.} =
|
||||
var client = newRpcHttpClient()
|
||||
await client.connect(address, port, secure = false)
|
||||
await client.connect("http://" & address)
|
||||
var invalidA, invalidB: bool
|
||||
try:
|
||||
var r = await client.call("invalidProcA", %[])
|
||||
@ -46,7 +46,7 @@ proc invalidTest(address: string, port: Port): Future[bool] {.async.} =
|
||||
if invalidA and invalidB:
|
||||
result = true
|
||||
|
||||
var httpsrv = newRpcHttpServer(["127.0.0.1:8545"])
|
||||
var httpsrv = newRpcHttpServer(["127.0.0.1:0"])
|
||||
|
||||
# Create RPC on server
|
||||
httpsrv.rpc("myProc") do(input: string, data: array[0..3, int]):
|
||||
@ -58,11 +58,11 @@ httpsrv.start()
|
||||
|
||||
suite "JSON-RPC test suite":
|
||||
test "Simple RPC call":
|
||||
check waitFor(simpleTest("127.0.0.1", Port(8545))) == true
|
||||
check waitFor(simpleTest($httpsrv.localAddress()[0])) == true
|
||||
test "Continuous RPC calls (" & $TestsCount & " messages)":
|
||||
check waitFor(continuousTest("127.0.0.1", Port(8545))) == TestsCount
|
||||
check waitFor(continuousTest($httpsrv.localAddress()[0])) == TestsCount
|
||||
test "Invalid RPC calls":
|
||||
check waitFor(invalidTest("127.0.0.1", Port(8545))) == true
|
||||
check waitFor(invalidTest($httpsrv.localAddress()[0])) == true
|
||||
|
||||
waitFor httpsrv.stop()
|
||||
waitFor httpsrv.closeWait()
|
||||
|
@ -73,26 +73,26 @@ N8r5CwGcIX/XPC3lKazzbZ8baA==
|
||||
-----END CERTIFICATE-----
|
||||
"""
|
||||
|
||||
proc simpleTest(address: string, port: Port): Future[bool] {.async.} =
|
||||
proc simpleTest(address: string): Future[bool] {.async.} =
|
||||
var client = newRpcHttpClient(secure=true)
|
||||
await client.connect(address, port, secure=true)
|
||||
await client.connect("https://" & address)
|
||||
var r = await client.call("noParamsProc", %[])
|
||||
if r.string == "\"Hello world\"":
|
||||
result = true
|
||||
|
||||
proc continuousTest(address: string, port: Port): Future[int] {.async.} =
|
||||
proc continuousTest(address: string): Future[int] {.async.} =
|
||||
var client = newRpcHttpClient(secure=true)
|
||||
result = 0
|
||||
for i in 0..<TestsCount:
|
||||
await client.connect(address, port, secure=true)
|
||||
await client.connect("https://" & address)
|
||||
var r = await client.call("myProc", %[%"abc", %[1, 2, 3, i]])
|
||||
if r.string == "\"Hello abc data: [1, 2, 3, " & $i & "]\"":
|
||||
result += 1
|
||||
await client.close()
|
||||
|
||||
proc invalidTest(address: string, port: Port): Future[bool] {.async.} =
|
||||
proc invalidTest(address: string): Future[bool] {.async.} =
|
||||
var client = newRpcHttpClient(secure=true)
|
||||
await client.connect(address, port, secure=true)
|
||||
await client.connect("https://" & address)
|
||||
var invalidA, invalidB: bool
|
||||
try:
|
||||
var r = await client.call("invalidProcA", %[])
|
||||
@ -111,7 +111,7 @@ let secureKey = TLSPrivateKey.init(HttpsSelfSignedRsaKey)
|
||||
let secureCert = TLSCertificate.init(HttpsSelfSignedRsaCert)
|
||||
var secureHttpSrv = RpcHttpServer.new()
|
||||
|
||||
secureHttpSrv.addSecureHttpServer("127.0.0.1:8545", secureKey, secureCert)
|
||||
secureHttpSrv.addSecureHttpServer("127.0.0.1:0", secureKey, secureCert)
|
||||
|
||||
# Create RPC on server
|
||||
secureHttpSrv.rpc("myProc") do(input: string, data: array[0..3, int]):
|
||||
@ -123,11 +123,11 @@ secureHttpSrv.start()
|
||||
|
||||
suite "JSON-RPC test suite":
|
||||
test "Simple RPC call":
|
||||
check waitFor(simpleTest("127.0.0.1", Port(8545))) == true
|
||||
check waitFor(simpleTest($secureHttpSrv.localAddress()[0])) == true
|
||||
test "Continuous RPC calls (" & $TestsCount & " messages)":
|
||||
check waitFor(continuousTest("127.0.0.1", Port(8545))) == TestsCount
|
||||
check waitFor(continuousTest($secureHttpSrv.localAddress()[0])) == TestsCount
|
||||
test "Invalid RPC calls":
|
||||
check waitFor(invalidTest("127.0.0.1", Port(8545))) == true
|
||||
check waitFor(invalidTest($secureHttpSrv.localAddress()[0])) == true
|
||||
|
||||
waitFor secureHttpSrv.stop()
|
||||
waitFor secureHttpSrv.closeWait()
|
||||
|
@ -11,9 +11,8 @@ import
|
||||
unittest2, chronicles,
|
||||
../json_rpc/[rpcclient, rpcserver, rpcproxy]
|
||||
|
||||
let srvAddress = initTAddress("127.0.0.1", Port(8545))
|
||||
let proxySrvAddress = "127.0.0.1:8546"
|
||||
let proxySrvAddressForClient = "http://"&proxySrvAddress
|
||||
let srvAddress = initTAddress("127.0.0.1", Port(0))
|
||||
let proxySrvAddress = "127.0.0.1:0"
|
||||
|
||||
template registerMethods(srv: RpcServer, proxy: RpcProxy) =
|
||||
srv.rpc("myProc") do(input: string, data: array[0..3, int]):
|
||||
@ -27,14 +26,14 @@ template registerMethods(srv: RpcServer, proxy: RpcProxy) =
|
||||
|
||||
suite "Proxy RPC through http":
|
||||
var srv = newRpcHttpServer([srvAddress])
|
||||
var proxy = RpcProxy.new([proxySrvAddress], getHttpClientConfig("http://127.0.0.1:8545"))
|
||||
var proxy = RpcProxy.new([proxySrvAddress], getHttpClientConfig("http://" & $srv.localAddress()[0]))
|
||||
var client = newRpcHttpClient()
|
||||
|
||||
registerMethods(srv, proxy)
|
||||
|
||||
srv.start()
|
||||
waitFor proxy.start()
|
||||
waitFor client.connect(proxySrvAddressForClient)
|
||||
waitFor client.connect("http://" & $proxy.localAddress()[0])
|
||||
|
||||
test "Successful RPC call thorugh proxy":
|
||||
let r = waitFor client.call("myProc", %[%"abc", %[1, 2, 3, 4]])
|
||||
@ -56,14 +55,14 @@ suite "Proxy RPC through http":
|
||||
|
||||
suite "Proxy RPC through websockets":
|
||||
var srv = newRpcWebSocketServer(srvAddress)
|
||||
var proxy = RpcProxy.new([proxySrvAddress], getWebSocketClientConfig("ws://127.0.0.1:8545"))
|
||||
var proxy = RpcProxy.new([proxySrvAddress], getWebSocketClientConfig("ws://" & $srv.localAddress()))
|
||||
var client = newRpcHttpClient()
|
||||
|
||||
registerMethods(srv, proxy)
|
||||
|
||||
srv.start()
|
||||
waitFor proxy.start()
|
||||
waitFor client.connect(proxySrvAddressForClient)
|
||||
waitFor client.connect("http://" & $proxy.localAddress()[0])
|
||||
|
||||
test "Successful RPC call thorugh proxy":
|
||||
let r = waitFor client.call("myProc", %[%"abc", %[1, 2, 3, 4]])
|
||||
|
@ -64,7 +64,7 @@ let
|
||||
},
|
||||
"c": %1.0}
|
||||
|
||||
var s = newRpcSocketServer(["127.0.0.1:8545"])
|
||||
var s = newRpcSocketServer(["127.0.0.1:0"])
|
||||
|
||||
# RPC definitions
|
||||
s.rpc("rpc.simplePath"):
|
||||
|
@ -23,12 +23,12 @@ proc setupServer*(srv: RpcServer) =
|
||||
raise (ref InvalidRequest)(code: -32001, msg: "Unknown payload")
|
||||
|
||||
suite "Socket Server/Client RPC":
|
||||
var srv = newRpcSocketServer(["127.0.0.1:8545"])
|
||||
var srv = newRpcSocketServer(["127.0.0.1:0"])
|
||||
var client = newRpcSocketClient()
|
||||
|
||||
srv.setupServer()
|
||||
srv.start()
|
||||
waitFor client.connect("127.0.0.1", Port(8545))
|
||||
waitFor client.connect(srv.localAddress()[0])
|
||||
|
||||
test "Successful RPC call":
|
||||
let r = waitFor client.call("myProc", %[%"abc", %[1, 2, 3, 4]])
|
||||
@ -53,12 +53,12 @@ suite "Socket Server/Client RPC":
|
||||
waitFor srv.closeWait()
|
||||
|
||||
suite "Websocket Server/Client RPC":
|
||||
var srv = newRpcWebSocketServer("127.0.0.1", Port(8545))
|
||||
var srv = newRpcWebSocketServer("127.0.0.1", Port(0))
|
||||
var client = newRpcWebSocketClient()
|
||||
|
||||
srv.setupServer()
|
||||
srv.start()
|
||||
waitFor client.connect("ws://127.0.0.1:8545/")
|
||||
waitFor client.connect("ws://" & $srv.localAddress())
|
||||
|
||||
test "Successful RPC call":
|
||||
let r = waitFor client.call("myProc", %[%"abc", %[1, 2, 3, 4]])
|
||||
@ -83,13 +83,13 @@ suite "Websocket Server/Client RPC":
|
||||
waitFor srv.closeWait()
|
||||
|
||||
suite "Websocket Server/Client RPC with Compression":
|
||||
var srv = newRpcWebSocketServer("127.0.0.1", Port(8545),
|
||||
var srv = newRpcWebSocketServer("127.0.0.1", Port(0),
|
||||
compression = true)
|
||||
var client = newRpcWebSocketClient()
|
||||
|
||||
srv.setupServer()
|
||||
srv.start()
|
||||
waitFor client.connect("ws://127.0.0.1:8545/",
|
||||
waitFor client.connect("ws://" & $srv.localAddress(),
|
||||
compression = true)
|
||||
|
||||
test "Successful RPC call":
|
||||
|
Loading…
x
Reference in New Issue
Block a user