forked from TrueCloudLab/frostfs-api-go
[#194] pkg/container: Implement container nonce getter/setter as UUID
Implement NonceUUID/SetNonceUUID methods on container structure. Change implementation of Nonce/SetNonce methods and mark them deprecated. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
3550e128bb
commit
70c29ca3e5
2 changed files with 45 additions and 7 deletions
|
@ -3,6 +3,7 @@ package container
|
|||
import (
|
||||
"crypto/sha256"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/nspcc-dev/neofs-api-go/pkg"
|
||||
"github.com/nspcc-dev/neofs-api-go/pkg/netmap"
|
||||
"github.com/nspcc-dev/neofs-api-go/pkg/owner"
|
||||
|
@ -21,7 +22,7 @@ func New(opts ...NewOption) *Container {
|
|||
}
|
||||
|
||||
cnr := new(Container)
|
||||
cnr.SetNonce(cnrOptions.nonce[:])
|
||||
cnr.SetNonceUUID(cnrOptions.nonce)
|
||||
cnr.SetBasicACL(cnrOptions.acl)
|
||||
|
||||
if cnrOptions.owner != nil {
|
||||
|
@ -81,12 +82,46 @@ func (c *Container) SetOwnerID(v *owner.ID) {
|
|||
c.v2.SetOwnerID(v.ToV2())
|
||||
}
|
||||
|
||||
// Nonce returns container nonce in a binary format.
|
||||
//
|
||||
// Returns nil if container nonce is not a valid UUID.
|
||||
//
|
||||
// Deprecated: use NonceUUID instead.
|
||||
func (c *Container) Nonce() []byte {
|
||||
return c.v2.GetNonce() // return uuid?
|
||||
uid, err := c.NonceUUID()
|
||||
if err == nil {
|
||||
data, _ := uid.MarshalBinary()
|
||||
return data
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetNonce sets container nonce in a binary format.
|
||||
//
|
||||
// If slice length is less than UUID size, than
|
||||
// value is padded with a sequence of zeros.
|
||||
// If slice length is more than UUID size, than
|
||||
// value is cut.
|
||||
//
|
||||
// Deprecated: use SetNonceUUID instead.
|
||||
func (c *Container) SetNonce(v []byte) {
|
||||
c.v2.SetNonce(v) // set uuid?
|
||||
u := uuid.UUID{}
|
||||
copy(u[:], v)
|
||||
c.v2.SetNonce(u[:])
|
||||
}
|
||||
|
||||
// Returns container nonce in UUID format.
|
||||
//
|
||||
// Returns error if container nonce is not a valid UUID.
|
||||
func (c *Container) NonceUUID() (uuid.UUID, error) {
|
||||
return uuid.FromBytes(c.v2.GetNonce())
|
||||
}
|
||||
|
||||
// SetNonceUUID sets container nonce as UUID.
|
||||
func (c *Container) SetNonceUUID(v uuid.UUID) {
|
||||
data, _ := v.MarshalBinary()
|
||||
c.v2.SetNonce(data)
|
||||
}
|
||||
|
||||
func (c *Container) BasicACL() uint32 {
|
||||
|
|
|
@ -17,8 +17,7 @@ import (
|
|||
func TestNewContainer(t *testing.T) {
|
||||
c := container.New()
|
||||
|
||||
nonce, err := uuid.New().MarshalBinary()
|
||||
require.NoError(t, err)
|
||||
nonce := uuid.New()
|
||||
|
||||
wallet, err := owner.NEO3WalletFromPublicKey(&test.DecodeKey(1).PublicKey)
|
||||
require.NoError(t, err)
|
||||
|
@ -29,7 +28,7 @@ func TestNewContainer(t *testing.T) {
|
|||
c.SetBasicACL(acl.PublicBasicRule)
|
||||
c.SetAttributes(generateAttributes(5))
|
||||
c.SetPlacementPolicy(policy)
|
||||
c.SetNonce(nonce)
|
||||
c.SetNonceUUID(nonce)
|
||||
c.SetOwnerID(ownerID)
|
||||
c.SetVersion(pkg.SDKVersion())
|
||||
|
||||
|
@ -39,7 +38,11 @@ func TestNewContainer(t *testing.T) {
|
|||
require.EqualValues(t, newContainer.PlacementPolicy(), policy)
|
||||
require.EqualValues(t, newContainer.Attributes(), generateAttributes(5))
|
||||
require.EqualValues(t, newContainer.BasicACL(), acl.PublicBasicRule)
|
||||
require.EqualValues(t, newContainer.Nonce(), nonce)
|
||||
|
||||
newNonce, err := newContainer.NonceUUID()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.EqualValues(t, newNonce, nonce)
|
||||
require.EqualValues(t, newContainer.OwnerID(), ownerID)
|
||||
require.EqualValues(t, newContainer.Version(), pkg.SDKVersion())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue