@@ -79,6 +79,77 @@ func TestNewReorgHandlerStartsFromConfiguredBlock(t *testing.T) {
7979 assert .Equal (t , big .NewInt (1000 ), handler .lastCheckedBlock )
8080}
8181
82+ func TestReorgHandlerRangeIsForwardLookingWhenItIsCatchingUp (t * testing.T ) {
83+ defer func () { config .Cfg = config.Config {} }()
84+ config .Cfg .ReorgHandler .BlocksPerScan = 50
85+
86+ mockRPC := mocks .NewMockIRPCClient (t )
87+ mockMainStorage := mocks .NewMockIMainStorage (t )
88+ mockOrchestratorStorage := mocks .NewMockIOrchestratorStorage (t )
89+
90+ mockStorage := storage.IStorage {
91+ MainStorage : mockMainStorage ,
92+ OrchestratorStorage : mockOrchestratorStorage ,
93+ }
94+
95+ mockRPC .EXPECT ().GetChainID ().Return (big .NewInt (1 ))
96+ mockOrchestratorStorage .EXPECT ().GetLastReorgCheckedBlockNumber (big .NewInt (1 )).Return (big .NewInt (0 ), nil )
97+ mockMainStorage .EXPECT ().GetMaxBlockNumber (big .NewInt (1 )).Return (big .NewInt (1000 ), nil )
98+ handler := NewReorgHandler (mockRPC , mockStorage )
99+
100+ fromBlock , toBlock , err := handler .getReorgCheckRange (big .NewInt (100 ))
101+ assert .NoError (t , err )
102+ assert .Equal (t , big .NewInt (100 ), fromBlock )
103+ assert .Equal (t , big .NewInt (150 ), toBlock )
104+ }
105+ func TestReorgHandlerRangeIsBackwardLookingWhenItIsCaughtUp (t * testing.T ) {
106+ defer func () { config .Cfg = config.Config {} }()
107+ config .Cfg .ReorgHandler .BlocksPerScan = 50
108+
109+ mockRPC := mocks .NewMockIRPCClient (t )
110+ mockMainStorage := mocks .NewMockIMainStorage (t )
111+ mockOrchestratorStorage := mocks .NewMockIOrchestratorStorage (t )
112+
113+ mockStorage := storage.IStorage {
114+ MainStorage : mockMainStorage ,
115+ OrchestratorStorage : mockOrchestratorStorage ,
116+ }
117+
118+ mockRPC .EXPECT ().GetChainID ().Return (big .NewInt (1 ))
119+ mockOrchestratorStorage .EXPECT ().GetLastReorgCheckedBlockNumber (big .NewInt (1 )).Return (big .NewInt (0 ), nil )
120+ mockMainStorage .EXPECT ().GetMaxBlockNumber (big .NewInt (1 )).Return (big .NewInt (1000 ), nil )
121+ handler := NewReorgHandler (mockRPC , mockStorage )
122+
123+ fromBlock , toBlock , err := handler .getReorgCheckRange (big .NewInt (990 ))
124+ assert .NoError (t , err )
125+ assert .Equal (t , big .NewInt (950 ), fromBlock )
126+ assert .Equal (t , big .NewInt (1000 ), toBlock )
127+ }
128+
129+ func TestReorgHandlerRangeStartIs0WhenRangeIsLargerThanProcessedBlocks (t * testing.T ) {
130+ defer func () { config .Cfg = config.Config {} }()
131+ config .Cfg .ReorgHandler .BlocksPerScan = 50
132+
133+ mockRPC := mocks .NewMockIRPCClient (t )
134+ mockMainStorage := mocks .NewMockIMainStorage (t )
135+ mockOrchestratorStorage := mocks .NewMockIOrchestratorStorage (t )
136+
137+ mockStorage := storage.IStorage {
138+ MainStorage : mockMainStorage ,
139+ OrchestratorStorage : mockOrchestratorStorage ,
140+ }
141+
142+ mockRPC .EXPECT ().GetChainID ().Return (big .NewInt (1 ))
143+ mockOrchestratorStorage .EXPECT ().GetLastReorgCheckedBlockNumber (big .NewInt (1 )).Return (big .NewInt (0 ), nil )
144+ mockMainStorage .EXPECT ().GetMaxBlockNumber (big .NewInt (1 )).Return (big .NewInt (10 ), nil )
145+ handler := NewReorgHandler (mockRPC , mockStorage )
146+
147+ fromBlock , toBlock , err := handler .getReorgCheckRange (big .NewInt (10 ))
148+ assert .NoError (t , err )
149+ assert .Equal (t , big .NewInt (0 ), fromBlock )
150+ assert .Equal (t , big .NewInt (10 ), toBlock )
151+ }
152+
82153func TestFindReorgEndIndex (t * testing.T ) {
83154 tests := []struct {
84155 name string
@@ -451,8 +522,9 @@ func TestStartReorgHandler(t *testing.T) {
451522 OrchestratorStorage : mockOrchestratorStorage ,
452523 }
453524
454- mockRPC .EXPECT ().GetChainID ().Return (big .NewInt (1 )).Times (5 )
525+ mockRPC .EXPECT ().GetChainID ().Return (big .NewInt (1 )).Times (7 )
455526 mockOrchestratorStorage .EXPECT ().GetLastReorgCheckedBlockNumber (big .NewInt (1 )).Return (big .NewInt (2000 ), nil ).Times (1 )
527+ mockMainStorage .EXPECT ().GetMaxBlockNumber (big .NewInt (1 )).Return (big .NewInt (100000 ), nil )
456528 handler := NewReorgHandler (mockRPC , mockStorage )
457529 handler .triggerInterval = 100 // Set a short interval for testing
458530
@@ -486,6 +558,7 @@ func TestHandleReorgWithSingleBlockReorg(t *testing.T) {
486558 mockRPC .EXPECT ().GetChainID ().Return (big .NewInt (1 ))
487559 mockRPC .EXPECT ().GetBlocksPerRequest ().Return (rpc.BlocksPerRequestConfig {Blocks : 100 })
488560 mockOrchestratorStorage .EXPECT ().GetLastReorgCheckedBlockNumber (big .NewInt (1 )).Return (big .NewInt (100 ), nil )
561+ mockMainStorage .EXPECT ().GetMaxBlockNumber (big .NewInt (1 )).Return (big .NewInt (1000 ), nil )
489562
490563 mockMainStorage .EXPECT ().GetBlockHeadersDescending (big .NewInt (1 ), big .NewInt (99 ), big .NewInt (109 )).Return ([]common.BlockHeader {
491564 {Number : big .NewInt (109 ), Hash : "hash109" , ParentHash : "hash108" },
@@ -543,6 +616,7 @@ func TestHandleReorgWithLatestBlockReorged(t *testing.T) {
543616 mockRPC .EXPECT ().GetChainID ().Return (big .NewInt (1 ))
544617 mockRPC .EXPECT ().GetBlocksPerRequest ().Return (rpc.BlocksPerRequestConfig {Blocks : 100 })
545618 mockOrchestratorStorage .EXPECT ().GetLastReorgCheckedBlockNumber (big .NewInt (1 )).Return (big .NewInt (100 ), nil )
619+ mockMainStorage .EXPECT ().GetMaxBlockNumber (big .NewInt (1 )).Return (big .NewInt (1000 ), nil )
546620
547621 mockMainStorage .EXPECT ().GetBlockHeadersDescending (big .NewInt (1 ), big .NewInt (99 ), big .NewInt (109 )).Return ([]common.BlockHeader {
548622 {Number : big .NewInt (109 ), Hash : "hash109" , ParentHash : "hash108" }, // <-- fork starts here
@@ -610,6 +684,7 @@ func TestHandleReorgWithManyBlocks(t *testing.T) {
610684 mockRPC .EXPECT ().GetChainID ().Return (big .NewInt (1 ))
611685 mockRPC .EXPECT ().GetBlocksPerRequest ().Return (rpc.BlocksPerRequestConfig {Blocks : 100 })
612686 mockOrchestratorStorage .EXPECT ().GetLastReorgCheckedBlockNumber (big .NewInt (1 )).Return (big .NewInt (100 ), nil )
687+ mockMainStorage .EXPECT ().GetMaxBlockNumber (big .NewInt (1 )).Return (big .NewInt (1000 ), nil )
613688
614689 mockMainStorage .EXPECT ().GetBlockHeadersDescending (big .NewInt (1 ), big .NewInt (99 ), big .NewInt (109 )).Return ([]common.BlockHeader {
615690 {Number : big .NewInt (109 ), Hash : "hash109" , ParentHash : "hash108" },
@@ -672,6 +747,7 @@ func TestHandleReorgWithDuplicateBlocks(t *testing.T) {
672747
673748 mockRPC .EXPECT ().GetChainID ().Return (big .NewInt (1 ))
674749 mockOrchestratorStorage .EXPECT ().GetLastReorgCheckedBlockNumber (big .NewInt (1 )).Return (big .NewInt (6268164 ), nil )
750+ mockMainStorage .EXPECT ().GetMaxBlockNumber (big .NewInt (1 )).Return (big .NewInt (10000000 ), nil )
675751
676752 mockMainStorage .EXPECT ().GetBlockHeadersDescending (big .NewInt (1 ), big .NewInt (6268162 ), big .NewInt (6268172 )).Return ([]common.BlockHeader {
677753 {Number : big .NewInt (6268172 ), Hash : "0x69d2044d27d2879c309fd885eb0c7d915c9aeed9b28df460d3b52cb4ccf888d8" , ParentHash : "0xbf44d12afe40ef30effa32ed45c8d26d854ffba1c8ad781117117e7d18ca157f" },
@@ -708,6 +784,7 @@ func TestNothingIsDoneForCorrectBlocks(t *testing.T) {
708784
709785 mockRPC .EXPECT ().GetChainID ().Return (big .NewInt (1 ))
710786 mockOrchestratorStorage .EXPECT ().GetLastReorgCheckedBlockNumber (big .NewInt (1 )).Return (big .NewInt (6268164 ), nil )
787+ mockMainStorage .EXPECT ().GetMaxBlockNumber (big .NewInt (1 )).Return (big .NewInt (10000000 ), nil )
711788
712789 mockMainStorage .EXPECT ().GetBlockHeadersDescending (big .NewInt (1 ), big .NewInt (6268163 ), big .NewInt (6268173 )).Return ([]common.BlockHeader {
713790 {Number : big .NewInt (6268173 ), Hash : "0xa281ed679e6f7d0ede5fffdd3528348f303bc456d8d83e6bbe7ad0708f8f9b10" , ParentHash : "0x69d2044d27d2879c309fd885eb0c7d915c9aeed9b28df460d3b52cb4ccf888d8" },
0 commit comments