frostfs-sdk-go/object/test/generate.go

144 lines
2.9 KiB
Go
Raw Normal View History

package objecttest
import (
"crypto/sha256"
"math/rand"
"github.com/google/uuid"
"github.com/nspcc-dev/neofs-sdk-go/checksum"
cidtest "github.com/nspcc-dev/neofs-sdk-go/container/id/test"
"github.com/nspcc-dev/neofs-sdk-go/object"
ownertest "github.com/nspcc-dev/neofs-sdk-go/owner/test"
sessiontest "github.com/nspcc-dev/neofs-sdk-go/session/test"
"github.com/nspcc-dev/neofs-sdk-go/signature"
"github.com/nspcc-dev/neofs-sdk-go/version"
)
// ID returns random object.ID.
func ID() *object.ID {
checksum := [sha256.Size]byte{}
rand.Read(checksum[:])
return IDWithChecksum(checksum)
}
// IDWithChecksum returns object.ID initialized
// with specified checksum.
func IDWithChecksum(cs [sha256.Size]byte) *object.ID {
id := object.NewID()
id.SetSHA256(cs)
return id
}
// Address returns random object.Address.
func Address() *object.Address {
x := object.NewAddress()
x.SetContainerID(cidtest.GenerateID())
x.SetObjectID(ID())
return x
}
// Range returns random object.Range.
func Range() *object.Range {
x := object.NewRange()
x.SetOffset(1024)
x.SetLength(2048)
return x
}
// Attribute returns random object.Attribute.
func Attribute() *object.Attribute {
x := object.NewAttribute()
x.SetKey("key")
x.SetValue("value")
return x
}
// SplitID returns random object.SplitID.
func SplitID() *object.SplitID {
x := object.NewSplitID()
x.SetUUID(uuid.New())
return x
}
func generateRaw(withParent bool) *object.RawObject {
x := object.NewRaw()
x.SetID(ID())
x.SetSessionToken(sessiontest.Generate())
x.SetPayload([]byte{1, 2, 3})
x.SetOwnerID(ownertest.GenerateID())
x.SetContainerID(cidtest.GenerateID())
x.SetType(object.TypeTombstone)
x.SetVersion(version.Current())
x.SetPayloadSize(111)
x.SetCreationEpoch(222)
x.SetPreviousID(ID())
x.SetParentID(ID())
x.SetChildren(ID(), ID())
x.SetAttributes(Attribute(), Attribute())
x.SetSplitID(SplitID())
// TODO reuse generators
x.SetPayloadChecksum(checksum.New())
x.SetPayloadHomomorphicHash(checksum.New())
x.SetSignature(signature.New())
if withParent {
x.SetParent(generateRaw(false).Object())
}
return x
}
// Raw returns random object.RawObject.
func Raw() *object.RawObject {
return generateRaw(true)
}
// Object returns random object.Object.
func Object() *object.Object {
return Raw().Object()
}
// Tombstone returns random object.Tombstone.
func Tombstone() *object.Tombstone {
x := object.NewTombstone()
x.SetSplitID(SplitID())
x.SetExpirationEpoch(13)
x.SetMembers([]*object.ID{ID(), ID()})
return x
}
// SplitInfo returns random object.SplitInfo.
func SplitInfo() *object.SplitInfo {
x := object.NewSplitInfo()
x.SetSplitID(SplitID())
x.SetLink(ID())
x.SetLastPart(ID())
return x
}
// SearchFilters returns random object.SearchFilters.
func SearchFilters() object.SearchFilters {
x := object.NewSearchFilters()
x.AddObjectIDFilter(object.MatchStringEqual, ID())
x.AddObjectContainerIDFilter(object.MatchStringNotEqual, cidtest.GenerateID())
return x
}