git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/object/tombstone_test.go (about)

     1  package object
     2  
     3  import (
     4  	"crypto/rand"
     5  	"crypto/sha256"
     6  	"testing"
     7  
     8  	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/tombstone"
     9  	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func generateIDList(sz int) []oid.ID {
    14  	res := make([]oid.ID, sz)
    15  	cs := [sha256.Size]byte{}
    16  
    17  	for i := range sz {
    18  		var oID oid.ID
    19  
    20  		res[i] = oID
    21  		rand.Read(cs[:])
    22  		res[i].SetSHA256(cs)
    23  	}
    24  
    25  	return res
    26  }
    27  
    28  func TestTombstone(t *testing.T) {
    29  	ts := NewTombstone()
    30  
    31  	exp := uint64(13)
    32  	ts.SetExpirationEpoch(exp)
    33  	require.Equal(t, exp, ts.ExpirationEpoch())
    34  
    35  	splitID := NewSplitID()
    36  	ts.SetSplitID(splitID)
    37  	require.Equal(t, splitID, ts.SplitID())
    38  
    39  	members := generateIDList(3)
    40  	ts.SetMembers(members)
    41  	require.Equal(t, members, ts.Members())
    42  }
    43  
    44  func TestTombstoneEncoding(t *testing.T) {
    45  	ts := NewTombstone()
    46  	ts.SetExpirationEpoch(13)
    47  	ts.SetSplitID(NewSplitID())
    48  	ts.SetMembers(generateIDList(5))
    49  
    50  	t.Run("binary", func(t *testing.T) {
    51  		data, err := ts.Marshal()
    52  		require.NoError(t, err)
    53  
    54  		ts2 := NewTombstone()
    55  		require.NoError(t, ts2.Unmarshal(data))
    56  
    57  		require.Equal(t, ts, ts2)
    58  	})
    59  
    60  	t.Run("json", func(t *testing.T) {
    61  		data, err := ts.MarshalJSON()
    62  		require.NoError(t, err)
    63  
    64  		ts2 := NewTombstone()
    65  		require.NoError(t, ts2.UnmarshalJSON(data))
    66  
    67  		require.Equal(t, ts, ts2)
    68  	})
    69  }
    70  
    71  func TestNewTombstoneFromV2(t *testing.T) {
    72  	t.Run("from nil", func(t *testing.T) {
    73  		var x *tombstone.Tombstone
    74  
    75  		require.Nil(t, NewTombstoneFromV2(x))
    76  	})
    77  }
    78  
    79  func TestNewTombstone(t *testing.T) {
    80  	t.Run("default values", func(t *testing.T) {
    81  		ts := NewTombstone()
    82  
    83  		// check initial values
    84  		require.Nil(t, ts.SplitID())
    85  		require.Nil(t, ts.Members())
    86  		require.Zero(t, ts.ExpirationEpoch())
    87  
    88  		// convert to v2 message
    89  		tsV2 := ts.ToV2()
    90  
    91  		require.Nil(t, tsV2.GetSplitID())
    92  		require.Nil(t, tsV2.GetMembers())
    93  		require.Zero(t, tsV2.GetExpirationEpoch())
    94  	})
    95  }