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

     1  package user_test
     2  
     3  import (
     4  	"bytes"
     5  	"crypto/rand"
     6  	"testing"
     7  
     8  	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
     9  	. "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
    10  	usertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user/test"
    11  	"github.com/mr-tron/base58"
    12  	"github.com/nspcc-dev/neo-go/pkg/encoding/address"
    13  	"github.com/nspcc-dev/neo-go/pkg/util"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  func TestID_WalletBytes(t *testing.T) {
    18  	var scriptHash util.Uint160
    19  	rand.Read(scriptHash[:])
    20  
    21  	var id ID
    22  	id.SetScriptHash(scriptHash)
    23  
    24  	w := id.WalletBytes()
    25  
    26  	var m refs.OwnerID
    27  	m.SetValue(w)
    28  
    29  	err := id.ReadFromV2(m)
    30  	require.NoError(t, err)
    31  }
    32  
    33  func TestID_SetScriptHash(t *testing.T) {
    34  	var scriptHash util.Uint160
    35  	rand.Read(scriptHash[:])
    36  
    37  	var id ID
    38  	id.SetScriptHash(scriptHash)
    39  
    40  	var m refs.OwnerID
    41  	id.WriteToV2(&m)
    42  
    43  	var id2 ID
    44  
    45  	err := id2.ReadFromV2(m)
    46  	require.NoError(t, err)
    47  
    48  	require.True(t, id2.Equals(id))
    49  }
    50  
    51  func TestID_ScriptHash(t *testing.T) {
    52  	userID := usertest.ID()
    53  
    54  	scriptHash, err := userID.ScriptHash()
    55  	require.NoError(t, err)
    56  
    57  	ownerAddress := userID.EncodeToString()
    58  	decodedScriptHash, err := address.StringToUint160(ownerAddress)
    59  	require.NoError(t, err)
    60  
    61  	require.True(t, scriptHash.Equals(decodedScriptHash))
    62  }
    63  
    64  func TestV2_ID(t *testing.T) {
    65  	id := usertest.ID()
    66  	var m refs.OwnerID
    67  	var id2 ID
    68  
    69  	t.Run("OK", func(t *testing.T) {
    70  		id.WriteToV2(&m)
    71  
    72  		err := id2.ReadFromV2(m)
    73  		require.NoError(t, err)
    74  		require.True(t, id2.Equals(id))
    75  	})
    76  
    77  	val := m.GetValue()
    78  
    79  	t.Run("invalid size", func(t *testing.T) {
    80  		m.SetValue(val[:24])
    81  
    82  		err := id2.ReadFromV2(m)
    83  		require.Error(t, err)
    84  	})
    85  
    86  	t.Run("invalid prefix", func(t *testing.T) {
    87  		val := bytes.Clone(val)
    88  		val[0]++
    89  
    90  		m.SetValue(val)
    91  
    92  		err := id2.ReadFromV2(m)
    93  		require.Error(t, err)
    94  	})
    95  
    96  	t.Run("invalid checksum", func(t *testing.T) {
    97  		val := bytes.Clone(val)
    98  		val[21]++
    99  
   100  		m.SetValue(val)
   101  
   102  		err := id2.ReadFromV2(m)
   103  		require.Error(t, err)
   104  	})
   105  }
   106  
   107  func TestID_EncodeToString(t *testing.T) {
   108  	id := usertest.ID()
   109  
   110  	s := id.EncodeToString()
   111  
   112  	_, err := base58.Decode(s)
   113  	require.NoError(t, err)
   114  
   115  	var id2 ID
   116  
   117  	err = id2.DecodeString(s)
   118  	require.NoError(t, err)
   119  
   120  	require.Equal(t, id, id2)
   121  
   122  	err = id2.DecodeString("_") // any invalid bas58 string
   123  	require.Error(t, err)
   124  }
   125  
   126  func TestID_Equal(t *testing.T) {
   127  	id1 := usertest.ID()
   128  	id2 := usertest.ID()
   129  	id3 := id1
   130  
   131  	require.True(t, id1.Equals(id1)) // self-equality
   132  	require.True(t, id1.Equals(id3))
   133  	require.True(t, id3.Equals(id1)) // commutativity
   134  	require.False(t, id1.Equals(id2))
   135  }