mirror of
https://github.com/status-im/nim-codex.git
synced 2025-01-09 10:32:11 +00:00
7a0a48e4a5
* [build] disable XCannotRaiseY hint There are too many {.raises:[Defect].} in the libraries that we use, drowning out all other warnings and hints * [build] disable BareExcept warning Not yet enabled in a released version of Nim, so libraries that we depend on have not fixed this yet, drowning out our own hints and warnings * [build] disable DotLikeOps warning dot-like ops were an experiment that is not going land in Nim * [build] compile log statements in tests When running tests, all log statements are compiled. They are filtered out at runtime during a test run. * [build] do not build executable when running unit test It's already built in the integration test * [build] Fix warnings - remove unused code - remove unused imports - stop using deprecated stuff * [build] Put compiler flags behind nim version checks * [CI] remove Nim 1.2 compatibility
81 lines
2.3 KiB
Nim
81 lines
2.3 KiB
Nim
import std/sequtils
|
|
import std/algorithm
|
|
|
|
import pkg/chronos
|
|
import pkg/asynctest
|
|
import pkg/libp2p
|
|
import pkg/stew/byteutils
|
|
|
|
import pkg/codex/blocktype as bt
|
|
import pkg/codex/blockexchange
|
|
|
|
suite "Pending Blocks":
|
|
test "Should add want handle":
|
|
let
|
|
pendingBlocks = PendingBlocksManager.new()
|
|
blk = bt.Block.new("Hello".toBytes).tryGet
|
|
|
|
discard pendingBlocks.getWantHandle(blk.cid)
|
|
|
|
check pendingBlocks.pending(blk.cid)
|
|
|
|
test "Should resolve want handle":
|
|
let
|
|
pendingBlocks = PendingBlocksManager.new()
|
|
blk = bt.Block.new("Hello".toBytes).tryGet
|
|
handle = pendingBlocks.getWantHandle(blk.cid)
|
|
|
|
check blk.cid in pendingBlocks
|
|
pendingBlocks.resolve(@[blk])
|
|
check (await handle) == blk
|
|
check blk.cid notin pendingBlocks
|
|
|
|
test "Should cancel want handle":
|
|
let
|
|
pendingBlocks = PendingBlocksManager.new()
|
|
blk = bt.Block.new("Hello".toBytes).tryGet
|
|
handle = pendingBlocks.getWantHandle(blk.cid)
|
|
|
|
check blk.cid in pendingBlocks
|
|
await handle.cancelAndWait()
|
|
check blk.cid notin pendingBlocks
|
|
|
|
test "Should expire want handle":
|
|
let
|
|
pendingBlocks = PendingBlocksManager.new()
|
|
blk = bt.Block.new("Hello".toBytes).tryGet
|
|
handle = pendingBlocks.getWantHandle(blk.cid, 1.millis)
|
|
|
|
check blk.cid in pendingBlocks
|
|
|
|
await sleepAsync(10.millis)
|
|
expect AsyncTimeoutError:
|
|
discard await handle
|
|
|
|
check blk.cid notin pendingBlocks
|
|
|
|
test "Should get wants list":
|
|
let
|
|
pendingBlocks = PendingBlocksManager.new()
|
|
blks = (0..9).mapIt( bt.Block.new(("Hello " & $it).toBytes).tryGet )
|
|
|
|
discard blks.mapIt( pendingBlocks.getWantHandle( it.cid ) )
|
|
|
|
check:
|
|
blks.mapIt( $it.cid ).sorted(cmp[string]) ==
|
|
toSeq(pendingBlocks.wantList).mapIt( $it ).sorted(cmp[string])
|
|
|
|
test "Should get want handles list":
|
|
let
|
|
pendingBlocks = PendingBlocksManager.new()
|
|
blks = (0..9).mapIt( bt.Block.new(("Hello " & $it).toBytes).tryGet )
|
|
handles = blks.mapIt( pendingBlocks.getWantHandle( it.cid ) )
|
|
wantHandles = toSeq(pendingBlocks.wantHandles)
|
|
|
|
check wantHandles.len == handles.len
|
|
pendingBlocks.resolve(blks)
|
|
|
|
check:
|
|
(await allFinished(wantHandles)).mapIt( $it.read.cid ).sorted(cmp[string]) ==
|
|
(await allFinished(handles)).mapIt( $it.read.cid ).sorted(cmp[string])
|