package storage import ( "bytes" "io/ioutil" "os" "path" "testing" ) type mock struct { m map[string][]byte } func (mock *mock) Get(key string) ([]byte, error) { v, ok := mock.m[key] if ok { return v, nil } return nil, ErrNotFound } func (mock *mock) Set(key string, value []byte) error { mock.m[key] = value return nil } func (mock *mock) Close() error { return nil } func TestImplementations(t *testing.T) { dir, err := ioutil.TempDir("", "storage_tests_") if err != nil { t.Fatalf("cannot create temp dir: %v", err) return } defer os.RemoveAll(dir) bolt, _ := NewBolt(path.Join(dir, "bolt")) leveldb, _ := NewLevelDB(path.Join(dir, "leveldb")) cases := []DB{ &mock{m: make(map[string][]byte)}, NewMap(), bolt, leveldb, } validKey := "key" validValue := []byte("value") for _, db := range cases { if err := db.Set(validKey, validValue); err != nil { t.Fatalf("cannot set %T: %v", db, err) } if v, err := db.Get(validKey); err != nil { t.Fatalf("cannot get %T: %v", db, err) } else if !bytes.Equal(v, validValue) { t.Fatalf("wrong get %T: %q vs %q", db, v, validValue) } } }