nim-codex/tests/testsql.nim

96 lines
2.3 KiB
Nim
Raw Normal View History

2024-04-30 11:30:11 +02:00
import std/monotimes
import os
import pkg/chronos
import pkg/questionable
import pkg/questionable/results
import pkg/libp2p/cid
import pkg/datastore
import pkg/codex/rng
import pkg/codex/chunker
import pkg/codex/blocktype as bt
import ../leveldb/leveldbds
2024-05-01 09:29:00 +02:00
import ../rocksdb/rocksdbds
2024-04-30 11:30:11 +02:00
import ./asynctest
import ./checktest
import ./helpers
import ./codex/helpers
2024-05-03 08:28:43 +02:00
proc setGetTest(store: DataStore) {.async.} =
2024-04-30 11:30:11 +02:00
let chunker = RandomChunker.new(Rng.instance(), size = 4096000, chunkSize = 256)
var blocks: seq[bt.Block]
while true:
let chunk = await chunker.getBytes()
if chunk.len <= 0:
break
blocks.add(bt.Block.new(chunk).tryGet())
for blk in blocks:
let key = Key.init($blk.cid).tryGet()
discard (await store.put(key, blk.data))
let bytes = (await store.get(key)).tryGet()
check:
bytes == blk.data
2024-05-03 08:28:43 +02:00
proc doTest(name: string, store: DataStore) {.async.} =
2024-04-30 11:30:11 +02:00
let chunker = RandomChunker.new(Rng.instance(), size = 4096000, chunkSize = 256)
var blocks: seq[bt.Block]
while true:
let chunk = await chunker.getBytes()
if chunk.len <= 0:
break
blocks.add(bt.Block.new(chunk).tryGet())
let t0 = getMonoTime()
for blk in blocks:
let key = Key.init($blk.cid).tryGet()
discard (await store.put(key, blk.data))
let t1 = getMonoTime()
var read: seq[seq[byte]]
for blk in blocks:
let key = Key.init($blk.cid).tryGet()
let bytes = (await store.get(key)).tryGet()
read.add(bytes)
let t2 = getMonoTime()
2024-05-06 15:28:28 +02:00
setGetTest(store)
let t3 = getMonoTime()
2024-04-30 11:30:11 +02:00
for i in 0..<blocks.len:
check:
blocks[i].data == read[i]
2024-05-06 15:28:28 +02:00
echo name & " = put:" & $(t1 - t0) & " / get:" & $(t2 - t1) & " / putget: " & $(t3 - t2)
2024-04-30 11:30:11 +02:00
2024-05-03 11:34:48 +02:00
proc ensuredir(dir: string) =
if not dirExists(dir):
createDir(dir)
proc rmdir(dir: string) =
if dirExists(dir):
removeDir(dir)
2024-04-30 11:30:11 +02:00
asyncchecksuite "SQL":
test "should A":
await doTest("defaultSQL", SQLiteDatastore.new("defaultSQL").tryGet())
let dir = "defaultFS"
2024-05-03 11:34:48 +02:00
ensuredir(dir)
2024-04-30 11:30:11 +02:00
await doTest("defaultFS", FSDatastore.new(dir, depth = 5).tryGet())
2024-05-03 11:34:48 +02:00
rmdir(dir)
2024-04-30 11:30:11 +02:00
2024-05-03 11:34:48 +02:00
rmdir("ldb")
2024-05-03 08:28:43 +02:00
let ldb = LevelDbDatastore.new("ldb").tryGet()
2024-04-30 11:30:11 +02:00
await doTest("leveldb", ldb)
2024-05-03 11:34:48 +02:00
rmdir("rdb")
2024-05-03 08:28:43 +02:00
let rdb = RocksDbDatastore.new("rdb").tryGet()
2024-05-01 09:29:00 +02:00
await doTest("rocksdb", rdb)