2020-03-19 18:19:07 +00:00
|
|
|
package cache
|
|
|
|
|
|
|
|
import (
|
2020-06-26 16:13:53 +01:00
|
|
|
"os"
|
|
|
|
"path/filepath"
|
2020-03-19 18:19:07 +00:00
|
|
|
"testing"
|
|
|
|
|
2020-07-27 13:22:00 +01:00
|
|
|
"github.com/micro/go-micro/v3/store"
|
|
|
|
"github.com/micro/go-micro/v3/store/file"
|
2020-03-19 18:19:07 +00:00
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
2020-06-26 16:13:53 +01:00
|
|
|
func cleanup(db string, s store.Store) {
|
|
|
|
s.Close()
|
|
|
|
dir := filepath.Join(file.DefaultDir, db+"/")
|
|
|
|
os.RemoveAll(dir)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestRead(t *testing.T) {
|
|
|
|
cf := NewStore(file.NewStore())
|
|
|
|
cf.Init()
|
|
|
|
cfInt := cf.(*cache)
|
|
|
|
defer cleanup(file.DefaultDatabase, cf)
|
|
|
|
|
|
|
|
_, err := cf.Read("key1")
|
|
|
|
assert.Error(t, err, "Unexpected record")
|
|
|
|
cfInt.b.Write(&store.Record{
|
|
|
|
Key: "key1",
|
|
|
|
Value: []byte("foo"),
|
|
|
|
})
|
|
|
|
recs, err := cf.Read("key1")
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Len(t, recs, 1, "Expected a record to be pulled from file store")
|
|
|
|
recs, err = cfInt.m.Read("key1")
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Len(t, recs, 1, "Expected a memory store to be populatedfrom file store")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestWrite(t *testing.T) {
|
|
|
|
cf := NewStore(file.NewStore())
|
|
|
|
cf.Init()
|
|
|
|
cfInt := cf.(*cache)
|
|
|
|
defer cleanup(file.DefaultDatabase, cf)
|
|
|
|
|
|
|
|
cf.Write(&store.Record{
|
|
|
|
Key: "key1",
|
|
|
|
Value: []byte("foo"),
|
|
|
|
})
|
|
|
|
recs, _ := cfInt.m.Read("key1")
|
|
|
|
assert.Len(t, recs, 1, "Expected a record in the memory store")
|
|
|
|
recs, _ = cfInt.b.Read("key1")
|
|
|
|
assert.Len(t, recs, 1, "Expected a record in the file store")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestDelete(t *testing.T) {
|
|
|
|
cf := NewStore(file.NewStore())
|
|
|
|
cf.Init()
|
|
|
|
cfInt := cf.(*cache)
|
|
|
|
defer cleanup(file.DefaultDatabase, cf)
|
|
|
|
|
|
|
|
cf.Write(&store.Record{
|
|
|
|
Key: "key1",
|
|
|
|
Value: []byte("foo"),
|
|
|
|
})
|
|
|
|
recs, _ := cfInt.m.Read("key1")
|
|
|
|
assert.Len(t, recs, 1, "Expected a record in the memory store")
|
|
|
|
recs, _ = cfInt.b.Read("key1")
|
|
|
|
assert.Len(t, recs, 1, "Expected a record in the file store")
|
|
|
|
cf.Delete("key1")
|
|
|
|
|
|
|
|
_, err := cfInt.m.Read("key1")
|
|
|
|
assert.Error(t, err, "Expected no records in memory store")
|
|
|
|
_, err = cfInt.b.Read("key1")
|
|
|
|
assert.Error(t, err, "Expected no records in file store")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestList(t *testing.T) {
|
|
|
|
cf := NewStore(file.NewStore())
|
|
|
|
cf.Init()
|
|
|
|
cfInt := cf.(*cache)
|
|
|
|
defer cleanup(file.DefaultDatabase, cf)
|
|
|
|
|
|
|
|
keys, err := cf.List()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Len(t, keys, 0)
|
|
|
|
cfInt.b.Write(&store.Record{
|
|
|
|
Key: "key1",
|
|
|
|
Value: []byte("foo"),
|
|
|
|
})
|
|
|
|
|
|
|
|
cfInt.b.Write(&store.Record{
|
|
|
|
Key: "key2",
|
|
|
|
Value: []byte("foo"),
|
|
|
|
})
|
|
|
|
keys, err = cf.List()
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Len(t, keys, 2)
|
2020-03-19 18:19:07 +00:00
|
|
|
|
|
|
|
}
|