@@ -51,6 +51,9 @@ func TestPropose(t *testing.T) {
51
51
biggestStake * big.Int
52
52
biggestStakerId uint32
53
53
biggestStakerIdErr error
54
+ smallestStake * big.Int
55
+ smallestStakerId uint32
56
+ smallestStakerIdErr error
54
57
randaoHash [32 ]byte
55
58
randaoHashErr error
56
59
bufferPercent int32
@@ -431,7 +434,7 @@ func TestPropose(t *testing.T) {
431
434
wantErr : errors .New ("buffer error" ),
432
435
},
433
436
{
434
- name : "Test 18: When rogue mode is on for biggestStakerId Propose function executes successfully" ,
437
+ name : "Test 18: When rogue mode is on for biggestStakerId and propose exceutes successfully" ,
435
438
args : args {
436
439
rogueData : types.Rogue {
437
440
IsRogue : true ,
@@ -442,6 +445,8 @@ func TestPropose(t *testing.T) {
442
445
numStakers : 5 ,
443
446
biggestStake : big .NewInt (1 ).Mul (big .NewInt (5356 ), big .NewInt (1e18 )),
444
447
biggestStakerId : 2 ,
448
+ smallestStake : big .NewInt (1000 ),
449
+ smallestStakerId : 1 ,
445
450
salt : saltBytes32 ,
446
451
iteration : 1 ,
447
452
numOfProposedBlocks : 3 ,
@@ -456,6 +461,33 @@ func TestPropose(t *testing.T) {
456
461
want : common .BigToHash (big .NewInt (1 )),
457
462
wantErr : nil ,
458
463
},
464
+ {
465
+ name : "Test 19: When rogue mode is on for biggestStakerId and there is an error in getting smallestStakerId" ,
466
+ args : args {
467
+ rogueData : types.Rogue {
468
+ IsRogue : true ,
469
+ RogueMode : []string {"biggestStakerId" },
470
+ },
471
+ state : 2 ,
472
+ staker : bindings.StructsStaker {},
473
+ numStakers : 5 ,
474
+ biggestStake : big .NewInt (1 ).Mul (big .NewInt (5356 ), big .NewInt (1e18 )),
475
+ biggestStakerId : 2 ,
476
+ smallestStakerIdErr : errors .New ("smallestStakerId error" ),
477
+ salt : saltBytes32 ,
478
+ iteration : 1 ,
479
+ numOfProposedBlocks : 3 ,
480
+ maxAltBlocks : 4 ,
481
+ lastIteration : big .NewInt (5 ),
482
+ lastProposedBlockStruct : bindings.StructsBlock {},
483
+ medians : []* big.Int {big .NewInt (6701548 ), big .NewInt (478307 )},
484
+ txnOpts : txnOpts ,
485
+ proposeTxn : & Types.Transaction {},
486
+ hash : common .BigToHash (big .NewInt (1 )),
487
+ },
488
+ want : core .NilHash ,
489
+ wantErr : errors .New ("smallestStakerId error" ),
490
+ },
459
491
}
460
492
for _ , tt := range tests {
461
493
@@ -472,6 +504,7 @@ func TestPropose(t *testing.T) {
472
504
utilsMock .On ("GetDelayedState" , mock .AnythingOfType ("*ethclient.Client" ), mock .AnythingOfType ("int32" )).Return (tt .args .state , tt .args .stateErr )
473
505
utilsMock .On ("GetNumberOfStakers" , mock .AnythingOfType ("*ethclient.Client" ), mock .AnythingOfType ("string" )).Return (tt .args .numStakers , tt .args .numStakerErr )
474
506
cmdUtilsMock .On ("GetBiggestStakeAndId" , mock .AnythingOfType ("*ethclient.Client" ), mock .AnythingOfType ("string" ), mock .AnythingOfType ("uint32" )).Return (tt .args .biggestStake , tt .args .biggestStakerId , tt .args .biggestStakerIdErr )
507
+ cmdUtilsMock .On ("GetSmallestStakeAndId" , mock .Anything , mock .Anything ).Return (tt .args .smallestStake , tt .args .smallestStakerId , tt .args .smallestStakerIdErr )
475
508
utilsMock .On ("GetRandaoHash" , mock .AnythingOfType ("*ethclient.Client" )).Return (tt .args .randaoHash , tt .args .randaoHashErr )
476
509
cmdUtilsMock .On ("GetIteration" , mock .Anything , mock .Anything , mock .Anything ).Return (tt .args .iteration )
477
510
utilsMock .On ("GetMaxAltBlocks" , mock .AnythingOfType ("*ethclient.Client" ), mock .AnythingOfType ("string" )).Return (tt .args .maxAltBlocks , tt .args .maxAltBlocksErr )
@@ -520,7 +553,7 @@ func TestGetBiggestStakeAndId(t *testing.T) {
520
553
bufferPercentErr error
521
554
remainingTime int64
522
555
remainingTimeErr error
523
- stake [] * big.Int
556
+ stake * big.Int
524
557
stakeErr error
525
558
}
526
559
tests := []struct {
@@ -535,29 +568,26 @@ func TestGetBiggestStakeAndId(t *testing.T) {
535
568
args : args {
536
569
numOfStakers : 2 ,
537
570
remainingTime : 10 ,
538
- stake : [] * big.Int { big . NewInt (1 ).Mul (big .NewInt (5326 ), big .NewInt (1e18 )), big . NewInt ( 1 ). Mul ( big . NewInt ( 5356 ), big . NewInt ( 1e18 ))} ,
571
+ stake : big .NewInt (1 ).Mul (big .NewInt (5326 ), big .NewInt (1e18 )),
539
572
},
540
573
wantStake : big .NewInt (1 ).Mul (big .NewInt (5326 ), big .NewInt (1e18 )),
541
574
wantId : 1 ,
542
575
wantErr : nil ,
543
576
},
544
577
{
545
- name : "Test 2: When getBiggestStakeAndId function executes successfully with more number of stakers " ,
578
+ name : "Test 2: When numOfStakers is 0 " ,
546
579
args : args {
547
- numOfStakers : 5 ,
548
- remainingTime : 10 ,
549
- stake : []* big.Int {big .NewInt (1 ).Mul (big .NewInt (5326 ), big .NewInt (1e18 )), big .NewInt (1 ).Mul (big .NewInt (32432 ), big .NewInt (1e18 )), big .NewInt (1 ).Mul (big .NewInt (32 ), big .NewInt (1e18 )), big .NewInt (1e18 ), big .NewInt (1e10 )},
580
+ numOfStakers : 0 ,
550
581
},
551
- wantStake : big . NewInt ( 1 ). Mul ( big . NewInt ( 5326 ), big . NewInt ( 1e18 )) ,
552
- wantId : 1 ,
553
- wantErr : nil ,
582
+ wantStake : nil ,
583
+ wantId : 0 ,
584
+ wantErr : errors . New ( "numberOfStakers is 0" ) ,
554
585
},
555
586
{
556
587
name : "Test 3: When there is an error in getting numOfStakers" ,
557
588
args : args {
558
589
numOfStakersErr : errors .New ("numOfStakers error" ),
559
590
remainingTime : 10 ,
560
- stake : []* big.Int {big .NewInt (1 ).Mul (big .NewInt (5356 ), big .NewInt (1e18 ))},
561
591
},
562
592
wantStake : nil ,
563
593
wantId : 0 ,
@@ -589,8 +619,9 @@ func TestGetBiggestStakeAndId(t *testing.T) {
589
619
name : "Test 6: When there is a timeout case" ,
590
620
args : args {
591
621
numOfStakers : 100000 ,
592
- remainingTime : 1 ,
593
- stake : []* big.Int {big .NewInt (1 ).Mul (big .NewInt (5326 ), big .NewInt (1e18 )), big .NewInt (1 ).Mul (big .NewInt (5356 ), big .NewInt (1e18 ))},
622
+ bufferPercent : 10 ,
623
+ remainingTime : 0 ,
624
+ stake : big .NewInt (1 ).Mul (big .NewInt (5326 ), big .NewInt (1e18 )),
594
625
},
595
626
wantStake : nil ,
596
627
wantId : 0 ,
@@ -619,12 +650,6 @@ func TestGetBiggestStakeAndId(t *testing.T) {
619
650
cmdUtils = cmdUtilsMock
620
651
621
652
utilsMock .On ("GetNumberOfStakers" , mock .AnythingOfType ("*ethclient.Client" ), mock .AnythingOfType ("string" )).Return (tt .args .numOfStakers , tt .args .numOfStakersErr )
622
- if tt .args .stake != nil {
623
- utilsMock .On ("GetStakeSnapshot" , mock .AnythingOfType ("*ethclient.Client" ), mock .AnythingOfType ("uint32" ), mock .AnythingOfType ("uint32" )).Return (tt .args .stake [uint32 (0 )], tt .args .stakeErr )
624
- } else {
625
- utilsMock .On ("GetStakeSnapshot" , mock .AnythingOfType ("*ethclient.Client" ), mock .AnythingOfType ("uint32" ), mock .AnythingOfType ("uint32" )).Return (nil , tt .args .stakeErr )
626
-
627
- }
628
653
utilsMock .On ("GetStakeSnapshot" , mock .AnythingOfType ("*ethclient.Client" ), mock .AnythingOfType ("uint32" ), mock .AnythingOfType ("uint32" )).Return (tt .args .stake , tt .args .stakeErr )
629
654
utilsPkgMock .On ("GetRemainingTimeOfCurrentState" , mock .Anything , mock .Anything ).Return (tt .args .remainingTime , tt .args .remainingTimeErr )
630
655
cmdUtilsMock .On ("GetBufferPercent" ).Return (tt .args .bufferPercent , tt .args .bufferPercentErr )
@@ -1153,6 +1178,100 @@ func TestGetSortedRevealedValues(t *testing.T) {
1153
1178
}
1154
1179
}
1155
1180
1181
+ func TestGetSmallestStakeAndId (t * testing.T ) {
1182
+ var client * ethclient.Client
1183
+ var epoch uint32
1184
+
1185
+ type args struct {
1186
+ numOfStakers uint32
1187
+ numOfStakersErr error
1188
+ stake * big.Int
1189
+ stakeErr error
1190
+ }
1191
+ tests := []struct {
1192
+ name string
1193
+ args args
1194
+ wantStake * big.Int
1195
+ wantId uint32
1196
+ wantErr error
1197
+ }{
1198
+ {
1199
+ name : "Test 1: When GetSmallestStakeAndId function executes successfully" ,
1200
+ args : args {
1201
+ numOfStakers : 4 ,
1202
+ stake : big .NewInt (1 ).Mul (big .NewInt (5326 ), big .NewInt (1e18 )),
1203
+ },
1204
+ wantStake : big .NewInt (1 ).Mul (big .NewInt (5326 ), big .NewInt (1e18 )),
1205
+ wantId : 1 ,
1206
+ wantErr : nil ,
1207
+ },
1208
+ {
1209
+ name : "Test 2: When the numberOfStakers is 0" ,
1210
+ args : args {
1211
+ numOfStakers : 0 ,
1212
+ stake : big .NewInt (1 ).Mul (big .NewInt (5326 ), big .NewInt (1e18 )),
1213
+ },
1214
+ wantStake : nil ,
1215
+ wantId : 0 ,
1216
+ wantErr : errors .New ("numberOfStakers is 0" ),
1217
+ },
1218
+ {
1219
+ name : "Test 3: When there is an error in getting numOfStakers" ,
1220
+ args : args {
1221
+ numOfStakersErr : errors .New ("numOfStakers error" ),
1222
+ },
1223
+ wantStake : nil ,
1224
+ wantId : 0 ,
1225
+ wantErr : errors .New ("numOfStakers error" ),
1226
+ },
1227
+ {
1228
+ name : "Test 4: When there is an error in getting stake" ,
1229
+ args : args {
1230
+ numOfStakers : 5 ,
1231
+ stakeErr : errors .New ("stake error" ),
1232
+ },
1233
+ wantStake : nil ,
1234
+ wantId : 0 ,
1235
+ wantErr : errors .New ("stake error" ),
1236
+ },
1237
+ }
1238
+ for _ , tt := range tests {
1239
+ t .Run (tt .name , func (t * testing.T ) {
1240
+
1241
+ utilsMock := new (mocks.UtilsInterface )
1242
+ cmdUtilsMock := new (mocks.UtilsCmdInterface )
1243
+ utilsPkgMock := new (Mocks.Utils )
1244
+
1245
+ razorUtils = utilsMock
1246
+ utilsInterface = utilsPkgMock
1247
+ cmdUtils = cmdUtilsMock
1248
+
1249
+ utilsMock .On ("GetNumberOfStakers" , mock .AnythingOfType ("*ethclient.Client" ), mock .AnythingOfType ("string" )).Return (tt .args .numOfStakers , tt .args .numOfStakersErr )
1250
+ utilsMock .On ("GetStakeSnapshot" , mock .AnythingOfType ("*ethclient.Client" ), mock .AnythingOfType ("uint32" ), mock .AnythingOfType ("uint32" )).Return (tt .args .stake , tt .args .stakeErr )
1251
+
1252
+ utils := & UtilsStruct {}
1253
+
1254
+ gotStake , gotId , err := utils .GetSmallestStakeAndId (client , epoch )
1255
+ if gotStake .Cmp (tt .wantStake ) != 0 {
1256
+ t .Errorf ("Smallest Stake from GetSmallestStakeAndId function, got = %v, want %v" , gotStake , tt .wantStake )
1257
+ }
1258
+ if gotId != tt .wantId {
1259
+ t .Errorf ("Staker Id of staker having smallest Influence from GetSmallestStakeAndId function, got = %v, want %v" , gotId , tt .wantId )
1260
+ }
1261
+ if err == nil || tt .wantErr == nil {
1262
+ if err != tt .wantErr {
1263
+ t .Errorf ("Error for GetSmallestStakeAndId function, got = %v, want %v" , err , tt .wantErr )
1264
+ }
1265
+ } else {
1266
+ if err .Error () != tt .wantErr .Error () {
1267
+ t .Errorf ("Error for GetSmallestStakeAndId function, got = %v, want %v" , err , tt .wantErr )
1268
+ }
1269
+ }
1270
+
1271
+ })
1272
+ }
1273
+ }
1274
+
1156
1275
func BenchmarkGetIteration (b * testing.B ) {
1157
1276
var client * ethclient.Client
1158
1277
var bufferPercent int32
0 commit comments