97 lines
2.3 KiB
Go
97 lines
2.3 KiB
Go
package sqkv
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/matryer/is"
|
|
)
|
|
|
|
func TestDefault(t *testing.T) {
|
|
assert := is.New(t)
|
|
|
|
tmp := t.TempDir()
|
|
dbPath := filepath.Join(tmp, "sqkv.db")
|
|
|
|
db, err := Open(dbPath)
|
|
assert.NoErr(err) // Should create database
|
|
defer db.Close()
|
|
|
|
err = db.Put("foo", "bar")
|
|
assert.NoErr(err) // Should put kv
|
|
|
|
val, err := db.Get("foo")
|
|
assert.NoErr(err) // Should get kv
|
|
assert.Equal(val, "bar") // key(foo) == value(bar)
|
|
|
|
err = db.Delete("foo")
|
|
assert.NoErr(err) // Should delete kv
|
|
|
|
_, err = db.Get("foo")
|
|
assert.True(errors.Is(err, ErrKeyDoesNotExist))
|
|
}
|
|
|
|
func TestBucket(t *testing.T) {
|
|
assert := is.New(t)
|
|
|
|
tmp := t.TempDir()
|
|
dbPath := filepath.Join(tmp, "sqkv.db")
|
|
|
|
db, err := Open(dbPath)
|
|
assert.NoErr(err) // Should create database
|
|
defer db.Close()
|
|
|
|
_, err = db.Bucket("honk")
|
|
assert.True(errors.Is(err, ErrBucketDoesNotExist)) // Bucket does not exist; should error
|
|
|
|
_, err = db.CreateBucket("honk")
|
|
assert.NoErr(err) // Should create bucket
|
|
|
|
_, err = db.Bucket("honk")
|
|
assert.NoErr(err) // Bucket should exist
|
|
|
|
b, err := db.CreateBucketIfNotExist("honk")
|
|
assert.NoErr(err) // Bucket should exist and be returned
|
|
|
|
err = b.Put("foo", "bar")
|
|
assert.NoErr(err) // Should put kv
|
|
|
|
val, err := b.Get("foo")
|
|
assert.NoErr(err) // Should get kv
|
|
assert.Equal(val, "bar") // key(foo) == value(bar)
|
|
|
|
err = b.Delete("foo")
|
|
assert.NoErr(err) // Should delete kv
|
|
|
|
_, err = b.Get("foo")
|
|
assert.True(errors.Is(err, ErrKeyDoesNotExist))
|
|
}
|
|
|
|
func TestOptions(t *testing.T) {
|
|
assert := is.New(t)
|
|
|
|
tmp := t.TempDir()
|
|
dbPath := filepath.Join(tmp, "opt.db")
|
|
|
|
_, err := Open(dbPath, WithMode(OpenModeReadOnly))
|
|
assert.True(err != nil) // Database should not be created
|
|
|
|
_, err = Open(dbPath, WithMode(OpenModeReadWrite))
|
|
assert.True(err != nil) // Database should not be created
|
|
|
|
_, err = Open(dbPath, WithMode(OpenModeMemory))
|
|
assert.NoErr(err) // Database should not be created, but no error
|
|
_, err = os.Stat(dbPath)
|
|
assert.True(err != nil) // Database should not be created on disk
|
|
|
|
db, err := Open(dbPath, WithJournalMode(OpenJournalModeWAL))
|
|
defer db.Close()
|
|
|
|
var jm string
|
|
row := db.db.QueryRow("PRAGMA journal_mode")
|
|
assert.NoErr(row.Scan(&jm)) // Should return PRAGMA result
|
|
assert.Equal(jm, "wal") // Journal mode should be WAL
|
|
}
|