nim-datastore/tests/datastore/leveldb/testleveldbds.nim
Arnaud 39000fd4fc
Update to nim 2 x (#75)
* Add nimbledeps to be sure that dependencies are isolated

* Update dependencies to specific commit hashes

Signed-off-by: Arnaud <arnaud@status.im>

* Add gcsafe pragma

Signed-off-by: Arnaud <arnaud@status.im>

* Apply method name changes

Signed-off-by: Arnaud <arnaud@status.im>

* Catch exceptions

Signed-off-by: Arnaud <arnaud@status.im>

* Cast to nil value because nil cannot be applied directly to distinct pointer

Signed-off-by: Arnaud <arnaud@status.im>

* Update nim-results to version 0.5.1

Signed-off-by: Arnaud <arnaud@status.im>

* Add Nim 2.0.12 to matrix

* Increment the version

* Update the leveldb dependency

* Add versions and commit to dependencies

* Introduce nimble.lock

Signed-off-by: Arnaud <arnaud@status.im>

* Remove .lock and file and direct dependency to nim-results

* Update to 2.0.14

* updates nim-leveldbstatic

* sets leveldb to v0.2.0

* fix dep versions

* remove except Exception, no longer needed

* fix dep versions

---------

Signed-off-by: Arnaud <arnaud@status.im>
Co-authored-by: Ben <thatbenbierens@gmail.com>
Co-authored-by: Eric <5089238+emizzle@users.noreply.github.com>
2025-02-13 20:26:58 +01:00

141 lines
3.0 KiB
Nim

import std/options
import std/os
import std/sequtils
from std/algorithm import sort, reversed
import pkg/asynctest/chronos/unittest2
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 tempDir = getTempDir() / "testleveldbds"
var ds: LevelDbDatastore
setup:
createDir(tempDir)
ds = LevelDbDatastore.new(tempDir).tryGet()
teardown:
(await ds.close()).tryGet
removeDir(tempDir)
test "Typed Queries":
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