github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/acm/validator/bucket_test.go (about)

     1  package validator
     2  
     3  import (
     4  	"math/big"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  var pubA = pubKey(1)
    11  var pubB = pubKey(2)
    12  var pubC = pubKey(3)
    13  
    14  func TestBucket_SetPower(t *testing.T) {
    15  	base := NewBucket()
    16  	_, err := base.SetPower(pubA, new(big.Int).Sub(maxTotalPower, big3))
    17  	require.NoError(t, err)
    18  
    19  	bucket := NewBucket(base.Next)
    20  
    21  	flow, err := bucket.SetPower(pubA, new(big.Int).Sub(maxTotalPower, big2))
    22  	require.NoError(t, err)
    23  	require.Equal(t, big1.Int64(), flow.Int64())
    24  
    25  	flow, err = bucket.SetPower(pubA, new(big.Int).Sub(maxTotalPower, big1))
    26  	require.NoError(t, err)
    27  	require.Equal(t, big2.Int64(), flow.Int64())
    28  
    29  	flow, err = bucket.SetPower(pubA, maxTotalPower)
    30  	require.NoError(t, err)
    31  	require.Equal(t, big3.Int64(), flow.Int64())
    32  
    33  	_, err = bucket.SetPower(pubA, new(big.Int).Add(maxTotalPower, big1))
    34  	require.Error(t, err, "should fail as we would breach total power")
    35  
    36  	_, err = bucket.SetPower(pubB, big1)
    37  	require.Error(t, err, "should fail as we would breach total power")
    38  
    39  	// Drop A and raise B - should now succeed
    40  	flow, err = bucket.SetPower(pubA, new(big.Int).Sub(maxTotalPower, big1))
    41  	require.NoError(t, err)
    42  	require.Equal(t, big2.Int64(), flow.Int64())
    43  
    44  	flow, err = bucket.SetPower(pubB, big1)
    45  	require.NoError(t, err)
    46  	require.Equal(t, big1.Int64(), flow.Int64())
    47  }