@@ -9,16 +9,17 @@ import (
99 "github.com/ethereum/go-ethereum/common"
1010 "github.com/ethereum/go-ethereum/core"
1111 "github.com/ethereum/go-ethereum/core/types"
12- service2 "github.com/ethereum/go-ethereum/statediff/service"
12+ s "github.com/ethereum/go-ethereum/statediff/service"
1313 "github.com/ethereum/go-ethereum/statediff/testhelpers/mocks"
1414)
1515
1616func TestServiceLoop (t * testing.T ) {
17- testServiceLoop (t )
17+ testErrorInChainEventLoop (t )
18+ testErrorInBlockLoop (t )
1819}
1920
2021var (
21- eventsChannel = make (chan core.ChainEvent , 10 )
22+ eventsChannel = make (chan core.ChainEvent , 1 )
2223
2324 parentHeader1 = types.Header {Number : big .NewInt (rand .Int63 ())}
2425 parentHeader2 = types.Header {Number : big .NewInt (rand .Int63 ())}
@@ -31,29 +32,30 @@ var (
3132
3233 header1 = types.Header {ParentHash : parentHash1 }
3334 header2 = types.Header {ParentHash : parentHash2 }
35+ header3 = types.Header {ParentHash : common .HexToHash ("parent hash" )}
3436
3537 block1 = types .NewBlock (& header1 , nil , nil , nil )
3638 block2 = types .NewBlock (& header2 , nil , nil , nil )
39+ block3 = types .NewBlock (& header3 , nil , nil , nil )
3740
3841 event1 = core.ChainEvent {Block : block1 }
3942 event2 = core.ChainEvent {Block : block2 }
43+ event3 = core.ChainEvent {Block : block3 }
4044)
4145
42- func testServiceLoop (t * testing.T ) {
43- eventsChannel <- event1
44- eventsChannel <- event2
45-
46+ func testErrorInChainEventLoop (t * testing.T ) {
47+ //the first chain event causes and error (in blockchain mock)
4648 extractor := mocks.Extractor {}
47- close (eventsChannel )
4849
4950 blockChain := mocks.BlockChain {}
50- service := service2 .StateDiffService {
51+ service := s .StateDiffService {
5152 Builder : nil ,
5253 Extractor : & extractor ,
5354 BlockChain : & blockChain ,
5455 }
5556
56- blockChain .SetParentBlockToReturn ([]* types.Block {parentBlock1 , parentBlock2 })
57+ blockChain .SetParentBlocksToReturn ([]* types.Block {parentBlock1 , parentBlock2 })
58+ blockChain .SetChainEvents ([]core.ChainEvent {event1 , event2 , event3 })
5759 service .Loop (eventsChannel )
5860
5961 //parent and current blocks are passed to the extractor
@@ -75,3 +77,31 @@ func testServiceLoop(t *testing.T) {
7577 t .Logf ("Actual does not equal expected.\n actual:%+v\n expected: %+v" , blockChain .ParentHashesLookedUp , expectedHashes )
7678 }
7779}
80+
81+ func testErrorInBlockLoop (t * testing.T ) {
82+ //second block's parent block can't be found
83+ extractor := mocks.Extractor {}
84+
85+ blockChain := mocks.BlockChain {}
86+ service := s.StateDiffService {
87+ Builder : nil ,
88+ Extractor : & extractor ,
89+ BlockChain : & blockChain ,
90+ }
91+
92+ blockChain .SetParentBlocksToReturn ([]* types.Block {parentBlock1 , nil })
93+ blockChain .SetChainEvents ([]core.ChainEvent {event1 , event2 })
94+ service .Loop (eventsChannel )
95+
96+ //only the first current block (and it's parent) are passed to the extractor
97+ expectedCurrentBlocks := []types.Block {* block1 }
98+ if ! reflect .DeepEqual (extractor .CurrentBlocks , expectedCurrentBlocks ) {
99+ t .Error ("Test failure:" , t .Name ())
100+ t .Logf ("Actual does not equal expected.\n actual:%+v\n expected: %+v" , extractor .CurrentBlocks , expectedCurrentBlocks )
101+ }
102+ expectedParentBlocks := []types.Block {* parentBlock1 }
103+ if ! reflect .DeepEqual (extractor .ParentBlocks , expectedParentBlocks ) {
104+ t .Error ("Test failure:" , t .Name ())
105+ t .Logf ("Actual does not equal expected.\n actual:%+v\n expected: %+v" , extractor .CurrentBlocks , expectedParentBlocks )
106+ }
107+ }
0 commit comments