@@ -794,11 +794,11 @@ class MyGitlab(gitlab.Gitlab):
794794
795795class TestRetryWaitTime (unittest .TestCase ):
796796 def setUp (self ):
797- self .session_mock = unittest .mock .Mock (name = ' Session mock' )
797+ self .session_mock = unittest .mock .Mock (name = " Session mock" )
798798 self .session_mock .prepare_request .return_value .url = "http://localhost"
799799 self .session_mock .merge_environment_settings .return_value = {}
800800
801- @unittest .mock .patch (' gitlab.time.sleep' , name = ' sleep mock' )
801+ @unittest .mock .patch (" gitlab.time.sleep" , name = " sleep mock" )
802802 def test_default_retry_wait_time (self , sleep_mock ):
803803 self .gl = Gitlab (
804804 "http://localhost" ,
@@ -831,16 +831,14 @@ def test_default_retry_wait_time(self, sleep_mock):
831831 )
832832
833833 self .assertAlmostEqual (
834- sleep_mock .call_args_list [2 ][0 ][0 ],
835- 2 ** 2 * 0.1 ,
834+ sleep_mock .call_args_list [2 ][0 ][0 ], 2 ** 2 * 0.1 ,
836835 )
837836
838837 self .assertAlmostEqual (
839- sleep_mock .call_args_list [3 ][0 ][0 ],
840- 2 ** 3 * 0.1 ,
838+ sleep_mock .call_args_list [3 ][0 ][0 ], 2 ** 3 * 0.1 ,
841839 )
842840
843- @unittest .mock .patch (' gitlab.time.sleep' , name = ' sleep mock' )
841+ @unittest .mock .patch (" gitlab.time.sleep" , name = " sleep mock" )
844842 def test_custom_retry_wait_time (self , sleep_mock ):
845843 self .gl = Gitlab (
846844 "http://localhost" ,
@@ -862,9 +860,55 @@ def test_custom_retry_wait_time(self, sleep_mock):
862860 self .assertEqual (http_r .status_code , 200 )
863861
864862 self .assertEqual (
865- [
866- unittest .mock .call (100 ),
867- unittest .mock .call (200 ),
868- ],
863+ [unittest .mock .call (100 ), unittest .mock .call (200 ),],
869864 sleep_mock .call_args_list ,
870865 )
866+
867+
868+ class TestRequestThrottler (unittest .TestCase ):
869+ def setUp (self ):
870+ self .throttler = gitlab .RequestThrottler (5 , 10 )
871+
872+ monotonic_patcher = unittest .mock .patch (
873+ "gitlab.time.monotonic" , name = "monotonic mock" , return_value = 0 ,
874+ )
875+ self .monotonic_mock = monotonic_patcher .start ()
876+ self .addCleanup (monotonic_patcher .stop )
877+
878+ sleep_patcher = unittest .mock .patch (
879+ "gitlab.time.sleep" , name = "sleep mock" , side_effect = self ._sleep ,
880+ )
881+ self .sleep_mock = sleep_patcher .start ()
882+ self .addCleanup (sleep_patcher .stop )
883+
884+ def _sleep (self , sleep_time ):
885+ self .monotonic_mock .return_value += sleep_time
886+
887+ def test_throttling (self ):
888+ for _ in range (0 , 5 ):
889+ self .monotonic_mock .return_value += 1
890+ self .throttler ()
891+
892+ self .assertFalse (self .sleep_mock .called )
893+ self .assertEqual ([1 , 2 , 3 , 4 , 5 ], self .throttler .calls_within_period )
894+
895+ self .monotonic_mock .return_value += 1
896+ self .assertEqual (self .monotonic_mock .return_value , 6 )
897+ self .throttler ()
898+
899+ self .sleep_mock .assert_called_once_with (6 )
900+ self .assertEqual (self .monotonic_mock .return_value , 12 )
901+
902+ self .assertEqual ([2 , 3 , 4 , 5 , 12 ], self .throttler .calls_within_period )
903+
904+ self .sleep_mock .reset_mock ()
905+
906+ self .monotonic_mock .return_value += 1
907+ self .throttler ()
908+ self .assertFalse (self .sleep_mock .called )
909+ self .assertEqual ([3 , 4 , 5 , 12 , 13 ], self .throttler .calls_within_period )
910+
911+ self .monotonic_mock .return_value = 100
912+ self .throttler ()
913+ self .assertFalse (self .sleep_mock .called )
914+ self .assertEqual ([100 ], self .throttler .calls_within_period )
0 commit comments