@@ -64,6 +64,7 @@ func TestApis(t *testing.T) {
64
64
t .Run ("TestHandshake" , testHandshake )
65
65
t .Run ("TestFailedHandshake" , testFailedHandshake )
66
66
t .Run ("TestSeveralConnections" , testSeveralConnections )
67
+ t .Run ("TestValidProof" , testValidProof )
67
68
t .Run ("TestInvalidProof" , testInvalidProof )
68
69
t .Run ("TestIdleRollerSelection" , testIdleRollerSelection )
69
70
// TODO: Restart roller alone when received task, can add this test case in integration-test.
@@ -85,7 +86,7 @@ func testHandshake(t *testing.T) {
85
86
86
87
// Setup coordinator and ws server.
87
88
wsURL := "ws://" + randomURL ()
88
- rollerManager , handler := setupCoordinator (t , cfg .DBConfig , wsURL )
89
+ rollerManager , handler := setupCoordinator (t , cfg .DBConfig , 1 , wsURL )
89
90
defer func () {
90
91
handler .Shutdown (context .Background ())
91
92
rollerManager .Stop ()
@@ -106,7 +107,7 @@ func testFailedHandshake(t *testing.T) {
106
107
107
108
// Setup coordinator and ws server.
108
109
wsURL := "ws://" + randomURL ()
109
- rollerManager , handler := setupCoordinator (t , cfg .DBConfig , wsURL )
110
+ rollerManager , handler := setupCoordinator (t , cfg .DBConfig , 1 , wsURL )
110
111
defer func () {
111
112
handler .Shutdown (context .Background ())
112
113
rollerManager .Stop ()
@@ -172,7 +173,7 @@ func testSeveralConnections(t *testing.T) {
172
173
173
174
// Setup coordinator and ws server.
174
175
wsURL := "ws://" + randomURL ()
175
- rollerManager , handler := setupCoordinator (t , cfg .DBConfig , wsURL )
176
+ rollerManager , handler := setupCoordinator (t , cfg .DBConfig , 1 , wsURL )
176
177
defer func () {
177
178
handler .Shutdown (context .Background ())
178
179
rollerManager .Stop ()
@@ -216,6 +217,65 @@ func testSeveralConnections(t *testing.T) {
216
217
}
217
218
}
218
219
}
220
+ func testValidProof (t * testing.T ) {
221
+ // Create db handler and reset db.
222
+ l2db , err := database .NewOrmFactory (cfg .DBConfig )
223
+ assert .NoError (t , err )
224
+ assert .NoError (t , migrate .ResetDB (l2db .GetDB ().DB ))
225
+ defer l2db .Close ()
226
+
227
+ // Setup coordinator and ws server.
228
+ wsURL := "ws://" + randomURL ()
229
+ rollerManager , handler := setupCoordinator (t , cfg .DBConfig , 3 , wsURL )
230
+ defer func () {
231
+ handler .Shutdown (context .Background ())
232
+ rollerManager .Stop ()
233
+ }()
234
+
235
+ // create mock rollers.
236
+ rollers := make ([]* mockRoller , 3 )
237
+ for i := 0 ; i < len (rollers ); i ++ {
238
+ rollers [i ] = newMockRoller (t , "roller_test" + strconv .Itoa (i ), wsURL )
239
+ // only roller 0 submits valid proof.
240
+ rollers [i ].waitTaskAndSendProof (t , time .Second , false , i == 0 )
241
+ }
242
+ defer func () {
243
+ // close connection
244
+ for _ , roller := range rollers {
245
+ roller .close ()
246
+ }
247
+ }()
248
+ assert .Equal (t , 3 , rollerManager .GetNumberOfIdleRollers ())
249
+
250
+ var ids = make ([]string , 1 )
251
+ dbTx , err := l2db .Beginx ()
252
+ assert .NoError (t , err )
253
+ for i := range ids {
254
+ ID , err := l2db .NewBatchInDBTx (dbTx , & orm.BlockInfo {Number : uint64 (i )}, & orm.BlockInfo {Number : uint64 (i )}, "0f" , 1 , 194676 )
255
+ assert .NoError (t , err )
256
+ ids [i ] = ID
257
+ }
258
+ assert .NoError (t , dbTx .Commit ())
259
+
260
+ // verify proof status
261
+ var (
262
+ tick = time .Tick (500 * time .Millisecond )
263
+ tickStop = time .Tick (10 * time .Second )
264
+ )
265
+ for len (ids ) > 0 {
266
+ select {
267
+ case <- tick :
268
+ status , err := l2db .GetProvingStatusByID (ids [0 ])
269
+ assert .NoError (t , err )
270
+ if status == orm .ProvingTaskVerified {
271
+ ids = ids [1 :]
272
+ }
273
+ case <- tickStop :
274
+ t .Error ("failed to check proof status" )
275
+ return
276
+ }
277
+ }
278
+ }
219
279
220
280
func testInvalidProof (t * testing.T ) {
221
281
// Create db handler and reset db.
@@ -226,18 +286,25 @@ func testInvalidProof(t *testing.T) {
226
286
227
287
// Setup coordinator and ws server.
228
288
wsURL := "ws://" + randomURL ()
229
- rollerManager , handler := setupCoordinator (t , cfg .DBConfig , wsURL )
289
+ rollerManager , handler := setupCoordinator (t , cfg .DBConfig , 3 , wsURL )
230
290
defer func () {
231
291
handler .Shutdown (context .Background ())
232
292
rollerManager .Stop ()
233
293
}()
234
294
235
295
// create mock rollers.
236
- roller := newMockRoller (t , "roller_test" , wsURL )
237
- roller .waitTaskAndSendProof (t , time .Second , false , false )
238
- defer roller .close ()
239
-
240
- assert .Equal (t , 1 , rollerManager .GetNumberOfIdleRollers ())
296
+ rollers := make ([]* mockRoller , 3 )
297
+ for i := 0 ; i < len (rollers ); i ++ {
298
+ rollers [i ] = newMockRoller (t , "roller_test" + strconv .Itoa (i ), wsURL )
299
+ rollers [i ].waitTaskAndSendProof (t , time .Second , false , false )
300
+ }
301
+ defer func () {
302
+ // close connection
303
+ for _ , roller := range rollers {
304
+ roller .close ()
305
+ }
306
+ }()
307
+ assert .Equal (t , 3 , rollerManager .GetNumberOfIdleRollers ())
241
308
242
309
var ids = make ([]string , 1 )
243
310
dbTx , err := l2db .Beginx ()
@@ -278,7 +345,7 @@ func testIdleRollerSelection(t *testing.T) {
278
345
279
346
// Setup coordinator and ws server.
280
347
wsURL := "ws://" + randomURL ()
281
- rollerManager , handler := setupCoordinator (t , cfg .DBConfig , wsURL )
348
+ rollerManager , handler := setupCoordinator (t , cfg .DBConfig , 1 , wsURL )
282
349
defer func () {
283
350
handler .Shutdown (context .Background ())
284
351
rollerManager .Stop ()
@@ -347,7 +414,7 @@ func testGracefulRestart(t *testing.T) {
347
414
348
415
// Setup coordinator and ws server.
349
416
wsURL := "ws://" + randomURL ()
350
- rollerManager , handler := setupCoordinator (t , cfg .DBConfig , wsURL )
417
+ rollerManager , handler := setupCoordinator (t , cfg .DBConfig , 1 , wsURL )
351
418
352
419
// create mock roller
353
420
roller := newMockRoller (t , "roller_test" , wsURL )
@@ -364,7 +431,7 @@ func testGracefulRestart(t *testing.T) {
364
431
rollerManager .Stop ()
365
432
366
433
// Setup new coordinator and ws server.
367
- newRollerManager , newHandler := setupCoordinator (t , cfg .DBConfig , wsURL )
434
+ newRollerManager , newHandler := setupCoordinator (t , cfg .DBConfig , 1 , wsURL )
368
435
defer func () {
369
436
newHandler .Shutdown (context .Background ())
370
437
newRollerManager .Stop ()
@@ -408,13 +475,13 @@ func testGracefulRestart(t *testing.T) {
408
475
}
409
476
}
410
477
411
- func setupCoordinator (t * testing.T , dbCfg * database.DBConfig , wsURL string ) (rollerManager * coordinator.Manager , handler * http.Server ) {
478
+ func setupCoordinator (t * testing.T , dbCfg * database.DBConfig , rollersPerSession uint8 , wsURL string ) (rollerManager * coordinator.Manager , handler * http.Server ) {
412
479
// Get db handler.
413
480
db , err := database .NewOrmFactory (dbCfg )
414
481
assert .True (t , assert .NoError (t , err ), "failed to get db handler." )
415
482
416
483
rollerManager , err = coordinator .New (context .Background (), & coordinator_config.RollerManagerConfig {
417
- RollersPerSession : 1 ,
484
+ RollersPerSession : rollersPerSession ,
418
485
Verifier : & coordinator_config.VerifierConfig {MockMode : true },
419
486
CollectionTime : 1 ,
420
487
TokenTimeToLive : 5 ,
0 commit comments