Merge PR #4882: refactor mint tests

This commit is contained in:
colin axner 2019-08-15 06:53:37 -07:00 committed by Alexander Bezobchuk
parent 1cf016c9a9
commit 70ba07191d
3 changed files with 43 additions and 114 deletions

View File

@ -1,95 +0,0 @@
// nolint:deadcode unused
package keeper
import (
"os"
"testing"
"time"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/tendermint/tendermint/libs/log"
"github.com/stretchr/testify/require"
dbm "github.com/tendermint/tm-db"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/store"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth"
"github.com/cosmos/cosmos-sdk/x/bank"
"github.com/cosmos/cosmos-sdk/x/mint/internal/types"
"github.com/cosmos/cosmos-sdk/x/params"
"github.com/cosmos/cosmos-sdk/x/staking"
"github.com/cosmos/cosmos-sdk/x/supply"
)
type testInput struct {
ctx sdk.Context
cdc *codec.Codec
mintKeeper Keeper
}
func newTestInput(t *testing.T) testInput {
db := dbm.NewMemDB()
keyAcc := sdk.NewKVStoreKey(auth.StoreKey)
keySupply := sdk.NewKVStoreKey(supply.StoreKey)
keyStaking := sdk.NewKVStoreKey(staking.StoreKey)
tkeyStaking := sdk.NewTransientStoreKey(staking.TStoreKey)
keyParams := sdk.NewKVStoreKey(params.StoreKey)
tkeyParams := sdk.NewTransientStoreKey(params.TStoreKey)
keyMint := sdk.NewKVStoreKey(types.StoreKey)
ms := store.NewCommitMultiStore(db)
ms.MountStoreWithDB(keyAcc, sdk.StoreTypeIAVL, db)
ms.MountStoreWithDB(tkeyStaking, sdk.StoreTypeTransient, nil)
ms.MountStoreWithDB(keyStaking, sdk.StoreTypeIAVL, db)
ms.MountStoreWithDB(keySupply, sdk.StoreTypeIAVL, db)
ms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db)
ms.MountStoreWithDB(keyMint, sdk.StoreTypeIAVL, db)
ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db)
err := ms.LoadLatestVersion()
require.Nil(t, err)
ctx := sdk.NewContext(ms, abci.Header{Time: time.Unix(0, 0)}, false, log.NewTMLogger(os.Stdout))
feeCollectorAcc := supply.NewEmptyModuleAccount(auth.FeeCollectorName)
notBondedPool := supply.NewEmptyModuleAccount(staking.NotBondedPoolName, supply.Burner, supply.Staking)
bondPool := supply.NewEmptyModuleAccount(staking.BondedPoolName, supply.Burner, supply.Staking)
minterAcc := supply.NewEmptyModuleAccount(types.ModuleName, supply.Minter)
blacklistedAddrs := make(map[string]bool)
blacklistedAddrs[feeCollectorAcc.GetAddress().String()] = true
blacklistedAddrs[notBondedPool.GetAddress().String()] = true
blacklistedAddrs[bondPool.GetAddress().String()] = true
blacklistedAddrs[minterAcc.GetAddress().String()] = true
paramsKeeper := params.NewKeeper(types.ModuleCdc, keyParams, tkeyParams, params.DefaultCodespace)
accountKeeper := auth.NewAccountKeeper(types.ModuleCdc, keyAcc, paramsKeeper.Subspace(auth.DefaultParamspace), auth.ProtoBaseAccount)
bankKeeper := bank.NewBaseKeeper(accountKeeper, paramsKeeper.Subspace(bank.DefaultParamspace), bank.DefaultCodespace, blacklistedAddrs)
maccPerms := map[string][]string{
auth.FeeCollectorName: nil,
types.ModuleName: {supply.Minter},
staking.NotBondedPoolName: {supply.Burner, supply.Staking},
staking.BondedPoolName: {supply.Burner, supply.Staking},
}
supplyKeeper := supply.NewKeeper(types.ModuleCdc, keySupply, accountKeeper, bankKeeper, maccPerms)
supplyKeeper.SetSupply(ctx, supply.NewSupply(sdk.Coins{}))
stakingKeeper := staking.NewKeeper(
types.ModuleCdc, keyStaking, tkeyStaking, supplyKeeper, paramsKeeper.Subspace(staking.DefaultParamspace), staking.DefaultCodespace,
)
mintKeeper := NewKeeper(types.ModuleCdc, keyMint, paramsKeeper.Subspace(types.DefaultParamspace), &stakingKeeper, supplyKeeper, auth.FeeCollectorName)
// set module accounts
supplyKeeper.SetModuleAccount(ctx, feeCollectorAcc)
supplyKeeper.SetModuleAccount(ctx, minterAcc)
supplyKeeper.SetModuleAccount(ctx, notBondedPool)
supplyKeeper.SetModuleAccount(ctx, bondPool)
mintKeeper.SetParams(ctx, types.DefaultParams())
mintKeeper.SetMinter(ctx, types.DefaultInitialMinter())
return testInput{ctx, types.ModuleCdc, mintKeeper}
}

View File

@ -0,0 +1,20 @@
package keeper_test
import (
abci "github.com/tendermint/tendermint/abci/types"
"github.com/cosmos/cosmos-sdk/simapp"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/mint/internal/types"
)
// returns context and an app with updated mint keeper
func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) {
app := simapp.Setup(isCheckTx)
ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{})
app.MintKeeper.SetParams(ctx, types.DefaultParams())
app.MintKeeper.SetMinter(ctx, types.DefaultInitialMinter())
return app, ctx
}

View File

@ -1,4 +1,4 @@
package keeper
package keeper_test
import (
"testing"
@ -6,71 +6,75 @@ import (
"github.com/stretchr/testify/require"
sdk "github.com/cosmos/cosmos-sdk/types"
keep "github.com/cosmos/cosmos-sdk/x/mint/internal/keeper"
"github.com/cosmos/cosmos-sdk/x/mint/internal/types"
abci "github.com/tendermint/tendermint/abci/types"
)
func TestNewQuerier(t *testing.T) {
input := newTestInput(t)
querier := NewQuerier(input.mintKeeper)
app, ctx := createTestApp(true)
querier := keep.NewQuerier(app.MintKeeper)
query := abci.RequestQuery{
Path: "",
Data: []byte{},
}
_, err := querier(input.ctx, []string{types.QueryParameters}, query)
_, err := querier(ctx, []string{types.QueryParameters}, query)
require.NoError(t, err)
_, err = querier(input.ctx, []string{types.QueryInflation}, query)
_, err = querier(ctx, []string{types.QueryInflation}, query)
require.NoError(t, err)
_, err = querier(input.ctx, []string{types.QueryAnnualProvisions}, query)
_, err = querier(ctx, []string{types.QueryAnnualProvisions}, query)
require.NoError(t, err)
_, err = querier(input.ctx, []string{"foo"}, query)
_, err = querier(ctx, []string{"foo"}, query)
require.Error(t, err)
}
func TestQueryParams(t *testing.T) {
input := newTestInput(t)
app, ctx := createTestApp(true)
querier := keep.NewQuerier(app.MintKeeper)
var params types.Params
res, sdkErr := queryParams(input.ctx, input.mintKeeper)
res, sdkErr := querier(ctx, []string{types.QueryParameters}, abci.RequestQuery{})
require.NoError(t, sdkErr)
err := input.cdc.UnmarshalJSON(res, &params)
err := app.Codec().UnmarshalJSON(res, &params)
require.NoError(t, err)
require.Equal(t, input.mintKeeper.GetParams(input.ctx), params)
require.Equal(t, app.MintKeeper.GetParams(ctx), params)
}
func TestQueryInflation(t *testing.T) {
input := newTestInput(t)
app, ctx := createTestApp(true)
querier := keep.NewQuerier(app.MintKeeper)
var inflation sdk.Dec
res, sdkErr := queryInflation(input.ctx, input.mintKeeper)
res, sdkErr := querier(ctx, []string{types.QueryInflation}, abci.RequestQuery{})
require.NoError(t, sdkErr)
err := input.cdc.UnmarshalJSON(res, &inflation)
err := app.Codec().UnmarshalJSON(res, &inflation)
require.NoError(t, err)
require.Equal(t, input.mintKeeper.GetMinter(input.ctx).Inflation, inflation)
require.Equal(t, app.MintKeeper.GetMinter(ctx).Inflation, inflation)
}
func TestQueryAnnualProvisions(t *testing.T) {
input := newTestInput(t)
app, ctx := createTestApp(true)
querier := keep.NewQuerier(app.MintKeeper)
var annualProvisions sdk.Dec
res, sdkErr := queryAnnualProvisions(input.ctx, input.mintKeeper)
res, sdkErr := querier(ctx, []string{types.QueryAnnualProvisions}, abci.RequestQuery{})
require.NoError(t, sdkErr)
err := input.cdc.UnmarshalJSON(res, &annualProvisions)
err := app.Codec().UnmarshalJSON(res, &annualProvisions)
require.NoError(t, err)
require.Equal(t, input.mintKeeper.GetMinter(input.ctx).AnnualProvisions, annualProvisions)
require.Equal(t, app.MintKeeper.GetMinter(ctx).AnnualProvisions, annualProvisions)
}