X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d9eca6c665e600063cb2c04b17f38d540eb438f1..2ab1b540a710fd454f33e9ba22db601e67f3d217:/services/nodemanager/tests/test_clientactor.py diff --git a/services/nodemanager/tests/test_clientactor.py b/services/nodemanager/tests/test_clientactor.py index 1e4c40ec6b..cee9c85a22 100644 --- a/services/nodemanager/tests/test_clientactor.py +++ b/services/nodemanager/tests/test_clientactor.py @@ -47,7 +47,8 @@ class RemotePollLoopActorTestCase(testutil.RemotePollLoopActorTestMixin, def test_late_subscribers_get_responses(self): self.build_monitor(['pre_late_test', 'late_test']) - self.monitor.subscribe(lambda response: None).get(self.TIMEOUT) + mock_subscriber = mock.Mock(name='mock_subscriber') + self.monitor.subscribe(mock_subscriber).get(self.TIMEOUT) self.monitor.subscribe(self.subscriber) self.monitor.poll().get(self.TIMEOUT) self.stop_proxy(self.monitor) @@ -64,6 +65,31 @@ class RemotePollLoopActorTestCase(testutil.RemotePollLoopActorTestMixin, "poll loop died from dead subscriber") self.subscriber.assert_called_with('survive2') + def check_poll_timers(self, *test_times): + schedule_mock = self.timer.schedule + last_expect = None + with mock.patch('time.time') as time_mock: + for fake_time, expect_next in test_times: + time_mock.return_value = fake_time + self.monitor.poll(last_expect).get(self.TIMEOUT) + self.assertTrue(schedule_mock.called) + self.assertEqual(expect_next, schedule_mock.call_args[0][0]) + schedule_mock.reset_mock() + last_expect = expect_next + + def test_poll_timing_on_consecutive_successes_with_drift(self): + self.build_monitor(['1', '2'], poll_wait=3, max_poll_wait=14) + self.check_poll_timers((0, 3), (4, 6)) + + def test_poll_backoff_on_failures(self): + self.build_monitor(self.MockClientError, poll_wait=3, max_poll_wait=14) + self.check_poll_timers((0, 6), (6, 18), (18, 32)) + + def test_poll_timing_after_error_recovery(self): + self.build_monitor(['a', self.MockClientError(), 'b'], + poll_wait=3, max_poll_wait=14) + self.check_poll_timers((0, 3), (4, 10), (10, 13)) + def test_no_subscriptions_by_key_without_support(self): self.build_monitor([]) with self.assertRaises(AttributeError): @@ -121,4 +147,3 @@ class RemotePollLoopActorWithKeysTestCase(testutil.RemotePollLoopActorTestMixin, if __name__ == '__main__': unittest.main() -