@@ -3,6 +3,7 @@ package registration_test
3
3
import (
4
4
"bytes"
5
5
"context"
6
+ "crypto/ed25519"
6
7
"testing"
7
8
"time"
8
9
@@ -57,12 +58,20 @@ func TestSubmitIdempotence(t *testing.T) {
57
58
eg .Go (func () error { return r .Run (ctx ) })
58
59
59
60
// Submit challenge
60
- epoch , _ , err := r .Submit (context .Background (), challenge , nodeID , nonce , registration.PowParams {}, time.Time {})
61
+ epoch , _ , err := r .Submit (
62
+ context .Background (),
63
+ challenge ,
64
+ nodeID ,
65
+ nonce ,
66
+ registration.PowParams {},
67
+ nil ,
68
+ time.Time {},
69
+ )
61
70
req .NoError (err )
62
71
req .Equal (uint (0 ), epoch )
63
72
64
73
// Try again - it should return the same result
65
- epoch , _ , err = r .Submit (context .Background (), challenge , nodeID , nonce , registration.PowParams {}, time.Time {})
74
+ epoch , _ , err = r .Submit (context .Background (), challenge , nodeID , nonce , registration.PowParams {}, nil , time.Time {})
66
75
req .NoError (err )
67
76
req .Equal (uint (0 ), epoch )
68
77
@@ -270,3 +279,100 @@ func TestRecoveringRoundInProgress(t *testing.T) {
270
279
)
271
280
req .NoError (r .Run (ctx ))
272
281
}
282
+
283
+ func Test_GetCertifierInfo (t * testing.T ) {
284
+ certifier := & registration.CertifierConfig {
285
+ PubKey : registration .Base64Enc ("pubkey" ),
286
+ URL : "http://the-certifier.org" ,
287
+ }
288
+
289
+ r , err := registration .New (
290
+ context .Background (),
291
+ time .Now (),
292
+ t .TempDir (),
293
+ nil ,
294
+ server .DefaultRoundConfig (),
295
+ registration .WithConfig (registration.Config {
296
+ MaxRoundMembers : 10 ,
297
+ Certifier : certifier ,
298
+ }),
299
+ )
300
+ require .NoError (t , err )
301
+ t .Cleanup (func () { require .NoError (t , r .Close ()) })
302
+ require .Equal (t , r .CertifierInfo (), certifier )
303
+ }
304
+
305
+ func Test_CheckCertificate (t * testing.T ) {
306
+ challenge := []byte ("challenge" )
307
+ nodeID := []byte ("nodeID00nodeID00nodeID00nodeID00" )
308
+
309
+ t .Run ("certification check disabled (default config)" , func (t * testing.T ) {
310
+ powVerifier := mocks .NewMockPowVerifier (gomock .NewController (t ))
311
+ powVerifier .EXPECT ().Params ().Return (registration.PowParams {}).AnyTimes ()
312
+ r , err := registration .New (
313
+ context .Background (),
314
+ time .Now (),
315
+ t .TempDir (),
316
+ nil ,
317
+ server .DefaultRoundConfig (),
318
+ registration .WithPowVerifier (powVerifier ),
319
+ )
320
+ require .NoError (t , err )
321
+ t .Cleanup (func () { require .NoError (t , r .Close ()) })
322
+
323
+ // missing certificate - fallback to PoW
324
+ powVerifier .EXPECT ().Verify (challenge , nodeID , uint64 (5 )).Return (nil )
325
+ _ , _ , err = r .Submit (context .Background (), challenge , nodeID , 5 , registration.PowParams {}, nil , time.Time {})
326
+ require .NoError (t , err )
327
+
328
+ // passed certificate - still fallback to PoW
329
+ powVerifier .EXPECT ().Verify (challenge , nodeID , uint64 (7 )).Return (nil )
330
+ _ , _ , err = r .Submit (
331
+ context .Background (),
332
+ challenge ,
333
+ nodeID ,
334
+ 7 ,
335
+ registration.PowParams {},
336
+ []byte {1 , 2 , 3 , 4 },
337
+ time.Time {},
338
+ )
339
+ require .NoError (t , err )
340
+ })
341
+ t .Run ("certification check enabled" , func (t * testing.T ) {
342
+ pub , private , err := ed25519 .GenerateKey (nil )
343
+ require .NoError (t , err )
344
+ powVerifier := mocks .NewMockPowVerifier (gomock .NewController (t ))
345
+
346
+ r , err := registration .New (
347
+ context .Background (),
348
+ time .Now (),
349
+ t .TempDir (),
350
+ nil ,
351
+ server .DefaultRoundConfig (),
352
+ registration .WithPowVerifier (powVerifier ),
353
+ registration .WithConfig (registration.Config {
354
+ MaxRoundMembers : 10 ,
355
+ Certifier : & registration.CertifierConfig {
356
+ PubKey : registration .Base64Enc (pub ),
357
+ },
358
+ }),
359
+ )
360
+ require .NoError (t , err )
361
+ t .Cleanup (func () { require .NoError (t , r .Close ()) })
362
+
363
+ // missing certificate - fallback to PoW
364
+ powVerifier .EXPECT ().Params ().Return (registration.PowParams {}).AnyTimes ()
365
+ powVerifier .EXPECT ().Verify (challenge , nodeID , uint64 (7 )).Return (nil )
366
+ _ , _ , err = r .Submit (context .Background (), challenge , nodeID , 7 , r .PowParams (), nil , time.Time {})
367
+ require .NoError (t , err )
368
+
369
+ // valid certificate
370
+ signature := ed25519 .Sign (private , nodeID )
371
+ _ , _ , err = r .Submit (context .Background (), challenge , nodeID , 0 , r .PowParams (), signature , time.Time {})
372
+ require .NoError (t , err )
373
+
374
+ // invalid certificate
375
+ _ , _ , err = r .Submit (context .Background (), challenge , nodeID , 0 , r .PowParams (), []byte {1 , 2 , 3 , 4 }, time.Time {})
376
+ require .ErrorIs (t , err , registration .ErrInvalidCertificate )
377
+ })
378
+ }
0 commit comments