github.com/ava-labs/avalanchego@v1.11.11/vms/proposervm/tree/tree_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 tree 5 6 import ( 7 "context" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 12 "github.com/ava-labs/avalanchego/snow/consensus/snowman/snowmantest" 13 "github.com/ava-labs/avalanchego/snow/snowtest" 14 ) 15 16 func TestAcceptSingleBlock(t *testing.T) { 17 require := require.New(t) 18 19 tr := New() 20 21 block := snowmantest.BuildChild(snowmantest.Genesis) 22 _, contains := tr.Get(block) 23 require.False(contains) 24 25 tr.Add(block) 26 27 _, contains = tr.Get(block) 28 require.True(contains) 29 30 require.NoError(tr.Accept(context.Background(), block)) 31 require.Equal(snowtest.Accepted, block.Status) 32 33 _, contains = tr.Get(block) 34 require.False(contains) 35 } 36 37 func TestAcceptBlockConflict(t *testing.T) { 38 require := require.New(t) 39 40 tr := New() 41 42 blockToAccept := snowmantest.BuildChild(snowmantest.Genesis) 43 blockToReject := snowmantest.BuildChild(snowmantest.Genesis) 44 45 // add conflicting blocks 46 tr.Add(blockToAccept) 47 _, contains := tr.Get(blockToAccept) 48 require.True(contains) 49 50 tr.Add(blockToReject) 51 _, contains = tr.Get(blockToReject) 52 require.True(contains) 53 54 // accept one of them 55 require.NoError(tr.Accept(context.Background(), blockToAccept)) 56 57 // check their statuses and that they are removed from the tree 58 require.Equal(snowtest.Accepted, blockToAccept.Status) 59 _, contains = tr.Get(blockToAccept) 60 require.False(contains) 61 62 require.Equal(snowtest.Rejected, blockToReject.Status) 63 _, contains = tr.Get(blockToReject) 64 require.False(contains) 65 } 66 67 func TestAcceptChainConflict(t *testing.T) { 68 require := require.New(t) 69 70 tr := New() 71 72 blockToAccept := snowmantest.BuildChild(snowmantest.Genesis) 73 blockToReject := snowmantest.BuildChild(snowmantest.Genesis) 74 blockToRejectChild := snowmantest.BuildChild(blockToReject) 75 76 // add conflicting blocks. 77 tr.Add(blockToAccept) 78 _, contains := tr.Get(blockToAccept) 79 require.True(contains) 80 81 tr.Add(blockToReject) 82 _, contains = tr.Get(blockToReject) 83 require.True(contains) 84 85 tr.Add(blockToRejectChild) 86 _, contains = tr.Get(blockToRejectChild) 87 require.True(contains) 88 89 // accept one of them 90 require.NoError(tr.Accept(context.Background(), blockToAccept)) 91 92 // check their statuses and whether they are removed from tree 93 require.Equal(snowtest.Accepted, blockToAccept.Status) 94 _, contains = tr.Get(blockToAccept) 95 require.False(contains) 96 97 require.Equal(snowtest.Rejected, blockToReject.Status) 98 _, contains = tr.Get(blockToReject) 99 require.False(contains) 100 101 require.Equal(snowtest.Rejected, blockToRejectChild.Status) 102 _, contains = tr.Get(blockToRejectChild) 103 require.False(contains) 104 }