Rssmon2/store/bolt_test.go

74 lines
1.6 KiB
Go

package store
import (
"io/ioutil"
"os"
"testing"
)
func Test_BoltSetListGet(t *testing.T) {
cases := []struct {
ns string
keys []string
values []string
search string
results int
}{
{
ns: "namespace",
keys: []string{},
values: []string{},
search: "",
results: 0,
},
{
ns: "namespace",
keys: []string{"key1", "key2", "aey3"},
values: []string{"v1", "v2", "a3"},
search: "k",
results: 2,
},
{
ns: "namespace",
keys: []string{"key1", "key2", "key3"},
values: []string{"v1", "v2", "v3"},
search: "k",
results: 3,
},
}
for _, c := range cases {
tmp, err := ioutil.TempFile(".", "any*")
if err != nil {
t.Fatalf("could not make tempfile: %v", err)
}
defer os.Remove(tmp.Name())
var sc Client
sc, err = NewBolt(tmp.Name())
defer sc.Close()
if err != nil {
t.Errorf("failed to create bolt %v: %v", sc, err)
}
for i := range c.keys {
if err := sc.Set(c.ns, c.keys[i], []byte(c.values[i])); err != nil {
t.Errorf("failed to set bolt: %v", err)
}
}
if results, err := sc.List(c.ns, c.search, true, -1); err != nil {
t.Errorf("failed to list bolt: %v", err)
} else if len(results) != c.results {
t.Errorf("failed to list bolt: missing results for %q: %v, expceted %v", c.ns, len(results), len(c.keys))
}
if len(c.keys) > 0 {
if result, err := sc.Get(c.ns, c.keys[0]); err != nil {
t.Errorf("failed to get bolt: %v", err)
} else if string(result) != c.values[0] {
t.Errorf("failed to get bolt: got wrong result: wanted %v, got %v", c.values[0], string(result))
}
}
}
}