Upgrade to Stargate commits
This commit is contained in:
@@ -7,26 +7,26 @@ import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
wasmTypes "github.com/CosmWasm/go-cosmwasm/types"
|
||||
"github.com/CosmWasm/wasmd/x/wasm/internal/keeper"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/module"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||
authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
|
||||
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
|
||||
"github.com/dvsekhvalnov/jose2go/base64url"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/crypto/ed25519"
|
||||
"github.com/tendermint/tendermint/libs/kv"
|
||||
|
||||
"github.com/CosmWasm/wasmd/x/wasm/internal/keeper"
|
||||
)
|
||||
|
||||
type testData struct {
|
||||
module module.AppModule
|
||||
ctx sdk.Context
|
||||
acctKeeper auth.AccountKeeper
|
||||
acctKeeper authkeeper.AccountKeeper
|
||||
keeper Keeper
|
||||
bankKeeper bankkeeper.Keeper
|
||||
}
|
||||
|
||||
// returns a cleanup function, which must be defered on
|
||||
@@ -35,12 +35,13 @@ func setupTest(t *testing.T) (testData, func()) {
|
||||
require.NoError(t, err)
|
||||
|
||||
ctx, keepers := CreateTestInput(t, false, tempDir, "staking", nil, nil)
|
||||
acctKeeper, keeper := keepers.AccountKeeper, keepers.WasmKeeper
|
||||
acctKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper
|
||||
data := testData{
|
||||
module: NewAppModule(keeper),
|
||||
ctx: ctx,
|
||||
acctKeeper: acctKeeper,
|
||||
keeper: keeper,
|
||||
bankKeeper: bankKeeper,
|
||||
}
|
||||
cleanup := func() { os.RemoveAll(tempDir) }
|
||||
return data, cleanup
|
||||
@@ -74,32 +75,32 @@ func TestHandleCreate(t *testing.T) {
|
||||
isValid bool
|
||||
}{
|
||||
"empty": {
|
||||
msg: MsgStoreCode{},
|
||||
msg: &MsgStoreCode{},
|
||||
isValid: false,
|
||||
},
|
||||
"invalid wasm": {
|
||||
msg: MsgStoreCode{
|
||||
msg: &MsgStoreCode{
|
||||
Sender: addr1,
|
||||
WASMByteCode: []byte("foobar"),
|
||||
},
|
||||
isValid: false,
|
||||
},
|
||||
"valid wasm": {
|
||||
msg: MsgStoreCode{
|
||||
msg: &MsgStoreCode{
|
||||
Sender: addr1,
|
||||
WASMByteCode: testContract,
|
||||
},
|
||||
isValid: true,
|
||||
},
|
||||
"other valid wasm": {
|
||||
msg: MsgStoreCode{
|
||||
msg: &MsgStoreCode{
|
||||
Sender: addr1,
|
||||
WASMByteCode: maskContract,
|
||||
},
|
||||
isValid: true,
|
||||
},
|
||||
"old wasm (0.7)": {
|
||||
msg: MsgStoreCode{
|
||||
msg: &MsgStoreCode{
|
||||
Sender: addr1,
|
||||
WASMByteCode: oldContract,
|
||||
},
|
||||
@@ -113,8 +114,8 @@ func TestHandleCreate(t *testing.T) {
|
||||
data, cleanup := setupTest(t)
|
||||
defer cleanup()
|
||||
|
||||
h := data.module.NewHandler()
|
||||
q := data.module.NewQuerierHandler()
|
||||
h := data.module.Route().Handler()
|
||||
q := data.module.LegacyQuerierHandler(nil)
|
||||
|
||||
res, err := h(data.ctx, tc.msg)
|
||||
if !tc.isValid {
|
||||
@@ -145,12 +146,12 @@ func TestHandleInstantiate(t *testing.T) {
|
||||
defer cleanup()
|
||||
|
||||
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
|
||||
creator := createFakeFundedAccount(data.ctx, data.acctKeeper, deposit)
|
||||
creator := createFakeFundedAccount(t, data.ctx, data.acctKeeper, data.bankKeeper, deposit)
|
||||
|
||||
h := data.module.NewHandler()
|
||||
q := data.module.NewQuerierHandler()
|
||||
h := data.module.Route().Handler()
|
||||
q := data.module.LegacyQuerierHandler(nil)
|
||||
|
||||
msg := MsgStoreCode{
|
||||
msg := &MsgStoreCode{
|
||||
Sender: creator,
|
||||
WASMByteCode: testContract,
|
||||
}
|
||||
@@ -175,7 +176,7 @@ func TestHandleInstantiate(t *testing.T) {
|
||||
InitMsg: initMsgBz,
|
||||
InitFunds: nil,
|
||||
}
|
||||
res, err = h(data.ctx, initCmd)
|
||||
res, err = h(data.ctx, &initCmd)
|
||||
require.NoError(t, err)
|
||||
contractAddr := sdk.AccAddress(res.Data)
|
||||
require.Equal(t, "cosmos18vd8fpwxzck93qlwghaj6arh4p7c5n89uzcee5", contractAddr.String())
|
||||
@@ -204,13 +205,13 @@ func TestHandleExecute(t *testing.T) {
|
||||
|
||||
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
|
||||
topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000))
|
||||
creator := createFakeFundedAccount(data.ctx, data.acctKeeper, deposit.Add(deposit...))
|
||||
fred := createFakeFundedAccount(data.ctx, data.acctKeeper, topUp)
|
||||
creator := createFakeFundedAccount(t, data.ctx, data.acctKeeper, data.bankKeeper, deposit.Add(deposit...))
|
||||
fred := createFakeFundedAccount(t, data.ctx, data.acctKeeper, data.bankKeeper, topUp)
|
||||
|
||||
h := data.module.NewHandler()
|
||||
q := data.module.NewQuerierHandler()
|
||||
h := data.module.Route().Handler()
|
||||
q := data.module.LegacyQuerierHandler(nil)
|
||||
|
||||
msg := MsgStoreCode{
|
||||
msg := &MsgStoreCode{
|
||||
Sender: creator,
|
||||
WASMByteCode: testContract,
|
||||
}
|
||||
@@ -232,7 +233,7 @@ func TestHandleExecute(t *testing.T) {
|
||||
InitMsg: initMsgBz,
|
||||
InitFunds: deposit,
|
||||
}
|
||||
res, err = h(data.ctx, initCmd)
|
||||
res, err = h(data.ctx, &initCmd)
|
||||
require.NoError(t, err)
|
||||
contractAddr := sdk.AccAddress(res.Data)
|
||||
require.Equal(t, "cosmos18vd8fpwxzck93qlwghaj6arh4p7c5n89uzcee5", contractAddr.String())
|
||||
@@ -252,12 +253,12 @@ func TestHandleExecute(t *testing.T) {
|
||||
creatorAcct := data.acctKeeper.GetAccount(data.ctx, creator)
|
||||
require.NotNil(t, creatorAcct)
|
||||
// we started at 2*deposit, should have spent one above
|
||||
assert.Equal(t, deposit, creatorAcct.GetCoins())
|
||||
assert.Equal(t, deposit, data.bankKeeper.GetAllBalances(data.ctx, creatorAcct.GetAddress()))
|
||||
|
||||
// ensure contract has updated balance
|
||||
contractAcct := data.acctKeeper.GetAccount(data.ctx, contractAddr)
|
||||
require.NotNil(t, contractAcct)
|
||||
assert.Equal(t, deposit, contractAcct.GetCoins())
|
||||
assert.Equal(t, deposit, data.bankKeeper.GetAllBalances(data.ctx, contractAcct.GetAddress()))
|
||||
|
||||
execCmd := MsgExecuteContract{
|
||||
Sender: fred,
|
||||
@@ -265,11 +266,13 @@ func TestHandleExecute(t *testing.T) {
|
||||
Msg: []byte(`{"release":{}}`),
|
||||
SentFunds: topUp,
|
||||
}
|
||||
res, err = h(data.ctx, execCmd)
|
||||
res, err = h(data.ctx, &execCmd)
|
||||
require.NoError(t, err)
|
||||
// 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))
|
||||
assert.Equal(t, "transfer", res.Events[0].Type)
|
||||
|
||||
require.Equal(t, "transfer", res.Events[0].Type)
|
||||
require.Len(t, res.Events[0].Attributes, 3)
|
||||
assertAttribute(t, "recipient", contractAddr.String(), res.Events[0].Attributes[0])
|
||||
assertAttribute(t, "sender", fred.String(), res.Events[0].Attributes[1])
|
||||
assertAttribute(t, "amount", "5000denom", res.Events[0].Attributes[2])
|
||||
@@ -289,13 +292,13 @@ func TestHandleExecute(t *testing.T) {
|
||||
// ensure bob now exists and got both payments released
|
||||
bobAcct = data.acctKeeper.GetAccount(data.ctx, bob)
|
||||
require.NotNil(t, bobAcct)
|
||||
balance := bobAcct.GetCoins()
|
||||
balance := data.bankKeeper.GetAllBalances(data.ctx, bobAcct.GetAddress())
|
||||
assert.Equal(t, deposit.Add(topUp...), balance)
|
||||
|
||||
// ensure contract has updated balance
|
||||
contractAcct = data.acctKeeper.GetAccount(data.ctx, contractAddr)
|
||||
require.NotNil(t, contractAcct)
|
||||
assert.Equal(t, sdk.Coins(nil), contractAcct.GetCoins())
|
||||
assert.Equal(t, sdk.Coins(nil), data.bankKeeper.GetAllBalances(data.ctx, contractAcct.GetAddress()))
|
||||
|
||||
// ensure all contract state is as after init
|
||||
assertCodeList(t, q, data.ctx, 1)
|
||||
@@ -316,12 +319,12 @@ func TestHandleExecuteEscrow(t *testing.T) {
|
||||
|
||||
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
|
||||
topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000))
|
||||
creator := createFakeFundedAccount(data.ctx, data.acctKeeper, deposit.Add(deposit...))
|
||||
fred := createFakeFundedAccount(data.ctx, data.acctKeeper, topUp)
|
||||
creator := createFakeFundedAccount(t, data.ctx, data.acctKeeper, data.bankKeeper, deposit.Add(deposit...))
|
||||
fred := createFakeFundedAccount(t, data.ctx, data.acctKeeper, data.bankKeeper, topUp)
|
||||
|
||||
h := data.module.NewHandler()
|
||||
h := data.module.Route().Handler()
|
||||
|
||||
msg := MsgStoreCode{
|
||||
msg := &MsgStoreCode{
|
||||
Sender: creator,
|
||||
WASMByteCode: testContract,
|
||||
}
|
||||
@@ -343,7 +346,7 @@ func TestHandleExecuteEscrow(t *testing.T) {
|
||||
InitMsg: initMsgBz,
|
||||
InitFunds: deposit,
|
||||
}
|
||||
res, err = h(data.ctx, initCmd)
|
||||
res, err = h(data.ctx, &initCmd)
|
||||
require.NoError(t, err)
|
||||
contractAddr := sdk.AccAddress(res.Data)
|
||||
require.Equal(t, "cosmos18vd8fpwxzck93qlwghaj6arh4p7c5n89uzcee5", contractAddr.String())
|
||||
@@ -360,19 +363,19 @@ func TestHandleExecuteEscrow(t *testing.T) {
|
||||
Msg: handleMsgBz,
|
||||
SentFunds: topUp,
|
||||
}
|
||||
res, err = h(data.ctx, execCmd)
|
||||
res, err = h(data.ctx, &execCmd)
|
||||
require.NoError(t, err)
|
||||
|
||||
// ensure bob now exists and got both payments released
|
||||
bobAcct := data.acctKeeper.GetAccount(data.ctx, bob)
|
||||
require.NotNil(t, bobAcct)
|
||||
balance := bobAcct.GetCoins()
|
||||
balance := data.bankKeeper.GetAllBalances(data.ctx, bobAcct.GetAddress())
|
||||
assert.Equal(t, deposit.Add(topUp...), balance)
|
||||
|
||||
// ensure contract has updated balance
|
||||
contractAcct := data.acctKeeper.GetAccount(data.ctx, contractAddr)
|
||||
require.NotNil(t, contractAcct)
|
||||
assert.Equal(t, sdk.Coins(nil), contractAcct.GetCoins())
|
||||
assert.Equal(t, sdk.Coins(nil), data.bankKeeper.GetAllBalances(data.ctx, contractAcct.GetAddress()))
|
||||
}
|
||||
|
||||
type prettyEvent struct {
|
||||
@@ -380,7 +383,7 @@ type prettyEvent struct {
|
||||
Attr []sdk.Attribute
|
||||
}
|
||||
|
||||
func prettyEvents(evts sdk.Events) string {
|
||||
func prettyEvents(evts []abci.Event) string {
|
||||
res := make([]prettyEvent, len(evts))
|
||||
for i, e := range evts {
|
||||
res[i] = prettyEvent{
|
||||
@@ -395,7 +398,7 @@ func prettyEvents(evts sdk.Events) string {
|
||||
return string(bz)
|
||||
}
|
||||
|
||||
func prettyAttrs(attrs []kv.Pair) []sdk.Attribute {
|
||||
func prettyAttrs(attrs []abci.EventAttribute) []sdk.Attribute {
|
||||
pretty := make([]sdk.Attribute, len(attrs))
|
||||
for i, a := range attrs {
|
||||
pretty[i] = prettyAttr(a)
|
||||
@@ -403,11 +406,12 @@ func prettyAttrs(attrs []kv.Pair) []sdk.Attribute {
|
||||
return pretty
|
||||
}
|
||||
|
||||
func prettyAttr(attr kv.Pair) sdk.Attribute {
|
||||
func prettyAttr(attr abci.EventAttribute) sdk.Attribute {
|
||||
return sdk.NewAttribute(string(attr.Key), string(attr.Value))
|
||||
}
|
||||
|
||||
func assertAttribute(t *testing.T, key string, value string, attr kv.Pair) {
|
||||
func assertAttribute(t *testing.T, key string, value string, attr abci.EventAttribute) {
|
||||
t.Helper()
|
||||
assert.Equal(t, key, string(attr.Key), prettyAttr(attr))
|
||||
assert.Equal(t, value, string(attr.Value), prettyAttr(attr))
|
||||
}
|
||||
@@ -433,17 +437,19 @@ func assertCodeBytes(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uint64
|
||||
bz, sdkerr := q(ctx, path, abci.RequestQuery{})
|
||||
require.NoError(t, sdkerr)
|
||||
|
||||
if len(bz) == 0 {
|
||||
require.Equal(t, len(expectedBytes), 0)
|
||||
if len(expectedBytes) == 0 {
|
||||
require.Equal(t, len(bz), 0, "%q", string(bz))
|
||||
return
|
||||
}
|
||||
|
||||
var res GetCodeResponse
|
||||
var res map[string]interface{}
|
||||
err := json.Unmarshal(bz, &res)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, expectedBytes, res.Data)
|
||||
assert.Equal(t, codeID, res.ID)
|
||||
require.Contains(t, res, "data")
|
||||
b, err := base64url.Decode(res["data"].(string))
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, expectedBytes, b)
|
||||
assert.EqualValues(t, codeID, res["id"])
|
||||
}
|
||||
|
||||
func assertContractList(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uint64, addrs []string) {
|
||||
@@ -468,6 +474,7 @@ func assertContractList(t *testing.T, q sdk.Querier, ctx sdk.Context, codeID uin
|
||||
}
|
||||
|
||||
func assertContractState(t *testing.T, q sdk.Querier, ctx sdk.Context, addr sdk.AccAddress, expected state) {
|
||||
t.Helper()
|
||||
path := []string{QueryGetContractState, addr.String(), keeper.QueryMethodContractStateAll}
|
||||
bz, sdkerr := q(ctx, path, abci.RequestQuery{})
|
||||
require.NoError(t, sdkerr)
|
||||
@@ -484,6 +491,7 @@ func assertContractState(t *testing.T, q sdk.Querier, ctx sdk.Context, addr sdk.
|
||||
}
|
||||
|
||||
func assertContractInfo(t *testing.T, q sdk.Querier, ctx sdk.Context, addr sdk.AccAddress, codeID uint64, creator sdk.AccAddress) {
|
||||
t.Helper()
|
||||
path := []string{QueryGetContract, addr.String()}
|
||||
bz, sdkerr := q(ctx, path, abci.RequestQuery{})
|
||||
require.NoError(t, sdkerr)
|
||||
@@ -496,11 +504,11 @@ func assertContractInfo(t *testing.T, q sdk.Querier, ctx sdk.Context, addr sdk.A
|
||||
assert.Equal(t, creator, res.Creator)
|
||||
}
|
||||
|
||||
func createFakeFundedAccount(ctx sdk.Context, am auth.AccountKeeper, coins sdk.Coins) sdk.AccAddress {
|
||||
func createFakeFundedAccount(t *testing.T, ctx sdk.Context, am authkeeper.AccountKeeper, bankKeeper bankkeeper.Keeper, coins sdk.Coins) sdk.AccAddress {
|
||||
t.Helper()
|
||||
_, _, addr := keyPubAddr()
|
||||
baseAcct := auth.NewBaseAccountWithAddress(addr)
|
||||
_ = baseAcct.SetCoins(coins)
|
||||
am.SetAccount(ctx, &baseAcct)
|
||||
|
||||
acc := am.NewAccountWithAddress(ctx, addr)
|
||||
am.SetAccount(ctx, acc)
|
||||
require.NoError(t, bankKeeper.SetBalances(ctx, addr, coins))
|
||||
return addr
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user