@@ -19,7 +19,7 @@ use std::{
1919 Arc ,
2020 atomic:: { AtomicBool , AtomicUsize , Ordering } ,
2121 } ,
22- time:: Duration ,
22+ time:: { Duration , Instant } ,
2323} ;
2424use temporal_sdk_core_api:: {
2525 Worker as WorkerTrait , errors:: CompleteActivityError , worker:: PollerBehavior ,
@@ -634,6 +634,47 @@ async fn max_tq_acts_set_passed_to_poll_properly() {
634634 worker. poll_activity_task ( ) . await . unwrap ( ) ;
635635}
636636
637+ #[ tokio:: test]
638+ async fn max_worker_acts_per_second_respected ( ) {
639+ let mut mock_client = mock_worker_client ( ) ;
640+ mock_client
641+ . expect_poll_activity_task ( )
642+ . returning ( move |_, _| {
643+ Ok ( PollActivityTaskQueueResponse {
644+ task_token : vec ! [ 1 ] ,
645+ activity_id : "some-id" . to_string ( ) ,
646+ ..Default :: default ( )
647+ } )
648+ } ) ;
649+ mock_client
650+ . expect_complete_activity_task ( )
651+ . returning ( |_, _| Ok ( RespondActivityTaskCompletedResponse :: default ( ) ) ) ;
652+
653+ let cfg = test_worker_cfg ( )
654+ . activity_task_poller_behavior ( PollerBehavior :: SimpleMaximum ( 1_usize ) )
655+ . max_outstanding_activities ( 10_usize )
656+ . max_worker_activities_per_second ( 1.0 )
657+ . build ( )
658+ . unwrap ( ) ;
659+ let worker = Worker :: new_test ( cfg, mock_client) ;
660+ let start = Instant :: now ( ) ;
661+ let mut received = 0 ;
662+ while start. elapsed ( ) . as_millis ( ) < 900 {
663+ let at = worker. poll_activity_task ( ) . await . unwrap ( ) ;
664+ received += 1 ;
665+ worker
666+ . complete_activity_task ( ActivityTaskCompletion {
667+ task_token : at. task_token ,
668+ result : Some ( ActivityExecutionResult :: ok ( "hi" . into ( ) ) ) ,
669+ } )
670+ . await
671+ . unwrap ( ) ;
672+ }
673+ // Two will be allowed because of the initial request. Without ratelimit in effect, this number
674+ // would be comically high due to the mocks responding very fast.
675+ assert_eq ! ( received, 2 ) ;
676+ }
677+
637678#[ rstest:: rstest]
638679#[ tokio:: test]
639680async fn no_eager_activities_requested_when_worker_options_disable_it (
0 commit comments