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 }