Tests for Bond and Unbond

This commit is contained in:
Adrian Brink 2018-03-20 19:47:33 +01:00
parent f837c16760
commit 116d8e91d7
No known key found for this signature in database
GPG Key ID: F61053D3FBD06353
2 changed files with 44 additions and 11 deletions

View File

@ -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
}

View File

@ -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())
}