mirror of
https://github.com/logos-storage/nim-ethers.git
synced 2026-01-04 14:43:09 +00:00
67 lines
2.1 KiB
Nim
67 lines
2.1 KiB
Nim
import std/os
|
|
import pkg/asynctest/chronos/unittest
|
|
import pkg/serde
|
|
import pkg/json_rpc/rpcclient
|
|
import pkg/json_rpc/rpcserver
|
|
import ethers/providers/jsonrpc
|
|
|
|
let providerUrl = getEnv("ETHERS_TEST_PROVIDER", "localhost:8545")
|
|
for url in ["ws://" & providerUrl, "http://" & providerUrl]:
|
|
|
|
suite "JSON-RPC Subscriptions (" & url & ")":
|
|
|
|
var provider: JsonRpcProvider
|
|
|
|
setup:
|
|
provider = await JsonRpcProvider.connect(url, pollingInterval = 100.millis)
|
|
|
|
teardown:
|
|
await provider.close()
|
|
|
|
test "subscribes to new blocks":
|
|
var latestBlock: Block
|
|
proc callback(blck: ?!Block) =
|
|
latestBlock = blck.value
|
|
let subscription = await provider.subscribe(callback)
|
|
discard await provider.send("evm_mine")
|
|
check eventually latestBlock.number.isSome
|
|
check latestBlock.hash.isSome
|
|
check latestBlock.timestamp > 0.u256
|
|
await subscription.unsubscribe()
|
|
|
|
test "stops listening to new blocks when unsubscribed":
|
|
var count = 0
|
|
proc callback(blck: ?!Block) =
|
|
if blck.isOk:
|
|
inc count
|
|
let subscription = await provider.subscribe(callback)
|
|
discard await provider.send("evm_mine")
|
|
check eventually count > 0
|
|
await subscription.unsubscribe()
|
|
count = 0
|
|
discard await provider.send("evm_mine")
|
|
await sleepAsync(200.millis)
|
|
check count == 0
|
|
|
|
test "duplicate unsubscribe is harmless":
|
|
proc callback(blck: ?!Block) = discard
|
|
let subscription = await provider.subscribe(callback)
|
|
await subscription.unsubscribe()
|
|
await subscription.unsubscribe()
|
|
|
|
test "stops listening to new blocks when provider is closed":
|
|
var count = 0
|
|
proc callback(blck: ?!Block) =
|
|
if blck.isOk:
|
|
inc count
|
|
discard await provider.subscribe(callback)
|
|
discard await provider.send("evm_mine")
|
|
check eventually count > 0
|
|
await provider.close()
|
|
count = 0
|
|
provider = await JsonRpcProvider.connect(url, pollingInterval = 100.millis)
|
|
discard await provider.send("evm_mine")
|
|
await sleepAsync(200.millis)
|
|
check count == 0
|
|
|