Test rust panic for regression

This commit is contained in:
Alex Peters
2023-03-06 11:40:30 +01:00
parent 3160256365
commit a52e604966
4 changed files with 31 additions and 1 deletions

View File

@@ -542,6 +542,29 @@ func TestWasmRawQueryWithNil(t *testing.T) {
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) {
acct := accKeeper.GetAccount(ctx, addr)
if expected == nil {

BIN
x/wasm/keeper/testdata/cyberpunk.wasm vendored Normal file

Binary file not shown.

View File

@@ -9,7 +9,7 @@ fi
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"
echo "Downloading $url ..."
wget -O "${contract}.wasm" "$url"

View File

@@ -13,6 +13,9 @@ var reflectContract []byte
//go:embed reflect_1_1.wasm
var migrateReflectContract []byte
//go:embed cyberpunk.wasm
var cyberpunkContract []byte
func ReflectContractWasm() []byte {
return reflectContract
}
@@ -21,6 +24,10 @@ func MigrateReflectContractWasm() []byte {
return migrateReflectContract
}
func CyberpunkContractWasm() []byte {
return cyberpunkContract
}
// ReflectHandleMsg is used to encode handle messages
type ReflectHandleMsg struct {
Reflect *ReflectPayload `json:"reflect_msg,omitempty"`