[#226] sdk/object: Implement Tombstone type with field access and encoding
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
6037a26a35
commit
c064760f5d
2 changed files with 183 additions and 0 deletions
65
pkg/object/tombstone_test.go
Normal file
65
pkg/object/tombstone_test.go
Normal file
|
@ -0,0 +1,65 @@
|
|||
package object
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/sha256"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func generateIDList(sz int) []*ID {
|
||||
res := make([]*ID, sz)
|
||||
cs := [sha256.Size]byte{}
|
||||
|
||||
for i := 0; i < sz; i++ {
|
||||
res[i] = NewID()
|
||||
rand.Read(cs[:])
|
||||
res[i].SetSHA256(cs)
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
func TestTombstone(t *testing.T) {
|
||||
ts := NewTombstone()
|
||||
|
||||
exp := uint64(13)
|
||||
ts.SetExpirationEpoch(exp)
|
||||
require.Equal(t, exp, ts.ExpirationEpoch())
|
||||
|
||||
splitID := NewSplitID()
|
||||
ts.SetSplitID(splitID)
|
||||
require.Equal(t, splitID, ts.SplitID())
|
||||
|
||||
members := generateIDList(3)
|
||||
ts.SetMembers(members)
|
||||
require.Equal(t, members, ts.Members())
|
||||
}
|
||||
|
||||
func TestTombstoneEncoding(t *testing.T) {
|
||||
ts := NewTombstone()
|
||||
ts.SetExpirationEpoch(13)
|
||||
ts.SetSplitID(NewSplitID())
|
||||
ts.SetMembers(generateIDList(5))
|
||||
|
||||
t.Run("binary", func(t *testing.T) {
|
||||
data, err := ts.Marshal()
|
||||
require.NoError(t, err)
|
||||
|
||||
ts2 := NewTombstone()
|
||||
require.NoError(t, ts2.Unmarshal(data))
|
||||
|
||||
require.Equal(t, ts, ts2)
|
||||
})
|
||||
|
||||
t.Run("json", func(t *testing.T) {
|
||||
data, err := ts.MarshalJSON()
|
||||
require.NoError(t, err)
|
||||
|
||||
ts2 := NewTombstone()
|
||||
require.NoError(t, ts2.UnmarshalJSON(data))
|
||||
|
||||
require.Equal(t, ts, ts2)
|
||||
})
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue