wasmd/x/wasm/migrations/v3/store_test.go

136 lines
4.4 KiB
Go

package v3_test
import (
"bytes"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/address"
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
"github.com/CosmWasm/wasmd/x/wasm"
"github.com/CosmWasm/wasmd/x/wasm/keeper"
"github.com/CosmWasm/wasmd/x/wasm/keeper/wasmtesting"
v3 "github.com/CosmWasm/wasmd/x/wasm/migrations/v3"
"github.com/CosmWasm/wasmd/x/wasm/types"
)
func TestMigrate3To4(t *testing.T) {
AvailableCapabilities := []string{"iterator", "staking", "stargate", "cosmwasm_1_1"}
ctx, keepers := keeper.CreateTestInput(t, false, AvailableCapabilities)
store := ctx.KVStore(keepers.WasmStoreKey)
cdc := moduletestutil.MakeTestEncodingConfig(wasm.AppModuleBasic{}).Codec
wasmKeeper := keepers.WasmKeeper
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
creator := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len))
keepers.Faucet.Fund(ctx, creator, deposit...)
var mock wasmtesting.MockWasmEngine
wasmtesting.MakeInstantiable(&mock)
// contract with only address permission
onlyAddrPermission := v3.AccessConfig{
Permission: v3.AccessTypeOnlyAddress,
Address: creator.String(),
}
contract1 := keeper.StoreRandomContract(t, ctx, keepers, &mock)
newInfo1 := wasmKeeper.GetCodeInfo(ctx, contract1.CodeID)
legacyInfo1 := v3.CodeInfo{
CodeHash: newInfo1.CodeHash,
Creator: newInfo1.Creator,
InstantiateConfig: onlyAddrPermission,
}
store.Set(types.GetCodeKey(contract1.CodeID), cdc.MustMarshal(&legacyInfo1))
// contract with any addresses permission
anyAddrPermission := v3.AccessConfig{
Permission: v3.AccessTypeAnyOfAddresses,
Addresses: []string{creator.String()},
}
contract2 := keeper.StoreRandomContract(t, ctx, keepers, &mock)
newInfo2 := wasmKeeper.GetCodeInfo(ctx, contract2.CodeID)
legacyInfo2 := v3.CodeInfo{
CodeHash: newInfo2.CodeHash,
Creator: newInfo2.Creator,
InstantiateConfig: anyAddrPermission,
}
store.Set(types.GetCodeKey(contract2.CodeID), cdc.MustMarshal(&legacyInfo2))
// contract with everybody permission
allowEverybodyPermission := v3.AccessConfig{
Permission: v3.AccessTypeEverybody,
}
contract3 := keeper.StoreRandomContract(t, ctx, keepers, &mock)
newInfo3 := wasmKeeper.GetCodeInfo(ctx, contract3.CodeID)
legacyInfo3 := v3.CodeInfo{
CodeHash: newInfo3.CodeHash,
Creator: newInfo3.Creator,
InstantiateConfig: allowEverybodyPermission,
}
store.Set(types.GetCodeKey(contract3.CodeID), cdc.MustMarshal(&legacyInfo3))
// contract with nobody permission
allowNobodyPermission := v3.AccessConfig{
Permission: v3.AccessTypeNobody,
}
contract4 := keeper.StoreRandomContract(t, ctx, keepers, &mock)
newInfo4 := wasmKeeper.GetCodeInfo(ctx, contract4.CodeID)
legacyInfo4 := v3.CodeInfo{
CodeHash: newInfo4.CodeHash,
Creator: newInfo4.Creator,
InstantiateConfig: allowNobodyPermission,
}
store.Set(types.GetCodeKey(contract4.CodeID), cdc.MustMarshal(&legacyInfo4))
// set only address permission params
ps := v3.Params{
CodeUploadAccess: v3.AccessConfig{
Permission: v3.AccessTypeOnlyAddress,
Address: creator.String(),
},
InstantiateDefaultPermission: v3.AccessTypeOnlyAddress,
}
bz, err := cdc.Marshal(&ps)
require.NoError(t, err)
store.Set(types.ParamsKey, bz)
// when
err = keeper.NewMigrator(*wasmKeeper, nil).Migrate3to4(ctx)
// then
require.NoError(t, err)
expParams := types.Params{
CodeUploadAccess: types.AccessTypeAnyOfAddresses.With(creator),
InstantiateDefaultPermission: types.AccessTypeAnyOfAddresses,
}
// params are migrated
assert.Equal(t, expParams, wasmKeeper.GetParams(ctx))
// access config for only address is migrated
info1 := wasmKeeper.GetCodeInfo(ctx, contract1.CodeID)
assert.Equal(t, types.AccessTypeAnyOfAddresses.With(creator), info1.InstantiateConfig)
// access config for any addresses is not migrated
info2 := wasmKeeper.GetCodeInfo(ctx, contract2.CodeID)
assert.Equal(t, types.AccessTypeAnyOfAddresses.With(creator), info2.InstantiateConfig)
// access config for allow everybody is not migrated
info3 := wasmKeeper.GetCodeInfo(ctx, contract3.CodeID)
assert.Equal(t, types.AllowEverybody, info3.InstantiateConfig)
// access config for allow nobody is not migrated
info4 := wasmKeeper.GetCodeInfo(ctx, contract4.CodeID)
assert.Equal(t, types.AllowNobody, info4.InstantiateConfig)
}