github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/sync/utils_test.go (about) 1 package sync 2 3 import ( 4 "math/rand" 5 "testing" 6 7 types "github.com/prysmaticlabs/eth2-types" 8 ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1" 9 "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1/wrapper" 10 "github.com/prysmaticlabs/prysm/proto/interfaces" 11 "github.com/prysmaticlabs/prysm/shared/bytesutil" 12 "github.com/prysmaticlabs/prysm/shared/testutil/require" 13 ) 14 15 func TestSortedObj_SortBlocksRoots(t *testing.T) { 16 source := rand.NewSource(33) 17 randGen := rand.New(source) 18 var blks []interfaces.SignedBeaconBlock 19 var roots [][32]byte 20 randFunc := func() int64 { 21 return randGen.Int63n(50) 22 } 23 24 for i := 0; i < 10; i++ { 25 slot := types.Slot(randFunc()) 26 newBlk := wrapper.WrappedPhase0SignedBeaconBlock(ðpb.SignedBeaconBlock{Block: ðpb.BeaconBlock{Slot: slot}}) 27 blks = append(blks, newBlk) 28 root := bytesutil.ToBytes32(bytesutil.Bytes32(uint64(slot))) 29 roots = append(roots, root) 30 } 31 32 r := &Service{} 33 34 newBlks, newRoots := r.sortBlocksAndRoots(blks, roots) 35 36 previousSlot := types.Slot(0) 37 for i, b := range newBlks { 38 if b.Block().Slot() < previousSlot { 39 t.Errorf("Block list is not sorted as %d is smaller than previousSlot %d", b.Block().Slot(), previousSlot) 40 } 41 if bytesutil.FromBytes8(newRoots[i][:]) != uint64(b.Block().Slot()) { 42 t.Errorf("root doesn't match stored slot in block: wanted %d but got %d", b.Block().Slot(), bytesutil.FromBytes8(newRoots[i][:])) 43 } 44 previousSlot = b.Block().Slot() 45 } 46 } 47 48 func TestSortedObj_NoDuplicates(t *testing.T) { 49 source := rand.NewSource(33) 50 randGen := rand.New(source) 51 var blks []interfaces.SignedBeaconBlock 52 var roots [][32]byte 53 randFunc := func() int64 { 54 return randGen.Int63n(50) 55 } 56 57 for i := 0; i < 10; i++ { 58 slot := types.Slot(randFunc()) 59 newBlk := ðpb.SignedBeaconBlock{Block: ðpb.BeaconBlock{Slot: slot}} 60 // append twice 61 blks = append(blks, wrapper.WrappedPhase0SignedBeaconBlock(newBlk), wrapper.WrappedPhase0SignedBeaconBlock(newBlk)) 62 63 // append twice 64 root := bytesutil.ToBytes32(bytesutil.Bytes32(uint64(slot))) 65 roots = append(roots, root, root) 66 } 67 68 r := &Service{} 69 70 newBlks, newRoots, err := r.dedupBlocksAndRoots(blks, roots) 71 require.NoError(t, err) 72 73 rootMap := make(map[[32]byte]bool) 74 for i, b := range newBlks { 75 if rootMap[newRoots[i]] { 76 t.Errorf("Duplicated root exists %#x with block %v", newRoots[i], b) 77 } 78 rootMap[newRoots[i]] = true 79 } 80 }