@@ -2,6 +2,7 @@ package syncmonitor
2
2
3
3
import (
4
4
"context"
5
+ "sync"
5
6
"testing"
6
7
"time"
7
8
@@ -16,14 +17,23 @@ import (
16
17
17
18
// MockSyncState is a mock implementation of BlockSyncState for testing.
18
19
type MockSyncState struct {
20
+ mu sync.Mutex
19
21
blockNumber int64
20
22
err error
21
23
}
22
24
23
25
func (m * MockSyncState ) GetSyncedBlockNumber (_ context.Context ) (int64 , error ) {
26
+ m .mu .Lock ()
27
+ defer m .mu .Unlock ()
24
28
return m .blockNumber , m .err
25
29
}
26
30
31
+ func (m * MockSyncState ) SetBlockNumber (n int64 ) {
32
+ m .mu .Lock ()
33
+ defer m .mu .Unlock ()
34
+ m .blockNumber = n
35
+ }
36
+
27
37
func setupTestData (ctx context.Context , t * testing.T , dbpool * pgxpool.Pool ) {
28
38
t .Helper ()
29
39
keyperdb := database .New (dbpool )
@@ -78,6 +88,11 @@ func TestSyncMonitor_ThrowsErrorWhenBlockNotIncreasing(t *testing.T) {
78
88
case <- time .After (5 * time .Second ):
79
89
t .Fatal ("expected an error, but none was returned" )
80
90
}
91
+
92
+ // Verify final state
93
+ finalBlockNumber , err := mockSyncState .GetSyncedBlockNumber (ctx )
94
+ assert .NilError (t , err )
95
+ assert .Equal (t , initialBlockNumber , finalBlockNumber )
81
96
}
82
97
83
98
func TestSyncMonitor_HandlesBlockNumberIncreasing (t * testing.T ) {
@@ -96,25 +111,30 @@ func TestSyncMonitor_HandlesBlockNumberIncreasing(t *testing.T) {
96
111
97
112
monitor := & SyncMonitor {
98
113
DBPool : dbpool ,
99
- CheckInterval : 5 * time .Second ,
114
+ CheckInterval : 200 * time .Millisecond ,
100
115
SyncState : mockSyncState ,
101
116
}
102
117
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 )
107
120
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
111
123
}
112
-
113
- doneCh <- struct {}{}
114
124
}()
115
125
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" )
118
138
}
119
139
120
140
func TestSyncMonitor_SkipsWhenDKGIsRunning (t * testing.T ) {
@@ -165,7 +185,9 @@ func TestSyncMonitor_SkipsWhenDKGIsRunning(t *testing.T) {
165
185
}
166
186
167
187
// 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" )
169
191
}
170
192
171
193
func TestSyncMonitor_RunsNormallyWhenNoEons (t * testing.T ) {
@@ -233,6 +255,7 @@ func TestSyncMonitor_ContinuesWhenNoRows(t *testing.T) {
233
255
mockSyncState := & MockSyncState {
234
256
err : pgx .ErrNoRows ,
235
257
}
258
+ mockSyncState .SetBlockNumber (0 ) // Initialize block number
236
259
237
260
monitor := & SyncMonitor {
238
261
DBPool : dbpool ,
@@ -303,4 +326,9 @@ func TestSyncMonitor_RunsNormallyWithCompletedDKG(t *testing.T) {
303
326
case <- time .After (1 * time .Second ):
304
327
t .Fatalf ("expected monitor to throw error, but no error returned" )
305
328
}
329
+
330
+ // Verify final state if needed
331
+ finalBlockNumber , err := mockSyncState .GetSyncedBlockNumber (ctx )
332
+ assert .NilError (t , err )
333
+ assert .Equal (t , initialBlockNumber , finalBlockNumber )
306
334
}
0 commit comments