![Andrew Childs](/assets/img/avatar_default.png)
When IPXE tests were added, an option was added for configuring only the frontend, and the backend configuration was dropped entirely. This caused most installer tests to fail.
107 lines
3.1 KiB
Nix
107 lines
3.1 KiB
Nix
{ system ? builtins.currentSystem,
|
|
config ? {},
|
|
pkgs ? import ../.. { inherit system config; }
|
|
}:
|
|
|
|
with import ../lib/testing.nix { inherit system pkgs; };
|
|
with pkgs.lib;
|
|
|
|
let
|
|
|
|
iso =
|
|
(import ../lib/eval-config.nix {
|
|
inherit system;
|
|
modules =
|
|
[ ../modules/installer/cd-dvd/installation-cd-minimal.nix
|
|
../modules/testing/test-instrumentation.nix
|
|
];
|
|
}).config.system.build.isoImage;
|
|
|
|
perlAttrs = params: "{ ${concatStringsSep "," (mapAttrsToList (name: param: "${name} => '${toString param}'") params)} }";
|
|
|
|
makeBootTest = name: extraConfig:
|
|
let
|
|
machineConfig = perlAttrs ({ qemuFlags = "-m 768"; } // extraConfig);
|
|
in
|
|
makeTest {
|
|
inherit iso;
|
|
name = "boot-" + name;
|
|
nodes = { };
|
|
testScript =
|
|
''
|
|
my $machine = createMachine(${machineConfig});
|
|
$machine->start;
|
|
$machine->waitForUnit("multi-user.target");
|
|
$machine->succeed("nix verify -r --no-trust /run/current-system");
|
|
|
|
# Test whether the channel got installed correctly.
|
|
$machine->succeed("nix-instantiate --dry-run '<nixpkgs>' -A hello");
|
|
$machine->succeed("nix-env --dry-run -iA nixos.procps");
|
|
|
|
$machine->shutdown;
|
|
'';
|
|
};
|
|
|
|
makeNetbootTest = name: extraConfig:
|
|
let
|
|
config = (import ../lib/eval-config.nix {
|
|
inherit system;
|
|
modules =
|
|
[ ../modules/installer/netboot/netboot.nix
|
|
../modules/testing/test-instrumentation.nix
|
|
{ key = "serial"; }
|
|
];
|
|
}).config;
|
|
ipxeBootDir = pkgs.symlinkJoin {
|
|
name = "ipxeBootDir";
|
|
paths = [
|
|
config.system.build.netbootRamdisk
|
|
config.system.build.kernel
|
|
config.system.build.netbootIpxeScript
|
|
];
|
|
};
|
|
machineConfig = perlAttrs ({
|
|
qemuFlags = "-boot order=n -m 2000";
|
|
netBackendArgs = "tftp=${ipxeBootDir},bootfile=netboot.ipxe";
|
|
} // extraConfig);
|
|
in
|
|
makeTest {
|
|
name = "boot-netboot-" + name;
|
|
nodes = { };
|
|
testScript =
|
|
''
|
|
my $machine = createMachine(${machineConfig});
|
|
$machine->start;
|
|
$machine->waitForUnit("multi-user.target");
|
|
$machine->shutdown;
|
|
'';
|
|
};
|
|
in {
|
|
|
|
biosCdrom = makeBootTest "bios-cdrom" {
|
|
cdrom = ''glob("${iso}/iso/*.iso")'';
|
|
};
|
|
|
|
biosUsb = makeBootTest "bios-usb" {
|
|
usb = ''glob("${iso}/iso/*.iso")'';
|
|
};
|
|
|
|
uefiCdrom = makeBootTest "uefi-cdrom" {
|
|
cdrom = ''glob("${iso}/iso/*.iso"'';
|
|
bios = ''"${pkgs.OVMF.fd}/FV/OVMF.fd"'';
|
|
};
|
|
|
|
uefiUsb = makeBootTest "uefi-usb" {
|
|
usb = ''glob("${iso}/iso/*.iso")'';
|
|
bios = ''"${pkgs.OVMF.fd}/FV/OVMF.fd"'';
|
|
};
|
|
|
|
biosNetboot = makeNetbootTest "bios" {};
|
|
|
|
uefiNetboot = makeNetbootTest "uefi" {
|
|
bios = ''"${pkgs.OVMF.fd}/FV/OVMF.fd"'';
|
|
# Custom ROM is needed for EFI PXE boot. I failed to understand exactly why, because QEMU should still use iPXE for EFI.
|
|
netFrontendArgs = ''romfile="${pkgs.ipxe}/ipxe.efirom"'';
|
|
};
|
|
}
|