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  }