From 116d8e91d73618d9190d83267fa2880eaed36676 Mon Sep 17 00:00:00 2001 From: Adrian Brink Date: Tue, 20 Mar 2018 19:47:33 +0100 Subject: [PATCH] Tests for Bond and Unbond --- x/staking/mapper.go | 25 ++++++++++++++++--------- x/staking/mapper_test.go | 30 ++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/x/staking/mapper.go b/x/staking/mapper.go index dbc7a1ebdc..355ccc3d6a 100644 --- a/x/staking/mapper.go +++ b/x/staking/mapper.go @@ -20,23 +20,23 @@ func NewMapper(key sdk.StoreKey) StakingMapper { } } -func (sm StakingMapper) getBondInfo(ctx sdk.Context, addr sdk.Address) *bondInfo { +func (sm StakingMapper) getBondInfo(ctx sdk.Context, addr sdk.Address) bondInfo { store := ctx.KVStore(sm.key) bz := store.Get(addr) if bz == nil { - return nil + return bondInfo{} } var bi bondInfo err := sm.cdc.UnmarshalBinary(bz, &bi) if err != nil { panic(err) } - return &bi + return bi } -func (sm StakingMapper) setBondInfo(ctx sdk.Context, addr sdk.Address, bi *bondInfo) { +func (sm StakingMapper) setBondInfo(ctx sdk.Context, addr sdk.Address, bi bondInfo) { store := ctx.KVStore(sm.key) - bz, err := sm.cdc.MarshalBinary(*bi) + bz, err := sm.cdc.MarshalBinary(bi) if err != nil { panic(err) } @@ -50,8 +50,8 @@ func (sm StakingMapper) deleteBondInfo(ctx sdk.Context, addr sdk.Address) { func (sm StakingMapper) Bond(ctx sdk.Context, addr sdk.Address, pubKey crypto.PubKey, power int64) (int64, sdk.Error) { bi := sm.getBondInfo(ctx, addr) - if bi == nil { - bi = &bondInfo{ + if bi.isEmpty() { + bi = bondInfo{ PubKey: pubKey, Power: power, } @@ -60,7 +60,7 @@ func (sm StakingMapper) Bond(ctx sdk.Context, addr sdk.Address, pubKey crypto.Pu } newPower := bi.Power + power - newBi := &bondInfo{ + newBi := bondInfo{ PubKey: bi.PubKey, Power: newPower, } @@ -71,7 +71,7 @@ func (sm StakingMapper) Bond(ctx sdk.Context, addr sdk.Address, pubKey crypto.Pu func (sm StakingMapper) Unbond(ctx sdk.Context, addr sdk.Address) (crypto.PubKey, int64, sdk.Error) { bi := sm.getBondInfo(ctx, addr) - if bi == nil { + if bi.isEmpty() { return crypto.PubKey{}, 0, ErrInvalidUnbond() } sm.deleteBondInfo(ctx, addr) @@ -82,3 +82,10 @@ type bondInfo struct { PubKey crypto.PubKey Power int64 } + +func (bi bondInfo) isEmpty() bool { + if bi == (bondInfo{}) { + return true + } + return false +} diff --git a/x/staking/mapper_test.go b/x/staking/mapper_test.go index 3a84d5eca4..8f4e2d50e4 100644 --- a/x/staking/mapper_test.go +++ b/x/staking/mapper_test.go @@ -32,11 +32,11 @@ func TestStakingMapperGetSet(t *testing.T) { addr := sdk.Address([]byte("some-address")) bi := stakingMapper.getBondInfo(ctx, addr) - assert.Nil(t, bi) + assert.Equal(t, bi, bondInfo{}) privKey := crypto.GenPrivKeyEd25519() - bi = &bondInfo{ + bi = bondInfo{ PubKey: privKey.PubKey(), Power: int64(10), } @@ -48,3 +48,29 @@ func TestStakingMapperGetSet(t *testing.T) { fmt.Printf("Bond Info: %v\n", savedBi) assert.Equal(t, int64(10), savedBi.Power) } + +func TestBonding(t *testing.T) { + ms, capKey := setupMultiStore() + + ctx := sdk.NewContext(ms, abci.Header{}, false, nil) + stakingMapper := NewMapper(capKey) + addr := sdk.Address([]byte("some-address")) + privKey := crypto.GenPrivKeyEd25519() + pubKey := privKey.PubKey() + + _, _, err := stakingMapper.Unbond(ctx, addr) + assert.Equal(t, err, ErrInvalidUnbond()) + + _, err = stakingMapper.Bond(ctx, addr, pubKey, 10) + assert.Nil(t, err) + + power, err := stakingMapper.Bond(ctx, addr, pubKey, 10) + assert.Equal(t, int64(20), power) + + pk, _, err := stakingMapper.Unbond(ctx, addr) + assert.Nil(t, err) + assert.Equal(t, pubKey, pk) + + _, _, err = stakingMapper.Unbond(ctx, addr) + assert.Equal(t, err, ErrInvalidUnbond()) +}