diff --git a/testmodule/providers/jsonrpc/rpc_mock.nim b/testmodule/providers/jsonrpc/rpc_mock.nim index e747ada..78a3a25 100644 --- a/testmodule/providers/jsonrpc/rpc_mock.nim +++ b/testmodule/providers/jsonrpc/rpc_mock.nim @@ -6,7 +6,7 @@ import std/tables import pkg/stew/byteutils import pkg/json_rpc/rpcserver except `%`, `%*` import pkg/json_rpc/errors - +import std/random type MockRpcHttpServer* = ref object filters*: Table[string, bool] @@ -14,7 +14,10 @@ type MockRpcHttpServer* = ref object srv: RpcHttpServer proc new*(_: type MockRpcHttpServer): MockRpcHttpServer = - MockRpcHttpServer(filters: initTable[string, bool](), newFilterCounter: 0, srv: newRpcHttpServer(["127.0.0.1:65080"])) + let port = rand(65000..<66000) + let srv = newRpcHttpServer(["127.0.0.1:" & port]) + let filters = initTable[string, bool]() + MockRpcHttpServer(filters: filters, newFilterCounter: 0, srv: srv) proc invalidateFilter*(server: MockRpcHttpServer, id: string) = server.filters[id] = false diff --git a/testmodule/providers/jsonrpc/testJsonRpcSubscriptions.nim b/testmodule/providers/jsonrpc/testJsonRpcSubscriptions.nim index 48342ca..49159bc 100644 --- a/testmodule/providers/jsonrpc/testJsonRpcSubscriptions.nim +++ b/testmodule/providers/jsonrpc/testJsonRpcSubscriptions.nim @@ -128,18 +128,29 @@ suite "HTTP polling subscriptions - filter not found": await mockServer.stop() test "filter not found error recreates filter": + echo "1" let filter = EventFilter(address: Address.example, topics: @[array[32, byte].example]) + echo "2" let emptyHandler = proc(log: Log) = discard + echo "3" check mockServer.newFilterCounter == 0 + echo "4" let jsonId = await subscriptions.subscribeLogs(filter, emptyHandler) + echo "5" let id = string.fromJson(jsonId).tryGet + echo "6" check mockServer.newFilterCounter == 1 + echo "7" await sleepAsync(50.millis) + echo "8" mockServer.invalidateFilter(id) + echo "9" await sleepAsync(50.millis) + echo "10" check mockServer.newFilterCounter == 2 + echo "11" test "recreated filter can be still unsubscribed using the original id": let filter = EventFilter(address: Address.example, topics: @[array[32, byte].example])