mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-01-02 13:33:10 +00:00
* cleanup imports and logs * add BlockHandle type * revert deps * refactor: async error handling and future tracking improvements - Update async procedures to use explicit raises annotation - Modify TrackedFutures to handle futures with no raised exceptions - Replace `asyncSpawn` with explicit future tracking - Update test suites to use `unittest2` - Standardize error handling across network and async components - Remove deprecated error handling patterns This commit introduces a more robust approach to async error handling and future management, improving type safety and reducing potential runtime errors. * bump nim-serde * remove asyncSpawn * rework background downloads and prefetch * imporove logging * refactor: enhance async procedures with error handling and raise annotations * misc cleanup * misc * refactor: implement allFinishedFailed to aggregate future results with success and failure tracking * refactor: update error handling in reader procedures to raise ChunkerError and CancelledError * refactor: improve error handling in wantListHandler and accountHandler procedures * refactor: simplify LPStreamReadError creation by consolidating parameters * refactor: enhance error handling in AsyncStreamWrapper to catch unexpected errors * refactor: enhance error handling in advertiser and discovery loops to improve resilience * misc * refactor: improve code structure and readability * remove cancellation from addSlotToQueue * refactor: add assertion for unexpected errors in local store checks * refactor: prevent tracking of finished futures and improve test assertions * refactor: improve error handling in local store checks * remove usage of msgDetail * feat: add initial implementation of discovery engine and related components * refactor: improve task scheduling logic by removing unnecessary break statement * break after scheduling a task * make taskHandler cancelable * refactor: update async handlers to raise CancelledError * refactor(advertiser): streamline error handling and improve task flow in advertise loops * fix: correct spelling of "divisible" in error messages and comments * refactor(discovery): simplify discovery task loop and improve error handling * refactor(engine): filter peers before processing in cancelBlocks procedure
123 lines
2.6 KiB
Nim
123 lines
2.6 KiB
Nim
import std/sugar
|
|
|
|
import pkg/questionable
|
|
import pkg/chronos
|
|
import pkg/codex/utils/iter
|
|
|
|
import ../../asynctest
|
|
import ../helpers
|
|
|
|
suite "Test Iter":
|
|
test "Should be finished":
|
|
let iter = Iter[int].empty()
|
|
|
|
check:
|
|
iter.finished == true
|
|
|
|
test "Should be iterable with `items`":
|
|
let iter = Iter.new(0 ..< 5)
|
|
|
|
let items = collect:
|
|
for v in iter:
|
|
v
|
|
|
|
check:
|
|
items == @[0, 1, 2, 3, 4]
|
|
|
|
test "Should be iterable with `pairs`":
|
|
let iter = Iter.new(0 ..< 5)
|
|
|
|
let pairs = collect:
|
|
for i, v in iter:
|
|
(i, v)
|
|
|
|
check:
|
|
pairs == @[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
|
|
|
|
test "Should map each item using `map`":
|
|
let iter = Iter.new(0 ..< 5).map((i: int) => $i)
|
|
|
|
check:
|
|
iter.toSeq() == @["0", "1", "2", "3", "4"]
|
|
|
|
test "Should leave only odd items using `filter`":
|
|
let iter = Iter.new(0 ..< 5).filter((i: int) => (i mod 2) == 1)
|
|
|
|
check:
|
|
iter.toSeq() == @[1, 3]
|
|
|
|
test "Should leave only odd items using `mapFilter`":
|
|
let
|
|
iter1 = Iter.new(0 ..< 5)
|
|
iter2 = mapFilter[int, string](
|
|
iter1,
|
|
proc(i: int): ?string =
|
|
if (i mod 2) == 1:
|
|
some($i)
|
|
else:
|
|
string.none,
|
|
)
|
|
|
|
check:
|
|
iter2.toSeq() == @["1", "3"]
|
|
|
|
test "Should yield all items before err using `map`":
|
|
let iter = Iter.new(0 ..< 5).map(
|
|
proc(i: int): string =
|
|
if i < 3:
|
|
return $i
|
|
else:
|
|
raise newException(CatchableError, "Some error")
|
|
)
|
|
|
|
var collected: seq[string]
|
|
|
|
expect CatchableError:
|
|
for i in iter:
|
|
collected.add(i)
|
|
|
|
check:
|
|
collected == @["0", "1", "2"]
|
|
iter.finished
|
|
|
|
test "Should yield all items before err using `filter`":
|
|
let iter = Iter.new(0 ..< 5).filter(
|
|
proc(i: int): bool =
|
|
if i < 3:
|
|
return true
|
|
else:
|
|
raise newException(CatchableError, "Some error")
|
|
)
|
|
|
|
var collected: seq[int]
|
|
|
|
expect CatchableError:
|
|
for i in iter:
|
|
collected.add(i)
|
|
|
|
check:
|
|
collected == @[0, 1, 2]
|
|
iter.finished
|
|
|
|
test "Should yield all items before err using `mapFilter`":
|
|
let
|
|
iter1 = Iter.new(0 ..< 5)
|
|
iter2 = mapFilter[int, string](
|
|
iter1,
|
|
proc(i: int): ?string =
|
|
if i < 3:
|
|
return some($i)
|
|
else:
|
|
raise newException(CatchableError, "Some error"),
|
|
)
|
|
|
|
var collected: seq[string]
|
|
|
|
expect CatchableError:
|
|
for i in iter2:
|
|
collected.add(i)
|
|
|
|
check:
|
|
collected == @["0", "1", "2"]
|
|
iter2.finished
|