Pull out some test helpers for genesis_test

This commit is contained in:
Ethan Frey 2021-01-08 17:43:47 +01:00
parent 202c19530e
commit 013491aa9d
3 changed files with 49 additions and 32 deletions

35
x/wasm/common_test.go Normal file
View File

@ -0,0 +1,35 @@
package wasm
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/require"
"strconv"
"testing"
)
// ensure store code returns the expected response
func assertStoreCodeResponse(t *testing.T, data []byte, expected int64) {
var pStoreResp MsgStoreCodeResponse
require.NoError(t, pStoreResp.Unmarshal(data))
// TODO: change this when it we store int natively
require.Equal(t, pStoreResp.CodeID, strconv.FormatInt(expected, 10))
}
// ensure execution returns the expected data
func assertExecuteResponse(t *testing.T, data []byte, expected []byte) {
var pExecResp MsgExecuteContractResponse
require.NoError(t, pExecResp.Unmarshal(data))
require.Equal(t, pExecResp.Data, expected)
}
// ensures this returns a valid bech32 address and returns it
func parseInitResponse(t *testing.T, data []byte) string {
var pInstResp MsgInstantiateContractResponse
require.NoError(t, pInstResp.Unmarshal(data))
require.NotEmpty(t, pInstResp.Address)
addr := pInstResp.Address
// ensure this is a valid sdk address
_, err := sdk.AccAddressFromBech32(addr)
require.NoError(t, err)
return addr
}

View File

@ -22,7 +22,7 @@ func TestInitGenesis(t *testing.T) {
msg := MsgStoreCode{
Sender: creator.String(),
WASMByteCode: testContract,
Source: "https://github.com/CosmWasm/wasmd/blob/master/x/wasm/testdata/escrow.wasm",
Source: "https://github.com/CosmWasm/wasmd/blob/master/x/wasm/testdata/hackatom.wasm",
Builder: "confio/cosmwasm-opt:0.7.0",
}
err := msg.ValidateBasic()
@ -30,10 +30,7 @@ func TestInitGenesis(t *testing.T) {
res, err := h(data.ctx, &msg)
require.NoError(t, err)
var pStoreResp MsgStoreCodeResponse
require.NoError(t, pStoreResp.Unmarshal(res.Data))
require.Equal(t, pStoreResp.CodeID, "1")
assertStoreCodeResponse(t, res.Data, 1)
_, _, bob := keyPubAddr()
initMsg := initMsg{
@ -51,9 +48,7 @@ func TestInitGenesis(t *testing.T) {
}
res, err = h(data.ctx, &initCmd)
require.NoError(t, err)
var pInstResp MsgInstantiateContractResponse
require.NoError(t, pInstResp.Unmarshal(res.Data))
contractBech32Addr := pInstResp.Address
contractBech32Addr := parseInitResponse(t, res.Data)
execCmd := MsgExecuteContract{
Sender: fred.String(),
@ -63,9 +58,8 @@ func TestInitGenesis(t *testing.T) {
}
res, err = h(data.ctx, &execCmd)
require.NoError(t, err)
var pExecResp MsgExecuteContractResponse
require.NoError(t, pExecResp.Unmarshal(res.Data))
require.NotEmpty(t, pExecResp.Data)
// from https://github.com/CosmWasm/cosmwasm/blob/master/contracts/hackatom/src/contract.rs#L167
assertExecuteResponse(t, res.Data, []byte{0xf0, 0x0b, 0xaa})
// ensure all contract state is as after init
assertCodeList(t, q, data.ctx, 1)

View File

@ -154,9 +154,7 @@ func TestHandleInstantiate(t *testing.T) {
}
res, err := h(data.ctx, msg)
require.NoError(t, err)
var pStoreResp MsgStoreCodeResponse
require.NoError(t, pStoreResp.Unmarshal(res.Data))
require.Equal(t, pStoreResp.CodeID, "1")
assertStoreCodeResponse(t, res.Data, 1)
_, _, bob := keyPubAddr()
_, _, fred := keyPubAddr()
@ -177,9 +175,7 @@ func TestHandleInstantiate(t *testing.T) {
}
res, err = h(data.ctx, &initCmd)
require.NoError(t, err)
var pInstResp MsgInstantiateContractResponse
require.NoError(t, pInstResp.Unmarshal(res.Data))
contractBech32Addr := pInstResp.Address
contractBech32Addr := parseInitResponse(t, res.Data)
require.Equal(t, "cosmos18vd8fpwxzck93qlwghaj6arh4p7c5n89uzcee5", contractBech32Addr)
// this should be standard x/wasm init event, nothing from contract
@ -218,9 +214,7 @@ func TestHandleExecute(t *testing.T) {
}
res, err := h(data.ctx, msg)
require.NoError(t, err)
var pStoreResp MsgStoreCodeResponse
require.NoError(t, pStoreResp.Unmarshal(res.Data))
require.Equal(t, pStoreResp.CodeID, "1")
assertStoreCodeResponse(t, res.Data, 1)
_, _, bob := keyPubAddr()
initMsg := initMsg{
@ -238,9 +232,7 @@ func TestHandleExecute(t *testing.T) {
}
res, err = h(data.ctx, &initCmd)
require.NoError(t, err)
var pInstResp MsgInstantiateContractResponse
require.NoError(t, pInstResp.Unmarshal(res.Data))
contractBech32Addr := pInstResp.Address
contractBech32Addr := parseInitResponse(t, res.Data)
require.Equal(t, "cosmos18vd8fpwxzck93qlwghaj6arh4p7c5n89uzcee5", contractBech32Addr)
// this should be standard x/wasm init event, plus a bank send event (2), with no custom contract events
@ -275,9 +267,8 @@ func TestHandleExecute(t *testing.T) {
}
res, err = h(data.ctx, &execCmd)
require.NoError(t, err)
var pExecResp MsgExecuteContractResponse
require.NoError(t, pExecResp.Unmarshal(res.Data))
require.NotEmpty(t, pExecResp.Data)
// from https://github.com/CosmWasm/cosmwasm/blob/master/contracts/hackatom/src/contract.rs#L167
assertExecuteResponse(t, res.Data, []byte{0xf0, 0x0b, 0xaa})
// this should be standard x/wasm init event, plus 2 bank send event, plus a special event from the contract
require.Equal(t, 4, len(res.Events), prettyEvents(res.Events))
@ -358,9 +349,7 @@ func TestHandleExecuteEscrow(t *testing.T) {
}
res, err = h(data.ctx, &initCmd)
require.NoError(t, err)
var pInstResp MsgInstantiateContractResponse
require.NoError(t, pInstResp.Unmarshal(res.Data))
contractBech32Addr := pInstResp.Address
contractBech32Addr := parseInitResponse(t, res.Data)
require.Equal(t, "cosmos18vd8fpwxzck93qlwghaj6arh4p7c5n89uzcee5", contractBech32Addr)
handleMsg := map[string]interface{}{
@ -377,9 +366,8 @@ func TestHandleExecuteEscrow(t *testing.T) {
}
res, err = h(data.ctx, &execCmd)
require.NoError(t, err)
var pExecResp MsgExecuteContractResponse
require.NoError(t, pExecResp.Unmarshal(res.Data))
require.NotEmpty(t, pExecResp.Data)
// from https://github.com/CosmWasm/cosmwasm/blob/master/contracts/hackatom/src/contract.rs#L167
assertExecuteResponse(t, res.Data, []byte{0xf0, 0x0b, 0xaa})
// ensure bob now exists and got both payments released
bobAcct := data.acctKeeper.GetAccount(data.ctx, bob)