2019-11-18 13:34:06 +00:00
|
|
|
package object
|
|
|
|
|
|
|
|
import (
|
|
|
|
"math/rand"
|
|
|
|
"sort"
|
|
|
|
"testing"
|
|
|
|
|
2020-03-31 07:05:26 +00:00
|
|
|
"github.com/nspcc-dev/neofs-api-go/hash"
|
|
|
|
"github.com/nspcc-dev/neofs-api-go/storagegroup"
|
2019-11-18 13:34:06 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestObject_StorageGroup(t *testing.T) {
|
|
|
|
t.Run("group method", func(t *testing.T) {
|
|
|
|
var linkCount byte = 100
|
|
|
|
|
|
|
|
obj := &Object{Headers: make([]Header, 0, linkCount)}
|
|
|
|
require.Empty(t, obj.Group())
|
|
|
|
|
|
|
|
idList := make([]ID, linkCount)
|
|
|
|
for i := byte(0); i < linkCount; i++ {
|
|
|
|
idList[i] = ID{i}
|
|
|
|
obj.Headers = append(obj.Headers, Header{
|
|
|
|
Value: &Header_Link{Link: &Link{
|
|
|
|
Type: Link_StorageGroup,
|
|
|
|
ID: idList[i],
|
|
|
|
}},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
rand.Shuffle(len(obj.Headers), func(i, j int) { obj.Headers[i], obj.Headers[j] = obj.Headers[j], obj.Headers[i] })
|
2019-12-02 14:56:06 +00:00
|
|
|
sort.Sort(storagegroup.IDList(idList))
|
2019-11-18 13:34:06 +00:00
|
|
|
require.Equal(t, idList, obj.Group())
|
|
|
|
})
|
|
|
|
t.Run("identification method", func(t *testing.T) {
|
|
|
|
oid, cid, owner := ID{1}, CID{2}, OwnerID{3}
|
|
|
|
obj := &Object{
|
|
|
|
SystemHeader: SystemHeader{
|
|
|
|
ID: oid,
|
|
|
|
OwnerID: owner,
|
|
|
|
CID: cid,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
idInfo := obj.IDInfo()
|
|
|
|
require.Equal(t, oid, idInfo.SGID)
|
|
|
|
require.Equal(t, cid, idInfo.CID)
|
|
|
|
require.Equal(t, owner, idInfo.OwnerID)
|
|
|
|
})
|
|
|
|
t.Run("zones method", func(t *testing.T) {
|
|
|
|
sgSize := uint64(100)
|
|
|
|
|
|
|
|
d := make([]byte, sgSize)
|
|
|
|
_, err := rand.Read(d)
|
|
|
|
require.NoError(t, err)
|
|
|
|
sgHash := hash.Sum(d)
|
|
|
|
|
|
|
|
obj := &Object{
|
|
|
|
Headers: []Header{
|
|
|
|
{
|
|
|
|
Value: &Header_StorageGroup{
|
2019-12-02 14:56:06 +00:00
|
|
|
StorageGroup: &storagegroup.StorageGroup{
|
2019-11-18 13:34:06 +00:00
|
|
|
ValidationDataSize: sgSize,
|
|
|
|
ValidationHash: sgHash,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
sumSize uint64
|
|
|
|
zones = obj.Zones()
|
|
|
|
hashes = make([]Hash, len(zones))
|
|
|
|
)
|
|
|
|
|
|
|
|
for i := range zones {
|
|
|
|
sumSize += zones[i].Size
|
|
|
|
hashes[i] = zones[i].Hash
|
|
|
|
}
|
|
|
|
|
|
|
|
sumHash, err := hash.Concat(hashes)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
require.Equal(t, sgSize, sumSize)
|
|
|
|
require.Equal(t, sgHash, sumHash)
|
|
|
|
})
|
|
|
|
}
|