frostfs-node/pkg/local_object_storage/writecache/writecachebitcask/api_test.go
Alejandro Lopez 42e74d6aab [#610] Add bitcask-inspired writecache implementation
Signed-off-by: Alejandro Lopez <a.lopez@yadro.com>
2023-08-31 14:17:10 +03:00

82 lines
2 KiB
Go

package writecachebitcask
import (
"context"
"testing"
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/teststore"
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil"
meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client"
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
"github.com/stretchr/testify/require"
)
func TestAPI(t *testing.T) {
ctx := context.Background()
bs := teststore.New(
teststore.WithPut(func(pp common.PutPrm) (common.PutRes, error) { return common.PutRes{}, nil }),
)
c := New(
WithPath(t.TempDir()),
WithBlobstor(bs),
WithMetabase(testMetabase{}),
)
require.NoError(t, c.Open(false))
require.NoError(t, c.Init())
obj := testutil.GenerateObject()
addr := testutil.AddressFromObject(t, obj)
data, err := obj.Marshal()
require.NoError(t, err)
// Get nonexistent object
{
_, gotErr := c.Get(ctx, oid.Address{})
require.True(t, client.IsErrObjectNotFound(gotErr))
}
// Put an object
{
_, err := c.Put(ctx, common.PutPrm{
Address: addr,
Object: obj,
RawData: data,
})
require.NoError(t, err)
}
// Get the object previously put
{
gotObj, err := c.Get(ctx, addr)
require.NoError(t, err)
gotData, err := gotObj.Marshal()
require.NoError(t, err)
require.Equal(t, data, gotData)
}
// Delete the object previously put
{
require.NoError(t, c.Delete(ctx, addr))
require.True(t, client.IsErrObjectNotFound(c.Delete(ctx, addr)))
}
// Get the object previously deleted
{
_, gotErr := c.Get(ctx, addr)
require.True(t, client.IsErrObjectNotFound(gotErr))
}
require.NoError(t, c.Close())
}
type testMetabase struct{}
func (testMetabase) UpdateStorageID(meta.UpdateStorageIDPrm) (meta.UpdateStorageIDRes, error) {
return meta.UpdateStorageIDRes{}, nil
}