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 }