2019-11-18 13:34:06 +00:00
|
|
|
package container
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/gogo/protobuf/proto"
|
2020-01-30 13:32:50 +00:00
|
|
|
"github.com/nspcc-dev/neofs-api/refs"
|
2019-11-18 13:34:06 +00:00
|
|
|
"github.com/nspcc-dev/neofs-crypto/test"
|
|
|
|
"github.com/nspcc-dev/netmap"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestCID(t *testing.T) {
|
|
|
|
t.Run("check that marshal/unmarshal works like expected", func(t *testing.T) {
|
|
|
|
var (
|
|
|
|
c2 Container
|
|
|
|
cid2 CID
|
|
|
|
key = test.DecodeKey(0)
|
|
|
|
)
|
|
|
|
|
|
|
|
rules := netmap.PlacementRule{
|
|
|
|
ReplFactor: 2,
|
|
|
|
SFGroups: []netmap.SFGroup{
|
|
|
|
{
|
|
|
|
Selectors: []netmap.Select{
|
|
|
|
{Key: "Country", Count: 1},
|
|
|
|
{Key: netmap.NodesBucket, Count: 2},
|
|
|
|
},
|
|
|
|
Filters: []netmap.Filter{
|
|
|
|
{Key: "Country", F: netmap.FilterIn("USA")},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
owner, err := refs.NewOwnerID(&key.PublicKey)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
c1, err := New(10, owner, rules)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
data, err := proto.Marshal(c1)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
require.NoError(t, c2.Unmarshal(data))
|
|
|
|
require.Equal(t, c1, &c2)
|
|
|
|
|
|
|
|
cid1, err := c1.ID()
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
data, err = proto.Marshal(&cid1)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, cid2.Unmarshal(data))
|
|
|
|
|
|
|
|
require.Equal(t, cid1, cid2)
|
|
|
|
})
|
|
|
|
}
|
2019-12-17 13:15:51 +00:00
|
|
|
|
|
|
|
func TestAccessMode(t *testing.T) {
|
|
|
|
t.Run("read access to read/write mode", func(t *testing.T) {
|
|
|
|
require.Equal(t, AccessModeRead, AccessModeReadWrite&AccessModeRead)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("write access to read/write mode", func(t *testing.T) {
|
|
|
|
require.Equal(t, AccessModeWrite, AccessModeReadWrite&AccessModeWrite)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("read(write) access to write(read) mode", func(t *testing.T) {
|
|
|
|
require.Zero(t, AccessModeRead&AccessModeWrite)
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("access to same mode", func(t *testing.T) {
|
|
|
|
require.Equal(t, AccessModeWrite, AccessModeWrite&AccessModeWrite)
|
|
|
|
require.Equal(t, AccessModeRead, AccessModeRead&AccessModeRead)
|
|
|
|
require.Equal(t, AccessModeReadWrite, AccessModeReadWrite&AccessModeReadWrite)
|
|
|
|
})
|
|
|
|
}
|