Merge pull request #192593 from jlesquembre/test-driver

This commit is contained in:
Artturi 2023-09-21 00:47:45 +03:00 committed by GitHub
commit 7f45760504
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -734,7 +734,7 @@ class Machine:
) )
return output return output
def wait_until_tty_matches(self, tty: str, regexp: str) -> None: def wait_until_tty_matches(self, tty: str, regexp: str, timeout: int = 900) -> None:
"""Wait until the visible output on the chosen TTY matches regular """Wait until the visible output on the chosen TTY matches regular
expression. Throws an exception on timeout. expression. Throws an exception on timeout.
""" """
@ -750,7 +750,7 @@ class Machine:
return len(matcher.findall(text)) > 0 return len(matcher.findall(text)) > 0
with self.nested(f"waiting for {regexp} to appear on tty {tty}"): with self.nested(f"waiting for {regexp} to appear on tty {tty}"):
retry(tty_matches) retry(tty_matches, timeout)
def send_chars(self, chars: str, delay: Optional[float] = 0.01) -> None: def send_chars(self, chars: str, delay: Optional[float] = 0.01) -> None:
""" """
@ -762,7 +762,7 @@ class Machine:
for char in chars: for char in chars:
self.send_key(char, delay, log=False) self.send_key(char, delay, log=False)
def wait_for_file(self, filename: str) -> None: def wait_for_file(self, filename: str, timeout: int = 900) -> None:
""" """
Waits until the file exists in the machine's file system. Waits until the file exists in the machine's file system.
""" """
@ -772,9 +772,11 @@ class Machine:
return status == 0 return status == 0
with self.nested(f"waiting for file '{filename}'"): with self.nested(f"waiting for file '{filename}'"):
retry(check_file) retry(check_file, timeout)
def wait_for_open_port(self, port: int, addr: str = "localhost") -> None: def wait_for_open_port(
self, port: int, addr: str = "localhost", timeout: int = 900
) -> None:
""" """
Wait until a process is listening on the given TCP port and IP address Wait until a process is listening on the given TCP port and IP address
(default `localhost`). (default `localhost`).
@ -785,9 +787,11 @@ class Machine:
return status == 0 return status == 0
with self.nested(f"waiting for TCP port {port} on {addr}"): with self.nested(f"waiting for TCP port {port} on {addr}"):
retry(port_is_open) retry(port_is_open, timeout)
def wait_for_closed_port(self, port: int, addr: str = "localhost") -> None: def wait_for_closed_port(
self, port: int, addr: str = "localhost", timeout: int = 900
) -> None:
""" """
Wait until nobody is listening on the given TCP port and IP address Wait until nobody is listening on the given TCP port and IP address
(default `localhost`). (default `localhost`).
@ -798,7 +802,7 @@ class Machine:
return status != 0 return status != 0
with self.nested(f"waiting for TCP port {port} on {addr} to be closed"): with self.nested(f"waiting for TCP port {port} on {addr} to be closed"):
retry(port_is_closed) retry(port_is_closed, timeout)
def start_job(self, jobname: str, user: Optional[str] = None) -> Tuple[int, str]: def start_job(self, jobname: str, user: Optional[str] = None) -> Tuple[int, str]:
return self.systemctl(f"start {jobname}", user) return self.systemctl(f"start {jobname}", user)
@ -972,7 +976,7 @@ class Machine:
""" """
return self._get_screen_text_variants([2])[0] return self._get_screen_text_variants([2])[0]
def wait_for_text(self, regex: str) -> None: def wait_for_text(self, regex: str, timeout: int = 900) -> None:
""" """
Wait until the supplied regular expressions matches the textual Wait until the supplied regular expressions matches the textual
contents of the screen by using optical character recognition (see contents of the screen by using optical character recognition (see
@ -995,7 +999,7 @@ class Machine:
return False return False
with self.nested(f"waiting for {regex} to appear on screen"): with self.nested(f"waiting for {regex} to appear on screen"):
retry(screen_matches) retry(screen_matches, timeout)
def wait_for_console_text(self, regex: str, timeout: int | None = None) -> None: def wait_for_console_text(self, regex: str, timeout: int | None = None) -> None:
""" """
@ -1146,7 +1150,7 @@ class Machine:
self.send_key("ctrl-alt-delete") self.send_key("ctrl-alt-delete")
self.connected = False self.connected = False
def wait_for_x(self) -> None: def wait_for_x(self, timeout: int = 900) -> None:
""" """
Wait until it is possible to connect to the X server. Wait until it is possible to connect to the X server.
""" """
@ -1163,14 +1167,14 @@ class Machine:
return status == 0 return status == 0
with self.nested("waiting for the X11 server"): with self.nested("waiting for the X11 server"):
retry(check_x) retry(check_x, timeout)
def get_window_names(self) -> List[str]: def get_window_names(self) -> List[str]:
return self.succeed( return self.succeed(
r"xwininfo -root -tree | sed 's/.*0x[0-9a-f]* \"\([^\"]*\)\".*/\1/; t; d'" r"xwininfo -root -tree | sed 's/.*0x[0-9a-f]* \"\([^\"]*\)\".*/\1/; t; d'"
).splitlines() ).splitlines()
def wait_for_window(self, regexp: str) -> None: def wait_for_window(self, regexp: str, timeout: int = 900) -> None:
""" """
Wait until an X11 window has appeared whose name matches the given Wait until an X11 window has appeared whose name matches the given
regular expression, e.g., `wait_for_window("Terminal")`. regular expression, e.g., `wait_for_window("Terminal")`.
@ -1188,7 +1192,7 @@ class Machine:
return any(pattern.search(name) for name in names) return any(pattern.search(name) for name in names)
with self.nested("waiting for a window to appear"): with self.nested("waiting for a window to appear"):
retry(window_is_visible) retry(window_is_visible, timeout)
def sleep(self, secs: int) -> None: def sleep(self, secs: int) -> None:
# We want to sleep in *guest* time, not *host* time. # We want to sleep in *guest* time, not *host* time.