@@ -7,37 +7,56 @@ import (
7
7
8
8
"gotest.tools/assert"
9
9
10
+ "github.com/jackc/pgx/v4/pgxpool"
11
+ keyperDB "github.com/shutter-network/rolling-shutter/rolling-shutter/keyper/database"
10
12
"github.com/shutter-network/rolling-shutter/rolling-shutter/keyperimpl/shutterservice"
11
13
"github.com/shutter-network/rolling-shutter/rolling-shutter/keyperimpl/shutterservice/database"
12
14
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/service"
13
15
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/testsetup"
14
16
)
15
17
18
+ func setupTestData (ctx context.Context , t * testing.T , dbpool * pgxpool.Pool , blockNumber int64 ) {
19
+ db := database .New (dbpool )
20
+ keyperdb := keyperDB .New (dbpool )
21
+
22
+ // Set up batch config
23
+ err := keyperdb .InsertBatchConfig (ctx , keyperDB.InsertBatchConfigParams {
24
+ KeyperConfigIndex : 1 ,
25
+ Keypers : []string {},
26
+ })
27
+ assert .NilError (t , err )
28
+
29
+ // Set up DKG result
30
+ err = keyperdb .InsertDKGResult (ctx , keyperDB.InsertDKGResultParams {
31
+ Eon : 1 ,
32
+ Success : true ,
33
+ })
34
+ assert .NilError (t , err )
35
+
36
+ // Set up initial block
37
+ err = db .SetIdentityRegisteredEventSyncedUntil (ctx , database.SetIdentityRegisteredEventSyncedUntilParams {
38
+ BlockHash : []byte {0x01 , 0x02 , 0x03 },
39
+ BlockNumber : blockNumber ,
40
+ })
41
+ assert .NilError (t , err )
42
+ }
43
+
16
44
func TestAPISyncMonitor_ThrowsErrorWhenBlockNotIncreasing (t * testing.T ) {
17
45
ctx , cancel := context .WithCancel (context .Background ())
18
46
defer cancel ()
19
47
20
48
dbpool , dbclose := testsetup .NewTestDBPool (ctx , t , database .Definition )
21
49
defer dbclose ()
22
- db := database .New (dbpool )
23
50
24
51
initialBlockNumber := int64 (100 )
25
-
26
- err := db .SetIdentityRegisteredEventSyncedUntil (ctx , database.SetIdentityRegisteredEventSyncedUntilParams {
27
- BlockHash : []byte {0x01 , 0x02 , 0x03 },
28
- BlockNumber : initialBlockNumber ,
29
- })
30
- if err != nil {
31
- t .Fatalf ("failed to set initial synced data: %v" , err )
32
- }
52
+ setupTestData (ctx , t , dbpool , initialBlockNumber )
33
53
34
54
monitor := & shutterservice.SyncMonitor {
35
55
DBPool : dbpool ,
36
56
CheckInterval : 5 * time .Second ,
37
57
}
38
58
39
59
errCh := make (chan error , 1 )
40
-
41
60
go func () {
42
61
err := service .RunWithSighandler (ctx , monitor )
43
62
if err != nil {
@@ -49,7 +68,7 @@ func TestAPISyncMonitor_ThrowsErrorWhenBlockNotIncreasing(t *testing.T) {
49
68
50
69
select {
51
70
case err := <- errCh :
52
- assert .ErrorContains (t , err , "block number has not increased between checks" )
71
+ assert .ErrorContains (t , err , shutterservice . ErrBlockNotIncreasing . Error () )
53
72
case <- time .After (5 * time .Second ):
54
73
t .Fatal ("expected an error, but none was returned" )
55
74
}
@@ -64,13 +83,7 @@ func TestAPISyncMonitor_HandlesBlockNumberIncreasing(t *testing.T) {
64
83
db := database .New (dbpool )
65
84
66
85
initialBlockNumber := int64 (100 )
67
- err := db .SetIdentityRegisteredEventSyncedUntil (ctx , database.SetIdentityRegisteredEventSyncedUntilParams {
68
- BlockHash : []byte {0x01 , 0x02 , 0x03 },
69
- BlockNumber : initialBlockNumber ,
70
- })
71
- if err != nil {
72
- t .Fatalf ("failed to set initial synced data: %v" , err )
73
- }
86
+ setupTestData (ctx , t , dbpool , initialBlockNumber )
74
87
75
88
monitor := & shutterservice.SyncMonitor {
76
89
DBPool : dbpool ,
@@ -114,7 +127,21 @@ func TestAPISyncMonitor_ContinuesWhenNoRows(t *testing.T) {
114
127
115
128
dbpool , closeDB := testsetup .NewTestDBPool (ctx , t , database .Definition )
116
129
defer closeDB ()
117
- _ = database .New (dbpool )
130
+
131
+ // Only set up keyper set and DKG result, but no block data
132
+ keyperdb := keyperDB .New (dbpool )
133
+
134
+ err := keyperdb .InsertBatchConfig (ctx , keyperDB.InsertBatchConfigParams {
135
+ KeyperConfigIndex : 1 ,
136
+ Keypers : []string {},
137
+ })
138
+ assert .NilError (t , err )
139
+
140
+ err = keyperdb .InsertDKGResult (ctx , keyperDB.InsertDKGResultParams {
141
+ Eon : 1 ,
142
+ Success : true ,
143
+ })
144
+ assert .NilError (t , err )
118
145
119
146
monitor := & shutterservice.SyncMonitor {
120
147
DBPool : dbpool ,
@@ -141,3 +168,109 @@ func TestAPISyncMonitor_ContinuesWhenNoRows(t *testing.T) {
141
168
case <- time .After (1 * time .Second ):
142
169
}
143
170
}
171
+
172
+ func TestAPISyncMonitor_ContinuesWhenNoDKGResult (t * testing.T ) {
173
+ ctx , cancel := context .WithCancel (context .Background ())
174
+ defer cancel ()
175
+
176
+ dbpool , closeDB := testsetup .NewTestDBPool (ctx , t , database .Definition )
177
+ defer closeDB ()
178
+ db := database .New (dbpool )
179
+ keyperdb := keyperDB .New (dbpool )
180
+
181
+ // Set up batch config, but no DKG result
182
+ err := keyperdb .InsertBatchConfig (ctx , keyperDB.InsertBatchConfigParams {
183
+ KeyperConfigIndex : 1 ,
184
+ Keypers : []string {},
185
+ })
186
+ assert .NilError (t , err )
187
+
188
+ // Set up initial block data
189
+ initialBlockNumber := int64 (100 )
190
+ err = db .SetIdentityRegisteredEventSyncedUntil (ctx , database.SetIdentityRegisteredEventSyncedUntilParams {
191
+ BlockHash : []byte {0x01 , 0x02 , 0x03 },
192
+ BlockNumber : initialBlockNumber ,
193
+ })
194
+ assert .NilError (t , err )
195
+
196
+ monitor := & shutterservice.SyncMonitor {
197
+ DBPool : dbpool ,
198
+ CheckInterval : 5 * time .Second ,
199
+ }
200
+
201
+ monitorCtx , cancelMonitor := context .WithCancel (ctx )
202
+ defer cancelMonitor ()
203
+
204
+ errCh := make (chan error , 1 )
205
+ go func () {
206
+ err := service .RunWithSighandler (monitorCtx , monitor )
207
+ if err != nil {
208
+ errCh <- err
209
+ }
210
+ }()
211
+
212
+ // Let it run for a while without incrementing the block number
213
+ time .Sleep (15 * time .Second )
214
+ cancelMonitor ()
215
+
216
+ select {
217
+ case err := <- errCh :
218
+ t .Fatalf ("expected monitor to continue without error, but got: %v" , err )
219
+ case <- time .After (1 * time .Second ):
220
+ // Test passes if no error is received
221
+ }
222
+
223
+ // Verify the block number hasn't changed
224
+ syncedData , err := db .GetIdentityRegisteredEventsSyncedUntil (ctx )
225
+ assert .NilError (t , err )
226
+ assert .Equal (t , initialBlockNumber , syncedData .BlockNumber , "block number should remain unchanged" )
227
+ }
228
+
229
+ func TestAPISyncMonitor_ContinuesWhenNoBatchConfig (t * testing.T ) {
230
+ ctx , cancel := context .WithCancel (context .Background ())
231
+ defer cancel ()
232
+
233
+ dbpool , closeDB := testsetup .NewTestDBPool (ctx , t , database .Definition )
234
+ defer closeDB ()
235
+ db := database .New (dbpool )
236
+
237
+ // Only set up initial block data, no keyper set
238
+ initialBlockNumber := int64 (100 )
239
+ err := db .SetIdentityRegisteredEventSyncedUntil (ctx , database.SetIdentityRegisteredEventSyncedUntilParams {
240
+ BlockHash : []byte {0x01 , 0x02 , 0x03 },
241
+ BlockNumber : initialBlockNumber ,
242
+ })
243
+ assert .NilError (t , err )
244
+
245
+ monitor := & shutterservice.SyncMonitor {
246
+ DBPool : dbpool ,
247
+ CheckInterval : 5 * time .Second ,
248
+ }
249
+
250
+ monitorCtx , cancelMonitor := context .WithCancel (ctx )
251
+ defer cancelMonitor ()
252
+
253
+ errCh := make (chan error , 1 )
254
+ go func () {
255
+ err := service .RunWithSighandler (monitorCtx , monitor )
256
+ if err != nil {
257
+ errCh <- err
258
+ }
259
+ }()
260
+
261
+ // Let it run for a while without incrementing the block number
262
+ time .Sleep (15 * time .Second )
263
+ cancelMonitor ()
264
+
265
+ select {
266
+ case err := <- errCh :
267
+ t .Fatalf ("expected monitor to continue without error, but got: %v" , err )
268
+ case <- time .After (1 * time .Second ):
269
+ // Test passes if no error is received
270
+ }
271
+
272
+ // Verify the block number hasn't changed
273
+ syncedData , err := db .GetIdentityRegisteredEventsSyncedUntil (ctx )
274
+ assert .NilError (t , err )
275
+ assert .Equal (t , initialBlockNumber , syncedData .BlockNumber , "block number should remain unchanged" )
276
+ }
0 commit comments