[#251] object/address: Refactor and document package functionality

Merge `address` package into `oid` one. Bring `session.Object`
implementation into conformity with the NeoFS API protocol.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2022-05-25 12:03:22 +03:00 committed by LeL
parent bef4618cd6
commit f0a5eb6dbc
15 changed files with 429 additions and 468 deletions

View file

@ -9,11 +9,12 @@ import (
"github.com/google/uuid"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neofs-api-go/v2/refs"
v2session "github.com/nspcc-dev/neofs-api-go/v2/session"
cidtest "github.com/nspcc-dev/neofs-sdk-go/container/id/test"
neofscrypto "github.com/nspcc-dev/neofs-sdk-go/crypto"
neofsecdsa "github.com/nspcc-dev/neofs-sdk-go/crypto/ecdsa"
"github.com/nspcc-dev/neofs-sdk-go/object/address"
addresstest "github.com/nspcc-dev/neofs-sdk-go/object/address/test"
oidtest "github.com/nspcc-dev/neofs-sdk-go/object/id/test"
"github.com/nspcc-dev/neofs-sdk-go/session"
sessiontest "github.com/nspcc-dev/neofs-sdk-go/session/test"
"github.com/nspcc-dev/neofs-sdk-go/user"
@ -41,6 +42,14 @@ func TestObject_ReadFromV2(t *testing.T) {
var c v2session.ObjectSessionContext
id := uuid.New()
cnr := cidtest.ID()
var cnrV2 refs.ContainerID
cnr.WriteToV2(&cnrV2)
var addrV2 refs.Address
addrV2.SetContainerID(&cnrV2)
t.Run("protocol violation", func(t *testing.T) {
require.Error(t, x.ReadFromV2(m))
@ -54,27 +63,32 @@ func TestObject_ReadFromV2(t *testing.T) {
b.SetContext(&c)
require.Error(t, x.ReadFromV2(m))
c.SetAddress(&addrV2)
require.NoError(t, x.ReadFromV2(m))
})
m.SetBody(&b)
c.SetAddress(&addrV2)
b.SetContext(&c)
b.SetID(id[:])
t.Run("object", func(t *testing.T) {
var obj address.Address
require.NoError(t, x.ReadFromV2(m))
require.True(t, x.AssertContainer(cnr))
obj := oidtest.Address()
var objV2 refs.Address
obj.WriteToV2(&objV2)
c.SetAddress(&objV2)
require.NoError(t, x.ReadFromV2(m))
require.True(t, x.AppliedTo(obj))
obj = *addresstest.Address()
objv2 := *obj.ToV2()
c.SetAddress(&objv2)
require.NoError(t, x.ReadFromV2(m))
require.True(t, x.AppliedTo(obj))
require.True(t, x.AssertContainer(obj.Container()))
require.True(t, x.AssertObject(obj.Object()))
})
t.Run("verb", func(t *testing.T) {
@ -157,16 +171,31 @@ func TestEncodingObject(t *testing.T) {
})
}
func TestObjectAppliedTo(t *testing.T) {
func TestObject_BindContainer(t *testing.T) {
var x session.Object
a := *addresstest.Address()
cnr := cidtest.ID()
require.False(t, x.AppliedTo(a))
require.False(t, x.AssertContainer(cnr))
x.ApplyTo(a)
x.BindContainer(cnr)
require.True(t, x.AppliedTo(a))
require.True(t, x.AssertContainer(cnr))
}
func TestObject_LimitByObject(t *testing.T) {
var x session.Object
obj := oidtest.ID()
obj2 := oidtest.ID()
require.True(t, x.AssertObject(obj))
require.True(t, x.AssertObject(obj2))
x.LimitByObject(obj)
require.True(t, x.AssertObject(obj))
require.False(t, x.AssertObject(obj2))
}
func TestObjectExp(t *testing.T) {
@ -250,7 +279,8 @@ func TestObjectSignature(t *testing.T) {
const exp = 33
id := uuid.New()
key := randPublicKey()
obj := *addresstest.Address()
cnr := cidtest.ID()
obj := oidtest.ID()
verb := session.VerbObjectDelete
signer := randSigner()
@ -275,8 +305,11 @@ func TestObjectSignature(t *testing.T) {
func() { x.SetAuthKey(key) },
func() { x.SetAuthKey(randPublicKey()) },
func() { x.ApplyTo(obj) },
func() { x.ApplyTo(*addresstest.Address()) },
func() { x.BindContainer(cnr) },
func() { x.BindContainer(cidtest.ID()) },
func() { x.LimitByObject(obj) },
func() { x.LimitByObject(oidtest.ID()) },
func() { x.ForVerb(verb) },
func() { x.ForVerb(verb + 1) },