at 21.11-pre 3.4 kB view raw
1{ system ? builtins.currentSystem, 2 config ? {}, 3 pkgs ? import ../.. { inherit system config; } 4}: 5 6with import ../lib/testing-python.nix { inherit system pkgs; }; 7 8let 9 10 makeZfsTest = name: 11 { kernelPackage ? if enableUnstable then pkgs.linuxPackages_latest else pkgs.linuxPackages 12 , enableUnstable ? false 13 , extraTest ? "" 14 }: 15 makeTest { 16 name = "zfs-" + name; 17 meta = with pkgs.lib.maintainers; { 18 maintainers = [ adisbladis ]; 19 }; 20 21 machine = { pkgs, lib, ... }: { 22 virtualisation.emptyDiskImages = [ 4096 ]; 23 networking.hostId = "deadbeef"; 24 boot.kernelPackages = kernelPackage; 25 boot.supportedFilesystems = [ "zfs" ]; 26 boot.zfs.enableUnstable = enableUnstable; 27 28 environment.systemPackages = [ pkgs.parted ]; 29 30 # Setup regular fileSystems machinery to ensure forceImportAll can be 31 # tested via the regular service units. 32 virtualisation.fileSystems = { 33 "/forcepool" = { 34 device = "forcepool"; 35 fsType = "zfs"; 36 options = [ "noauto" ]; 37 }; 38 }; 39 40 # forcepool doesn't exist at first boot, and we need to manually test 41 # the import after tweaking the hostId. 42 systemd.services.zfs-import-forcepool.wantedBy = lib.mkVMOverride []; 43 systemd.targets.zfs.wantedBy = lib.mkVMOverride []; 44 boot.zfs.forceImportAll = true; 45 # /dev/disk/by-id doesn't get populated in the NixOS test framework 46 boot.zfs.devNodes = "/dev/disk/by-uuid"; 47 }; 48 49 testScript = '' 50 machine.succeed( 51 "modprobe zfs", 52 "zpool status", 53 "ls /dev", 54 "mkdir /tmp/mnt", 55 "udevadm settle", 56 "parted --script /dev/vdb mklabel msdos", 57 "parted --script /dev/vdb -- mkpart primary 1024M -1s", 58 "udevadm settle", 59 "zpool create rpool /dev/vdb1", 60 "zfs create -o mountpoint=legacy rpool/root", 61 "mount -t zfs rpool/root /tmp/mnt", 62 "udevadm settle", 63 "umount /tmp/mnt", 64 "zpool destroy rpool", 65 "udevadm settle", 66 ) 67 68 machine.succeed( 69 'echo password | zpool create -o altroot="/tmp/mnt" ' 70 + "-O encryption=aes-256-gcm -O keyformat=passphrase rpool /dev/vdb1", 71 "zfs create -o mountpoint=legacy rpool/root", 72 "mount -t zfs rpool/root /tmp/mnt", 73 "udevadm settle", 74 "umount /tmp/mnt", 75 "zpool destroy rpool", 76 "udevadm settle", 77 ) 78 79 with subtest("boot.zfs.forceImportAll works"): 80 machine.succeed( 81 "rm /etc/hostid", 82 "zgenhostid deadcafe", 83 "zpool create forcepool /dev/vdb1 -O mountpoint=legacy", 84 ) 85 machine.shutdown() 86 machine.start() 87 machine.succeed("udevadm settle") 88 machine.fail("zpool import forcepool") 89 machine.succeed( 90 "systemctl start zfs-import-forcepool.service", 91 "mount -t zfs forcepool /tmp/mnt", 92 ) 93 '' + extraTest; 94 95 }; 96 97 98in { 99 100 stable = makeZfsTest "stable" { }; 101 102 unstable = makeZfsTest "unstable" { 103 enableUnstable = true; 104 }; 105 106 installer = (import ./installer.nix { }).zfsroot; 107}