cleanup tired db tests

This commit is contained in:
Dmitriy Ryajov 2022-09-19 17:14:06 -06:00
parent 1f97a923fa
commit c60ff35bdd
No known key found for this signature in database
GPG Key ID: DA8C680CE7C657A4

View File

@ -1,13 +1,13 @@
import std/options import std/options
import std/os import std/os
import pkg/asynctest/unittest2 import pkg/asynctest
import pkg/chronos import pkg/chronos
import pkg/stew/results import pkg/stew/results
import ../../datastore/fsds import pkg/datastore/fsds
import ../../datastore/sql import pkg/datastore/sql
import ../../datastore/tieredds import pkg/datastore/tieredds
suite "TieredDatastore": suite "TieredDatastore":
# assumes tests/test_all is run from project root, e.g. with `nimble test` # assumes tests/test_all is run from project root, e.g. with `nimble test`
@ -15,22 +15,26 @@ suite "TieredDatastore":
bytes = @[1.byte, 2.byte, 3.byte] bytes = @[1.byte, 2.byte, 3.byte]
key = Key.init("a:b/c/d:e").get key = Key.init("a:b/c/d:e").get
root = "tests" / "test_data" root = "tests" / "test_data"
rootAbs = getCurrentDir() / root (path, _, _) = instantiationInfo(-1, fullPaths = true) # get this file's name
rootAbs = path.parentDir / root
var var
ds1: SQLiteDatastore ds1: SQLiteDatastore
ds2: FileSystemDatastore ds2: FSDatastore
setup: setup:
removeDir(rootAbs) removeDir(rootAbs)
require(not dirExists(rootAbs)) require(not dirExists(rootAbs))
createDir(rootAbs) createDir(rootAbs)
ds1 = SQLiteDatastore.new(memory).get ds1 = SQLiteDatastore.new(Memory).get
ds2 = FileSystemDatastore.new(rootAbs).get ds2 = FSDatastore.new(rootAbs, depth = 5).get
teardown: teardown:
if not ds1.isNil: ds1.close if not ds1.isNil:
discard await ds1.close
ds1 = nil ds1 = nil
removeDir(rootAbs) removeDir(rootAbs)
require(not dirExists(rootAbs)) require(not dirExists(rootAbs))
@ -48,106 +52,76 @@ suite "TieredDatastore":
stores = @[ds1, ds2] stores = @[ds1, ds2]
check: check:
TieredDatastore.new(ds1, ds2).get.stores == stores TieredDatastore.new(ds1, ds2).tryGet.stores == stores
TieredDatastore.new([ds1, ds2]).get.stores == stores TieredDatastore.new([ds1, ds2]).tryGet.stores == stores
TieredDatastore.new(@[ds1, ds2]).get.stores == stores TieredDatastore.new(@[ds1, ds2]).tryGet.stores == stores
test "put": test "put":
let let
ds = TieredDatastore.new(ds1, ds2).get ds = TieredDatastore.new(ds1, ds2).get
assert (await ds1.get(key)).get.isNone
assert (await ds2.get(key)).get.isNone
let
putRes = await ds.put(key, bytes) putRes = await ds.put(key, bytes)
check: check:
putRes.isOk putRes.isOk
(await ds1.get(key)).get.get == bytes (await ds1.get(key)).tryGet == bytes
(await ds2.get(key)).get.get == bytes (await ds2.get(key)).tryGet == bytes
test "delete": test "delete":
let let
ds = TieredDatastore.new(ds1, ds2).get ds = TieredDatastore.new(ds1, ds2).get
putRes = await ds.put(key, bytes)
assert putRes.isOk (await ds.put(key, bytes)).tryGet
assert (await ds1.get(key)).get.get == bytes (await ds.delete(key)).tryGet
assert (await ds2.get(key)).get.get == bytes
let
delRes = await ds.delete(key)
check: check:
delRes.isOk (await ds1.get(key)).tryGet.len == 0
(await ds1.get(key)).get.isNone
(await ds2.get(key)).get.isNone expect DatastoreKeyNotFound:
discard (await ds2.get(key)).tryGet
test "contains": test "contains":
let let
ds = TieredDatastore.new(ds1, ds2).get ds = TieredDatastore.new(ds1, ds2).tryGet
assert not (await ds1.contains(key)).get
assert not (await ds2.contains(key)).get
let
putRes = await ds.put(key, bytes)
assert putRes.isOk
let
containsRes = await ds.contains(key)
check: check:
containsRes.isOk not (await ds1.contains(key)).tryGet
containsRes.get not (await ds2.contains(key)).tryGet
(await ds1.contains(key)).get
(await ds2.contains(key)).get (await ds.put(key, bytes)).tryGet
check:
(await ds.contains(key)).tryGet
(await ds1.contains(key)).tryGet
(await ds2.contains(key)).tryGet
test "get": test "get":
var var
ds = TieredDatastore.new(ds1, ds2).get ds = TieredDatastore.new(ds1, ds2).tryGet
assert (await ds1.get(key)).get.isNone
assert (await ds2.get(key)).get.isNone
check: (await ds.get(key)).get.isNone
let
putRes = await ds.put(key, bytes)
assert putRes.isOk
var
getRes = await ds.get(key)
check: check:
getRes.isOk not (await ds1.contains(key)).tryGet
getRes.get.isSome not (await ds2.contains(key)).tryGet
getRes.get.get == bytes not (await ds.contains(key)).tryGet
(await ds1.get(key)).get.isSome
(await ds2.get(key)).get.isSome
(await ds1.get(key)).get.get == bytes
(await ds2.get(key)).get.get == bytes
ds1.close (await ds.put(key, bytes)).tryGet
ds1 = SQLiteDatastore.new(memory).get
ds = TieredDatastore.new(ds1, ds2).get
assert (await ds1.get(key)).get.isNone
assert (await ds2.get(key)).get.isSome
assert (await ds2.get(key)).get.get == bytes
getRes = await ds.get(key)
check: check:
getRes.isOk (await ds.get(key)).tryGet == bytes
getRes.get.isSome (await ds1.get(key)).tryGet == bytes
getRes.get.get == bytes (await ds2.get(key)).tryGet == bytes
(await ds1.get(key)).get.isSome
(await ds1.get(key)).get.get == bytes
# test "query": (await ds1.close()).tryGet
# check: ds1 = nil
# true
ds1 = SQLiteDatastore.new(Memory).tryGet
ds = TieredDatastore.new(ds1, ds2).tryGet
check:
not (await ds1.contains(key)).tryGet
(await ds2.get(key)).tryGet == bytes
(await ds.get(key)).tryGet == bytes
(await ds1.get(key)).tryGet == bytes
# # test "query":
# # check:
# # true