KevinStephenson
Adding in weaviate code
b110593
raw
history blame
2.31 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ 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
}