github.com/MetalBlockchain/metalgo@v1.11.9/snow/consensus/snowball/consensus_reversibility_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package snowball 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 "gonum.org/v1/gonum/mathext/prng" 11 ) 12 13 func TestSnowballGovernance(t *testing.T) { 14 require := require.New(t) 15 16 var ( 17 numColors = 2 18 numNodes = 100 19 numByzantine = 10 20 numRed = 55 21 params = DefaultParameters 22 seed uint64 = 0 23 source = prng.NewMT19937() 24 ) 25 26 nBitwise := NewNetwork(SnowballFactory, params, numColors, source) 27 28 source.Seed(seed) 29 for i := 0; i < numRed; i++ { 30 nBitwise.AddNodeSpecificColor(NewTree, 0, []int{1}) 31 } 32 33 for _, node := range nBitwise.nodes { 34 require.Equal(nBitwise.colors[0], node.Preference()) 35 } 36 37 for i := 0; i < numNodes-numByzantine-numRed; i++ { 38 nBitwise.AddNodeSpecificColor(NewTree, 1, []int{0}) 39 } 40 41 for i := 0; i < numByzantine; i++ { 42 nBitwise.AddNodeSpecificColor(NewByzantine, 1, []int{0}) 43 } 44 45 for !nBitwise.Finalized() { 46 nBitwise.Round() 47 } 48 49 for _, node := range nBitwise.nodes { 50 if _, ok := node.(*Byzantine); ok { 51 continue 52 } 53 require.Equal(nBitwise.colors[0], node.Preference()) 54 } 55 }