forked from TrueCloudLab/frostfs-sdk-go
[#170] storagegroup: Refactor and document package functionality
Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
parent
1186f2f703
commit
9b63c07c59
5 changed files with 244 additions and 55 deletions
|
@ -1,9 +1,13 @@
|
|||
package storagegroup_test
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"testing"
|
||||
|
||||
"github.com/nspcc-dev/neofs-api-go/v2/refs"
|
||||
storagegroupV2 "github.com/nspcc-dev/neofs-api-go/v2/storagegroup"
|
||||
storagegroupV2test "github.com/nspcc-dev/neofs-api-go/v2/storagegroup/test"
|
||||
"github.com/nspcc-dev/neofs-sdk-go/checksum"
|
||||
checksumtest "github.com/nspcc-dev/neofs-sdk-go/checksum/test"
|
||||
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
|
||||
oidtest "github.com/nspcc-dev/neofs-sdk-go/object/id/test"
|
||||
|
@ -13,7 +17,7 @@ import (
|
|||
)
|
||||
|
||||
func TestStorageGroup(t *testing.T) {
|
||||
sg := storagegroup.New()
|
||||
var sg storagegroup.StorageGroup
|
||||
|
||||
sz := uint64(13)
|
||||
sg.SetValidationDataSize(sz)
|
||||
|
@ -35,6 +39,56 @@ func TestStorageGroup(t *testing.T) {
|
|||
require.Equal(t, members, sg.Members())
|
||||
}
|
||||
|
||||
func TestStorageGroup_ReadFromV2(t *testing.T) {
|
||||
t.Run("from zero", func(t *testing.T) {
|
||||
var (
|
||||
x storagegroup.StorageGroup
|
||||
v2 storagegroupV2.StorageGroup
|
||||
)
|
||||
|
||||
x.ReadFromV2(v2)
|
||||
|
||||
require.Zero(t, x.ExpirationEpoch())
|
||||
require.Zero(t, x.ValidationDataSize())
|
||||
_, set := x.ValidationDataHash()
|
||||
require.False(t, set)
|
||||
require.Zero(t, x.Members())
|
||||
})
|
||||
|
||||
t.Run("from non-zero", func(t *testing.T) {
|
||||
var (
|
||||
x storagegroup.StorageGroup
|
||||
v2 = storagegroupV2test.GenerateStorageGroup(false)
|
||||
)
|
||||
|
||||
// https://github.com/nspcc-dev/neofs-api-go/issues/394
|
||||
v2.SetMembers(generateOIDList())
|
||||
|
||||
size := v2.GetValidationDataSize()
|
||||
epoch := v2.GetExpirationEpoch()
|
||||
mm := v2.GetMembers()
|
||||
hashV2 := v2.GetValidationHash()
|
||||
|
||||
x.ReadFromV2(*v2)
|
||||
|
||||
require.Equal(t, epoch, x.ExpirationEpoch())
|
||||
require.Equal(t, size, x.ValidationDataSize())
|
||||
|
||||
var hash checksum.Checksum
|
||||
hash.ReadFromV2(*hashV2)
|
||||
h, set := x.ValidationDataHash()
|
||||
require.True(t, set)
|
||||
require.Equal(t, hash, h)
|
||||
|
||||
var oidV2 refs.ObjectID
|
||||
|
||||
for i, m := range mm {
|
||||
x.Members()[i].WriteToV2(&oidV2)
|
||||
require.Equal(t, m, oidV2)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestStorageGroupEncoding(t *testing.T) {
|
||||
sg := storagegrouptest.StorageGroup()
|
||||
|
||||
|
@ -42,7 +96,7 @@ func TestStorageGroupEncoding(t *testing.T) {
|
|||
data, err := sg.Marshal()
|
||||
require.NoError(t, err)
|
||||
|
||||
sg2 := storagegroup.New()
|
||||
var sg2 storagegroup.StorageGroup
|
||||
require.NoError(t, sg2.Unmarshal(data))
|
||||
|
||||
require.Equal(t, sg, sg2)
|
||||
|
@ -52,32 +106,58 @@ func TestStorageGroupEncoding(t *testing.T) {
|
|||
data, err := sg.MarshalJSON()
|
||||
require.NoError(t, err)
|
||||
|
||||
sg2 := storagegroup.New()
|
||||
var sg2 storagegroup.StorageGroup
|
||||
require.NoError(t, sg2.UnmarshalJSON(data))
|
||||
|
||||
require.Equal(t, sg, sg2)
|
||||
})
|
||||
}
|
||||
|
||||
func TestNewFromV2(t *testing.T) {
|
||||
t.Run("from nil", func(t *testing.T) {
|
||||
var x *storagegroupV2.StorageGroup
|
||||
func TestStorageGroup_WriteToV2(t *testing.T) {
|
||||
t.Run("zero to v2", func(t *testing.T) {
|
||||
var (
|
||||
x storagegroup.StorageGroup
|
||||
v2 storagegroupV2.StorageGroup
|
||||
)
|
||||
|
||||
require.Nil(t, storagegroup.NewFromV2(x))
|
||||
x.WriteToV2(&v2)
|
||||
|
||||
require.Nil(t, v2.GetValidationHash())
|
||||
require.Nil(t, v2.GetMembers())
|
||||
require.Zero(t, v2.GetValidationDataSize())
|
||||
require.Zero(t, v2.GetExpirationEpoch())
|
||||
})
|
||||
}
|
||||
|
||||
func TestStorageGroup_ToV2(t *testing.T) {
|
||||
t.Run("nil", func(t *testing.T) {
|
||||
var x *storagegroup.StorageGroup
|
||||
t.Run("non-zero to v2", func(t *testing.T) {
|
||||
var (
|
||||
x = storagegrouptest.StorageGroup()
|
||||
v2 storagegroupV2.StorageGroup
|
||||
)
|
||||
|
||||
require.Nil(t, x.ToV2())
|
||||
x.WriteToV2(&v2)
|
||||
|
||||
require.Equal(t, x.ExpirationEpoch(), v2.GetExpirationEpoch())
|
||||
require.Equal(t, x.ValidationDataSize(), v2.GetValidationDataSize())
|
||||
|
||||
var hash checksum.Checksum
|
||||
hash.ReadFromV2(*v2.GetValidationHash())
|
||||
|
||||
h, set := x.ValidationDataHash()
|
||||
require.True(t, set)
|
||||
require.Equal(t, h, hash)
|
||||
|
||||
var oidV2 refs.ObjectID
|
||||
|
||||
for i, m := range x.Members() {
|
||||
m.WriteToV2(&oidV2)
|
||||
require.Equal(t, oidV2, v2.GetMembers()[i])
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestNew(t *testing.T) {
|
||||
t.Run("default values", func(t *testing.T) {
|
||||
sg := storagegroup.New()
|
||||
var sg storagegroup.StorageGroup
|
||||
|
||||
// check initial values
|
||||
require.Nil(t, sg.Members())
|
||||
|
@ -85,13 +165,19 @@ func TestNew(t *testing.T) {
|
|||
require.False(t, set)
|
||||
require.Zero(t, sg.ExpirationEpoch())
|
||||
require.Zero(t, sg.ValidationDataSize())
|
||||
|
||||
// convert to v2 message
|
||||
sgV2 := sg.ToV2()
|
||||
|
||||
require.Nil(t, sgV2.GetMembers())
|
||||
require.Nil(t, sgV2.GetValidationHash())
|
||||
require.Zero(t, sgV2.GetExpirationEpoch())
|
||||
require.Zero(t, sgV2.GetValidationDataSize())
|
||||
})
|
||||
}
|
||||
|
||||
func generateOIDList() []refs.ObjectID {
|
||||
const size = 3
|
||||
|
||||
mmV2 := make([]refs.ObjectID, size)
|
||||
for i := 0; i < size; i++ {
|
||||
oidV2 := make([]byte, sha256.Size)
|
||||
oidV2[i] = byte(i)
|
||||
|
||||
mmV2[i].SetValue(oidV2)
|
||||
}
|
||||
|
||||
return mmV2
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue