@@ -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,30 @@ 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+ cancelMonitor ()
133+
134+ // Verify final state
135+ finalBlockNumber , err := mockSyncState .GetSyncedBlockNumber (ctx )
136+ assert .NilError (t , err )
137+ assert .Equal (t , initialBlockNumber + 5 , finalBlockNumber , "block number should have been incremented correctly" )
118138}
119139
120140func TestSyncMonitor_SkipsWhenDKGIsRunning (t * testing.T ) {
@@ -165,7 +185,9 @@ func TestSyncMonitor_SkipsWhenDKGIsRunning(t *testing.T) {
165185 }
166186
167187 // Verify the block number hasn't changed
168- assert .Equal (t , initialBlockNumber , mockSyncState .blockNumber , "block number should remain unchanged" )
188+ finalBlockNumber , err := mockSyncState .GetSyncedBlockNumber (ctx )
189+ assert .NilError (t , err )
190+ assert .Equal (t , initialBlockNumber , finalBlockNumber , "block number should remain unchanged" )
169191}
170192
171193func TestSyncMonitor_RunsNormallyWhenNoEons (t * testing.T ) {
@@ -233,6 +255,7 @@ func TestSyncMonitor_ContinuesWhenNoRows(t *testing.T) {
233255 mockSyncState := & MockSyncState {
234256 err : pgx .ErrNoRows ,
235257 }
258+ mockSyncState .SetBlockNumber (0 ) // Initialize block number
236259
237260 monitor := & SyncMonitor {
238261 DBPool : dbpool ,
@@ -303,4 +326,9 @@ func TestSyncMonitor_RunsNormallyWithCompletedDKG(t *testing.T) {
303326 case <- time .After (1 * time .Second ):
304327 t .Fatalf ("expected monitor to throw error, but no error returned" )
305328 }
329+
330+ // Verify final state if needed
331+ finalBlockNumber , err := mockSyncState .GetSyncedBlockNumber (ctx )
332+ assert .NilError (t , err )
333+ assert .Equal (t , initialBlockNumber , finalBlockNumber )
306334}
0 commit comments