mirror of
https://github.com/SebastianWendel/nixpkgs.git
synced 2024-09-20 04:19:00 +02:00
Merge pull request #221251 from astro/test-driver
nixos/test-driver: fix allow_reboot
This commit is contained in:
commit
10988b1ff0
|
@ -179,7 +179,6 @@ class Driver:
|
|||
start_command=cmd,
|
||||
name=name,
|
||||
keep_vm_state=args.get("keep_vm_state", False),
|
||||
allow_reboot=args.get("allow_reboot", False),
|
||||
)
|
||||
|
||||
def serial_stdout_on(self) -> None:
|
||||
|
|
|
@ -144,7 +144,7 @@ class StartCommand:
|
|||
self,
|
||||
monitor_socket_path: Path,
|
||||
shell_socket_path: Path,
|
||||
allow_reboot: bool = False, # TODO: unused, legacy?
|
||||
allow_reboot: bool = False,
|
||||
) -> str:
|
||||
display_opts = ""
|
||||
display_available = any(x in os.environ for x in ["DISPLAY", "WAYLAND_DISPLAY"])
|
||||
|
@ -152,16 +152,14 @@ class StartCommand:
|
|||
display_opts += " -nographic"
|
||||
|
||||
# qemu options
|
||||
qemu_opts = ""
|
||||
qemu_opts += (
|
||||
""
|
||||
if allow_reboot
|
||||
else " -no-reboot"
|
||||
qemu_opts = (
|
||||
" -device virtio-serial"
|
||||
" -device virtconsole,chardev=shell"
|
||||
" -device virtio-rng-pci"
|
||||
" -serial stdio"
|
||||
)
|
||||
if not allow_reboot:
|
||||
qemu_opts += " -no-reboot"
|
||||
# TODO: qemu script already catpures this env variable, legacy?
|
||||
qemu_opts += " " + os.environ.get("QEMU_OPTS", "")
|
||||
|
||||
|
@ -195,9 +193,10 @@ class StartCommand:
|
|||
shared_dir: Path,
|
||||
monitor_socket_path: Path,
|
||||
shell_socket_path: Path,
|
||||
allow_reboot: bool,
|
||||
) -> subprocess.Popen:
|
||||
return subprocess.Popen(
|
||||
self.cmd(monitor_socket_path, shell_socket_path),
|
||||
self.cmd(monitor_socket_path, shell_socket_path, allow_reboot),
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
|
@ -312,7 +311,6 @@ class Machine:
|
|||
|
||||
start_command: StartCommand
|
||||
keep_vm_state: bool
|
||||
allow_reboot: bool
|
||||
|
||||
process: Optional[subprocess.Popen]
|
||||
pid: Optional[int]
|
||||
|
@ -337,13 +335,11 @@ class Machine:
|
|||
start_command: StartCommand,
|
||||
name: str = "machine",
|
||||
keep_vm_state: bool = False,
|
||||
allow_reboot: bool = False,
|
||||
callbacks: Optional[List[Callable]] = None,
|
||||
) -> None:
|
||||
self.out_dir = out_dir
|
||||
self.tmp_dir = tmp_dir
|
||||
self.keep_vm_state = keep_vm_state
|
||||
self.allow_reboot = allow_reboot
|
||||
self.name = name
|
||||
self.start_command = start_command
|
||||
self.callbacks = callbacks if callbacks is not None else []
|
||||
|
@ -874,7 +870,7 @@ class Machine:
|
|||
self.process.stdin.write(chars.encode())
|
||||
self.process.stdin.flush()
|
||||
|
||||
def start(self) -> None:
|
||||
def start(self, allow_reboot: bool = False) -> None:
|
||||
if self.booted:
|
||||
return
|
||||
|
||||
|
@ -898,6 +894,7 @@ class Machine:
|
|||
self.shared_dir,
|
||||
self.monitor_path,
|
||||
self.shell_path,
|
||||
allow_reboot,
|
||||
)
|
||||
self.monitor, _ = monitor_socket.accept()
|
||||
self.shell, _ = shell_socket.accept()
|
||||
|
@ -946,6 +943,15 @@ class Machine:
|
|||
self.send_monitor_command("quit")
|
||||
self.wait_for_shutdown()
|
||||
|
||||
def reboot(self) -> None:
|
||||
"""Press Ctrl+Alt+Delete in the guest.
|
||||
|
||||
Prepares the machine to be reconnected which is useful if the
|
||||
machine was started with `allow_reboot = True`
|
||||
"""
|
||||
self.send_key(f"ctrl-alt-delete")
|
||||
self.connected = False
|
||||
|
||||
def wait_for_x(self) -> None:
|
||||
"""Wait until it is possible to connect to the X server. Note that
|
||||
testing the existence of /tmp/.X11-unix/X0 is insufficient.
|
||||
|
|
|
@ -13,6 +13,8 @@ import ./make-test-python.nix ({ pkgs, latestKernel ? false, ... }:
|
|||
};
|
||||
|
||||
testScript = ''
|
||||
machine.start(allow_reboot = True)
|
||||
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
|
||||
machine.screenshot("postboot")
|
||||
|
@ -53,7 +55,14 @@ import ./make-test-python.nix ({ pkgs, latestKernel ? false, ... }:
|
|||
machine.screenshot("getty")
|
||||
|
||||
with subtest("Check whether ctrl-alt-delete works"):
|
||||
machine.send_key("ctrl-alt-delete")
|
||||
machine.wait_for_shutdown()
|
||||
boot_id1 = machine.succeed("cat /proc/sys/kernel/random/boot_id").strip()
|
||||
assert boot_id1 != ""
|
||||
|
||||
machine.reboot()
|
||||
|
||||
boot_id2 = machine.succeed("cat /proc/sys/kernel/random/boot_id").strip()
|
||||
assert boot_id2 != ""
|
||||
|
||||
assert boot_id1 != boot_id2
|
||||
'';
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue