Skip to content

Commit

Permalink
Added tests for sstfilewriter.
Browse files Browse the repository at this point in the history
  • Loading branch information
bhartnett committed Mar 4, 2024
1 parent 577cff9 commit 2ede53e
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 2 deletions.
2 changes: 1 addition & 1 deletion rocksdb/columnfamily.nim
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
## types which enable writing to a specific column family without having to specify the
## column family in each call.
##
## These column family types do not `own` the underlying `RocksDbRef` and therefore
## These column family types do not own the underlying `RocksDbRef` and therefore
## to close the database, simply call `columnFamily.db.close()` which will close
## the underlying `RocksDbRef`. Note that doing so will effect any other column
## families that hold a reference to the same `RocksDbRef`.
Expand Down
4 changes: 3 additions & 1 deletion rocksdb/sstfilewriter.nim
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ type
envOptsPtr: EnvOptionsPtr
dbOpts: DbOptionsRef

proc openSstFileWriter*(filePath: string, dbOpts = defaultDbOptions()): RocksDBResult[SstFileWriterRef] =
proc openSstFileWriter*(
filePath: string,
dbOpts = defaultDbOptions()): RocksDBResult[SstFileWriterRef] =
## Creates a new `SstFileWriterRef` and opens the file at the given `filePath`.
doAssert not dbOpts.isClosed()

Expand Down
1 change: 1 addition & 0 deletions tests/test_all.nim
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,5 @@ import
./test_columnfamily,
./test_rocksdb,
./test_rocksiterator,
./test_sstfilewriter,
./test_writebatch
91 changes: 91 additions & 0 deletions tests/test_sstfilewriter.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Nim-RocksDB
# Copyright 2024 Status Research & Development GmbH
# Licensed under either of
#
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
# * GPL license, version 2.0, ([LICENSE-GPLv2](LICENSE-GPLv2) or https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
#
# at your option. This file may not be copied, modified, or distributed except according to those terms.

{.used.}

import
std/os,
tempfile,
unittest2,
../rocksdb/[rocksdb, sstfilewriter],
./test_helper

suite "SstFileWriterRef Tests":

const
CF_DEFAULT = "default"
CF_OTHER = "other"

let
key1 = @[byte(1)]
val1 = @[byte(1)]
key2 = @[byte(2)]
val2 = @[byte(2)]
key3 = @[byte(3)]
val3 = @[byte(3)]

setup:
let
dbPath = mkdtemp() / "data"
sstFilePath = mkdtemp() / "sst"
db = initReadWriteDb(dbPath,
columnFamilyNames = @[CF_DEFAULT, CF_OTHER])

teardown:
db.close()
removeDir($dbPath)

test "Write to sst file then load into db using default column family":
let res = openSstFileWriter(sstFilePath)
check res.isOk()
let writer = res.get()
defer: writer.close()

check:
writer.put(key1, val1).isOk()
writer.put(key2, val2).isOk()
writer.put(key3, val3).isOk()
writer.delete(@[byte(4)]).isOk()
writer.finish().isOk()

db.ingestExternalFile(sstFilePath).isOk()
db.get(key1).get() == val1
db.get(key2).get() == val2
db.get(key3).get() == val3

test "Write to sst file then load into db using specific column family":
let res = openSstFileWriter(sstFilePath)
check res.isOk()
let writer = res.get()
defer: writer.close()

check:
writer.put(key1, val1).isOk()
writer.put(key2, val2).isOk()
writer.put(key3, val3).isOk()
writer.finish().isOk()

db.ingestExternalFile(sstFilePath, CF_OTHER).isOk()
db.keyExists(key1, CF_DEFAULT).get() == false
db.keyExists(key2, CF_DEFAULT).get() == false
db.keyExists(key3, CF_DEFAULT).get() == false
db.get(key1, CF_OTHER).get() == val1
db.get(key2, CF_OTHER).get() == val2
db.get(key3, CF_OTHER).get() == val3

test "Test close":
let res = openSstFileWriter(sstFilePath)
check res.isOk()
let writer = res.get()

check not writer.isClosed()
writer.close()
check writer.isClosed()
writer.close()
check writer.isClosed()

0 comments on commit 2ede53e

Please sign in to comment.