Test rust panic for regression
This commit is contained in:
@@ -542,6 +542,29 @@ func TestWasmRawQueryWithNil(t *testing.T) {
|
|||||||
require.Equal(t, []byte{}, reflectRawRes.Data)
|
require.Equal(t, []byte{}, reflectRawRes.Data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRustPanicIsHandled(t *testing.T) {
|
||||||
|
ctx, keepers := CreateTestInput(t, false, ReflectFeatures)
|
||||||
|
keeper := keepers.ContractKeeper
|
||||||
|
|
||||||
|
creator := keepers.Faucet.NewFundedRandomAccount(ctx, sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))...)
|
||||||
|
|
||||||
|
// upload code
|
||||||
|
codeID, _, err := keeper.Create(ctx, creator, testdata.CyberpunkContractWasm(), nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, uint64(1), codeID)
|
||||||
|
|
||||||
|
contractAddr, _, err := keeper.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "cyberpunk contract", nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotEmpty(t, contractAddr)
|
||||||
|
|
||||||
|
// when panic is triggered
|
||||||
|
msg := []byte(`{"panic":{}}`)
|
||||||
|
gotData, err := keeper.Execute(ctx, contractAddr, creator, msg, nil)
|
||||||
|
require.ErrorIs(t, err, types.ErrExecuteFailed)
|
||||||
|
assert.Contains(t, err.Error(), "panicked at 'This page intentionally faulted'")
|
||||||
|
assert.Nil(t, gotData)
|
||||||
|
}
|
||||||
|
|
||||||
func checkAccount(t *testing.T, ctx sdk.Context, accKeeper authkeeper.AccountKeeper, bankKeeper bankkeeper.Keeper, addr sdk.AccAddress, expected sdk.Coins) {
|
func checkAccount(t *testing.T, ctx sdk.Context, accKeeper authkeeper.AccountKeeper, bankKeeper bankkeeper.Keeper, addr sdk.AccAddress, expected sdk.Coins) {
|
||||||
acct := accKeeper.GetAccount(ctx, addr)
|
acct := accKeeper.GetAccount(ctx, addr)
|
||||||
if expected == nil {
|
if expected == nil {
|
||||||
|
|||||||
BIN
x/wasm/keeper/testdata/cyberpunk.wasm
vendored
Normal file
BIN
x/wasm/keeper/testdata/cyberpunk.wasm
vendored
Normal file
Binary file not shown.
2
x/wasm/keeper/testdata/download_releases.sh
vendored
2
x/wasm/keeper/testdata/download_releases.sh
vendored
@@ -9,7 +9,7 @@ fi
|
|||||||
|
|
||||||
tag="$1"
|
tag="$1"
|
||||||
|
|
||||||
for contract in burner hackatom ibc_reflect ibc_reflect_send reflect staking; do
|
for contract in burner hackatom ibc_reflect ibc_reflect_send reflect staking cyberpunk; do
|
||||||
url="https://github.com/CosmWasm/cosmwasm/releases/download/$tag/${contract}.wasm"
|
url="https://github.com/CosmWasm/cosmwasm/releases/download/$tag/${contract}.wasm"
|
||||||
echo "Downloading $url ..."
|
echo "Downloading $url ..."
|
||||||
wget -O "${contract}.wasm" "$url"
|
wget -O "${contract}.wasm" "$url"
|
||||||
|
|||||||
7
x/wasm/keeper/testdata/reflect.go
vendored
7
x/wasm/keeper/testdata/reflect.go
vendored
@@ -13,6 +13,9 @@ var reflectContract []byte
|
|||||||
//go:embed reflect_1_1.wasm
|
//go:embed reflect_1_1.wasm
|
||||||
var migrateReflectContract []byte
|
var migrateReflectContract []byte
|
||||||
|
|
||||||
|
//go:embed cyberpunk.wasm
|
||||||
|
var cyberpunkContract []byte
|
||||||
|
|
||||||
func ReflectContractWasm() []byte {
|
func ReflectContractWasm() []byte {
|
||||||
return reflectContract
|
return reflectContract
|
||||||
}
|
}
|
||||||
@@ -21,6 +24,10 @@ func MigrateReflectContractWasm() []byte {
|
|||||||
return migrateReflectContract
|
return migrateReflectContract
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CyberpunkContractWasm() []byte {
|
||||||
|
return cyberpunkContract
|
||||||
|
}
|
||||||
|
|
||||||
// ReflectHandleMsg is used to encode handle messages
|
// ReflectHandleMsg is used to encode handle messages
|
||||||
type ReflectHandleMsg struct {
|
type ReflectHandleMsg struct {
|
||||||
Reflect *ReflectPayload `json:"reflect_msg,omitempty"`
|
Reflect *ReflectPayload `json:"reflect_msg,omitempty"`
|
||||||
|
|||||||
Reference in New Issue
Block a user