From 85c8cc7ce9eab9cc407036c8764a34b4300a6134 Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Sat, 20 May 2023 17:02:55 +0200 Subject: [PATCH 1/3] nixosTests.kexec: do not use bootloader There's no reason to use a bootloader when testing kexec, this is a feature that reboots *directly* in the kernel, if anything, we should just direct boot the kernel and reboots in the kernel. A bootloader test really makes sense to test "default" systemctl kexec behavior which is already broken because systemctl kexec will read the ESP to determine what to kexec by default. --- nixos/tests/kexec.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/nixos/tests/kexec.nix b/nixos/tests/kexec.nix index 3f5a6f521af..c828215bf53 100644 --- a/nixos/tests/kexec.nix +++ b/nixos/tests/kexec.nix @@ -8,10 +8,6 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: { node1 = { ... }: { virtualisation.vlans = [ ]; virtualisation.memorySize = 4 * 1024; - virtualisation.useBootLoader = true; - virtualisation.useEFIBoot = true; - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; }; node2 = { modulesPath, ... }: { From 7088e386ff9eb2be501290354cc31faa9c0d6fbb Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Thu, 25 May 2023 02:24:56 +0200 Subject: [PATCH 2/3] nixosTests.kexec: reconnect properly after 2nd kexec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By some miracle, before, it was possible to reconnect to the `node1` without doing any relevant dance. But now we are direct booting (¿), it seems like we need to do the right things. This introduces a `check_output` flag for `execute` because we do not want to steal the messages from the backdoor service as we might execute the kexec too fast compared to when we will reconnect. Therefore, we will let the message in the pipe if needed. --- nixos/lib/test-driver/test_driver/machine.py | 9 ++++++++- nixos/tests/kexec.nix | 7 ++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/nixos/lib/test-driver/test_driver/machine.py b/nixos/lib/test-driver/test_driver/machine.py index 81d3e19084e..7ef0ae89910 100644 --- a/nixos/lib/test-driver/test_driver/machine.py +++ b/nixos/lib/test-driver/test_driver/machine.py @@ -514,7 +514,11 @@ class Machine: return "".join(output_buffer) def execute( - self, command: str, check_return: bool = True, timeout: Optional[int] = 900 + self, + command: str, + check_return: bool = True, + check_output: bool = True, + timeout: Optional[int] = 900, ) -> Tuple[int, str]: self.run_callbacks() self.connect() @@ -535,6 +539,9 @@ class Machine: assert self.shell self.shell.send(out_command.encode()) + if not check_output: + return (-2, "") + # Get the output output = base64.b64decode(self._next_newline_closed_block_from_shell()) diff --git a/nixos/tests/kexec.nix b/nixos/tests/kexec.nix index c828215bf53..5c0f0b60c85 100644 --- a/nixos/tests/kexec.nix +++ b/nixos/tests/kexec.nix @@ -15,6 +15,8 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: { environment.systemPackages = [ pkgs.hello ]; imports = [ "${modulesPath}/installer/netboot/netboot-minimal.nix" + "${modulesPath}/testing/test-instrumentation.nix" + "${modulesPath}/profiles/qemu-guest.nix" ]; }; }; @@ -35,7 +37,10 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: { # Kexec node1 to the toplevel of node2 via the kexec-boot script node1.succeed('touch /run/foo') node1.fail('hello') - node1.execute('${nodes.node2.config.system.build.kexecTree}/kexec-boot', check_return=False) + node1.execute('${nodes.node2.config.system.build.kexecTree}/kexec-boot', check_output=False) + node1.connected = False + node1.connect() + node1.wait_for_unit("multi-user.target") node1.succeed('! test -e /run/foo') node1.succeed('hello') node1.succeed('[ "$(hostname)" = "node2" ]') From 627a8838fa728e0f2bbe1c9fbe9b19e49e9cefc9 Mon Sep 17 00:00:00 2001 From: Raito Bezarius Date: Fri, 16 Jun 2023 14:15:44 +0200 Subject: [PATCH 3/3] nixosTests.kexec: do not use module argument `config` It is deprecated now. --- nixos/tests/kexec.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/tests/kexec.nix b/nixos/tests/kexec.nix index 5c0f0b60c85..4d1be497b8b 100644 --- a/nixos/tests/kexec.nix +++ b/nixos/tests/kexec.nix @@ -37,7 +37,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: { # Kexec node1 to the toplevel of node2 via the kexec-boot script node1.succeed('touch /run/foo') node1.fail('hello') - node1.execute('${nodes.node2.config.system.build.kexecTree}/kexec-boot', check_output=False) + node1.execute('${nodes.node2.system.build.kexecTree}/kexec-boot', check_output=False) node1.connected = False node1.connect() node1.wait_for_unit("multi-user.target")