cecdeeac73
Add CutPayload method that returns RawObject's copy with untethered empty payload. Changing the result payload doesn't affect source object. Changing the other fields affects source object. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
253 lines
4.4 KiB
Go
253 lines
4.4 KiB
Go
package object
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"crypto/sha256"
|
|
"testing"
|
|
|
|
"github.com/nspcc-dev/neofs-api-go/pkg"
|
|
"github.com/nspcc-dev/neofs-api-go/pkg/container"
|
|
"github.com/nspcc-dev/neofs-api-go/pkg/owner"
|
|
"github.com/nspcc-dev/neofs-api-go/pkg/token"
|
|
"github.com/nspcc-dev/neofs-api-go/v2/object"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func randID(t *testing.T) *ID {
|
|
id := NewID()
|
|
id.SetSHA256(randSHA256Checksum(t))
|
|
|
|
return id
|
|
}
|
|
|
|
func randSHA256Checksum(t *testing.T) (cs [sha256.Size]byte) {
|
|
_, err := rand.Read(cs[:])
|
|
require.NoError(t, err)
|
|
|
|
return
|
|
}
|
|
|
|
func randTZChecksum(t *testing.T) (cs [64]byte) {
|
|
_, err := rand.Read(cs[:])
|
|
require.NoError(t, err)
|
|
|
|
return
|
|
}
|
|
|
|
func TestRawObject_SetID(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
id := randID(t)
|
|
|
|
obj.SetID(id)
|
|
|
|
require.Equal(t, id, obj.GetID())
|
|
}
|
|
|
|
func TestRawObject_SetSignature(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
sig := pkg.NewSignature()
|
|
sig.SetKey([]byte{1, 2, 3})
|
|
sig.SetSign([]byte{4, 5, 6})
|
|
|
|
obj.SetSignature(sig)
|
|
|
|
require.Equal(t, sig, obj.GetSignature())
|
|
}
|
|
|
|
func TestRawObject_SetPayload(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
payload := make([]byte, 10)
|
|
_, _ = rand.Read(payload)
|
|
|
|
obj.SetPayload(payload)
|
|
|
|
require.Equal(t, payload, obj.GetPayload())
|
|
}
|
|
|
|
func TestRawObject_SetVersion(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
ver := pkg.NewVersion()
|
|
ver.SetMajor(1)
|
|
ver.SetMinor(2)
|
|
|
|
obj.SetVersion(ver)
|
|
|
|
require.Equal(t, ver, obj.GetVersion())
|
|
}
|
|
|
|
func TestRawObject_SetPayloadSize(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
sz := uint64(133)
|
|
obj.SetPayloadSize(sz)
|
|
|
|
require.Equal(t, sz, obj.GetPayloadSize())
|
|
}
|
|
|
|
func TestRawObject_SetContainerID(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
checksum := randSHA256Checksum(t)
|
|
|
|
cid := container.NewID()
|
|
cid.SetSHA256(checksum)
|
|
|
|
obj.SetContainerID(cid)
|
|
|
|
require.Equal(t, cid, obj.GetContainerID())
|
|
}
|
|
|
|
func TestRawObject_SetOwnerID(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
w := new(owner.NEO3Wallet)
|
|
_, _ = rand.Read(w.Bytes())
|
|
|
|
ownerID := owner.NewID()
|
|
ownerID.SetNeo3Wallet(w)
|
|
|
|
obj.SetOwnerID(ownerID)
|
|
|
|
require.Equal(t, ownerID, obj.GetOwnerID())
|
|
}
|
|
|
|
func TestRawObject_SetCreationEpoch(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
creat := uint64(228)
|
|
obj.setCreationEpoch(creat)
|
|
|
|
require.Equal(t, creat, obj.GetCreationEpoch())
|
|
}
|
|
|
|
func TestRawObject_SetPayloadChecksum(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
cs := pkg.NewChecksum()
|
|
cs.SetSHA256(randSHA256Checksum(t))
|
|
|
|
obj.SetPayloadChecksum(cs)
|
|
|
|
require.Equal(t, cs, obj.GetPayloadChecksum())
|
|
}
|
|
|
|
func TestRawObject_SetPayloadHomomorphicHash(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
cs := pkg.NewChecksum()
|
|
cs.SetTillichZemor(randTZChecksum(t))
|
|
|
|
obj.SetPayloadHomomorphicHash(cs)
|
|
|
|
require.Equal(t, cs, obj.GetPayloadHomomorphicHash())
|
|
}
|
|
|
|
func TestRawObject_SetAttributes(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
a1 := NewAttribute()
|
|
a1.SetKey("key1")
|
|
a1.SetValue("val1")
|
|
|
|
a2 := NewAttribute()
|
|
a2.SetKey("key2")
|
|
a2.SetValue("val2")
|
|
|
|
obj.SetAttributes(a1, a2)
|
|
|
|
require.Equal(t, []*Attribute{a1, a2}, obj.GetAttributes())
|
|
}
|
|
|
|
func TestRawObject_SetPreviousID(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
prev := randID(t)
|
|
|
|
obj.SetPreviousID(prev)
|
|
|
|
require.Equal(t, prev, obj.GetPreviousID())
|
|
}
|
|
|
|
func TestRawObject_SetChildren(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
id1 := randID(t)
|
|
id2 := randID(t)
|
|
|
|
obj.SetChildren(id1, id2)
|
|
|
|
require.Equal(t, []*ID{id1, id2}, obj.GetChildren())
|
|
}
|
|
|
|
func TestRawObject_SetParent(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
par := NewRaw()
|
|
par.SetID(randID(t))
|
|
parObj := par.Object()
|
|
|
|
obj.SetParent(parObj)
|
|
|
|
require.Equal(t, parObj, obj.GetParent())
|
|
}
|
|
|
|
func TestRawObject_ToV2(t *testing.T) {
|
|
objV2 := new(object.Object)
|
|
objV2.SetPayload([]byte{1, 2, 3})
|
|
|
|
obj := NewRawFromV2(objV2)
|
|
|
|
require.Equal(t, objV2, obj.ToV2())
|
|
}
|
|
|
|
func TestRawObject_SetSessionToken(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
tok := token.NewSessionToken()
|
|
tok.SetID([]byte{1, 2, 3})
|
|
|
|
obj.SetSessionToken(tok)
|
|
|
|
require.Equal(t, tok, obj.GetSessionToken())
|
|
}
|
|
|
|
func TestRawObject_SetType(t *testing.T) {
|
|
obj := NewRaw()
|
|
|
|
typ := TypeStorageGroup
|
|
|
|
obj.SetType(typ)
|
|
|
|
require.Equal(t, typ, obj.GetType())
|
|
}
|
|
|
|
func TestRawObject_CutPayload(t *testing.T) {
|
|
o1 := NewRaw()
|
|
|
|
p1 := []byte{12, 3}
|
|
o1.SetPayload(p1)
|
|
|
|
sz := uint64(13)
|
|
o1.SetPayloadSize(sz)
|
|
|
|
o2 := o1.CutPayload()
|
|
|
|
require.Equal(t, sz, o2.GetPayloadSize())
|
|
require.Empty(t, o2.GetPayload())
|
|
|
|
sz++
|
|
o1.SetPayloadSize(sz)
|
|
|
|
require.Equal(t, sz, o1.GetPayloadSize())
|
|
require.Equal(t, sz, o2.GetPayloadSize())
|
|
|
|
p2 := []byte{4, 5, 6}
|
|
o2.SetPayload(p2)
|
|
|
|
require.Equal(t, p2, o2.GetPayload())
|
|
require.Equal(t, p1, o1.GetPayload())
|
|
}
|