Skip to content

Commit 68794f4

Browse files
committed
test: failed result on error
1 parent e7bcc75 commit 68794f4

File tree

4 files changed

+32
-15
lines changed

4 files changed

+32
-15
lines changed

ethers/providers/jsonrpc/subscriptions.nim

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,8 @@ proc getCallback(subscriptions: JsonRpcSubscriptions,
8080
id: JsonNode): ?SubscriptionCallback {. raises:[].} =
8181
try:
8282
if not id.isNil and id in subscriptions.callbacks:
83-
try:
84-
return subscriptions.callbacks[id].some
85-
except: discard
86-
except KeyError:
87-
return SubscriptionCallback.none
83+
return subscriptions.callbacks[id].some
84+
except: discard
8885

8986
# Web sockets
9087

@@ -128,8 +125,8 @@ method subscribeLogs(subscriptions: WebSocketSubscriptions,
128125
onLog(failure(Log, error.toErr(SubscriptionError)))
129126
return
130127

131-
if log =? Log.fromJson(arguments{"result"}):
132-
onLog(success(log))
128+
let res = Log.fromJson(arguments{"result"}).mapFailure(SubscriptionError)
129+
onLog(res)
133130

134131
let id = await subscriptions.client.eth_subscribe("logs", filter)
135132
subscriptions.callbacks[id] = callback
@@ -269,13 +266,13 @@ method subscribeLogs(subscriptions: PollingSubscriptions,
269266
Future[JsonNode]
270267
{.async.} =
271268

272-
proc callback(id: JsonNode, changeResult: ?!JsonNode) =
273-
without change =? changeResult, error:
269+
proc callback(id: JsonNode, argumentsResult: ?!JsonNode) =
270+
without arguments =? argumentsResult, error:
274271
onLog(failure(Log, error.toErr(SubscriptionError)))
275272
return
276273

277-
if log =? Log.fromJson(change):
278-
onLog(success(log))
274+
let res = Log.fromJson(arguments).mapFailure(SubscriptionError)
275+
onLog(res)
279276

280277
let id = await subscriptions.client.eth_newFilter(filter)
281278
subscriptions.callbacks[id] = callback

testmodule/providers/jsonrpc/rpc_mock.nim

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ import pkg/json_rpc/errors
99

1010
type MockRpcHttpServer* = ref object
1111
filters*: seq[string]
12+
nextGetChangesReturnsError*: bool
1213
srv: RpcHttpServer
1314

1415
proc new*(_: type MockRpcHttpServer): MockRpcHttpServer =
1516
let srv = newRpcHttpServer(["127.0.0.1:0"])
16-
MockRpcHttpServer(filters: @[], srv: srv)
17+
MockRpcHttpServer(filters: @[], srv: srv, nextGetChangesReturnsError: false)
1718

1819
proc invalidateFilter*(server: MockRpcHttpServer, jsonId: JsonNode) =
1920
server.filters.keepItIf it != jsonId.getStr
@@ -30,6 +31,9 @@ proc start*(server: MockRpcHttpServer) =
3031
return filterId
3132

3233
server.srv.router.rpc("eth_getFilterChanges") do(id: string) -> seq[string]:
34+
if server.nextGetChangesReturnsError:
35+
raise (ref ApplicationError)(code: -32000, msg: "unknown error")
36+
3337
if id notin server.filters:
3438
raise (ref ApplicationError)(code: -32000, msg: "filter not found")
3539

testmodule/providers/jsonrpc/testJsonRpcSubscriptions.nim

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ suite "HTTP polling subscriptions":
9999

100100
subscriptionTests(subscriptions, client)
101101

102-
suite "HTTP polling subscriptions - filter not found":
102+
suite "HTTP polling subscriptions - mock tests":
103103

104104
var subscriptions: PollingSubscriptions
105105
var client: RpcHttpClient
@@ -193,3 +193,17 @@ suite "HTTP polling subscriptions - filter not found":
193193
await startServer()
194194

195195
check eventually subscriptions.subscriptionMapping[id] != id
196+
197+
test "calls callback with failed result on error":
198+
let filter = EventFilter(address: Address.example, topics: @[array[32, byte].example])
199+
var failedResultReceived = false
200+
201+
proc handler(log: ?!Log) =
202+
if log.isErr:
203+
failedResultReceived = true
204+
205+
let id = await subscriptions.subscribeLogs(filter, handler)
206+
207+
await sleepAsync(50.milliseconds)
208+
mockServer.nextGetChangesReturnsError = true
209+
check eventually failedResultReceived

testmodule/testContracts.nim

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,10 @@ for url in ["ws://" & providerUrl, "http://" & providerUrl]:
150150
var transfers: seq[Transfer]
151151

152152
proc handleTransfer(transferRes: ?!Transfer) =
153-
if transfer =? transferRes:
154-
transfers.add(transfer)
153+
without transfer =? transferRes, error:
154+
echo error.msg
155+
156+
transfers.add(transfer)
155157

156158
let signer0 = provider.getSigner(accounts[0])
157159
let signer1 = provider.getSigner(accounts[1])

0 commit comments

Comments
 (0)