Permalink
Browse files

Add test for efi installation

Signed-off-by: Shea Levy <shea@shealevy.com>
  • Loading branch information...
1 parent 7f5e4f5 commit 9a008dc4fd370a57f1815587172bfb15a6b0288c @shlevy shlevy committed Oct 9, 2013
Showing with 132 additions and 0 deletions.
  1. +1 −0 tests/default.nix
  2. +131 −0 tests/efi-installer.nix
View
@@ -11,6 +11,7 @@ with import ../lib/testing.nix { inherit system minimal; };
firefox = makeTest (import ./firefox.nix);
firewall = makeTest (import ./firewall.nix);
installer = makeTests (import ./installer.nix);
+ efi-installer = makeTests (import ./efi-installer.nix);
ipv6 = makeTest (import ./ipv6.nix);
kde4 = makeTest (import ./kde4.nix);
#kexec = makeTest (import ./kexec.nix);
@@ -0,0 +1,131 @@
+# !!! Merge into normal install tests once all livecds are EFIable
+{ pkgs, system, ... }:
+
+with pkgs.lib;
+with import ../lib/qemu-flags.nix;
+
+let
+
+ # Build the ISO. This is the regular installation CD but with test
+ # instrumentation.
+ iso =
+ (import ../lib/eval-config.nix {
+ inherit system;
+ modules =
+ [ ../modules/installer/cd-dvd/installation-cd-efi.nix
+ ../modules/testing/test-instrumentation.nix
+ { key = "serial";
+
+ # 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
+ pkgs.libxslt
+ ];
+ }
+ ];
+ }).config.system.build.isoImage;
+
+
+ # The config to install
+ config = builtins.toFile "configuration.nix" ''
+ { pkgs, ... }: {
+ imports = [ ./hardware.nix <nixos/modules/testing/test-instrumentation.nix> ];
+ boot.kernelPackages = pkgs.linuxPackages_3_10;
+ boot.loader.grub.enable = false;
+ boot.loader.efi.canTouchEfiVariables = true;
+ boot.loader.gummiboot.enable = true;
+ fonts.enableFontConfig = false;
+ fileSystems."/".label = "nixos";
+ }
+ '';
+
+ biosDir = pkgs.runCommand "ovmf-bios" {} ''
+ mkdir $out
+ ln -s ${pkgs.OVMF}/FV/OVMF.fd $out/bios.bin
+ '';
+
+in {
+ simple = {
+ inherit iso;
+ nodes = {};
+ testScript = ''
+ createDisk("harddisk", 4 * 1024);
+
+ my $machine = createMachine({ hda => "harddisk",
+ hdaInterface => "virtio",
+ cdrom => glob("${iso}/iso/*.iso"),
+ qemuFlags => '-L ${biosDir} ${optionalString (pkgs.stdenv.system == "x86_64-linux") "-cpu kvm64"}'});
+ $machine->start;
+
+ # Make sure that we get a login prompt etc.
+ $machine->succeed("echo hello");
+ $machine->waitForUnit("rogue");
+ $machine->waitForUnit("nixos-manual");
+ $machine->waitForUnit("dhcpcd");
+
+ # Partition the disk.
+ $machine->succeed(
+ "sgdisk -Z /dev/vda",
+ "sgdisk -n 1:0:+256M -N 2 -t 1:ef00 -t 2:8300 -c 1:boot -c 2:root /dev/vda",
+ "mkfs.vfat -n BOOT /dev/vda1",
+ "mkfs.ext3 -L nixos /dev/vda2",
+ "mount LABEL=nixos /mnt",
+ "mkdir /mnt/boot",
+ "mount LABEL=BOOT /mnt/boot",
+ );
+
+ # Create the NixOS configuration.
+ $machine->succeed(
+ "mkdir -p /mnt/etc/nixos",
+ "nixos-hardware-scan > /mnt/etc/nixos/hardware.nix",
+ );
+
+ my $cfg = $machine->succeed("cat /mnt/etc/nixos/hardware.nix");
+ print STDERR "Result of the hardware scan:\n$cfg\n";
+
+ $machine->copyFileFromHost(
+ "${config}",
+ "/mnt/etc/nixos/configuration.nix");
+
+ # Perform the installation.
+ $machine->succeed("nixos-install >&2");
+
+ # Do it again to make sure it's idempotent.
+ $machine->succeed("nixos-install >&2");
+
+ $machine->shutdown;
+
+ # Now see if we can boot the installation.
+ my $machine = createMachine({ #hda => "harddisk",
+# hdaInterface => "virtio",
+# !!! OVMF doesn't boot from virtio http://www.mail-archive.com/edk2-devel@lists.sourceforge.net/msg01501.html
+ qemuFlags => '-L ${biosDir} ${optionalString (pkgs.stdenv.system == "x86_64-linux") "-cpu kvm64"} -m 512 -hda ' . Cwd::abs_path('harddisk')});
+
+ # Did /boot get mounted, if appropriate?
+ $machine->waitForUnit("local-fs.target");
+ $machine->succeed("test -e /boot/efi");
+
+ $machine->succeed("nix-env -i coreutils >&2");
+ $machine->succeed("type -tP ls | tee /dev/stderr") =~ /.nix-profile/
+ or die "nix-env failed";
+
+ $machine->succeed("nixos-rebuild switch >&2");
+
+ $machine->shutdown;
+
+ my $machine = createMachine({ #hda => "harddisk",
+# hdaInterface => "virtio",
+ qemuFlags => '-L ${biosDir} ${optionalString (pkgs.stdenv.system == "x86_64-linux") "-cpu kvm64"} -hda ' . Cwd::abs_path('harddisk')});
+ $machine->waitForUnit("network.target");
+ $machine->shutdown;
+ '';
+ };
+}

0 comments on commit 9a008dc

Please sign in to comment.