@@ -450,3 +450,74 @@ func TestResetCircuitBreakerSomeMsgs(t *testing.T) {
450
450
require .NoError (t , err )
451
451
require .True (t , allowed , "circuit breaker should be reset" )
452
452
}
453
+
454
+ func TestResetCircuitBreakerEmptyMsgs (t * testing.T ) {
455
+ ft := initFixture (t )
456
+ authority , err := ft .ac .BytesToString (ft .mockAddr )
457
+ require .NoError (t , err )
458
+
459
+ srv := keeper .NewMsgServerImpl (ft .keeper )
460
+
461
+ // admin resets circuit breaker
462
+ url := msgSend
463
+ url2 := "/the_only_message_acc2_can_trip_and_reset"
464
+
465
+ // add acc2 as an authorized account for only url2
466
+ authmsg := & types.MsgAuthorizeCircuitBreaker {
467
+ Granter : authority ,
468
+ Grantee : addresses [2 ],
469
+ Permissions : & types.Permissions {
470
+ Level : types .Permissions_LEVEL_SOME_MSGS ,
471
+ LimitTypeUrls : []string {url2 },
472
+ },
473
+ }
474
+ _ , err = srv .AuthorizeCircuitBreaker (ft .ctx , authmsg )
475
+ require .NoError (t , err )
476
+
477
+ // admin trips circuit breaker
478
+ admintrip := & types.MsgTripCircuitBreaker {Authority : authority , MsgTypeUrls : []string {url , url2 }}
479
+ _ , err = srv .TripCircuitBreaker (ft .ctx , admintrip )
480
+ require .NoError (t , err )
481
+
482
+ // sanity check, both messages should be tripped
483
+ allowed , err := ft .keeper .IsAllowed (ft .ctx , url )
484
+ require .NoError (t , err )
485
+ require .False (t , allowed , "circuit breaker should be tripped" )
486
+
487
+ allowed , err = ft .keeper .IsAllowed (ft .ctx , url2 )
488
+ require .NoError (t , err )
489
+ require .False (t , allowed , "circuit breaker should be tripped" )
490
+
491
+ // now let's try to reset url using acc2 (should fail)
492
+ acc2Reset := & types.MsgResetCircuitBreaker {Authority : addresses [2 ], MsgTypeUrls : []string {url }}
493
+ _ , err = srv .ResetCircuitBreaker (ft .ctx , acc2Reset )
494
+ require .Error (t , err )
495
+
496
+ // now let's try to reset url2 with an empty url using acc2 (should pass)
497
+ acc2Reset = & types.MsgResetCircuitBreaker {Authority : addresses [2 ], MsgTypeUrls : []string {}}
498
+ _ , err = srv .ResetCircuitBreaker (ft .ctx , acc2Reset )
499
+ require .NoError (t , err )
500
+
501
+ // Only url2 should be reset, url should still be tripped
502
+ allowed , err = ft .keeper .IsAllowed (ft .ctx , url )
503
+ require .NoError (t , err )
504
+ require .False (t , allowed , "circuit breaker should be tripped" )
505
+
506
+ allowed , err = ft .keeper .IsAllowed (ft .ctx , url2 )
507
+ require .NoError (t , err )
508
+ require .True (t , allowed , "circuit breaker should be reset" )
509
+
510
+ // now let's try to reset url with empty url using an authorized account (should pass)
511
+ authAccReset := & types.MsgResetCircuitBreaker {Authority : authority , MsgTypeUrls : []string {}}
512
+ _ , err = srv .ResetCircuitBreaker (ft .ctx , authAccReset )
513
+ require .NoError (t , err )
514
+
515
+ // Both 2 url should be reset
516
+ allowed , err = ft .keeper .IsAllowed (ft .ctx , url )
517
+ require .NoError (t , err )
518
+ require .True (t , allowed , "circuit breaker should be reset" )
519
+
520
+ allowed , err = ft .keeper .IsAllowed (ft .ctx , url2 )
521
+ require .NoError (t , err )
522
+ require .True (t , allowed , "circuit breaker should be reset" )
523
+ }
0 commit comments