mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-05-20 05:39:26 +00:00
80 lines
1.9 KiB
Nim
80 lines
1.9 KiB
Nim
|
|
{.used.}
|
||
|
|
|
||
|
|
import std/[os, strutils, times]
|
||
|
|
import chronos, results
|
||
|
|
import testutils/unittests
|
||
|
|
import brokers/multi_request_broker
|
||
|
|
import waku/persistency/persistency
|
||
|
|
|
||
|
|
proc tmpRoot(label: string): string =
|
||
|
|
let p = getTempDir() / ("persistency_singleton_" & label & "_" & $epochTime().int)
|
||
|
|
removeDir(p)
|
||
|
|
p
|
||
|
|
|
||
|
|
suite "Persistency singleton":
|
||
|
|
test "instance(rootDir) is idempotent with the same rootDir":
|
||
|
|
let root = tmpRoot("idem")
|
||
|
|
defer:
|
||
|
|
removeDir(root)
|
||
|
|
defer:
|
||
|
|
Persistency.reset()
|
||
|
|
|
||
|
|
let p1 = Persistency.instance(root).get()
|
||
|
|
let p2 = Persistency.instance(root).get()
|
||
|
|
check p1 == p2
|
||
|
|
|
||
|
|
test "instance(rootDir) refuses re-init with a different rootDir":
|
||
|
|
let rootA = tmpRoot("a")
|
||
|
|
let rootB = tmpRoot("b")
|
||
|
|
defer:
|
||
|
|
removeDir(rootA)
|
||
|
|
defer:
|
||
|
|
removeDir(rootB)
|
||
|
|
defer:
|
||
|
|
Persistency.reset()
|
||
|
|
|
||
|
|
discard Persistency.instance(rootA).get()
|
||
|
|
let r = Persistency.instance(rootB)
|
||
|
|
check r.isErr
|
||
|
|
check r.error.kind == peInvalidArgument
|
||
|
|
|
||
|
|
test "no-arg instance() fails before init, succeeds after":
|
||
|
|
let root = tmpRoot("noarg")
|
||
|
|
defer:
|
||
|
|
removeDir(root)
|
||
|
|
defer:
|
||
|
|
Persistency.reset()
|
||
|
|
|
||
|
|
let before = Persistency.instance()
|
||
|
|
check before.isErr
|
||
|
|
check before.error.kind == peClosed
|
||
|
|
|
||
|
|
discard Persistency.instance(root).get()
|
||
|
|
let after = Persistency.instance()
|
||
|
|
check after.isOk
|
||
|
|
|
||
|
|
test "reset() makes the next instance() target a different rootDir":
|
||
|
|
let rootA = tmpRoot("rs-a")
|
||
|
|
let rootB = tmpRoot("rs-b")
|
||
|
|
defer:
|
||
|
|
removeDir(rootA)
|
||
|
|
defer:
|
||
|
|
removeDir(rootB)
|
||
|
|
defer:
|
||
|
|
Persistency.reset()
|
||
|
|
|
||
|
|
let pA = Persistency.instance(rootA).get()
|
||
|
|
check pA.rootDir == rootA
|
||
|
|
Persistency.reset()
|
||
|
|
|
||
|
|
let pB = Persistency.instance(rootB).get()
|
||
|
|
check pB.rootDir == rootB
|
||
|
|
check pA != pB
|
||
|
|
|
||
|
|
test "reset() is idempotent":
|
||
|
|
defer:
|
||
|
|
Persistency.reset()
|
||
|
|
Persistency.reset()
|
||
|
|
Persistency.reset()
|
||
|
|
check Persistency.instance().isErr
|