@@ -2,6 +2,7 @@ package syncmonitor
22
33import (
44 "context"
5+ "sync"
56 "testing"
67 "time"
78
@@ -16,14 +17,23 @@ import (
1617
1718// MockSyncState is a mock implementation of BlockSyncState for testing.
1819type MockSyncState struct {
20+ mu sync.Mutex
1921 blockNumber int64
2022 err error
2123}
2224
2325func (m * MockSyncState ) GetSyncedBlockNumber (_ context.Context ) (int64 , error ) {
26+ m .mu .Lock ()
27+ defer m .mu .Unlock ()
2428 return m .blockNumber , m .err
2529}
2630
31+ func (m * MockSyncState ) SetBlockNumber (n int64 ) {
32+ m .mu .Lock ()
33+ defer m .mu .Unlock ()
34+ m .blockNumber = n
35+ }
36+
2737func setupTestData (ctx context.Context , t * testing.T , dbpool * pgxpool.Pool ) {
2838 t .Helper ()
2939 keyperdb := database .New (dbpool )
@@ -78,6 +88,11 @@ func TestSyncMonitor_ThrowsErrorWhenBlockNotIncreasing(t *testing.T) {
7888 case <- time .After (5 * time .Second ):
7989 t .Fatal ("expected an error, but none was returned" )
8090 }
91+
92+ // Verify final state
93+ finalBlockNumber , err := mockSyncState .GetSyncedBlockNumber (ctx )
94+ assert .NilError (t , err )
95+ assert .Equal (t , initialBlockNumber , finalBlockNumber )
8196}
8297
8398func TestSyncMonitor_HandlesBlockNumberIncreasing (t * testing.T ) {
@@ -96,25 +111,31 @@ func TestSyncMonitor_HandlesBlockNumberIncreasing(t *testing.T) {
96111
97112 monitor := & SyncMonitor {
98113 DBPool : dbpool ,
99- CheckInterval : 5 * time .Second ,
114+ CheckInterval : 200 * time .Millisecond ,
100115 SyncState : mockSyncState ,
101116 }
102117
103- _ , deferFn := service .RunBackground (ctx , monitor )
104- defer deferFn ()
105-
106- doneCh := make (chan struct {})
118+ monitorCtx , cancelMonitor := context .WithCancel (ctx )
119+ errCh := make (chan error , 1 )
107120 go func () {
108- for i := 0 ; i < 5 ; i ++ {
109- time .Sleep (5 * time .Second )
110- mockSyncState .blockNumber = initialBlockNumber + int64 (i + 1 )
121+ if err := service .RunWithSighandler (monitorCtx , monitor ); err != nil {
122+ errCh <- err
111123 }
112-
113- doneCh <- struct {}{}
114124 }()
115125
116- <- doneCh
117- assert .Equal (t , initialBlockNumber + 5 , mockSyncState .blockNumber , "block number should have been incremented correctly" )
126+ // Update block numbers more quickly
127+ for i := 0 ; i < 5 ; i ++ {
128+ time .Sleep (200 * time .Millisecond )
129+ mockSyncState .SetBlockNumber (initialBlockNumber + int64 (i + 1 ))
130+
131+ }
132+
133+ cancelMonitor ()
134+
135+ // Verify final state
136+ finalBlockNumber , err := mockSyncState .GetSyncedBlockNumber (ctx )
137+ assert .NilError (t , err )
138+ assert .Equal (t , initialBlockNumber + 5 , finalBlockNumber , "block number should have been incremented correctly" )
118139}
119140
120141func TestSyncMonitor_SkipsWhenDKGIsRunning (t * testing.T ) {
@@ -165,7 +186,9 @@ func TestSyncMonitor_SkipsWhenDKGIsRunning(t *testing.T) {
165186 }
166187
167188 // Verify the block number hasn't changed
168- assert .Equal (t , initialBlockNumber , mockSyncState .blockNumber , "block number should remain unchanged" )
189+ finalBlockNumber , err := mockSyncState .GetSyncedBlockNumber (ctx )
190+ assert .NilError (t , err )
191+ assert .Equal (t , initialBlockNumber , finalBlockNumber , "block number should remain unchanged" )
169192}
170193
171194func TestSyncMonitor_RunsNormallyWhenNoEons (t * testing.T ) {
@@ -233,6 +256,7 @@ func TestSyncMonitor_ContinuesWhenNoRows(t *testing.T) {
233256 mockSyncState := & MockSyncState {
234257 err : pgx .ErrNoRows ,
235258 }
259+ mockSyncState .SetBlockNumber (0 ) // Initialize block number
236260
237261 monitor := & SyncMonitor {
238262 DBPool : dbpool ,
@@ -303,4 +327,9 @@ func TestSyncMonitor_RunsNormallyWithCompletedDKG(t *testing.T) {
303327 case <- time .After (1 * time .Second ):
304328 t .Fatalf ("expected monitor to throw error, but no error returned" )
305329 }
330+
331+ // Verify final state if needed
332+ finalBlockNumber , err := mockSyncState .GetSyncedBlockNumber (ctx )
333+ assert .NilError (t , err )
334+ assert .Equal (t , initialBlockNumber , finalBlockNumber )
306335}
0 commit comments