forked from TrueCloudLab/frostfs-node
[#1686] blobstor/*: Remove unneeded tests
The blobovniczatree test also checks the amount of objects we can put, so leave it here. Signed-off-by: Evgenii Stratonikov <evgeniy@morphbits.ru>
This commit is contained in:
parent
b9a2055e1c
commit
78bf17c0b0
2 changed files with 3 additions and 237 deletions
|
@ -7,32 +7,12 @@ import (
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/core/object"
|
"github.com/nspcc-dev/neofs-node/pkg/core/object"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobstor/common"
|
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobstor/common"
|
||||||
|
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobstor/internal/blobstortest"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/util/logger/test"
|
"github.com/nspcc-dev/neofs-node/pkg/util/logger/test"
|
||||||
apistatus "github.com/nspcc-dev/neofs-sdk-go/client/status"
|
|
||||||
cidtest "github.com/nspcc-dev/neofs-sdk-go/container/id/test"
|
|
||||||
objectSDK "github.com/nspcc-dev/neofs-sdk-go/object"
|
|
||||||
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
|
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
|
||||||
oidtest "github.com/nspcc-dev/neofs-sdk-go/object/id/test"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
func testObject(sz uint64) *objectSDK.Object {
|
|
||||||
raw := objectSDK.New()
|
|
||||||
|
|
||||||
raw.SetID(oidtest.ID())
|
|
||||||
raw.SetContainerID(cidtest.ID())
|
|
||||||
|
|
||||||
raw.SetPayload(make([]byte, sz))
|
|
||||||
|
|
||||||
// fit the binary size to the required
|
|
||||||
data, _ := raw.Marshal()
|
|
||||||
if ln := uint64(len(data)); ln > sz {
|
|
||||||
raw.SetPayload(raw.Payload()[:sz-(ln-sz)])
|
|
||||||
}
|
|
||||||
|
|
||||||
return raw
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestBlobovniczas(t *testing.T) {
|
func TestBlobovniczas(t *testing.T) {
|
||||||
rand.Seed(1024)
|
rand.Seed(1024)
|
||||||
|
|
||||||
|
@ -64,7 +44,7 @@ func TestBlobovniczas(t *testing.T) {
|
||||||
minFitObjNum := width * depth * szLim / objSz
|
minFitObjNum := width * depth * szLim / objSz
|
||||||
|
|
||||||
for i := uint64(0); i < minFitObjNum; i++ {
|
for i := uint64(0); i < minFitObjNum; i++ {
|
||||||
obj := testObject(objSz)
|
obj := blobstortest.NewObject(objSz)
|
||||||
addr := object.AddressOf(obj)
|
addr := object.AddressOf(obj)
|
||||||
|
|
||||||
addrList = append(addrList, addr)
|
addrList = append(addrList, addr)
|
||||||
|
@ -73,64 +53,7 @@ func TestBlobovniczas(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// save object in blobovnicza
|
// save object in blobovnicza
|
||||||
pRes, err := b.Put(common.PutPrm{Address: addr, RawData: d})
|
_, err = b.Put(common.PutPrm{Address: addr, RawData: d})
|
||||||
require.NoError(t, err, i)
|
require.NoError(t, err, i)
|
||||||
|
|
||||||
// get w/ blobovnicza ID
|
|
||||||
var prm common.GetPrm
|
|
||||||
prm.StorageID = pRes.StorageID
|
|
||||||
prm.Address = addr
|
|
||||||
|
|
||||||
res, err := b.Get(prm)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, obj, res.Object)
|
|
||||||
|
|
||||||
// get w/o blobovnicza ID
|
|
||||||
prm.StorageID = nil
|
|
||||||
|
|
||||||
res, err = b.Get(prm)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, obj, res.Object)
|
|
||||||
|
|
||||||
// get range w/ blobovnicza ID
|
|
||||||
var rngPrm common.GetRangePrm
|
|
||||||
rngPrm.StorageID = pRes.StorageID
|
|
||||||
rngPrm.Address = addr
|
|
||||||
|
|
||||||
payload := obj.Payload()
|
|
||||||
pSize := uint64(len(obj.Payload()))
|
|
||||||
|
|
||||||
off, ln := pSize/3, 2*pSize/3
|
|
||||||
rngPrm.Range.SetOffset(off)
|
|
||||||
rngPrm.Range.SetLength(ln)
|
|
||||||
|
|
||||||
rngRes, err := b.GetRange(rngPrm)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, payload[off:off+ln], rngRes.Data)
|
|
||||||
|
|
||||||
// get range w/o blobovnicza ID
|
|
||||||
rngPrm.StorageID = nil
|
|
||||||
|
|
||||||
rngRes, err = b.GetRange(rngPrm)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, payload[off:off+ln], rngRes.Data)
|
|
||||||
}
|
|
||||||
|
|
||||||
var dPrm common.DeletePrm
|
|
||||||
var gPrm common.GetPrm
|
|
||||||
|
|
||||||
for i := range addrList {
|
|
||||||
dPrm.Address = addrList[i]
|
|
||||||
|
|
||||||
_, err := b.Delete(dPrm)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
gPrm.Address = addrList[i]
|
|
||||||
|
|
||||||
_, err = b.Get(gPrm)
|
|
||||||
require.ErrorAs(t, err, new(apistatus.ObjectNotFound))
|
|
||||||
|
|
||||||
_, err = b.Delete(dPrm)
|
|
||||||
require.ErrorAs(t, err, new(apistatus.ObjectNotFound))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,9 @@
|
||||||
package fstree
|
package fstree
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobstor/common"
|
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/util"
|
|
||||||
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
|
|
||||||
oidtest "github.com/nspcc-dev/neofs-sdk-go/object/id/test"
|
oidtest "github.com/nspcc-dev/neofs-sdk-go/object/id/test"
|
||||||
objecttest "github.com/nspcc-dev/neofs-sdk-go/object/test"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -21,153 +14,3 @@ func TestAddressToString(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, addr, *actual)
|
require.Equal(t, addr, *actual)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFSTree(t *testing.T) {
|
|
||||||
tmpDir := filepath.Join(os.TempDir(), "neofs.fstree.test")
|
|
||||||
require.NoError(t, os.Mkdir(tmpDir, os.ModePerm))
|
|
||||||
t.Cleanup(func() { require.NoError(t, os.RemoveAll(tmpDir)) })
|
|
||||||
|
|
||||||
fs := FSTree{
|
|
||||||
Info: Info{
|
|
||||||
Permissions: os.ModePerm,
|
|
||||||
RootPath: tmpDir,
|
|
||||||
},
|
|
||||||
Depth: 2,
|
|
||||||
DirNameLen: 2,
|
|
||||||
}
|
|
||||||
|
|
||||||
const count = 3
|
|
||||||
var addrs []oid.Address
|
|
||||||
|
|
||||||
store := map[string][]byte{}
|
|
||||||
|
|
||||||
for i := 0; i < count; i++ {
|
|
||||||
a := oidtest.Address()
|
|
||||||
addrs = append(addrs, a)
|
|
||||||
|
|
||||||
data, err := objecttest.Object().Marshal()
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
_, err = fs.Put(common.PutPrm{Address: a, RawData: data})
|
|
||||||
require.NoError(t, err)
|
|
||||||
store[a.EncodeToString()] = data
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Run("get", func(t *testing.T) {
|
|
||||||
for _, a := range addrs {
|
|
||||||
actual, err := fs.Get(common.GetPrm{Address: a})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, store[a.EncodeToString()], actual.RawData)
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := fs.Get(common.GetPrm{Address: oidtest.Address()})
|
|
||||||
require.Error(t, err)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("exists", func(t *testing.T) {
|
|
||||||
for _, a := range addrs {
|
|
||||||
res, err := fs.Exists(common.ExistsPrm{Address: a})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.True(t, res.Exists)
|
|
||||||
}
|
|
||||||
|
|
||||||
res, err := fs.Exists(common.ExistsPrm{Address: oidtest.Address()})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.False(t, res.Exists)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("iterate", func(t *testing.T) {
|
|
||||||
n := 0
|
|
||||||
var iterationPrm common.IteratePrm
|
|
||||||
iterationPrm.Handler = func(elem common.IterationElement) error {
|
|
||||||
n++
|
|
||||||
addr := elem.Address.EncodeToString()
|
|
||||||
expected, ok := store[addr]
|
|
||||||
require.True(t, ok, "object %s was not found", addr)
|
|
||||||
require.Equal(t, elem.ObjectData, expected)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := fs.Iterate(iterationPrm)
|
|
||||||
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, count, n)
|
|
||||||
|
|
||||||
t.Run("leave early", func(t *testing.T) {
|
|
||||||
n := 0
|
|
||||||
errStop := errors.New("stop")
|
|
||||||
|
|
||||||
iterationPrm.Handler = func(_ common.IterationElement) error {
|
|
||||||
if n++; n == count-1 {
|
|
||||||
return errStop
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := fs.Iterate(iterationPrm)
|
|
||||||
|
|
||||||
require.ErrorIs(t, err, errStop)
|
|
||||||
require.Equal(t, count-1, n)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("ignore errors", func(t *testing.T) {
|
|
||||||
n := 0
|
|
||||||
|
|
||||||
// Unreadable directory.
|
|
||||||
require.NoError(t, os.Mkdir(filepath.Join(fs.RootPath, "ZZ"), 0))
|
|
||||||
|
|
||||||
// Unreadable file.
|
|
||||||
p := fs.treePath(oidtest.Address())
|
|
||||||
require.NoError(t, util.MkdirAllX(filepath.Dir(p), fs.Permissions))
|
|
||||||
require.NoError(t, os.WriteFile(p, []byte{1, 2, 3}, 0))
|
|
||||||
|
|
||||||
// Invalid address.
|
|
||||||
p = fs.treePath(oidtest.Address()) + ".invalid"
|
|
||||||
require.NoError(t, util.MkdirAllX(filepath.Dir(p), fs.Permissions))
|
|
||||||
require.NoError(t, os.WriteFile(p, []byte{1, 2, 3}, fs.Permissions))
|
|
||||||
|
|
||||||
iterationPrm.IgnoreErrors = true
|
|
||||||
iterationPrm.Handler = func(_ common.IterationElement) error {
|
|
||||||
n++
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := fs.Iterate(iterationPrm)
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, count, n)
|
|
||||||
|
|
||||||
t.Run("error from handler is returned", func(t *testing.T) {
|
|
||||||
expectedErr := errors.New("expected error")
|
|
||||||
n := 0
|
|
||||||
|
|
||||||
iterationPrm.Handler = func(_ common.IterationElement) error {
|
|
||||||
n++
|
|
||||||
if n == count/2 { // process some iterations
|
|
||||||
return expectedErr
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := fs.Iterate(iterationPrm)
|
|
||||||
require.ErrorIs(t, err, expectedErr)
|
|
||||||
require.Equal(t, count/2, n)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("delete", func(t *testing.T) {
|
|
||||||
_, err := fs.Delete(common.DeletePrm{Address: addrs[0]})
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
res, err := fs.Exists(common.ExistsPrm{Address: addrs[0]})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.False(t, res.Exists)
|
|
||||||
|
|
||||||
res, err = fs.Exists(common.ExistsPrm{Address: addrs[1]})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.True(t, res.Exists)
|
|
||||||
|
|
||||||
_, err = fs.Delete(common.DeletePrm{Address: oidtest.Address()})
|
|
||||||
require.Error(t, err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue