// Copyright 2018 The dexon-consensus-core Authors // This file is part of the dexon-consensus-core library. // // The dexon-consensus-core library is free software: you can redistribute it // and/or modify it under the terms of the GNU Lesser General Public License as // published by the Free Software Foundation, either version 3 of the License, // or (at your option) any later version. // // The dexon-consensus-core library is distributed in the hope that it will be // useful, but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser // General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with the dexon-consensus-core library. If not, see // . package types import ( "sort" "testing" "github.com/dexon-foundation/dexon-consensus-core/common" "github.com/stretchr/testify/suite" ) type BlockTestSuite struct { suite.Suite } func (s *BlockTestSuite) TestSortByHash() { hash := common.Hash{} copy(hash[:], "aaaaaa") b0 := &Block{Hash: hash} copy(hash[:], "bbbbbb") b1 := &Block{Hash: hash} copy(hash[:], "cccccc") b2 := &Block{Hash: hash} copy(hash[:], "dddddd") b3 := &Block{Hash: hash} blocks := []*Block{b3, b2, b1, b0} sort.Sort(ByHash(blocks)) s.Equal(blocks[0].Hash, b0.Hash) s.Equal(blocks[1].Hash, b1.Hash) s.Equal(blocks[2].Hash, b2.Hash) s.Equal(blocks[3].Hash, b3.Hash) } func (s *BlockTestSuite) TestSortByHeight() { b0 := &Block{Position: Position{Height: 0}} b1 := &Block{Position: Position{Height: 1}} b2 := &Block{Position: Position{Height: 2}} b3 := &Block{Position: Position{Height: 3}} blocks := []*Block{b3, b2, b1, b0} sort.Sort(ByHeight(blocks)) s.Equal(blocks[0].Hash, b0.Hash) s.Equal(blocks[1].Hash, b1.Hash) s.Equal(blocks[2].Hash, b2.Hash) s.Equal(blocks[3].Hash, b3.Hash) } func (s *BlockTestSuite) TestGenesisBlock() { b0 := &Block{ Position: Position{ Height: 0, }, ParentHash: common.Hash{}, } s.True(b0.IsGenesis()) b1 := &Block{ Position: Position{ Height: 1, }, ParentHash: common.Hash{}, } s.False(b1.IsGenesis()) b2 := &Block{ Position: Position{ Height: 0, }, ParentHash: common.NewRandomHash(), } s.False(b2.IsGenesis()) } func (s *BlockTestSuite) TestIsAcking() { // This test case would check if types.Block.IsAcking works ack0 := common.NewRandomHash() acks0 := common.Hashes{ ack0, common.NewRandomHash(), common.NewRandomHash(), } b0 := &Block{Acks: common.NewSortedHashes(acks0)} s.True(b0.IsAcking(ack0)) s.False(b0.IsAcking(common.Hash{})) s.False(b0.IsAcking(common.NewRandomHash())) } func TestBlock(t *testing.T) { suite.Run(t, new(BlockTestSuite)) }