cosmos-sdk/x/stake/test_common.go

174 lines
4.9 KiB
Go
Raw Normal View History

2018-01-25 12:11:58 -08:00
package stake
import (
"bytes"
2018-01-25 12:11:58 -08:00
"encoding/hex"
2018-06-01 02:51:38 -07:00
"strconv"
"testing"
"github.com/stretchr/testify/require"
2018-01-25 12:11:58 -08:00
abci "github.com/tendermint/abci/types"
2018-01-25 12:11:58 -08:00
crypto "github.com/tendermint/go-crypto"
dbm "github.com/tendermint/tmlibs/db"
2018-04-23 03:35:09 -07:00
"github.com/tendermint/tmlibs/log"
2018-01-25 12:11:58 -08:00
"github.com/cosmos/cosmos-sdk/store"
2018-01-25 12:11:58 -08:00
sdk "github.com/cosmos/cosmos-sdk/types"
2018-03-17 11:18:04 -07:00
"github.com/cosmos/cosmos-sdk/wire"
"github.com/cosmos/cosmos-sdk/x/auth"
"github.com/cosmos/cosmos-sdk/x/bank"
2018-01-25 12:11:58 -08:00
)
2018-03-26 07:48:15 -07:00
// dummy addresses used for testing
var (
addrs = createTestAddrs(100)
pks = createTestPubKeys(100)
2018-03-26 07:48:15 -07:00
emptyAddr sdk.Address
emptyPubkey crypto.PubKey
)
2018-05-18 15:57:47 -07:00
//_______________________________________________________________________________________
// intended to be used with require/assert: require.True(ValEq(...))
func ValEq(t *testing.T, exp, got Validator) (*testing.T, bool, string, Validator, Validator) {
return t, exp.equal(got), "expected:\t%v\ngot:\t\t%v", exp, got
}
//_______________________________________________________________________________________
2018-04-06 17:25:08 -07:00
func makeTestCodec() *wire.Codec {
2018-04-06 16:20:14 -07:00
var cdc = wire.NewCodec()
// Register Msgs
cdc.RegisterInterface((*sdk.Msg)(nil), nil)
2018-04-18 21:49:24 -07:00
cdc.RegisterConcrete(bank.MsgSend{}, "test/stake/Send", nil)
cdc.RegisterConcrete(bank.MsgIssue{}, "test/stake/Issue", nil)
2018-05-31 12:22:46 -07:00
cdc.RegisterConcrete(MsgCreateValidator{}, "test/stake/CreateValidator", nil)
cdc.RegisterConcrete(MsgEditValidator{}, "test/stake/EditValidator", nil)
2018-04-06 16:20:14 -07:00
cdc.RegisterConcrete(MsgUnbond{}, "test/stake/Unbond", nil)
// Register AppAccount
2018-05-23 19:26:54 -07:00
cdc.RegisterInterface((*auth.Account)(nil), nil)
2018-05-23 22:09:01 -07:00
cdc.RegisterConcrete(&auth.BaseAccount{}, "test/stake/Account", nil)
2018-04-07 00:02:00 -07:00
wire.RegisterCrypto(cdc)
2018-04-06 16:20:14 -07:00
2018-03-17 11:18:04 -07:00
return cdc
}
func paramsNoInflation() Params {
return Params{
2018-04-30 14:21:14 -07:00
InflationRateChange: sdk.ZeroRat(),
InflationMax: sdk.ZeroRat(),
InflationMin: sdk.ZeroRat(),
2018-03-17 11:18:04 -07:00
GoalBonded: sdk.NewRat(67, 100),
2018-03-20 14:21:18 -07:00
MaxValidators: 100,
2018-04-30 16:24:46 -07:00
BondDenom: "steak",
2018-03-17 11:18:04 -07:00
}
}
// hogpodge of all sorts of input required for testing
func createTestInput(t *testing.T, isCheckTx bool, initCoins sdk.Int) (sdk.Context, auth.AccountMapper, Keeper) {
2018-05-23 19:53:42 -07:00
2018-03-17 11:18:04 -07:00
keyStake := sdk.NewKVStoreKey("stake")
2018-05-04 18:29:12 -07:00
keyAcc := sdk.NewKVStoreKey("acc")
2018-05-22 12:13:03 -07:00
db := dbm.NewMemDB()
ms := store.NewCommitMultiStore(db)
2018-03-17 11:18:04 -07:00
ms.MountStoreWithDB(keyStake, sdk.StoreTypeIAVL, db)
2018-05-04 18:29:12 -07:00
ms.MountStoreWithDB(keyAcc, sdk.StoreTypeIAVL, db)
2018-02-02 08:38:40 -08:00
err := ms.LoadLatestVersion()
require.Nil(t, err)
ctx := sdk.NewContext(ms, abci.Header{ChainID: "foochainid"}, isCheckTx, log.NewNopLogger())
2018-03-17 11:18:04 -07:00
cdc := makeTestCodec()
2018-04-07 00:02:00 -07:00
accountMapper := auth.NewAccountMapper(
2018-05-23 22:09:01 -07:00
cdc, // amino codec
keyAcc, // target store
&auth.BaseAccount{}, // prototype
2018-04-22 23:36:15 -07:00
)
2018-04-18 21:49:24 -07:00
ck := bank.NewKeeper(accountMapper)
2018-04-18 09:36:55 -07:00
keeper := NewKeeper(cdc, keyStake, ck, DefaultCodespace)
keeper.setPool(ctx, InitialPool())
keeper.setNewParams(ctx, DefaultParams())
2018-03-20 14:21:18 -07:00
2018-03-19 08:53:20 -07:00
// fill all the addresses with some coins
for _, addr := range addrs {
2018-03-29 05:27:35 -07:00
ck.AddCoins(ctx, addr, sdk.Coins{
{keeper.GetParams(ctx).BondDenom, initCoins},
})
2018-03-19 08:53:20 -07:00
}
2018-03-20 14:21:18 -07:00
return ctx, accountMapper, keeper
2018-01-25 12:11:58 -08:00
}
func newPubKey(pk string) (res crypto.PubKey) {
pkBytes, err := hex.DecodeString(pk)
if err != nil {
panic(err)
}
//res, err = crypto.PubKeyFromBytes(pkBytes)
var pkEd crypto.PubKeyEd25519
copy(pkEd[:], pkBytes[:])
2018-04-06 17:25:08 -07:00
return pkEd
2018-01-25 12:11:58 -08:00
}
2018-03-17 11:18:04 -07:00
// for incode address generation
func testAddr(addr string, bech string) sdk.Address {
res, err := sdk.GetAccAddressHex(addr)
if err != nil {
panic(err)
}
2018-06-01 07:23:58 -07:00
bechexpected, err := sdk.Bech32ifyAcc(res)
2018-03-17 11:18:04 -07:00
if err != nil {
panic(err)
}
if bech != bechexpected {
panic("Bech encoding doesn't match reference")
}
2018-06-01 07:23:58 -07:00
bechres, err := sdk.GetAccAddressBech32(bech)
if err != nil {
panic(err)
}
if bytes.Compare(bechres, res) != 0 {
panic("Bech decode and hex decode don't match")
}
2018-03-17 11:18:04 -07:00
return res
}
2018-06-01 02:51:38 -07:00
func createTestAddrs(numAddrs int) []sdk.Address {
var addresses []sdk.Address
var buffer bytes.Buffer
// start at 100 so we can make up to 999 test addresses with valid test addresses
for i := 100; i < (numAddrs + 100); i++ {
2018-06-01 02:51:38 -07:00
numString := strconv.Itoa(i)
buffer.WriteString("A58856F0FD53BF058B4909A21AEC019107BA6") //base address string
2018-06-01 02:51:38 -07:00
buffer.WriteString(numString) //adding on final two digits to make addresses unique
res, _ := sdk.GetAccAddressHex(buffer.String())
bech, _ := sdk.Bech32ifyAcc(res)
2018-06-01 02:51:38 -07:00
addresses = append(addresses, testAddr(buffer.String(), bech))
buffer.Reset()
}
return addresses
}
func createTestPubKeys(numPubKeys int) []crypto.PubKey {
var publicKeys []crypto.PubKey
var buffer bytes.Buffer
//start at 10 to avoid changing 1 to 01, 2 to 02, etc
for i := 100; i < (numPubKeys + 100); i++ {
2018-06-01 02:51:38 -07:00
numString := strconv.Itoa(i)
buffer.WriteString("0B485CFC0EECC619440448436F8FC9DF40566F2369E72400281454CB552AF") //base pubkey string
buffer.WriteString(numString) //adding on final two digits to make pubkeys unique
2018-06-01 02:51:38 -07:00
publicKeys = append(publicKeys, newPubKey(buffer.String()))
buffer.Reset()
}
return publicKeys
}