forked from TrueCloudLab/frostfs-node
92 lines
2.7 KiB
Go
92 lines
2.7 KiB
Go
package meta_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil"
|
|
meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
|
|
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDB_StorageID(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
db := newDB(t)
|
|
|
|
raw1 := testutil.GenerateObject()
|
|
raw2 := testutil.GenerateObject()
|
|
deleted := testutil.GenerateObject()
|
|
|
|
storageID := []byte{1, 2, 3, 4}
|
|
|
|
// check StorageID from empty database
|
|
fetchedStorageID, err := metaStorageID(db, object.AddressOf(raw1))
|
|
require.NoError(t, err)
|
|
require.Nil(t, fetchedStorageID)
|
|
|
|
// put one object with storageID
|
|
err = metaPut(db, raw1, storageID)
|
|
require.NoError(t, err)
|
|
|
|
// put one object without storageID
|
|
err = putBig(db, raw2)
|
|
require.NoError(t, err)
|
|
|
|
// put object with storageID and delete it
|
|
err = metaPut(db, deleted, storageID)
|
|
require.NoError(t, err)
|
|
|
|
cnrID, ok := deleted.ContainerID()
|
|
require.True(t, ok)
|
|
ts := testutil.GenerateObjectWithCID(cnrID)
|
|
require.NoError(t, metaInhume(db, object.AddressOf(deleted), object.AddressOf(ts)))
|
|
|
|
// check StorageID for object without storageID
|
|
fetchedStorageID, err = metaStorageID(db, object.AddressOf(raw2))
|
|
require.NoError(t, err)
|
|
require.Nil(t, fetchedStorageID)
|
|
|
|
// check StorageID for object with storageID
|
|
fetchedStorageID, err = metaStorageID(db, object.AddressOf(raw1))
|
|
require.NoError(t, err)
|
|
require.Equal(t, storageID, fetchedStorageID)
|
|
|
|
// check StorageID for deleted object with storageID
|
|
fetchedStorageID, err = metaStorageID(db, object.AddressOf(deleted))
|
|
require.NoError(t, err)
|
|
require.Equal(t, storageID, fetchedStorageID)
|
|
|
|
t.Run("update", func(t *testing.T) {
|
|
storageID := []byte{1, 2, 3, 4, 5}
|
|
require.NoError(t, metaUpdateStorageID(db, object.AddressOf(raw2), storageID))
|
|
require.NoError(t, metaUpdateStorageID(db, object.AddressOf(deleted), storageID))
|
|
|
|
fetchedStorageID, err = metaStorageID(db, object.AddressOf(raw2))
|
|
require.NoError(t, err)
|
|
require.Equal(t, storageID, fetchedStorageID)
|
|
|
|
fetchedStorageID, err = metaStorageID(db, object.AddressOf(deleted))
|
|
require.NoError(t, err)
|
|
require.Equal(t, storageID, fetchedStorageID)
|
|
})
|
|
}
|
|
|
|
func metaUpdateStorageID(db *meta.DB, addr oid.Address, id []byte) error {
|
|
var sidPrm meta.UpdateStorageIDPrm
|
|
sidPrm.SetAddress(addr)
|
|
sidPrm.SetStorageID(id)
|
|
|
|
_, err := db.UpdateStorageID(context.Background(), sidPrm)
|
|
return err
|
|
}
|
|
|
|
func metaStorageID(db *meta.DB, addr oid.Address) ([]byte, error) {
|
|
var sidPrm meta.StorageIDPrm
|
|
sidPrm.SetAddress(addr)
|
|
|
|
r, err := db.StorageID(context.Background(), sidPrm)
|
|
return r.StorageID(), err
|
|
}
|