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 }