github.com/cosmos/cosmos-sdk@v0.50.10/types/tx/direct_aux_test.go (about)

     1  package tx_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  
     8  	codectypes "github.com/cosmos/cosmos-sdk/codec/types"
     9  	cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
    10  	"github.com/cosmos/cosmos-sdk/testutil/testdata"
    11  	"github.com/cosmos/cosmos-sdk/types/tx"
    12  	"github.com/cosmos/cosmos-sdk/types/tx/signing"
    13  )
    14  
    15  func TestSignDocDirectAux(t *testing.T) {
    16  	bodyBz := []byte{42}
    17  	_, pk, _ := testdata.KeyTestPubAddr()
    18  	pkAny, err := codectypes.NewAnyWithValue(pk)
    19  	require.NoError(t, err)
    20  
    21  	testcases := []struct {
    22  		name   string
    23  		sd     tx.SignDocDirectAux
    24  		expErr bool
    25  	}{
    26  		{"empty bodyBz", tx.SignDocDirectAux{}, true},
    27  		{"empty pubkey", tx.SignDocDirectAux{BodyBytes: bodyBz}, true},
    28  		{"happy case w/o tip", tx.SignDocDirectAux{BodyBytes: bodyBz, PublicKey: pkAny}, false},
    29  		{"happy case w/ tip", tx.SignDocDirectAux{
    30  			BodyBytes: bodyBz,
    31  			PublicKey: pkAny,
    32  		}, false},
    33  	}
    34  
    35  	for _, tc := range testcases {
    36  		tc := tc
    37  		t.Run(tc.name, func(t *testing.T) {
    38  			err := tc.sd.ValidateBasic()
    39  
    40  			if tc.expErr {
    41  				require.Error(t, err)
    42  			} else {
    43  				require.NoError(t, err)
    44  			}
    45  		})
    46  	}
    47  }
    48  
    49  func TestAuxSignerData(t *testing.T) {
    50  	bodyBz := []byte{42}
    51  	_, pk, addr := testdata.KeyTestPubAddr()
    52  	pkAny, err := codectypes.NewAnyWithValue(pk)
    53  	require.NoError(t, err)
    54  	sig := []byte{42}
    55  	sd := &tx.SignDocDirectAux{BodyBytes: bodyBz, PublicKey: pkAny}
    56  
    57  	testcases := []struct {
    58  		name   string
    59  		sd     tx.AuxSignerData
    60  		expErr bool
    61  	}{
    62  		{"empty address", tx.AuxSignerData{}, true},
    63  		{"empty sign mode", tx.AuxSignerData{Address: addr.String()}, true},
    64  		{"SIGN_MODE_DIRECT", tx.AuxSignerData{Address: addr.String(), Mode: signing.SignMode_SIGN_MODE_DIRECT}, true},
    65  		{"no sig", tx.AuxSignerData{Address: addr.String(), Mode: signing.SignMode_SIGN_MODE_DIRECT_AUX}, true},
    66  		{"happy case WITH DIRECT_AUX", tx.AuxSignerData{Address: addr.String(), Mode: signing.SignMode_SIGN_MODE_DIRECT_AUX, SignDoc: sd, Sig: sig}, false},
    67  		{"happy case WITH DIRECT_AUX", tx.AuxSignerData{Address: addr.String(), Mode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, SignDoc: sd, Sig: sig}, false},
    68  	}
    69  
    70  	for _, tc := range testcases {
    71  		tc := tc
    72  		t.Run(tc.name, func(t *testing.T) {
    73  			err := tc.sd.ValidateBasic()
    74  
    75  			if tc.expErr {
    76  				require.Error(t, err)
    77  			} else {
    78  				require.NoError(t, err)
    79  				sigV2, err := tc.sd.GetSignatureV2()
    80  				require.NoError(t, err)
    81  				require.Equal(t, tc.sd.Mode, sigV2.Data.(*signing.SingleSignatureData).SignMode)
    82  				require.Equal(t, tc.sd.Sig, sigV2.Data.(*signing.SingleSignatureData).Signature)
    83  				require.Equal(t, tc.sd.SignDoc.Sequence, sigV2.Sequence)
    84  				require.True(t, tc.sd.SignDoc.PublicKey.GetCachedValue().(cryptotypes.PubKey).Equals(sigV2.PubKey))
    85  			}
    86  		})
    87  	}
    88  }