@@ -373,3 +373,74 @@ func TestResetCircuitBreakerSomeMsgs(t *testing.T) {
373
373
require .NoError (t , err )
374
374
require .True (t , allowed , "circuit breaker should be reset" )
375
375
}
376
+
377
+ func TestResetCircuitBreakerEmptyMsgs (t * testing.T ) {
378
+ ft := initFixture (t )
379
+ authority , err := ft .ac .BytesToString (ft .mockAddr )
380
+ require .NoError (t , err )
381
+
382
+ srv := keeper .NewMsgServerImpl (ft .keeper )
383
+
384
+ // admin resets circuit breaker
385
+ url := msgSend
386
+ url2 := "the_only_message_acc2_can_trip_and_reset"
387
+
388
+ // add acc2 as an authorized account for only url2
389
+ authmsg := & types.MsgAuthorizeCircuitBreaker {
390
+ Granter : authority ,
391
+ Grantee : addresses [2 ],
392
+ Permissions : & types.Permissions {
393
+ Level : types .Permissions_LEVEL_SOME_MSGS ,
394
+ LimitTypeUrls : []string {url2 },
395
+ },
396
+ }
397
+ _ , err = srv .AuthorizeCircuitBreaker (ft .ctx , authmsg )
398
+ require .NoError (t , err )
399
+
400
+ // admin trips circuit breaker
401
+ admintrip := & types.MsgTripCircuitBreaker {Authority : authority , MsgTypeUrls : []string {url , url2 }}
402
+ _ , err = srv .TripCircuitBreaker (ft .ctx , admintrip )
403
+ require .NoError (t , err )
404
+
405
+ // sanity check, both messages should be tripped
406
+ allowed , err := ft .keeper .IsAllowed (ft .ctx , url )
407
+ require .NoError (t , err )
408
+ require .False (t , allowed , "circuit breaker should be tripped" )
409
+
410
+ allowed , err = ft .keeper .IsAllowed (ft .ctx , url2 )
411
+ require .NoError (t , err )
412
+ require .False (t , allowed , "circuit breaker should be tripped" )
413
+
414
+ // now let's try to reset url using acc2 (should fail)
415
+ acc2Reset := & types.MsgResetCircuitBreaker {Authority : addresses [2 ], MsgTypeUrls : []string {url }}
416
+ _ , err = srv .ResetCircuitBreaker (ft .ctx , acc2Reset )
417
+ require .Error (t , err )
418
+
419
+ // now let's try to reset url2 with an empty url using acc2 (should pass)
420
+ acc2Reset = & types.MsgResetCircuitBreaker {Authority : addresses [2 ], MsgTypeUrls : []string {}}
421
+ _ , err = srv .ResetCircuitBreaker (ft .ctx , acc2Reset )
422
+ require .NoError (t , err )
423
+
424
+ // Only url2 should be reset, url should still be tripped
425
+ allowed , err = ft .keeper .IsAllowed (ft .ctx , url )
426
+ require .NoError (t , err )
427
+ require .False (t , allowed , "circuit breaker should be tripped" )
428
+
429
+ allowed , err = ft .keeper .IsAllowed (ft .ctx , url2 )
430
+ require .NoError (t , err )
431
+ require .True (t , allowed , "circuit breaker should be reset" )
432
+
433
+ // now let's try to reset url with empty url using an authorized account (should pass)
434
+ authAccReset := & types.MsgResetCircuitBreaker {Authority : authority , MsgTypeUrls : []string {}}
435
+ _ , err = srv .ResetCircuitBreaker (ft .ctx , authAccReset )
436
+ require .NoError (t , err )
437
+
438
+ // Both 2 url should be reset
439
+ allowed , err = ft .keeper .IsAllowed (ft .ctx , url )
440
+ require .NoError (t , err )
441
+ require .True (t , allowed , "circuit breaker should be reset" )
442
+
443
+ allowed , err = ft .keeper .IsAllowed (ft .ctx , url2 )
444
+ require .NoError (t , err )
445
+ require .True (t , allowed , "circuit breaker should be reset" )
446
+ }
0 commit comments