about summary refs log tree commit diff
path: root/nixos/tests/non-default-filesystems.nix
blob: 7fa75aaad724dd3855f0800d186c5a2b7e21e43b (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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import ./make-test-python.nix ({ lib, pkgs, ... }:
{
  name = "non-default-filesystems";

  nodes.machine =
    { config, pkgs, lib, ... }:
    let
      disk = config.virtualisation.bootDevice;
    in
    {
      virtualisation.useDefaultFilesystems = false;

      boot.initrd.availableKernelModules = [ "btrfs" ];
      boot.supportedFilesystems = [ "btrfs" ];

      boot.initrd.postDeviceCommands = ''
        FSTYPE=$(blkid -o value -s TYPE ${disk} || true)
        if test -z "$FSTYPE"; then
          modprobe btrfs
          ${pkgs.btrfs-progs}/bin/mkfs.btrfs ${disk}

          mkdir /nixos
          mount -t btrfs ${disk} /nixos

          ${pkgs.btrfs-progs}/bin/btrfs subvolume create /nixos/root
          ${pkgs.btrfs-progs}/bin/btrfs subvolume create /nixos/home

          umount /nixos
        fi
      '';

      virtualisation.fileSystems = {
        "/" = {
          device = disk;
          fsType = "btrfs";
          options = [ "subvol=/root" ];
        };

        "/home" = {
          device = disk;
          fsType = "btrfs";
          options = [ "subvol=/home" ];
        };
      };
    };

  testScript = ''
    machine.wait_for_unit("multi-user.target")

    with subtest("BTRFS filesystems are mounted correctly"):
      machine.succeed("grep -E '/dev/vda / btrfs rw,relatime,space_cache=v2,subvolid=[0-9]+,subvol=/root 0 0' /proc/mounts")
      machine.succeed("grep -E '/dev/vda /home btrfs rw,relatime,space_cache=v2,subvolid=[0-9]+,subvol=/home 0 0' /proc/mounts")
  '';
})