Testing: add tests for bitcask options
This commit is contained in:
parent
269965c55b
commit
62972c62b0
@ -78,9 +78,7 @@ func (db *DB) Init(storeName string, bitcaskopts ...bitcask.Option) error {
|
|||||||
if e != nil {
|
if e != nil {
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
db.store[storeName] = Store{Bitcask: c}
|
db.store[storeName] = Store{Bitcask: c}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,7 +177,7 @@ func (db *DB) withAll(action withAllAction) error {
|
|||||||
func (db *DB) SyncAndCloseAll() error {
|
func (db *DB) SyncAndCloseAll() error {
|
||||||
var errs = make([]error, len(db.store))
|
var errs = make([]error, len(db.store))
|
||||||
errSync := namedErr("sync", db.SyncAll())
|
errSync := namedErr("sync", db.SyncAll())
|
||||||
if errSync != nil {
|
if err Sync != nil {
|
||||||
errs = append(errs, errSync)
|
errs = append(errs, errSync)
|
||||||
}
|
}
|
||||||
errClose := namedErr("close", db.CloseAll())
|
errClose := namedErr("close", db.CloseAll())
|
||||||
|
@ -4,12 +4,14 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
c "git.tcp.direct/kayos/common/entropy"
|
c "git.tcp.direct/kayos/common/entropy"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newTestDB(t *testing.T) *DB {
|
func newTestDB(t *testing.T) *DB {
|
||||||
|
t.Helper()
|
||||||
tpath := t.TempDir()
|
tpath := t.TempDir()
|
||||||
tdb := OpenDB(tpath)
|
tdb := OpenDB(tpath)
|
||||||
if tdb == nil {
|
if tdb == nil {
|
||||||
@ -158,7 +160,6 @@ func TestDB_Init(t *testing.T) { //nolint:funlen,gocognit,cyclop
|
|||||||
|
|
||||||
func Test_Sync(t *testing.T) {
|
func Test_Sync(t *testing.T) {
|
||||||
// TODO: make sure sync is ACTUALLY sycing instead of only checking for nil err...
|
// TODO: make sure sync is ACTUALLY sycing instead of only checking for nil err...
|
||||||
|
|
||||||
var db = newTestDB(t)
|
var db = newTestDB(t)
|
||||||
seedRandStores(db, t)
|
seedRandStores(db, t)
|
||||||
t.Run("Sync", func(t *testing.T) {
|
t.Run("Sync", func(t *testing.T) {
|
||||||
@ -227,3 +228,161 @@ func Test_withAll(t *testing.T) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_WithOptions(t *testing.T) { //nolint:funlen,gocognit,cyclop
|
||||||
|
tpath := t.TempDir()
|
||||||
|
tdb := OpenDB(tpath)
|
||||||
|
if tdb == nil {
|
||||||
|
t.Fatalf("failed to open testdb at %s, got nil", tpath)
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
err := tdb.CloseAll()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to close testdb: %e", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
t.Run("WithMaxKeySize", func(t *testing.T) {
|
||||||
|
err := tdb.Init(t.Name(), WithMaxKeySize(10))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to init testdb for %s: %e", t.Name(), err)
|
||||||
|
}
|
||||||
|
err = tdb.With(t.Name()).Put([]byte(c.RandStr(10)), []byte("asdf"))
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("[FAIL] failed to put key: %e", err)
|
||||||
|
}
|
||||||
|
err = tdb.With(t.Name()).Put([]byte(c.RandStr(11)), []byte("asdf"))
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("[FAIL] expected error while using a key larger than the max key value option, got nil")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.Run("WithMaxValueSize", func(t *testing.T) {
|
||||||
|
err := tdb.Init(t.Name(), WithMaxValueSize(10))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to init testdb for %s: %e", t.Name(), err)
|
||||||
|
}
|
||||||
|
err = tdb.With(t.Name()).Put([]byte("asdf"), []byte(c.RandStr(10)))
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("[FAIL] failed to put key: %e", err)
|
||||||
|
}
|
||||||
|
err = tdb.With(t.Name()).Put([]byte("asdf"), []byte(c.RandStr(11)))
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("[FAIL] expected error while using a value larger than the max key value option, got nil")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.Run("WithMaxDataFileSize", func(t *testing.T) {
|
||||||
|
err := tdb.Init(t.Name(), WithMaxDatafileSize(10))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to init testdb for %s: %e", t.Name(), err)
|
||||||
|
}
|
||||||
|
checkDir := func() int {
|
||||||
|
targetDir := tpath + "/" + t.Name()
|
||||||
|
var files []os.DirEntry
|
||||||
|
files, err = os.ReadDir(targetDir)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to read directory %s: %e", targetDir, err)
|
||||||
|
}
|
||||||
|
datafilecount := 0
|
||||||
|
for _, file := range files {
|
||||||
|
if strings.Contains(file.Name(), ".data") {
|
||||||
|
datafilecount++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return datafilecount
|
||||||
|
}
|
||||||
|
err = tdb.With(t.Name()).Put([]byte("asdf"), []byte(c.RandStr(8)))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to put key: %e", err)
|
||||||
|
}
|
||||||
|
if checkDir() != 1 {
|
||||||
|
t.Errorf("[FAIL] expected 1 datafile, got %d", checkDir())
|
||||||
|
}
|
||||||
|
err = tdb.With(t.Name()).Put([]byte("asdf"), []byte(c.RandStr(10)))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to put key: %e", err)
|
||||||
|
}
|
||||||
|
if checkDir() != 2 {
|
||||||
|
t.Errorf("[FAIL] expected 2 datafile, got %d", checkDir())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
t.Run("SetDefaultBitcaskOptions", func(t *testing.T) {
|
||||||
|
SetDefaultBitcaskOptions(
|
||||||
|
WithMaxKeySize(20),
|
||||||
|
WithMaxValueSize(20),
|
||||||
|
WithMaxDatafileSize(20),
|
||||||
|
)
|
||||||
|
err := tdb.Init(t.Name())
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to init testdb for %s: %e", t.Name(), err)
|
||||||
|
}
|
||||||
|
checkDir := func() int {
|
||||||
|
targetDir := tpath + "/" + t.Name()
|
||||||
|
var files []os.DirEntry
|
||||||
|
files, err = os.ReadDir(targetDir)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to read directory %s: %e", targetDir, err)
|
||||||
|
}
|
||||||
|
datafilecount := 0
|
||||||
|
for _, file := range files {
|
||||||
|
if strings.Contains(file.Name(), ".data") {
|
||||||
|
datafilecount++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return datafilecount
|
||||||
|
}
|
||||||
|
err = tdb.With(t.Name()).Put([]byte(c.RandStr(20)), []byte("asdf"))
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("[FAIL] failed to put key: %e", err)
|
||||||
|
}
|
||||||
|
err = tdb.With(t.Name()).Put([]byte(c.RandStr(21)), []byte("asdf"))
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("[FAIL] expected error while using a key larger than the max key value option, got nil")
|
||||||
|
}
|
||||||
|
//
|
||||||
|
err = tdb.With(t.Name()).Put([]byte("asdf"), []byte(c.RandStr(9)))
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("[FAIL] failed to put key: %e", err)
|
||||||
|
}
|
||||||
|
err = tdb.With(t.Name()).Put([]byte("asdf"), []byte(c.RandStr(21)))
|
||||||
|
if err == nil {
|
||||||
|
t.Errorf("[FAIL] expected error while using a value larger than the max key value option, got nil")
|
||||||
|
}
|
||||||
|
//
|
||||||
|
if checkDir() != 2 {
|
||||||
|
t.Fatalf("[FAIL] expected 2 datafiles, got %d", checkDir())
|
||||||
|
}
|
||||||
|
//
|
||||||
|
err = tdb.With(t.Name()).Put([]byte("asdf"), []byte(c.RandStr(11)))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to put key: %e", err)
|
||||||
|
}
|
||||||
|
if checkDir() != 3 {
|
||||||
|
t.Fatalf("[FAIL] expected 3 datafiles, got %d", checkDir())
|
||||||
|
}
|
||||||
|
err = tdb.With(t.Name()).Put([]byte("asdf"), []byte(c.RandStr(10)))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to put key: %e", err)
|
||||||
|
}
|
||||||
|
if checkDir() != 4 {
|
||||||
|
t.Errorf("[FAIL] expected 4 datafile, got %d", checkDir())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
func Test_PhonyInit(t *testing.T) {
|
||||||
|
newtmp := t.TempDir()
|
||||||
|
err := os.MkdirAll(newtmp+"/"+t.Name(), 0755)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("[FAIL] failed to create test directory: %e", err)
|
||||||
|
}
|
||||||
|
err = os.Symlink("/dev/null", newtmp+"/"+t.Name()+"/config.json")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err.Error())
|
||||||
|
}
|
||||||
|
tdb := OpenDB(newtmp)
|
||||||
|
defer func() {
|
||||||
|
_ = tdb.CloseAll()
|
||||||
|
}()
|
||||||
|
err = tdb.Init(t.Name())
|
||||||
|
if err == nil {
|
||||||
|
t.Error("[FAIL] expected error while trying to open a store where a config file exists, got nil")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user