diff --git a/backend_test.go b/backend_test.go index 377bcec..d2b62fa 100644 --- a/backend_test.go +++ b/backend_test.go @@ -150,6 +150,23 @@ func testBackendGetSetDelete(t *testing.T, backend BackendType) { err = db.Compact(nil, nil) require.NoError(t, err) + // Compaction over a specific range should succeed and keep data accessible. + err = db.Set([]byte("cmp/a"), []byte{0x0a}) + require.NoError(t, err) + err = db.Set([]byte("cmp/c"), []byte{0x0c}) + require.NoError(t, err) + + err = db.Compact([]byte("cmp/a"), []byte("cmp/d")) + require.NoError(t, err) + + value, err = db.Get([]byte("cmp/a")) + require.NoError(t, err) + require.Equal(t, []byte{0x0a}, value) + + value, err = db.Get([]byte("cmp/c")) + require.NoError(t, err) + require.Equal(t, []byte{0x0c}, value) + if strings.Contains(string(backend), "pebbledb") { // When running the test the folder can't be cleaned up and there // is a panic on removing the tmp testing directories. diff --git a/pebble_test.go b/pebble_test.go index 3898816..0d06be1 100644 --- a/pebble_test.go +++ b/pebble_test.go @@ -37,4 +37,16 @@ func BenchmarkPebbleDBRandomReadsWrites(b *testing.B) { benchmarkRandomReadsWrites(b, db) } -// TODO: Add tests for pebble +func TestPebbleDBNewPebbleDB(t *testing.T) { + name := fmt.Sprintf("test_%x", randStr(12)) + defer cleanupDBDir("", name) + + // Test we can't open the db twice for writing + wr1, err := NewPebbleDB(name, "") + require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, wr1.Close()) + }) + _, err = NewPebbleDB(name, "") + require.Error(t, err, "should not be able to open db twice") +} diff --git a/rocksdb_test.go b/rocksdb_test.go index 4eddbc5..aac647d 100644 --- a/rocksdb_test.go +++ b/rocksdb_test.go @@ -33,4 +33,31 @@ func TestRocksDBStats(t *testing.T) { assert.NotEmpty(t, db.Stats()) } -// TODO: Add tests for rocksdb +func TestRocksDBNewRocksDB(t *testing.T) { + name := fmt.Sprintf("test_%x", randStr(12)) + defer cleanupDBDir("", name) + + // Test we can't open the db twice for writing + wr1, err := NewRocksDB(name, "") + require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, wr1.Close()) + }) + _, err = NewRocksDB(name, "") + require.Error(t, err, "should not be able to open db twice") +} + +func BenchmarkRocksDBRandomReadsWrites(b *testing.B) { + name := fmt.Sprintf("test_%x", randStr(12)) + db, err := NewRocksDB(name, "") + if err != nil { + b.Fatal(err) + } + defer func() { + err = db.Close() + require.NoError(b, err) + cleanupDBDir("", name) + }() + + benchmarkRandomReadsWrites(b, db) +}