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 }