mirror of
https://github.com/luxfi/crypto.git
synced 2026-07-27 01:54:50 +00:00
105 lines
2.6 KiB
Go
105 lines
2.6 KiB
Go
// Copyright (C) 2019-2025, Lux Industries Inc All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package tree
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/luxfi/consensus/engine/chain/chaintest"
|
|
consensustest "github.com/luxfi/consensus/test/helpers"
|
|
)
|
|
|
|
func TestAcceptSingleBlock(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
tr := New()
|
|
|
|
block := chaintest.BuildChild(chaintest.Genesis)
|
|
_, contains := tr.Get(block)
|
|
require.False(contains)
|
|
|
|
tr.Add(block)
|
|
|
|
_, contains = tr.Get(block)
|
|
require.True(contains)
|
|
|
|
require.NoError(tr.Accept(context.Background(), block))
|
|
require.Equal(uint8(consensustest.Accepted), block.Status())
|
|
|
|
_, contains = tr.Get(block)
|
|
require.False(contains)
|
|
}
|
|
|
|
func TestAcceptBlockConflict(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
tr := New()
|
|
|
|
blockToAccept := chaintest.BuildChild(chaintest.Genesis)
|
|
blockToReject := chaintest.BuildChild(chaintest.Genesis)
|
|
|
|
// add conflicting blocks
|
|
tr.Add(blockToAccept)
|
|
_, contains := tr.Get(blockToAccept)
|
|
require.True(contains)
|
|
|
|
tr.Add(blockToReject)
|
|
_, contains = tr.Get(blockToReject)
|
|
require.True(contains)
|
|
|
|
// accept one of them
|
|
require.NoError(tr.Accept(context.Background(), blockToAccept))
|
|
|
|
// check their statuses and that they are removed from the tree
|
|
require.Equal(uint8(consensustest.Accepted), blockToAccept.Status())
|
|
_, contains = tr.Get(blockToAccept)
|
|
require.False(contains)
|
|
|
|
require.Equal(uint8(consensustest.Rejected), blockToReject.Status())
|
|
_, contains = tr.Get(blockToReject)
|
|
require.False(contains)
|
|
}
|
|
|
|
func TestAcceptChainConflict(t *testing.T) {
|
|
require := require.New(t)
|
|
|
|
tr := New()
|
|
|
|
blockToAccept := chaintest.BuildChild(chaintest.Genesis)
|
|
blockToReject := chaintest.BuildChild(chaintest.Genesis)
|
|
blockToRejectChild := chaintest.BuildChild(blockToReject)
|
|
|
|
// add conflicting blocks.
|
|
tr.Add(blockToAccept)
|
|
_, contains := tr.Get(blockToAccept)
|
|
require.True(contains)
|
|
|
|
tr.Add(blockToReject)
|
|
_, contains = tr.Get(blockToReject)
|
|
require.True(contains)
|
|
|
|
tr.Add(blockToRejectChild)
|
|
_, contains = tr.Get(blockToRejectChild)
|
|
require.True(contains)
|
|
|
|
// accept one of them
|
|
require.NoError(tr.Accept(context.Background(), blockToAccept))
|
|
|
|
// check their statuses and whether they are removed from tree
|
|
require.Equal(uint8(consensustest.Accepted), blockToAccept.Status())
|
|
_, contains = tr.Get(blockToAccept)
|
|
require.False(contains)
|
|
|
|
require.Equal(uint8(consensustest.Rejected), blockToReject.Status())
|
|
_, contains = tr.Get(blockToReject)
|
|
require.False(contains)
|
|
|
|
require.Equal(uint8(consensustest.Rejected), blockToRejectChild.Status())
|
|
_, contains = tr.Get(blockToRejectChild)
|
|
require.False(contains)
|
|
}
|