1{ system ? builtins.currentSystem }:
2
3with import ../lib/testing.nix { inherit system; };
4with import ../lib/qemu-flags.nix;
5with pkgs.lib;
6
7let
8
9 iso =
10 (import ../lib/eval-config.nix {
11 inherit system;
12 modules =
13 [ ../modules/installer/cd-dvd/installation-cd-minimal.nix
14 ../modules/testing/test-instrumentation.nix
15 ];
16 }).config.system.build.isoImage;
17
18 makeBootTest = name: machineConfig:
19 makeTest {
20 inherit iso;
21 name = "boot-" + name;
22 nodes = { };
23 testScript =
24 ''
25 my $machine = createMachine({ ${machineConfig}, qemuFlags => '-m 768' });
26 $machine->start;
27 $machine->waitForUnit("multi-user.target");
28 $machine->shutdown;
29 '';
30 };
31in {
32
33 biosCdrom = makeBootTest "bios-cdrom" ''
34 cdrom => glob("${iso}/iso/*.iso")
35 '';
36
37 biosUsb = makeBootTest "bios-usb" ''
38 usb => glob("${iso}/iso/*.iso")
39 '';
40
41 uefiCdrom = makeBootTest "uefi-cdrom" ''
42 cdrom => glob("${iso}/iso/*.iso"),
43 bios => '${pkgs.OVMF.fd}/FV/OVMF.fd'
44 '';
45
46 uefiUsb = makeBootTest "uefi-usb" ''
47 usb => glob("${iso}/iso/*.iso"),
48 bios => '${pkgs.OVMF.fd}/FV/OVMF.fd'
49 '';
50
51 netboot = let
52 config = (import ../lib/eval-config.nix {
53 inherit system;
54 modules =
55 [ ../modules/installer/netboot/netboot.nix
56 ../modules/testing/test-instrumentation.nix
57 { key = "serial"; }
58 ];
59 }).config;
60 ipxeScriptDir = pkgs.writeTextFile {
61 name = "ipxeScriptDir";
62 text = ''
63 #!ipxe
64 dhcp
65 kernel bzImage init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} console=ttyS0
66 initrd initrd
67 boot
68 '';
69 destination = "/boot.ipxe";
70 };
71 ipxeBootDir = pkgs.symlinkJoin {
72 name = "ipxeBootDir";
73 paths = [
74 config.system.build.netbootRamdisk
75 config.system.build.kernel
76 ipxeScriptDir
77 ];
78 };
79 in
80 makeTest {
81 name = "boot-netboot";
82 nodes = { };
83 testScript =
84 ''
85 my $machine = createMachine({ qemuFlags => '-boot order=n -net nic,model=e1000 -net user,tftp=${ipxeBootDir}/,bootfile=boot.ipxe -m 2000M' });
86 $machine->start;
87 $machine->waitForUnit("multi-user.target");
88 $machine->shutdown;
89 '';
90 };
91}