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