99 lines
1.6 KiB
Go
99 lines
1.6 KiB
Go
// Copyright (C) 2018 Marius Schellenberger
|
|
|
|
package store
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
type testData struct {
|
|
Data string
|
|
}
|
|
|
|
func TestBoltStore(t *testing.T) {
|
|
data := []testData{
|
|
{"123"},
|
|
{"hello"},
|
|
}
|
|
dir, err := ioutil.TempDir("", "")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.RemoveAll(dir)
|
|
bs, err := NewBoltStore(filepath.Join(dir, "bolt.db"), nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
err = bs.Set("key0", data[0])
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
err = bs.Set("key1", data[1])
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
t.Run("GetKey0", func(t *testing.T) {
|
|
var d testData
|
|
err := bs.Get("key0", &d)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if d != data[0] {
|
|
t.Error("d is not data[0]")
|
|
}
|
|
})
|
|
t.Run("ForEach", func(t *testing.T) {
|
|
err := bs.ForEach(func(k string, v []byte) error {
|
|
if k == "key0" || k == "key1" {
|
|
return nil
|
|
}
|
|
return errors.New("key0 or key1 not found")
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
t.Run("DumpRestore", func(t *testing.T) {
|
|
buf := new(bytes.Buffer)
|
|
err := bs.Dump(buf)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if buf.Len() == 0 {
|
|
t.Error("no dump written")
|
|
}
|
|
err = bs.Restore(buf)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
t.Run("DeleteKey1", func(t *testing.T) {
|
|
err := bs.Delete("key1")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
t.Run("GetKey1", func(t *testing.T) {
|
|
var d testData
|
|
err := bs.Get("key1", &d)
|
|
if err == nil {
|
|
t.Error("key1 should be deleted")
|
|
}
|
|
if d == data[1] {
|
|
t.Error("d is not data[1]")
|
|
}
|
|
})
|
|
t.Run("Close", func(t *testing.T) {
|
|
err := bs.Close()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
}
|