github.com/ava-labs/avalanchego@v1.11.11/vms/avm/wallet_service_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  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/ava-labs/avalanchego/api"
    12  	"github.com/ava-labs/avalanchego/ids"
    13  	"github.com/ava-labs/avalanchego/upgrade/upgradetest"
    14  	"github.com/ava-labs/avalanchego/utils/linked"
    15  	"github.com/ava-labs/avalanchego/vms/avm/txs"
    16  )
    17  
    18  func TestWalletService_SendMultiple(t *testing.T) {
    19  	require := require.New(t)
    20  
    21  	for _, tc := range testCases {
    22  		t.Run(tc.name, func(t *testing.T) {
    23  			env := setup(t, &envConfig{
    24  				fork:             upgradetest.Latest,
    25  				isCustomFeeAsset: !tc.avaxAsset,
    26  				keystoreUsers: []*user{{
    27  					username:    username,
    28  					password:    password,
    29  					initialKeys: keys,
    30  				}},
    31  			})
    32  			env.vm.ctx.Lock.Unlock()
    33  
    34  			walletService := &WalletService{
    35  				vm:         env.vm,
    36  				pendingTxs: linked.NewHashmap[ids.ID, *txs.Tx](),
    37  			}
    38  
    39  			assetID := env.genesisTx.ID()
    40  			addr := keys[0].PublicKey().Address()
    41  
    42  			addrStr, err := env.vm.FormatLocalAddress(addr)
    43  			require.NoError(err)
    44  			changeAddrStr, err := env.vm.FormatLocalAddress(testChangeAddr)
    45  			require.NoError(err)
    46  			_, fromAddrsStr := sampleAddrs(t, env.vm.AddressManager, addrs)
    47  
    48  			args := &SendMultipleArgs{
    49  				JSONSpendHeader: api.JSONSpendHeader{
    50  					UserPass: api.UserPass{
    51  						Username: username,
    52  						Password: password,
    53  					},
    54  					JSONFromAddrs:  api.JSONFromAddrs{From: fromAddrsStr},
    55  					JSONChangeAddr: api.JSONChangeAddr{ChangeAddr: changeAddrStr},
    56  				},
    57  				Outputs: []SendOutput{
    58  					{
    59  						Amount:  500,
    60  						AssetID: assetID.String(),
    61  						To:      addrStr,
    62  					},
    63  					{
    64  						Amount:  1000,
    65  						AssetID: assetID.String(),
    66  						To:      addrStr,
    67  					},
    68  				},
    69  			}
    70  			reply := &api.JSONTxIDChangeAddr{}
    71  			require.NoError(walletService.SendMultiple(nil, args, reply))
    72  			require.Equal(changeAddrStr, reply.ChangeAddr)
    73  
    74  			buildAndAccept(require, env.vm, env.issuer, reply.TxID)
    75  
    76  			env.vm.ctx.Lock.Lock()
    77  			_, err = env.vm.state.GetTx(reply.TxID)
    78  			env.vm.ctx.Lock.Unlock()
    79  			require.NoError(err)
    80  		})
    81  	}
    82  }