at 16.09-beta 2.5 kB view raw
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}/FV/OVMF.fd' 44 ''; 45 46 uefiUsb = makeBootTest "uefi-usb" '' 47 usb => glob("${iso}/iso/*.iso"), 48 bios => '${pkgs.OVMF}/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}