Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ V V / __/ (_| |\ V /| | (_| | || __/ | |
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
// | |
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
// | |
// CONTACT: [email protected] | |
// | |
package extensions | |
import ( | |
"bytes" | |
"fmt" | |
"sort" | |
"testing" | |
"github.com/stretchr/testify/assert" | |
"github.com/stretchr/testify/require" | |
"github.com/weaviate/weaviate/entities/moduletools" | |
) | |
func Test_UseCase(t *testing.T) { | |
storage := newFakeStorage() | |
uc := NewUseCase(storage) | |
t.Run("storing and loading something", func(t *testing.T) { | |
err := uc.Store("concept1", []byte("value1")) | |
require.Nil(t, err) | |
err = uc.Store("concept2", []byte("value2")) | |
require.Nil(t, err) | |
val, err := uc.Load("concept1") | |
require.Nil(t, err) | |
assert.Equal(t, []byte("value1"), val) | |
val, err = uc.Load("concept2") | |
require.Nil(t, err) | |
assert.Equal(t, []byte("value2"), val) | |
vals, err := uc.LoadAll() | |
require.Nil(t, err) | |
assert.Equal(t, []byte("value1\nvalue2\n"), vals) | |
}) | |
t.Run("when storing fails", func(t *testing.T) { | |
storage.putError = fmt.Errorf("oops") | |
err := uc.Store("concept1", []byte("value1")) | |
assert.Equal(t, "store concept \"concept1\": oops", err.Error()) | |
}) | |
t.Run("when loading fails", func(t *testing.T) { | |
storage.getError = fmt.Errorf("oops") | |
_, err := uc.Load("concept1") | |
assert.Equal(t, "load concept \"concept1\": oops", err.Error()) | |
}) | |
} | |
func newFakeStorage() *fakeStorage { | |
return &fakeStorage{ | |
store: map[string][]byte{}, | |
} | |
} | |
type fakeStorage struct { | |
store map[string][]byte | |
getError error | |
putError error | |
} | |
func (f *fakeStorage) Get(k []byte) ([]byte, error) { | |
return f.store[string(k)], f.getError | |
} | |
func (f *fakeStorage) Put(k, v []byte) error { | |
f.store[string(k)] = v | |
return f.putError | |
} | |
func (f *fakeStorage) Scan(scan moduletools.ScanFn) error { | |
var keys [][]byte | |
for key := range f.store { | |
keys = append(keys, []byte(key)) | |
} | |
sort.Slice(keys, func(a, b int) bool { | |
return bytes.Compare(keys[a], keys[b]) == -1 | |
}) | |
for _, key := range keys { | |
scan(key, f.store[string(key)]) | |
} | |
return nil | |
} | |