mirror of
https://github.com/logos-storage/logos-storage-network-crawler.git
synced 2026-01-02 13:33:08 +00:00
99 lines
2.1 KiB
Nim
99 lines
2.1 KiB
Nim
import std/os
|
|
import pkg/chronos
|
|
import pkg/questionable/results
|
|
import pkg/asynctest/chronos/unittest
|
|
import pkg/datastore/typedds
|
|
|
|
import ../../../codexcrawler/components/requeststore
|
|
import ../../../codexcrawler/utils/datastoreutils
|
|
import ../../../codexcrawler/types
|
|
import ../../../codexcrawler/state
|
|
import ../mocks/mockstate
|
|
import ../helpers
|
|
|
|
suite "Requeststore":
|
|
let
|
|
dsPath = getTempDir() / "testds"
|
|
requeststoreName = "requeststore"
|
|
|
|
var
|
|
ds: TypedDatastore
|
|
state: MockState
|
|
store: RequestStore
|
|
|
|
setup:
|
|
ds = createTypedDatastore(dsPath).tryGet()
|
|
state = createMockState()
|
|
|
|
store = RequestStore.new(state, ds)
|
|
|
|
teardown:
|
|
(await ds.close()).tryGet()
|
|
state.checkAllUnsubscribed()
|
|
removeDir(dsPath)
|
|
|
|
test "requestEntry encoding":
|
|
let entry = RequestEntry(id: genRid())
|
|
|
|
let
|
|
bytes = entry.encode()
|
|
decoded = RequestEntry.decode(bytes).tryGet()
|
|
|
|
check:
|
|
entry.id == decoded.id
|
|
|
|
test "add stores a new requestId":
|
|
let rid = genRid()
|
|
(await store.add(rid)).tryGet()
|
|
|
|
let
|
|
key = Key.init(requeststoreName / $rid).tryGet()
|
|
stored = (await get[RequestEntry](ds, key)).tryGet()
|
|
|
|
check:
|
|
stored.id == rid
|
|
|
|
test "remove will remove an entry":
|
|
let rid = genRid()
|
|
(await store.add(rid)).tryGet()
|
|
(await store.remove(rid)).tryGet()
|
|
|
|
let
|
|
key = Key.init(requeststoreName / $rid).tryGet()
|
|
isStored = (await ds.has(key)).tryGet()
|
|
|
|
check:
|
|
isStored == false
|
|
|
|
test "iterateAll yields all entries":
|
|
let
|
|
rid1 = genRid()
|
|
rid2 = genRid()
|
|
rid3 = genRid()
|
|
|
|
(await store.add(rid1)).tryGet()
|
|
(await store.add(rid2)).tryGet()
|
|
(await store.add(rid3)).tryGet()
|
|
|
|
var entries = newSeq[RequestEntry]()
|
|
proc onEntry(entry: RequestEntry): Future[?!void] {.async: (raises: []), gcsafe.} =
|
|
entries.add(entry)
|
|
return success()
|
|
|
|
(await store.iterateAll(onEntry)).tryGet()
|
|
|
|
check:
|
|
entries.len == 3
|
|
|
|
let
|
|
ids = @[entries[0].id, entries[1].id, entries[2].id]
|
|
all = @[rid1, rid2, rid3]
|
|
|
|
for id in ids:
|
|
check:
|
|
id in all
|
|
|
|
for id in all:
|
|
check:
|
|
id in ids
|