summary refs log tree commit diff
path: root/nixos/tests/resize-root.nix
blob: c8ccab38ab6f00affb319417d24b7ae26064c548 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import ./make-test.nix ({ pkgs, lib, ...} : {

  meta.maintainers = [ lib.maintainers.eelco ];

  machine = { config, pkgs, ... }: {
    virtualisation.diskSize = 512;
    fileSystems = lib.mkVMOverride {
      "/".autoResize = true;
    };
  };

  testScript =
    ''
      # Create a VM with a 512 MiB disk.
      $machine->start;
      $machine->waitForUnit("multi-user.target");
      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 < 480 * 1024 * 1024 || $size > 512 * 1024 * 1024;
      $machine->succeed("touch /marker");
      $machine->shutdown;

      # Grow the disk to 1024 MiB.
      system("qemu-img resize vm-state-machine/machine.qcow2 1024M") == 0 or die;

      # Start the VM again and check whether the initrd has correctly
      # grown the root filesystem.
      $machine->start;
      $machine->waitForUnit("multi-user.target");
      $machine->succeed("[ -e /marker ]");
      my $blocks = $machine->succeed("stat -c %b -f /");
      my $size = $blocks * $bsize;
      die "wrong free space $size" if $size < 980 * 1024 * 1024 || $size > 1024 * 1024 * 1024;
    '';
})