Test scaffolding for staking, test init and query callbacks

This commit is contained in:
Ethan Frey
2020-05-18 15:45:10 +02:00
parent 0379db676c
commit c4c1f9cf35
9 changed files with 375 additions and 32 deletions

2
go.mod
View File

@@ -3,7 +3,7 @@ module github.com/CosmWasm/wasmd
go 1.13
require (
github.com/CosmWasm/go-cosmwasm v0.8.0-alpha2
github.com/CosmWasm/go-cosmwasm v0.8.0-alpha2.0.20200518133220-76a4987de98b
github.com/btcsuite/btcd v0.0.0-20190807005414-4063feeff79a // indirect
github.com/cosmos/cosmos-sdk v0.38.3
github.com/golang/mock v1.4.3 // indirect

4
go.sum
View File

@@ -13,6 +13,10 @@ github.com/CosmWasm/go-cosmwasm v0.7.3-0.20200506091810-b5d72f383001 h1:QvYlAMha
github.com/CosmWasm/go-cosmwasm v0.7.3-0.20200506091810-b5d72f383001/go.mod h1:gAFCwllx97ejI+m9SqJQrmd2SBW7HA0fOjvWWJjM2uc=
github.com/CosmWasm/go-cosmwasm v0.8.0-alpha2 h1:CRITYzG25XuBFfoft+zuRKtJk37/PxNXXKXAje7iv1Q=
github.com/CosmWasm/go-cosmwasm v0.8.0-alpha2/go.mod h1:gAFCwllx97ejI+m9SqJQrmd2SBW7HA0fOjvWWJjM2uc=
github.com/CosmWasm/go-cosmwasm v0.8.0-alpha2.0.20200518132754-acf959da37ac h1:8iIQdsex6lXfwxGf/ju82M0VoYu6apmclJAuAtRUCzc=
github.com/CosmWasm/go-cosmwasm v0.8.0-alpha2.0.20200518132754-acf959da37ac/go.mod h1:gAFCwllx97ejI+m9SqJQrmd2SBW7HA0fOjvWWJjM2uc=
github.com/CosmWasm/go-cosmwasm v0.8.0-alpha2.0.20200518133220-76a4987de98b h1:AKCZCqgZAQnmJdCh4mnk23NoLzoyKQIowckBLnhrLlM=
github.com/CosmWasm/go-cosmwasm v0.8.0-alpha2.0.20200518133220-76a4987de98b/go.mod h1:gAFCwllx97ejI+m9SqJQrmd2SBW7HA0fOjvWWJjM2uc=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=

View File

@@ -25,7 +25,7 @@ func TestNewKeeper(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
_, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
_, _, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
require.NotNil(t, keeper)
}
@@ -33,7 +33,7 @@ func TestCreate(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
creator := createFakeFundedAccount(ctx, accKeeper, deposit)
@@ -54,7 +54,7 @@ func TestCreateDuplicate(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
creator := createFakeFundedAccount(ctx, accKeeper, deposit)
@@ -85,7 +85,7 @@ func TestCreateWithSimulation(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx = ctx.WithBlockHeader(abci.Header{Height: 1}).
WithGasMeter(stypes.NewInfiniteGasMeter())
@@ -101,7 +101,7 @@ func TestCreateWithSimulation(t *testing.T) {
require.Equal(t, uint64(1), contractID)
// then try to create it in non-simulation mode (should not fail)
ctx, accKeeper, keeper = CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper = CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
contractID, err = keeper.Create(ctx, creator, wasmCode, "https://github.com/CosmWasm/wasmd/blob/master/x/wasm/testdata/escrow.wasm", "confio/cosmwasm-opt:0.7.2")
require.NoError(t, err)
require.Equal(t, uint64(1), contractID)
@@ -141,7 +141,7 @@ func TestCreateWithGzippedPayload(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
creator := createFakeFundedAccount(ctx, accKeeper, deposit)
@@ -164,7 +164,7 @@ func TestInstantiate(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
creator := createFakeFundedAccount(ctx, accKeeper, deposit)
@@ -208,7 +208,7 @@ func TestInstantiateWithNonExistingCodeID(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
creator := createFakeFundedAccount(ctx, accKeeper, deposit)
@@ -229,7 +229,7 @@ func TestExecute(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000))
@@ -306,7 +306,7 @@ func TestExecuteWithNonExistingAddress(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
creator := createFakeFundedAccount(ctx, accKeeper, deposit.Add(deposit...))
@@ -321,7 +321,7 @@ func TestExecuteWithPanic(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000))
@@ -354,7 +354,7 @@ func TestExecuteWithCpuLoop(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000))
@@ -395,7 +395,7 @@ func TestExecuteWithStorageLoop(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000))

View File

@@ -19,7 +19,7 @@ func TestQueryContractState(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 5000))
@@ -147,7 +147,7 @@ func TestListContractByCodeOrdering(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, nil, nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 1000000))
topUp := sdk.NewCoins(sdk.NewInt64Coin("denom", 500))

View File

@@ -2,7 +2,6 @@ package keeper
import (
"encoding/json"
wasmTypes "github.com/CosmWasm/go-cosmwasm/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
@@ -109,8 +108,16 @@ func NoCustomQuerier(ctx sdk.Context, request json.RawMessage) ([]byte, error) {
func StakingQuerier(keeper staking.Keeper) func(ctx sdk.Context, request *wasmTypes.StakingQuery) ([]byte, error) {
return func(ctx sdk.Context, request *wasmTypes.StakingQuery) ([]byte, error) {
if request.BondedDenom != nil {
denom := keeper.BondDenom(ctx)
res := wasmTypes.BondedDenomResponse{
Denom: denom,
}
return json.Marshal(res)
}
if request.Validators != nil {
validators := keeper.GetBondedValidatorsByPower(ctx)
//validators := keeper.GetAllValidators(ctx)
wasmVals := make([]wasmTypes.Validator, len(validators))
for i, v := range validators {
wasmVals[i] = wasmTypes.Validator{

View File

@@ -55,7 +55,7 @@ func TestMaskReflectContractSend(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, MaskFeatures, maskEncoders(MakeTestCodec()), nil)
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, MaskFeatures, maskEncoders(MakeTestCodec()), nil)
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
creator := createFakeFundedAccount(ctx, accKeeper, deposit)
@@ -138,7 +138,7 @@ func TestMaskReflectCustomMsg(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, MaskFeatures, maskEncoders(MakeTestCodec()), maskPlugins())
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, MaskFeatures, maskEncoders(MakeTestCodec()), maskPlugins())
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
creator := createFakeFundedAccount(ctx, accKeeper, deposit)
@@ -233,7 +233,7 @@ func TestMaskReflectCustomQuery(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, MaskFeatures, maskEncoders(MakeTestCodec()), maskPlugins())
ctx, accKeeper, _, keeper := CreateTestInput(t, false, tempDir, MaskFeatures, maskEncoders(MakeTestCodec()), maskPlugins())
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
creator := createFakeFundedAccount(ctx, accKeeper, deposit)

View File

@@ -0,0 +1,321 @@
package keeper
import (
"encoding/json"
"fmt"
"github.com/cosmos/cosmos-sdk/x/staking"
"github.com/cosmos/cosmos-sdk/x/staking/types"
"io/ioutil"
"os"
"testing"
"github.com/stretchr/testify/require"
sdk "github.com/cosmos/cosmos-sdk/types"
)
type StakingInitMsg struct {
Name string `json:"name"`
Symbol string `json:"symbol"`
Decimals uint8 `json:"decimals"`
Validator sdk.ValAddress `json:"validator"`
ExitTax sdk.Dec `json:"exit_tax"`
// MinWithdrawl is uint128 encoded as a string (use sdk.Int?)
MinWithdrawl string `json:"min_withdrawl"`
}
// StakingHandleMsg is used to encode handle messages
type StakingHandleMsg struct {
Transfer *transferPayload `json:"transfer,omitempty"`
Bond *struct{} `json:"bond,omitempty"`
Unbond *unbondPayload `json:"unbond,omitempty"`
Claim *struct{} `json:"claim,omitempty"`
Reinvest *struct{} `json:"reinvest,omitempty"`
Change *ownerPayload `json:"change_owner,omitempty"`
}
type transferPayload struct {
Recipient sdk.Address `json:"recipient"`
// uint128 encoded as string
Amount string `json:"amount"`
}
type unbondPayload struct {
// uint128 encoded as string
Amount string `json:"amount"`
}
// StakingQueryMsg is used to encode query messages
type StakingQueryMsg struct {
Balance *addressQuery `json:"balance,omitempty"`
Claims *addressQuery `json:"claims,omitempty"`
TokenInfo *struct{} `json:"token_info,omitempty"`
Investment *struct{} `json:"investment,omitempty"`
}
type addressQuery struct {
Address sdk.AccAddress `json:"address"`
}
type BalanceResponse struct {
Balance string `json:"balance,omitempty"`
}
type ClaimsResponse struct {
Claims string `json:"claims,omitempty"`
}
type TokenInfoResponse struct {
Name string `json:"name"`
Symbol string `json:"symbol"`
Decimals uint8 `json:"decimals"`
}
type InvestmentResponse struct {
TokenSupply string `json:"token_supply"`
StakedTokens string `json:"staked_tokens"`
NominalValue sdk.Dec `json:"nominal_value"`
Owner sdk.AccAddress `json:"owner"`
Validator sdk.ValAddress `json:"validator"`
ExitTax sdk.Dec `json:"exit_tax"`
// MinWithdrawl is uint128 encoded as a string (use sdk.Int?)
MinWithdrawl string `json:"min_withdrawl"`
}
// adds a few validators and returns a list of validators that are registered
func addValidators(ctx sdk.Context, stakingKeeper staking.Keeper, powers []sdk.Int) []sdk.ValAddress {
var addrs = make([]sdk.ValAddress, len(powers))
for i, power := range powers {
addrs[i] = addValidator(ctx, stakingKeeper, power)
}
return addrs
}
// adds a few validators and returns a list of validators that are registered
func addValidator(ctx sdk.Context, stakingKeeper staking.Keeper, power sdk.Int) sdk.ValAddress {
_, pub, accAddr := keyPubAddr()
addr := sdk.ValAddress(accAddr)
// make it a bonded validator with power stake
val := types.NewValidator(addr, pub, types.Description{Moniker: fmt.Sprintf("Validator power %s", power)})
val.Status = sdk.Bonded
val, _ = val.AddTokensFromDel(power)
// store it
stakingKeeper.SetValidator(ctx, val)
stakingKeeper.SetValidatorByPowerIndex(ctx, val)
return addr
}
func TestInitializeStaking(t *testing.T) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
defer os.RemoveAll(tempDir)
ctx, accKeeper, stakingKeeper, keeper := CreateTestInput(t, false, tempDir, SupportedFeatures, maskEncoders(MakeTestCodec()), nil)
valAddr := addValidator(ctx, stakingKeeper, sdk.NewInt(1234567))
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000), sdk.NewInt64Coin("stake", 500000))
creator := createFakeFundedAccount(ctx, accKeeper, deposit)
// upload staking derivates code
stakingCode, err := ioutil.ReadFile("./testdata/staking.wasm")
require.NoError(t, err)
stakingID, err := keeper.Create(ctx, creator, stakingCode, "", "")
require.NoError(t, err)
require.Equal(t, uint64(1), stakingID)
// register to a valid address
initMsg := StakingInitMsg{
Name: "Staking Derivatives",
Symbol: "DRV",
Decimals: 0,
Validator: valAddr,
ExitTax: sdk.MustNewDecFromStr("0.10"),
MinWithdrawl: "100",
}
initBz, err := json.Marshal(&initMsg)
require.NoError(t, err)
stakingAddr, err := keeper.Instantiate(ctx, stakingID, creator, initBz, "staking derivates - DRV", nil)
require.NoError(t, err)
require.NotEmpty(t, stakingAddr)
// nothing spent here
checkAccount(t, ctx, accKeeper, creator, deposit)
// try to register with a validator not on the list and it fails
_, _, bob := keyPubAddr()
badInitMsg := StakingInitMsg{
Name: "Missing Validator",
Symbol: "MISS",
Decimals: 0,
Validator: sdk.ValAddress(bob),
ExitTax: sdk.MustNewDecFromStr("0.10"),
MinWithdrawl: "100",
}
badBz, err := json.Marshal(&badInitMsg)
require.NoError(t, err)
_, err = keeper.Instantiate(ctx, stakingID, creator, badBz, "missing validator", nil)
require.Error(t, err)
}
//func TestMaskReflectCustomMsg(t *testing.T) {
// tempDir, err := ioutil.TempDir("", "wasm")
// require.NoError(t, err)
// defer os.RemoveAll(tempDir)
// ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, MaskFeatures, maskEncoders(MakeTestCodec()), maskPlugins())
//
// deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
// creator := createFakeFundedAccount(ctx, accKeeper, deposit)
// bob := createFakeFundedAccount(ctx, accKeeper, deposit)
// _, _, fred := keyPubAddr()
//
// // upload code
// maskCode, err := ioutil.ReadFile("./testdata/reflect.wasm")
// require.NoError(t, err)
// codeID, err := keeper.Create(ctx, creator, maskCode, "", "")
// require.NoError(t, err)
// require.Equal(t, uint64(1), codeID)
//
// // creator instantiates a contract and gives it tokens
// contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000))
// contractAddr, err := keeper.Instantiate(ctx, codeID, creator, []byte("{}"), "mask contract 1", contractStart)
// require.NoError(t, err)
// require.NotEmpty(t, contractAddr)
//
// // set owner to bob
// transfer := MaskHandleMsg{
// Change: &ownerPayload{
// Owner: bob,
// },
// }
// transferBz, err := json.Marshal(transfer)
// require.NoError(t, err)
// _, err = keeper.Execute(ctx, contractAddr, creator, transferBz, nil)
// require.NoError(t, err)
//
// // check some account values
// checkAccount(t, ctx, accKeeper, contractAddr, contractStart)
// checkAccount(t, ctx, accKeeper, bob, deposit)
// checkAccount(t, ctx, accKeeper, fred, nil)
//
// // bob can send contract's tokens to fred (using SendMsg)
// msgs := []wasmTypes.CosmosMsg{{
// Bank: &wasmTypes.BankMsg{
// Send: &wasmTypes.SendMsg{
// FromAddress: contractAddr.String(),
// ToAddress: fred.String(),
// Amount: []wasmTypes.Coin{{
// Denom: "denom",
// Amount: "15000",
// }},
// },
// },
// }}
// reflectSend := MaskHandleMsg{
// Reflect: &reflectPayload{
// Msgs: msgs,
// },
// }
// reflectSendBz, err := json.Marshal(reflectSend)
// require.NoError(t, err)
// _, err = keeper.Execute(ctx, contractAddr, bob, reflectSendBz, nil)
// require.NoError(t, err)
//
// // fred got coins
// checkAccount(t, ctx, accKeeper, fred, sdk.NewCoins(sdk.NewInt64Coin("denom", 15000)))
// // contract lost them
// checkAccount(t, ctx, accKeeper, contractAddr, sdk.NewCoins(sdk.NewInt64Coin("denom", 25000)))
// checkAccount(t, ctx, accKeeper, bob, deposit)
//
// // construct an opaque message
// var sdkSendMsg sdk.Msg = &bank.MsgSend{
// FromAddress: contractAddr,
// ToAddress: fred,
// Amount: sdk.NewCoins(sdk.NewInt64Coin("denom", 23000)),
// }
// opaque, err := toMaskRawMsg(keeper.cdc, sdkSendMsg)
// require.NoError(t, err)
// reflectOpaque := MaskHandleMsg{
// Reflect: &reflectPayload{
// Msgs: []wasmTypes.CosmosMsg{opaque},
// },
// }
// reflectOpaqueBz, err := json.Marshal(reflectOpaque)
// require.NoError(t, err)
//
// _, err = keeper.Execute(ctx, contractAddr, bob, reflectOpaqueBz, nil)
// require.NoError(t, err)
//
// // fred got more coins
// checkAccount(t, ctx, accKeeper, fred, sdk.NewCoins(sdk.NewInt64Coin("denom", 38000)))
// // contract lost them
// checkAccount(t, ctx, accKeeper, contractAddr, sdk.NewCoins(sdk.NewInt64Coin("denom", 2000)))
// checkAccount(t, ctx, accKeeper, bob, deposit)
//}
//
//func TestMaskReflectCustomQuery(t *testing.T) {
// tempDir, err := ioutil.TempDir("", "wasm")
// require.NoError(t, err)
// defer os.RemoveAll(tempDir)
// ctx, accKeeper, keeper := CreateTestInput(t, false, tempDir, MaskFeatures, maskEncoders(MakeTestCodec()), maskPlugins())
//
// deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
// creator := createFakeFundedAccount(ctx, accKeeper, deposit)
//
// // upload code
// maskCode, err := ioutil.ReadFile("./testdata/reflect.wasm")
// require.NoError(t, err)
// codeID, err := keeper.Create(ctx, creator, maskCode, "", "")
// require.NoError(t, err)
// require.Equal(t, uint64(1), codeID)
//
// // creator instantiates a contract and gives it tokens
// contractStart := sdk.NewCoins(sdk.NewInt64Coin("denom", 40000))
// contractAddr, err := keeper.Instantiate(ctx, codeID, creator, []byte("{}"), "mask contract 1", contractStart)
// require.NoError(t, err)
// require.NotEmpty(t, contractAddr)
//
// // let's perform a normal query of state
// ownerQuery := MaskQueryMsg{
// Owner: &struct{}{},
// }
// ownerQueryBz, err := json.Marshal(ownerQuery)
// require.NoError(t, err)
// ownerRes, err := keeper.QuerySmart(ctx, contractAddr, ownerQueryBz)
// require.NoError(t, err)
// var res OwnerResponse
// err = json.Unmarshal(ownerRes, &res)
// require.NoError(t, err)
// assert.Equal(t, res.Owner, creator.String())
//
// // and now making use of the custom querier callbacks
// customQuery := MaskQueryMsg{
// ReflectCustom: &Text{
// Text: "all Caps noW",
// },
// }
// customQueryBz, err := json.Marshal(customQuery)
// require.NoError(t, err)
// custom, err := keeper.QuerySmart(ctx, contractAddr, customQueryBz)
// require.NoError(t, err)
// var resp customQueryResponse
// err = json.Unmarshal(custom, &resp)
// require.NoError(t, err)
// assert.Equal(t, resp.Msg, "ALL CAPS NOW")
//}
//func checkAccount(t *testing.T, ctx sdk.Context, accKeeper auth.AccountKeeper, addr sdk.AccAddress, expected sdk.Coins) {
// acct := accKeeper.GetAccount(ctx, addr)
// if expected == nil {
// assert.Nil(t, acct)
// } else {
// assert.NotNil(t, acct)
// if expected.Empty() {
// // there is confusion between nil and empty slice... let's just treat them the same
// assert.True(t, acct.GetCoins().Empty())
// } else {
// assert.Equal(t, acct.GetCoins(), expected)
// }
// }
//}

View File

@@ -2,11 +2,14 @@ package keeper
import (
"fmt"
"github.com/cosmos/cosmos-sdk/x/staking"
"github.com/cosmos/cosmos-sdk/x/supply"
"testing"
"time"
"github.com/stretchr/testify/require"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/tendermint/tendermint/libs/log"
dbm "github.com/tendermint/tm-db"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/store"
@@ -15,11 +18,8 @@ import (
"github.com/cosmos/cosmos-sdk/x/auth"
"github.com/cosmos/cosmos-sdk/x/bank"
"github.com/cosmos/cosmos-sdk/x/params"
"github.com/cosmos/cosmos-sdk/x/staking/types"
"github.com/stretchr/testify/require"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/tendermint/tendermint/libs/log"
dbm "github.com/tendermint/tm-db"
"github.com/cosmos/cosmos-sdk/x/staking"
"github.com/cosmos/cosmos-sdk/x/supply"
wasmTypes "github.com/CosmWasm/wasmd/x/wasm/internal/types"
)
@@ -42,9 +42,17 @@ func MakeTestCodec() *codec.Codec {
return cdc
}
var TestingStakeParams = staking.Params{
UnbondingTime: 100,
MaxValidators: 10,
MaxEntries: 10,
HistoricalEntries: 10,
BondDenom: "stake",
}
// encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default)
func CreateTestInput(t *testing.T, isCheckTx bool, tempDir string, supportedFeatures string, encoders *MessageEncoders, queriers *QueryPlugins) (sdk.Context, auth.AccountKeeper, Keeper) {
keyContract := sdk.NewKVStoreKey(types.StoreKey)
func CreateTestInput(t *testing.T, isCheckTx bool, tempDir string, supportedFeatures string, encoders *MessageEncoders, queriers *QueryPlugins) (sdk.Context, auth.AccountKeeper, staking.Keeper, Keeper) {
keyContract := sdk.NewKVStoreKey(wasmTypes.StoreKey)
keyAcc := sdk.NewKVStoreKey(auth.StoreKey)
keyStaking := sdk.NewKVStoreKey(staking.StoreKey)
keySupply := sdk.NewKVStoreKey(supply.StoreKey)
@@ -56,6 +64,8 @@ func CreateTestInput(t *testing.T, isCheckTx bool, tempDir string, supportedFeat
ms.MountStoreWithDB(keyContract, sdk.StoreTypeIAVL, db)
ms.MountStoreWithDB(keyAcc, sdk.StoreTypeIAVL, db)
ms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db)
ms.MountStoreWithDB(keyStaking, sdk.StoreTypeIAVL, db)
ms.MountStoreWithDB(keySupply, sdk.StoreTypeIAVL, db)
ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db)
err := ms.LoadLatestVersion()
require.Nil(t, err)
@@ -91,6 +101,7 @@ func CreateTestInput(t *testing.T, isCheckTx bool, tempDir string, supportedFeat
supplyKeeper := supply.NewKeeper(cdc, keySupply, accountKeeper, bankKeeper, maccPerms)
stakingKeeper := staking.NewKeeper(cdc, keyStaking, supplyKeeper, pk.Subspace(staking.DefaultParamspace))
stakingKeeper.SetParams(ctx, TestingStakeParams)
router := baseapp.NewRouter()
bh := bank.NewHandler(bankKeeper)
@@ -105,7 +116,7 @@ func CreateTestInput(t *testing.T, isCheckTx bool, tempDir string, supportedFeat
// add wasm handler so we can loop-back (contracts calling contracts)
router.AddRoute(wasmTypes.RouterKey, TestHandler(keeper))
return ctx, accountKeeper, keeper
return ctx, accountKeeper, stakingKeeper, keeper
}
// TestHandler returns a wasm handler for tests (to avoid circular imports)

View File

@@ -34,7 +34,7 @@ func setupTest(t *testing.T) (testData, func()) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
ctx, acctKeeper, keeper := CreateTestInput(t, false, tempDir, "staking", nil, nil)
ctx, acctKeeper, _, keeper := CreateTestInput(t, false, tempDir, "staking", nil, nil)
data := testData{
module: NewAppModule(keeper),
ctx: ctx,
@@ -63,7 +63,7 @@ func mustLoad(path string) []byte {
var (
key1, pub1, addr1 = keyPubAddr()
testContract = mustLoad("./internal/keeper/testdata/contract.wasm")
maskContract = mustLoad("./internal/keeper/testdata/mask.wasm")
maskContract = mustLoad("./internal/keeper/testdata/reflect.wasm")
oldContract = mustLoad("./testdata/escrow_0.7.wasm")
)