Rename errors to be more http-specific

This commit is contained in:
Eric 2025-05-28 19:26:10 +10:00
parent be192c880e
commit e849795d96
No known key found for this signature in database
3 changed files with 15 additions and 14 deletions

View File

@ -9,8 +9,8 @@ type
data*: ?seq[byte]
RpcNetworkError* = object of EthersError
RpcHttpErrorResponse* = object of RpcNetworkError
RequestLimitError* = object of RpcHttpErrorResponse
RequestTimeoutError* = object of RpcHttpErrorResponse
HttpRequestLimitError* = object of RpcHttpErrorResponse
HttpRequestTimeoutError* = object of RpcHttpErrorResponse
{.push raises:[].}

View File

@ -67,9 +67,9 @@ template convertError*(body) =
raiseNetworkError(error)
except ErrorResponse as error:
if error.status == 429:
raise newException(RequestLimitError, error.msg, error)
raise newException(HttpRequestLimitError, error.msg, error)
elif error.status == 408:
raise newException(RequestTimeoutError, error.msg, error)
raise newException(HttpRequestTimeoutError, error.msg, error)
else:
raiseJsonRpcProviderError(error)
except JsonRpcError as error:

View File

@ -1,3 +1,4 @@
import std/importutils
import std/sequtils
import std/typetraits
@ -41,7 +42,7 @@ type
method mint(token: TestToken, holder: Address, amount: UInt256): Confirmable {.base, contract.}
suite "Network errors":
suite "Network errors - HTTP":
var provider: JsonRpcProvider
var mockServer: MockHttpServer
@ -60,13 +61,13 @@ suite "Network errors":
await mockServer.stop()
proc registerRpcMethods(response: RpcResponse) =
mockServer.registerRpcMethod("eth_accounts", response)
mockServer.registerRpcMethod("eth_call", response)
mockServer.registerRpcMethod("eth_sendTransaction", response)
mockServer.registerRpcMethod("eth_sendRawTransaction", response)
mockServer.registerRpcMethod("eth_newBlockFilter", response)
mockServer.registerRpcMethod("eth_newFilter", response)
# mockServer.registerRpcMethod("eth_subscribe", response) # TODO: handle
mockServer.registerRpcResponse("eth_accounts", response)
mockServer.registerRpcResponse("eth_call", response)
mockServer.registerRpcResponse("eth_sendTransaction", response)
mockServer.registerRpcResponse("eth_sendRawTransaction", response)
mockServer.registerRpcResponse("eth_newBlockFilter", response)
mockServer.registerRpcResponse("eth_newFilter", response)
# mockServer.registerRpcResponse("eth_subscribe", response) # TODO: handle
# eth_subscribe for websockets
proc testCustomResponse(errorName: string, responseHttpCode: HttpCode, responseText: string, errorType: type CatchableError) =
@ -135,8 +136,8 @@ suite "Network errors":
let emptyHandler = proc(log: ?!Log) = discard
discard await provider.subscribe(filter, emptyHandler)
testCustomResponse("429", Http429, "Too many requests", RequestLimitError)
testCustomResponse("408", Http408, "Request timed out", RequestTimeoutError)
testCustomResponse("429", Http429, "Too many requests", HttpRequestLimitError)
testCustomResponse("408", Http408, "Request timed out", HttpRequestTimeoutError)
testCustomResponse("non-429", Http500, "Server error", JsonRpcProviderError)
test "raises RpcNetworkError when reading response headers times out":