53 lines
1.5 KiB
Nim
53 lines
1.5 KiB
Nim
## Nim-Codex
|
|
## Copyright (c) 2023 Status Research & Development GmbH
|
|
## Licensed under either of
|
|
## * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
|
|
## * MIT license ([LICENSE-MIT](LICENSE-MIT))
|
|
## at your option.
|
|
## This file may not be copied, modified, or distributed except according to
|
|
## those terms.
|
|
|
|
import std/sequtils
|
|
import std/sugar
|
|
import pkg/chronos
|
|
import pkg/libp2p
|
|
import pkg/questionable
|
|
import pkg/questionable/results
|
|
|
|
import pkg/codex/stores/repostore
|
|
import pkg/codex/utils/asynciter
|
|
|
|
type
|
|
MockRepoStore* = ref object of RepoStore
|
|
delBlockCids*: seq[Cid]
|
|
getBeMaxNumber*: int
|
|
getBeOffset*: int
|
|
|
|
testBlockExpirations*: seq[BlockExpiration]
|
|
getBlockExpirationsThrows*: bool
|
|
|
|
method delBlock*(self: MockRepoStore, cid: Cid): Future[?!void] {.async.} =
|
|
self.delBlockCids.add(cid)
|
|
self.testBlockExpirations = self.testBlockExpirations.filterIt(it.cid != cid)
|
|
return success()
|
|
|
|
method getBlockExpirations*(self: MockRepoStore, maxNumber: int, offset: int): Future[?!AsyncIter[BlockExpiration]] {.async.} =
|
|
if self.getBlockExpirationsThrows:
|
|
raise new CatchableError
|
|
|
|
self.getBeMaxNumber = maxNumber
|
|
self.getBeOffset = offset
|
|
|
|
let
|
|
testBlockExpirationsCpy = @(self.testBlockExpirations)
|
|
limit = min(offset + maxNumber, len(testBlockExpirationsCpy))
|
|
|
|
let
|
|
iter1 = AsyncIter[int].new(offset..<limit)
|
|
iter2 = map[int, BlockExpiration](iter1,
|
|
proc (i: int): Future[BlockExpiration] {.async.} =
|
|
testBlockExpirationsCpy[i]
|
|
)
|
|
|
|
success(iter2)
|