git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/container/id/id_test.go (about) 1 package cid_test 2 3 import ( 4 "crypto/rand" 5 "crypto/sha256" 6 "testing" 7 8 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs" 9 cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" 10 cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" 11 "github.com/mr-tron/base58" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func randSHA256Checksum() (cs [sha256.Size]byte) { 16 rand.Read(cs[:]) 17 return 18 } 19 20 const emptyID = "11111111111111111111111111111111" 21 22 func TestID_ToV2(t *testing.T) { 23 t.Run("non-zero", func(t *testing.T) { 24 checksum := randSHA256Checksum() 25 26 id := cidtest.IDWithChecksum(checksum) 27 28 var idV2 refs.ContainerID 29 id.WriteToV2(&idV2) 30 31 var newID cid.ID 32 require.NoError(t, newID.ReadFromV2(idV2)) 33 34 require.Equal(t, id, newID) 35 require.Equal(t, checksum[:], idV2.GetValue()) 36 }) 37 38 t.Run("zero", func(t *testing.T) { 39 var ( 40 x cid.ID 41 v2 refs.ContainerID 42 ) 43 44 x.WriteToV2(&v2) 45 require.Equal(t, emptyID, base58.Encode(v2.GetValue())) 46 }) 47 } 48 49 func TestID_Equal(t *testing.T) { 50 cs := randSHA256Checksum() 51 52 id1 := cidtest.IDWithChecksum(cs) 53 id2 := cidtest.IDWithChecksum(cs) 54 55 require.True(t, id1.Equals(id2)) 56 57 id3 := cidtest.ID() 58 59 require.False(t, id1.Equals(id3)) 60 } 61 62 func TestID_String(t *testing.T) { 63 t.Run("DecodeString/EncodeToString", func(t *testing.T) { 64 id := cidtest.ID() 65 var id2 cid.ID 66 67 require.NoError(t, id2.DecodeString(id.EncodeToString())) 68 require.Equal(t, id, id2) 69 }) 70 71 t.Run("zero", func(t *testing.T) { 72 var id cid.ID 73 74 require.Equal(t, emptyID, id.EncodeToString()) 75 }) 76 } 77 78 func TestNewFromV2(t *testing.T) { 79 t.Run("from zero", func(t *testing.T) { 80 var ( 81 x cid.ID 82 v2 refs.ContainerID 83 ) 84 85 require.Error(t, x.ReadFromV2(v2)) 86 }) 87 } 88 89 func TestID_Encode(t *testing.T) { 90 var id cid.ID 91 92 t.Run("panic", func(t *testing.T) { 93 dst := make([]byte, sha256.Size-1) 94 95 require.Panics(t, func() { 96 id.Encode(dst) 97 }) 98 }) 99 100 t.Run("correct", func(t *testing.T) { 101 dst := make([]byte, sha256.Size) 102 103 require.NotPanics(t, func() { 104 id.Encode(dst) 105 }) 106 require.Equal(t, emptyID, id.EncodeToString()) 107 }) 108 }