diff --git a/tests/pytests/kresd.py b/tests/pytests/kresd.py index aa0dcfac9a8cb06e2f4d5d34dda01ea00bc3200f..0963f1ef33982f7d0182064f12e0ced0c258142c 100644 --- a/tests/pytests/kresd.py +++ b/tests/pytests/kresd.py @@ -136,14 +136,22 @@ class Kresd(ContextDecorator): alive &= utils.try_ping_alive(self.ip6_tls_socket(), close=True, msgid=msgid + 3) return alive - def _wait_for_tcp_port(self, delay=0.1, max_attempts=50): + def _wait_for_tcp_port(self, max_delay=10, delay_step=0.2): family = socket.AF_INET if self.ip else socket.AF_INET6 - for _ in range(max_attempts): + i = 0 + end_time = time.time() + max_delay + + while time.time() < end_time: + i += 1 + + # use exponential backoff algorhitm to choose next delay + rand_delay = random.randrange(0, i) + time.sleep(rand_delay * delay_step) + try: sock, dest = self.stream_socket(family, timeout=5) sock.connect(dest) except ConnectionRefusedError: - time.sleep(delay) continue else: return utils.try_ping_alive(sock, close=True, msgid=10000)