summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorBob van der Linden <bobvanderlinden@gmail.com>2014-11-19 23:18:44 +0100
committerVladimír Čunát <vcunat@gmail.com>2015-03-24 22:09:07 +0100
commitc57a912016025f66d666f0da26bc998b49ae55a7 (patch)
treeb6ae5051493137fd826bcc71d4ecf30e72abac02 /nixos
parent9ff9949896c7ff0307ea60dc8d25de340860bfc4 (diff)
nixos: test: add tests for booting installation iso in various ways
Diffstat (limited to 'nixos')
-rw-r--r--nixos/lib/test-driver/Machine.pm4
-rw-r--r--nixos/release.nix4
-rw-r--r--nixos/tests/boot.nix63
3 files changed, 71 insertions, 0 deletions
diff --git a/nixos/lib/test-driver/Machine.pm b/nixos/lib/test-driver/Machine.pm
index 85c2bfa88e1a..e0791692d3ef 100644
--- a/nixos/lib/test-driver/Machine.pm
+++ b/nixos/lib/test-driver/Machine.pm
@@ -37,6 +37,10 @@ sub new {
if defined $args->{hda};
$startCommand .= "-cdrom $args->{cdrom} "
if defined $args->{cdrom};
+ $startCommand .= "-device piix3-usb-uhci -drive id=usbdisk,file=$args->{usb},if=none,readonly -device usb-storage,drive=usbdisk "
+ if defined $args->{usb};
+ $startCommand .= "-bios $args->{bios} "
+ if defined $args->{bios};
$startCommand .= $args->{qemuFlags} || "";
} else {
$startCommand = Cwd::abs_path $startCommand;
diff --git a/nixos/release.nix b/nixos/release.nix
index 1712c90ad33f..90824d459941 100644
--- a/nixos/release.nix
+++ b/nixos/release.nix
@@ -310,6 +310,10 @@ in rec {
tests.udisks2 = callTest tests/udisks2.nix {};
tests.virtualbox = callTest tests/virtualbox.nix {};
tests.xfce = callTest tests/xfce.nix {};
+ tests.bootBiosCdrom = forAllSystems (system: scrubDrv (import tests/boot.nix { inherit system; }).bootBiosCdrom);
+ tests.bootBiosUsb = forAllSystems (system: scrubDrv (import tests/boot.nix { inherit system; }).bootBiosUsb);
+ tests.bootUefiCdrom = forAllSystems (system: scrubDrv (import tests/boot.nix { inherit system; }).bootUefiCdrom);
+ tests.bootUefiUsb = forAllSystems (system: scrubDrv (import tests/boot.nix { inherit system; }).bootUefiUsb);
/* Build a bunch of typical closures so that Hydra can keep track of
diff --git a/nixos/tests/boot.nix b/nixos/tests/boot.nix
new file mode 100644
index 000000000000..2fdbb0c00b85
--- /dev/null
+++ b/nixos/tests/boot.nix
@@ -0,0 +1,63 @@
+{ system ? builtins.currentSystem }:
+
+with import ../lib/testing.nix { inherit system; };
+with import ../lib/qemu-flags.nix;
+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
+ { key = "serial";
+ boot.loader.grub.timeout = mkOverride 0 0;
+
+ # The test cannot access the network, so any sources we
+ # need must be included in the ISO.
+ isoImage.storeContents =
+ [ pkgs.glibcLocales
+ pkgs.sudo
+ pkgs.docbook5
+ pkgs.docbook5_xsl
+ pkgs.grub
+ pkgs.perlPackages.XMLLibXML
+ pkgs.unionfs-fuse
+ pkgs.gummiboot
+ ];
+ }
+ ];
+ }).config.system.build.isoImage;
+
+ makeBootTest = name: machineConfig:
+ makeTest {
+ inherit iso;
+ name = "boot-" + name;
+ nodes = { };
+ testScript =
+ ''
+ my $machine = createMachine({ ${machineConfig}, qemuFlags => '-m 768' });
+ $machine->start;
+ $machine->waitForUnit("multi-user.target");
+ $machine->shutdown;
+ '';
+ };
+in {
+ bootBiosCdrom = makeBootTest "bios-cdrom" ''
+ cdrom => glob("${iso}/iso/*.iso")
+ '';
+ bootBiosUsb = makeBootTest "bios-usb" ''
+ usb => glob("${iso}/iso/*.iso")
+ '';
+ bootUefiCdrom = makeBootTest "uefi-cdrom" ''
+ cdrom => glob("${iso}/iso/*.iso"),
+ bios => '${pkgs.OVMF}/FV/OVMF.fd'
+ '';
+ bootUefiUsb = makeBootTest "uefi-usb" ''
+ usb => glob("${iso}/iso/*.iso"),
+ bios => '${pkgs.OVMF}/FV/OVMF.fd'
+ '';
+ }
+