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)
|
||||
}
|
||||
|
||||
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
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"
|
||||
|
||||
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"
|
||||
|
||||
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
|
||||
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"`
|
||||
|
||||
Reference in New Issue
Block a user