@@ -24,6 +24,7 @@ func setupTestData(ctx context.Context, t *testing.T, dbpool *pgxpool.Pool, bloc
24
24
err := keyperdb .InsertBatchConfig (ctx , keyperDB.InsertBatchConfigParams {
25
25
KeyperConfigIndex : 1 ,
26
26
Keypers : []string {},
27
+ Height : 50 ,
27
28
})
28
29
assert .NilError (t , err )
29
30
@@ -34,6 +35,12 @@ func setupTestData(ctx context.Context, t *testing.T, dbpool *pgxpool.Pool, bloc
34
35
})
35
36
assert .NilError (t , err )
36
37
38
+ // Set up TMSyncMeta
39
+ err = keyperdb .TMSetSyncMeta (ctx , keyperDB.TMSetSyncMetaParams {
40
+ LastCommittedHeight : 100 ,
41
+ })
42
+ assert .NilError (t , err )
43
+
37
44
// Set up initial block
38
45
err = db .SetIdentityRegisteredEventSyncedUntil (ctx , database.SetIdentityRegisteredEventSyncedUntilParams {
39
46
BlockHash : []byte {0x01 , 0x02 , 0x03 },
@@ -183,6 +190,13 @@ func TestAPISyncMonitor_ContinuesWhenNoDKGResult(t *testing.T) {
183
190
err := keyperdb .InsertBatchConfig (ctx , keyperDB.InsertBatchConfigParams {
184
191
KeyperConfigIndex : 1 ,
185
192
Keypers : []string {},
193
+ Height : 50 ,
194
+ })
195
+ assert .NilError (t , err )
196
+
197
+ // Set up TMSyncMeta
198
+ err = keyperdb .TMSetSyncMeta (ctx , keyperDB.TMSetSyncMetaParams {
199
+ LastCommittedHeight : 100 ,
186
200
})
187
201
assert .NilError (t , err )
188
202
@@ -275,3 +289,73 @@ func TestAPISyncMonitor_ContinuesWhenNoBatchConfig(t *testing.T) {
275
289
assert .NilError (t , err )
276
290
assert .Equal (t , initialBlockNumber , syncedData .BlockNumber , "block number should remain unchanged" )
277
291
}
292
+
293
+ func TestAPISyncMonitor_ContinuesWhenNoTMSyncMeta (t * testing.T ) {
294
+ ctx , cancel := context .WithCancel (context .Background ())
295
+ defer cancel ()
296
+
297
+ dbpool , closeDB := testsetup .NewTestDBPool (ctx , t , database .Definition )
298
+ defer closeDB ()
299
+ db := database .New (dbpool )
300
+ keyperdb := keyperDB .New (dbpool )
301
+
302
+ batchConfigHeight := int64 (50 )
303
+ // Set TMSyncData height to be less than batchConfigHeight + DKGStartBlockDelta
304
+ // This simulates a scenario where DKG hasn't started yet
305
+ tmSyncHeight := int64 (60 )
306
+
307
+ // Set up batch config
308
+ err := keyperdb .InsertBatchConfig (ctx , keyperDB.InsertBatchConfigParams {
309
+ KeyperConfigIndex : 1 ,
310
+ Keypers : []string {},
311
+ Height : batchConfigHeight ,
312
+ })
313
+ assert .NilError (t , err )
314
+
315
+ // Set up TMSyncMeta with lower height
316
+ err = keyperdb .TMSetSyncMeta (ctx , keyperDB.TMSetSyncMetaParams {
317
+ LastCommittedHeight : tmSyncHeight ,
318
+ })
319
+ assert .NilError (t , err )
320
+
321
+ // Set up initial block data
322
+ initialBlockNumber := int64 (100 )
323
+ err = db .SetIdentityRegisteredEventSyncedUntil (ctx , database.SetIdentityRegisteredEventSyncedUntilParams {
324
+ BlockHash : []byte {0x01 , 0x02 , 0x03 },
325
+ BlockNumber : initialBlockNumber ,
326
+ })
327
+ assert .NilError (t , err )
328
+
329
+ monitor := & shutterservice.SyncMonitor {
330
+ DBPool : dbpool ,
331
+ CheckInterval : 5 * time .Second ,
332
+ DKGStartBlockDelta : 5 ,
333
+ }
334
+
335
+ monitorCtx , cancelMonitor := context .WithCancel (ctx )
336
+ defer cancelMonitor ()
337
+
338
+ errCh := make (chan error , 1 )
339
+ go func () {
340
+ err := service .RunWithSighandler (monitorCtx , monitor )
341
+ if err != nil {
342
+ errCh <- err
343
+ }
344
+ }()
345
+
346
+ // Let it run for a while
347
+ time .Sleep (15 * time .Second )
348
+ cancelMonitor ()
349
+
350
+ select {
351
+ case err := <- errCh :
352
+ t .Fatalf ("expected monitor to continue without error, but got: %v" , err )
353
+ case <- time .After (1 * time .Second ):
354
+ // Test passes if no error is received
355
+ }
356
+
357
+ // Verify the block number hasn't changed
358
+ syncedData , err := db .GetIdentityRegisteredEventsSyncedUntil (ctx )
359
+ assert .NilError (t , err )
360
+ assert .Equal (t , initialBlockNumber , syncedData .BlockNumber , "block number should remain unchanged" )
361
+ }
0 commit comments