cosmos-sdk/docs/sdk/core/examples/app2_test.go

85 lines
1.8 KiB
Go

package app
import (
"testing"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/tendermint/tendermint/crypto/ed25519"
"github.com/stretchr/testify/require"
)
// Test encoding of app2Tx is correct with both msg types
func TestEncoding(t *testing.T) {
// Create privkeys and addresses
priv1 := ed25519.GenPrivKey()
priv2 := ed25519.GenPrivKey()
addr1 := priv1.PubKey().Address().Bytes()
addr2 := priv2.PubKey().Address().Bytes()
sendMsg := MsgSend{
From: addr1,
To: addr2,
Amount: sdk.Coins{{"testCoins", sdk.NewInt(100)}},
}
// Construct transaction
signBytes := sendMsg.GetSignBytes()
sig, err := priv1.Sign(signBytes)
if err != nil {
panic(err)
}
sendTxBefore := app2Tx{
Msg: sendMsg,
PubKey: priv1.PubKey(),
Signature: sig,
}
cdc := NewCodec()
testTxDecoder := tx2Decoder(cdc)
encodedSendTx, err := cdc.MarshalBinary(sendTxBefore)
require.Nil(t, err, "Error encoding sendTx")
var tx1 sdk.Tx
tx1, err = testTxDecoder(encodedSendTx)
require.Nil(t, err, "Error decoding sendTx")
sendTxAfter := tx1.(app2Tx)
require.Equal(t, sendTxBefore, sendTxAfter, "Transaction changed after encoding/decoding")
issueMsg := MsgIssue{
Issuer: addr1,
Receiver: addr2,
Coin: sdk.Coin{"testCoin", sdk.NewInt(100)},
}
signBytes = issueMsg.GetSignBytes()
sig, err = priv1.Sign(signBytes)
if err != nil {
panic(err)
}
issueTxBefore := app2Tx{
Msg: issueMsg,
PubKey: priv1.PubKey(),
Signature: sig,
}
encodedIssueTx, err2 := cdc.MarshalBinary(issueTxBefore)
require.Nil(t, err2, "Error encoding issueTx")
var tx2 sdk.Tx
tx2, err2 = testTxDecoder(encodedIssueTx)
require.Nil(t, err2, "Error decoding issue Tx")
issueTxAfter := tx2.(app2Tx)
require.Equal(t, issueTxBefore, issueTxAfter, "Transaction changed after encoding/decoding")
}