diff options
author | William A. Kennington III <william@wkennington.com> | 2015-09-29 15:54:33 -0700 |
---|---|---|
committer | William A. Kennington III <william@wkennington.com> | 2015-09-29 15:54:33 -0700 |
commit | 271972de0a7f0027f33d2bf3098070f1a73bbc55 (patch) | |
tree | c37c532df1e46c3ad5e5a51f713cb35fdd374373 /nixos/tests | |
parent | 48a791d27062c71ced0921920d95fdd991b35107 (diff) | |
parent | ea4850ca6438d62012d2f3caec1c52c1653192b0 (diff) | |
download | nixlib-271972de0a7f0027f33d2bf3098070f1a73bbc55.tar nixlib-271972de0a7f0027f33d2bf3098070f1a73bbc55.tar.gz nixlib-271972de0a7f0027f33d2bf3098070f1a73bbc55.tar.bz2 nixlib-271972de0a7f0027f33d2bf3098070f1a73bbc55.tar.lz nixlib-271972de0a7f0027f33d2bf3098070f1a73bbc55.tar.xz nixlib-271972de0a7f0027f33d2bf3098070f1a73bbc55.tar.zst nixlib-271972de0a7f0027f33d2bf3098070f1a73bbc55.zip |
Merge branch 'master.upstream' into staging.upstream
Diffstat (limited to 'nixos/tests')
-rw-r--r-- | nixos/tests/ec2.nix | 79 | ||||
-rw-r--r-- | nixos/tests/make-test.nix | 2 | ||||
-rw-r--r-- | nixos/tests/virtualbox.nix | 7 |
3 files changed, 58 insertions, 30 deletions
diff --git a/nixos/tests/ec2.nix b/nixos/tests/ec2.nix index 1296ff4e8e30..b12d498e3a09 100644 --- a/nixos/tests/ec2.nix +++ b/nixos/tests/ec2.nix @@ -9,9 +9,18 @@ let (import ../lib/eval-config.nix { inherit system; modules = [ - ../maintainers/scripts/ec2/amazon-hvm-config.nix + ../maintainers/scripts/ec2/amazon-image.nix ../../nixos/modules/testing/test-instrumentation.nix - { boot.initrd.kernelModules = [ "virtio" "virtio_blk" "virtio_pci" "virtio_ring" ]; } + { boot.initrd.kernelModules = [ "virtio" "virtio_blk" "virtio_pci" "virtio_ring" ]; + ec2.hvm = true; + + # Hack to make the partition resizing work in QEMU. + boot.initrd.postDeviceCommands = mkBefore + '' + ln -s vda /dev/xvda + ln -s vda1 /dev/xvda1 + ''; + } ]; }).config.system.build.amazonImage; @@ -34,41 +43,49 @@ let nodes = {}; testScript = '' - use File::Temp qw/ tempfile /; - my ($fh, $filename) = tempfile(); - - `qemu-img create -f qcow2 -o backing_file=${image}/nixos.img $filename`; - - my $startCommand = "qemu-kvm -m 768 -net nic -net 'user,net=169.254.0.0/16,guestfwd=tcp:169.254.169.254:80-cmd:${pkgs.micro-httpd}/bin/micro_httpd ${metaData}'"; - $startCommand .= " -drive file=" . Cwd::abs_path($filename) . ",if=virtio,werror=report"; + my $imageDir = ($ENV{'TMPDIR'} // "/tmp") . "/vm-state-machine"; + mkdir $imageDir, 0700; + my $diskImage = "$imageDir/machine.qcow2"; + system("qemu-img create -f qcow2 -o backing_file=${image}/nixos.img $diskImage") == 0 or die; + system("qemu-img resize $diskImage 10G") == 0 or die; + + # Note: we use net=169.0.0.0/8 rather than + # net=169.254.0.0/16 to prevent dhcpcd from getting horribly + # confused. (It would get a DHCP lease in the 169.254.* + # range, which it would then configure and prompty delete + # again when it deletes link-local addresses.) Ideally we'd + # turn off the DHCP server, but qemu does not have an option + # to do that. + my $startCommand = "qemu-kvm -m 768 -net nic -net 'user,net=169.0.0.0/8,guestfwd=tcp:169.254.169.254:80-cmd:${pkgs.micro-httpd}/bin/micro_httpd ${metaData}'"; + $startCommand .= " -drive file=$diskImage,if=virtio,werror=report"; $startCommand .= " \$QEMU_OPTS"; my $machine = createMachine({ startCommand => $startCommand }); + ${script} ''; }; - snakeOilPrivateKey = [ - "-----BEGIN EC PRIVATE KEY-----" - "MHcCAQEEIHQf/khLvYrQ8IOika5yqtWvI0oquHlpRLTZiJy5dRJmoAoGCCqGSM49" - "AwEHoUQDQgAEKF0DYGbBwbj06tA3fd/+yP44cvmwmHBWXZCKbS+RQlAKvLXMWkpN" - "r1lwMyJZoSGgBHoUahoYjTh9/sJL7XLJtA==" - "-----END EC PRIVATE KEY-----" - ]; - - snakeOilPublicKey = pkgs.lib.concatStrings [ - "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHA" - "yNTYAAABBBChdA2BmwcG49OrQN33f/sj+OHL5sJhwVl2Qim0vkUJQCry1zFpKTa" - "9ZcDMiWaEhoAR6FGoaGI04ff7CS+1yybQ= snakeoil" - ]; + snakeOilPrivateKey = '' + -----BEGIN OPENSSH PRIVATE KEY----- + b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW + QyNTUxOQAAACDEPmwZv5dDPrMUaq0dDP+6eBTTe+QNrz14KBEIdhHd1QAAAJDufJ4S7nye + EgAAAAtzc2gtZWQyNTUxOQAAACDEPmwZv5dDPrMUaq0dDP+6eBTTe+QNrz14KBEIdhHd1Q + AAAECgwbDlYATM5/jypuptb0GF/+zWZcJfoVIFBG3LQeRyGsQ+bBm/l0M+sxRqrR0M/7p4 + FNN75A2vPXgoEQh2Ed3VAAAADEVDMiB0ZXN0IGtleQE= + -----END OPENSSH PRIVATE KEY----- + ''; + + snakeOilPublicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMQ+bBm/l0M+sxRqrR0M/7p4FNN75A2vPXgoEQh2Ed3V EC2 test key"; + in { boot-ec2-nixops = makeEc2Test { name = "nixops-userdata"; sshPublicKey = snakeOilPublicKey; # That's right folks! My user's key is also the host key! userData = '' - SSH_HOST_DSA_KEY_PUB:${snakeOilPublicKey} - SSH_HOST_DSA_KEY:${pkgs.lib.concatStringsSep "|" snakeOilPrivateKey} + SSH_HOST_ED25519_KEY_PUB:${snakeOilPublicKey} + SSH_HOST_ED25519_KEY:${replaceStrings ["\n"] ["|"] snakeOilPrivateKey} ''; script = '' $machine->start; @@ -80,8 +97,9 @@ in { # Let's install our client private key $machine->succeed("mkdir -p ~/.ssh"); - ${concatMapStrings (s: "$machine->succeed('echo ${s} >> ~/.ssh/id_ecdsa');") snakeOilPrivateKey} - $machine->succeed("chmod 600 ~/.ssh/id_ecdsa"); + + $machine->succeed("echo '${snakeOilPrivateKey}' > ~/.ssh/id_ed25519"); + $machine->succeed("chmod 600 ~/.ssh/id_ed25519"); # We haven't configured the host key yet, so this should still fail $machine->fail("ssh -o BatchMode=yes localhost exit"); @@ -90,7 +108,16 @@ in { $machine->succeed("echo localhost,127.0.0.1 ${snakeOilPublicKey} > ~/.ssh/known_hosts"); $machine->succeed("ssh -o BatchMode=yes localhost exit"); + # Test whether the root disk was resized. + my $blocks = $machine->succeed("stat -c %b -f /"); + my $bsize = $machine->succeed("stat -c %S -f /"); + my $size = $blocks * $bsize; + die "wrong free space $size" if $size < 9.7 * 1024 * 1024 * 1024 || $size > 10 * 1024 * 1024 * 1024; + + # Just to make sure resizing is idempotent. $machine->shutdown; + $machine->start; + $machine->waitForFile("/root/user-data"); ''; }; diff --git a/nixos/tests/make-test.nix b/nixos/tests/make-test.nix index 285ca5b71d6e..f3e26aa7e74d 100644 --- a/nixos/tests/make-test.nix +++ b/nixos/tests/make-test.nix @@ -2,4 +2,4 @@ f: { system ? builtins.currentSystem, ... } @ args: with import ../lib/testing.nix { inherit system; }; -makeTest (if builtins.isFunction f then f (args // { inherit pkgs; }) else f) +makeTest (if builtins.isFunction f then f (args // { inherit pkgs; inherit (pkgs) lib; }) else f) diff --git a/nixos/tests/virtualbox.nix b/nixos/tests/virtualbox.nix index 728d46d446ea..01fcd15fd8bb 100644 --- a/nixos/tests/virtualbox.nix +++ b/nixos/tests/virtualbox.nix @@ -141,6 +141,7 @@ import ./make-test.nix ({ pkgs, ... }: with pkgs.lib; let vmFlags = mkFlags ([ "--uart1 0x3F8 4" "--uartmode1 client /run/virtualbox-log-${name}.sock" + "--memory 768" ] ++ (attrs.vmFlags or [])); controllerFlags = mkFlags [ @@ -324,7 +325,7 @@ in { mkVMConf = name: val: val.machine // { key = "${name}-config"; }; vmConfigs = mapAttrsToList mkVMConf vboxVMs; in [ ./common/user-account.nix ./common/x11.nix ] ++ vmConfigs; - virtualisation.memorySize = 1024; + virtualisation.memorySize = 2048; virtualisation.virtualbox.host.enable = true; users.extraUsers.alice.extraGroups = let inherit (config.virtualisation.virtualbox.host) enableHardening; @@ -412,6 +413,7 @@ in { shutdownVM_detectvirt; my $result = $machine->succeed("cat '$detectvirt_sharepath/result'"); chomp $result; + destroyVM_detectvirt; die "systemd-detect-virt returned \"$result\" instead of \"oracle\"" if $result ne "oracle"; }; @@ -422,11 +424,10 @@ in { vbm("startvm test1"); waitForStartup_test1; + waitForVMBoot_test1; vbm("startvm test2"); waitForStartup_test2; - - waitForVMBoot_test1; waitForVMBoot_test2; $machine->screenshot("net_booted"); |