nim-datastore/tests/datastore/leveldb/testleveldbds.nim

135 lines
2.9 KiB
Nim

import std/options
import std/os
import std/sequtils
from std/algorithm import sort, reversed
import pkg/asynctest
import pkg/chronos
import pkg/stew/byteutils
import pkg/datastore
import pkg/datastore/key
import pkg/datastore/leveldb/leveldbds
import ../dscommontests
import ../modifycommontests
import ../querycommontests
import ../typeddscommontests
suite "Test Basic LevelDbDatastore":
let
tempDir = getTempDir() / "testleveldbds"
ds = LevelDbDatastore.new(tempDir).tryGet()
key = Key.init("a:b/c/d:e").tryGet()
bytes = "some bytes".toBytes
otherBytes = "some other bytes".toBytes
setupAll:
createdir(tempDir)
teardownAll:
(await ds.close()).tryGet()
removeDir(tempDir)
basicStoreTests(ds, key, bytes, otherBytes)
modifyTests(ds, key)
typedDsTests(ds, key)
suite "Test LevelDB Query":
let tempDir = getTempDir() / "testleveldbds"
var ds: LevelDbDatastore
setup:
createdir(tempDir)
ds = LevelDbDatastore.new(tempDir).tryGet()
teardown:
(await ds.close()).tryGet
removeDir(tempDir)
queryTests(ds,
testLimitsAndOffsets = true,
testSortOrder = false
)
suite "Test LevelDB Typed Query":
let
ds = SQLiteDatastore.new(Memory).tryGet()
teardownAll:
(await ds.close()).tryGet
typedDsQueryTests(ds)
suite "LevelDB Query: keys should disregard trailing wildcards":
let tempDir = getTempDir() / "testleveldbds"
var
ds: LevelDbDatastore
key1: Key
key2: Key
key3: Key
val1: seq[byte]
val2: seq[byte]
val3: seq[byte]
setupAll:
key1 = Key.init("/a").tryGet
key2 = Key.init("/a/b").tryGet
key3 = Key.init("/a/b/c").tryGet
val1 = "value for 1".toBytes
val2 = "value for 2".toBytes
val3 = "value for 3".toBytes
setup:
createdir(tempDir)
ds = LevelDbDatastore.new(tempDir).tryGet()
(await ds.put(key1, val1)).tryGet
(await ds.put(key2, val2)).tryGet
(await ds.put(key3, val3)).tryGet
teardown:
(await ds.close()).tryGet
removeDir(tempDir)
test "Forward":
let
q = Query.init(Key.init("/a/*").tryGet)
iter = (await ds.query(q)).tryGet
res = (await allFinished(toSeq(iter)))
.mapIt( it.read.tryGet )
.filterIt( it.key.isSome )
check:
res.len == 3
res[0].key.get == key1
res[0].data == val1
res[1].key.get == key2
res[1].data == val2
res[2].key.get == key3
res[2].data == val3
(await iter.dispose()).tryGet
test "Backwards":
let
q = Query.init(Key.init("/a\\*").tryGet)
iter = (await ds.query(q)).tryGet
res = (await allFinished(toSeq(iter)))
.mapIt( it.read.tryGet )
.filterIt( it.key.isSome )
check:
res.len == 3
res[0].key.get == key1
res[0].data == val1
res[1].key.get == key2
res[1].data == val2
res[2].key.get == key3
res[2].data == val3
(await iter.dispose()).tryGet