85c8cc7ce9
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.
46 lines
1.4 KiB
Nix
46 lines
1.4 KiB
Nix
import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
|
name = "kexec";
|
|
meta = with lib.maintainers; {
|
|
maintainers = [ flokli lassulus ];
|
|
};
|
|
|
|
nodes = {
|
|
node1 = { ... }: {
|
|
virtualisation.vlans = [ ];
|
|
virtualisation.memorySize = 4 * 1024;
|
|
};
|
|
|
|
node2 = { modulesPath, ... }: {
|
|
virtualisation.vlans = [ ];
|
|
environment.systemPackages = [ pkgs.hello ];
|
|
imports = [
|
|
"${modulesPath}/installer/netboot/netboot-minimal.nix"
|
|
];
|
|
};
|
|
};
|
|
|
|
testScript = { nodes, ... }: ''
|
|
# Test whether reboot via kexec works.
|
|
node1.wait_for_unit("multi-user.target")
|
|
node1.succeed('kexec --load /run/current-system/kernel --initrd /run/current-system/initrd --command-line "$(</proc/cmdline)"')
|
|
node1.execute("systemctl kexec >&2 &", check_return=False)
|
|
node1.connected = False
|
|
node1.connect()
|
|
node1.wait_for_unit("multi-user.target")
|
|
|
|
# Check if the machine with netboot-minimal.nix profile boots up
|
|
node2.wait_for_unit("multi-user.target")
|
|
node2.shutdown()
|
|
|
|
# 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.succeed('! test -e /run/foo')
|
|
node1.succeed('hello')
|
|
node1.succeed('[ "$(hostname)" = "node2" ]')
|
|
|
|
node1.shutdown()
|
|
'';
|
|
})
|