120 lines
3.3 KiB
Go
120 lines
3.3 KiB
Go
package tx
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/cosmos/cosmos-sdk/client"
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
|
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
|
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
|
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
|
"github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
|
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
|
"github.com/cosmos/cosmos-sdk/crypto/types"
|
|
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
|
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
|
)
|
|
|
|
func TestFactoryPrepare(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
factory := Factory{}
|
|
clientCtx := client.Context{}
|
|
|
|
output, err := factory.Prepare(clientCtx.WithOffline(true))
|
|
require.NoError(t, err)
|
|
require.Equal(t, output, factory)
|
|
|
|
factory = Factory{}.WithAccountRetriever(client.MockAccountRetriever{ReturnAccNum: 10, ReturnAccSeq: 1}).WithAccountNumber(5)
|
|
output, err = factory.Prepare(clientCtx.WithFrom("foo"))
|
|
require.NoError(t, err)
|
|
require.NotEqual(t, output, factory)
|
|
require.Equal(t, output.AccountNumber(), uint64(5))
|
|
require.Equal(t, output.Sequence(), uint64(1))
|
|
|
|
factory = Factory{}.WithAccountRetriever(client.MockAccountRetriever{ReturnAccNum: 10, ReturnAccSeq: 1})
|
|
output, err = factory.Prepare(clientCtx.WithFrom("foo"))
|
|
require.NoError(t, err)
|
|
require.NotEqual(t, output, factory)
|
|
require.Equal(t, output.AccountNumber(), uint64(10))
|
|
require.Equal(t, output.Sequence(), uint64(1))
|
|
}
|
|
|
|
func TestFactory_getSimPKType(t *testing.T) {
|
|
// setup keyring
|
|
registry := codectypes.NewInterfaceRegistry()
|
|
cryptocodec.RegisterInterfaces(registry)
|
|
k := keyring.NewInMemory(codec.NewProtoCodec(registry))
|
|
|
|
tests := []struct {
|
|
name string
|
|
fromName string
|
|
genKey func(fromName string, k keyring.Keyring) error
|
|
wantType types.PubKey
|
|
}{
|
|
{
|
|
name: "simple key",
|
|
fromName: "testKey",
|
|
genKey: func(fromName string, k keyring.Keyring) error {
|
|
_, err := k.NewAccount(fromName, testdata.TestMnemonic, "", "", hd.Secp256k1)
|
|
return err
|
|
},
|
|
wantType: (*secp256k1.PubKey)(nil),
|
|
},
|
|
{
|
|
name: "multisig key",
|
|
fromName: "multiKey",
|
|
genKey: func(fromName string, k keyring.Keyring) error {
|
|
pk := multisig.NewLegacyAminoPubKey(1, []types.PubKey{&multisig.LegacyAminoPubKey{}})
|
|
_, err := k.SaveMultisig(fromName, pk)
|
|
return err
|
|
},
|
|
wantType: (*multisig.LegacyAminoPubKey)(nil),
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := tt.genKey(tt.fromName, k)
|
|
require.NoError(t, err)
|
|
f := Factory{
|
|
keybase: k,
|
|
fromName: tt.fromName,
|
|
simulateAndExecute: true,
|
|
}
|
|
got, err := f.getSimPK()
|
|
require.NoError(t, err)
|
|
require.IsType(t, tt.wantType, got)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestFactory_getSimSignatureData(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
pk types.PubKey
|
|
wantType any
|
|
}{
|
|
{
|
|
name: "simple pubkey",
|
|
pk: &secp256k1.PubKey{},
|
|
wantType: (*signing.SingleSignatureData)(nil),
|
|
},
|
|
{
|
|
name: "multisig pubkey",
|
|
pk: &multisig.LegacyAminoPubKey{},
|
|
wantType: (*signing.MultiSignatureData)(nil),
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := Factory{}.getSimSignatureData(tt.pk)
|
|
require.IsType(t, tt.wantType, got)
|
|
})
|
|
}
|
|
}
|