From: Christian Herdtweck Date: Wed, 6 Mar 2024 10:35:38 +0000 (+0100) Subject: Raise error if email transfer wait reaches timeout X-Git-Tag: v1.7.3~1^2~5 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=fdf40ad28501cdfc773cbc7319fce2637f3be3b0;p=pyi2ncommon Raise error if email transfer wait reaches timeout --- diff --git a/src/arnied_wrapper.py b/src/arnied_wrapper.py index 53eb54e..cfbf0b2 100644 --- a/src/arnied_wrapper.py +++ b/src/arnied_wrapper.py @@ -228,9 +228,13 @@ def wait_for_email_transfer(timeout=300, vm=None): """ Wait until the mail queue is empty and all emails are sent. + If the mail queue is still not empty after timeout is reached, a warning is logged and a + :py:class:`TimeoutError` is raised. + :param int timeout: email transfer timeout :param vm: vm to run on if running on a guest instead of the host :type vm: :py:class:`virttest.qemu_vm.VM` or None + :raises TimeoutError: if mail transfer was not complete when timeout was reached """ for i in range(timeout): if i % 10 == 0: @@ -245,6 +249,7 @@ def wait_for_email_transfer(timeout=300, vm=None): time.sleep(1) log.warning('Timeout reached but SMTP queue still not empty after {} s' .format(timeout)) + raise TimeoutError() def wait_for_quarantine_processing(vm_session: Any = None, max_wait: int = 30) -> bool: diff --git a/test/test_arnied_wrapper.py b/test/test_arnied_wrapper.py index 3d5265e..1955993 100755 --- a/test/test_arnied_wrapper.py +++ b/test/test_arnied_wrapper.py @@ -127,3 +127,26 @@ class ArniedWrapperTest(unittest.TestCase): end_time = time.time() self.assertGreater(end_time - start_time, 1.5) self.assertLess(end_time - start_time, 2.5) + + def test_wait_for_email_transfer_timeout(self): + """Test waiting for email transfer that reaches timeout.""" + DummyCmdOutputMapping.asserted_cmds = ( + {"cmd": 'postqueue -f', "stdout": b"", "returncode": 0}, + {"cmd": 'postqueue -j', "stdout": b"not empty", "returncode": 0}, + ) + start_time = time.time() + self.assertRaises(TimeoutError, arnied_wrapper.wait_for_email_transfer, 2) + time_diff = time.time() - start_time + self.assertGreater(time_diff, 1.5) + self.assertLess(time_diff, 2.5) + + def test_wait_for_email_transfer_succeed(self): + """Test waiting for email transfer that succeeds at once""" + DummyCmdOutputMapping.asserted_cmds = ( + {"cmd": 'postqueue -f', "stdout": b"", "returncode": 0}, + {"cmd": 'postqueue -j', "stdout": b"", "returncode": 0}, + ) + start_time = time.time() + arnied_wrapper.wait_for_email_transfer() + time_diff = time.time() - start_time + self.assertLess(time_diff, 1)