@@ -403,6 +403,49 @@ mod tests {
403
403
Ok ( ( ) )
404
404
}
405
405
406
+ #[ test]
407
+ fn two_actions_dont_interfere_with_each_other ( ) -> QueryResult < ( ) > {
408
+ let conn = & mut pg_connection ( ) ;
409
+ let now = now ( ) ;
410
+
411
+ let mut config = HashMap :: new ( ) ;
412
+ config. insert (
413
+ LimitedAction :: PublishNew ,
414
+ RateLimiterConfig {
415
+ rate : Duration :: from_secs ( 1 ) ,
416
+ burst : 10 ,
417
+ } ,
418
+ ) ;
419
+ config. insert (
420
+ LimitedAction :: YankUnyank ,
421
+ RateLimiterConfig {
422
+ rate : Duration :: from_secs ( 1 ) ,
423
+ burst : 20 ,
424
+ } ,
425
+ ) ;
426
+ let rate = RateLimiter :: new ( config) ;
427
+
428
+ let user_id = new_user ( conn, "user" ) ?;
429
+
430
+ assert_eq ! (
431
+ 10 ,
432
+ rate. take_token( user_id, LimitedAction :: PublishNew , now, conn) ?
433
+ . tokens
434
+ ) ;
435
+ assert_eq ! (
436
+ 9 ,
437
+ rate. take_token( user_id, LimitedAction :: PublishNew , now, conn) ?
438
+ . tokens
439
+ ) ;
440
+ assert_eq ! (
441
+ 20 ,
442
+ rate. take_token( user_id, LimitedAction :: YankUnyank , now, conn) ?
443
+ . tokens
444
+ ) ;
445
+
446
+ Ok ( ( ) )
447
+ }
448
+
406
449
#[ test]
407
450
fn override_is_used_instead_of_global_burst_if_present ( ) -> QueryResult < ( ) > {
408
451
let conn = & mut pg_connection ( ) ;
@@ -480,6 +523,46 @@ mod tests {
480
523
Ok ( ( ) )
481
524
}
482
525
526
+ #[ test]
527
+ fn override_is_different_for_each_action ( ) -> QueryResult < ( ) > {
528
+ let conn = & mut pg_connection ( ) ;
529
+ let now = now ( ) ;
530
+ let user_id = new_user ( conn, "user" ) ?;
531
+
532
+ let mut config = HashMap :: new ( ) ;
533
+ for action in [ LimitedAction :: PublishNew , LimitedAction :: YankUnyank ] {
534
+ config. insert (
535
+ action,
536
+ RateLimiterConfig {
537
+ rate : Duration :: from_secs ( 1 ) ,
538
+ burst : 10 ,
539
+ } ,
540
+ ) ;
541
+ }
542
+ let rate = RateLimiter :: new ( config) ;
543
+
544
+ diesel:: insert_into ( publish_rate_overrides:: table)
545
+ . values ( (
546
+ publish_rate_overrides:: user_id. eq ( user_id) ,
547
+ publish_rate_overrides:: action. eq ( LimitedAction :: PublishNew ) ,
548
+ publish_rate_overrides:: burst. eq ( 20 ) ,
549
+ ) )
550
+ . execute ( conn) ?;
551
+
552
+ assert_eq ! (
553
+ 20 ,
554
+ rate. take_token( user_id, LimitedAction :: PublishNew , now, conn) ?
555
+ . tokens,
556
+ ) ;
557
+ assert_eq ! (
558
+ 10 ,
559
+ rate. take_token( user_id, LimitedAction :: YankUnyank , now, conn) ?
560
+ . tokens,
561
+ ) ;
562
+
563
+ Ok ( ( ) )
564
+ }
565
+
483
566
fn new_user ( conn : & mut PgConnection , gh_login : & str ) -> QueryResult < i32 > {
484
567
use crate :: models:: NewUser ;
485
568
0 commit comments