github.com/MetalBlockchain/metalgo@v1.11.9/vms/avm/client_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package avm 5 6 import ( 7 "context" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 12 "github.com/MetalBlockchain/metalgo/api" 13 "github.com/MetalBlockchain/metalgo/ids" 14 "github.com/MetalBlockchain/metalgo/utils/json" 15 "github.com/MetalBlockchain/metalgo/utils/rpc" 16 ) 17 18 type mockClient struct { 19 require *require.Assertions 20 expectedInData interface{} 21 } 22 23 func (mc *mockClient) SendRequest( 24 _ context.Context, 25 _ string, 26 inData interface{}, 27 _ interface{}, 28 _ ...rpc.Option, 29 ) error { 30 mc.require.Equal(mc.expectedInData, inData) 31 return nil 32 } 33 34 func TestClientCreateAsset(t *testing.T) { 35 require := require.New(t) 36 client := client{} 37 { 38 // empty slices 39 clientHolders := []*ClientHolder{} 40 clientMinters := []ClientOwners{} 41 clientFrom := []ids.ShortID{} 42 clientChangeAddr := ids.GenerateTestShortID() 43 serviceHolders := []*Holder{} 44 serviceMinters := []Owners{} 45 serviceFrom := []string{} 46 serviceChangeAddr := clientChangeAddr.String() 47 expectedInData := &CreateAssetArgs{ 48 JSONSpendHeader: api.JSONSpendHeader{ 49 JSONFromAddrs: api.JSONFromAddrs{From: serviceFrom}, 50 JSONChangeAddr: api.JSONChangeAddr{ChangeAddr: serviceChangeAddr}, 51 }, 52 InitialHolders: serviceHolders, 53 MinterSets: serviceMinters, 54 } 55 client.requester = &mockClient{ 56 require: require, 57 expectedInData: expectedInData, 58 } 59 _, err := client.CreateAsset( 60 context.Background(), 61 api.UserPass{}, 62 clientFrom, 63 clientChangeAddr, 64 "", 65 "", 66 0, 67 clientHolders, 68 clientMinters, 69 ) 70 require.NoError(err) 71 } 72 { 73 // non empty slices 74 clientHolders := []*ClientHolder{ 75 { 76 Amount: 11, 77 Address: ids.GenerateTestShortID(), 78 }, 79 } 80 clientMinters := []ClientOwners{ 81 { 82 Threshold: 22, 83 Minters: []ids.ShortID{ids.GenerateTestShortID()}, 84 }, 85 } 86 clientFrom := []ids.ShortID{ids.GenerateTestShortID()} 87 clientChangeAddr := ids.GenerateTestShortID() 88 serviceHolders := []*Holder{ 89 { 90 Amount: json.Uint64(clientHolders[0].Amount), 91 Address: clientHolders[0].Address.String(), 92 }, 93 } 94 serviceMinters := []Owners{ 95 { 96 Threshold: json.Uint32(clientMinters[0].Threshold), 97 Minters: []string{clientMinters[0].Minters[0].String()}, 98 }, 99 } 100 serviceFrom := []string{clientFrom[0].String()} 101 serviceChangeAddr := clientChangeAddr.String() 102 expectedInData := &CreateAssetArgs{ 103 JSONSpendHeader: api.JSONSpendHeader{ 104 JSONFromAddrs: api.JSONFromAddrs{From: serviceFrom}, 105 JSONChangeAddr: api.JSONChangeAddr{ChangeAddr: serviceChangeAddr}, 106 }, 107 InitialHolders: serviceHolders, 108 MinterSets: serviceMinters, 109 } 110 client.requester = &mockClient{ 111 require: require, 112 expectedInData: expectedInData, 113 } 114 _, err := client.CreateAsset( 115 context.Background(), 116 api.UserPass{}, 117 clientFrom, 118 clientChangeAddr, 119 "", 120 "", 121 0, 122 clientHolders, 123 clientMinters, 124 ) 125 require.NoError(err) 126 } 127 } 128 129 func TestClientCreateFixedCapAsset(t *testing.T) { 130 require := require.New(t) 131 client := client{} 132 { 133 // empty slices 134 clientHolders := []*ClientHolder{} 135 clientFrom := []ids.ShortID{} 136 clientChangeAddr := ids.GenerateTestShortID() 137 serviceHolders := []*Holder{} 138 serviceFrom := []string{} 139 serviceChangeAddr := clientChangeAddr.String() 140 expectedInData := &CreateAssetArgs{ 141 JSONSpendHeader: api.JSONSpendHeader{ 142 JSONFromAddrs: api.JSONFromAddrs{From: serviceFrom}, 143 JSONChangeAddr: api.JSONChangeAddr{ChangeAddr: serviceChangeAddr}, 144 }, 145 InitialHolders: serviceHolders, 146 } 147 client.requester = &mockClient{ 148 require: require, 149 expectedInData: expectedInData, 150 } 151 _, err := client.CreateFixedCapAsset( 152 context.Background(), 153 api.UserPass{}, 154 clientFrom, 155 clientChangeAddr, 156 "", 157 "", 158 0, 159 clientHolders, 160 ) 161 require.NoError(err) 162 } 163 { 164 // non empty slices 165 clientHolders := []*ClientHolder{ 166 { 167 Amount: 11, 168 Address: ids.GenerateTestShortID(), 169 }, 170 } 171 clientFrom := []ids.ShortID{ids.GenerateTestShortID()} 172 clientChangeAddr := ids.GenerateTestShortID() 173 serviceHolders := []*Holder{ 174 { 175 Amount: json.Uint64(clientHolders[0].Amount), 176 Address: clientHolders[0].Address.String(), 177 }, 178 } 179 serviceFrom := []string{clientFrom[0].String()} 180 serviceChangeAddr := clientChangeAddr.String() 181 expectedInData := &CreateAssetArgs{ 182 JSONSpendHeader: api.JSONSpendHeader{ 183 JSONFromAddrs: api.JSONFromAddrs{From: serviceFrom}, 184 JSONChangeAddr: api.JSONChangeAddr{ChangeAddr: serviceChangeAddr}, 185 }, 186 InitialHolders: serviceHolders, 187 } 188 client.requester = &mockClient{ 189 require: require, 190 expectedInData: expectedInData, 191 } 192 _, err := client.CreateFixedCapAsset( 193 context.Background(), 194 api.UserPass{}, 195 clientFrom, 196 clientChangeAddr, 197 "", 198 "", 199 0, 200 clientHolders, 201 ) 202 require.NoError(err) 203 } 204 }