1{ system ? builtins.currentSystem }:
2
3with import ../lib/testing.nix { inherit system; };
4
5let
6
7 makeTest = import ./make-test.nix;
8
9 makeZfsTest = name:
10 { kernelPackage ? pkgs.linuxPackages_latest
11 , enableUnstable ? false
12 , extraTest ? ""
13 }:
14 makeTest {
15 name = "zfs-" + name;
16 meta = with pkgs.stdenv.lib.maintainers; {
17 maintainers = [ adisbladis ];
18 };
19
20 machine = { config, lib, pkgs, ... }:
21 {
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 = with pkgs; [
29 parted
30 ];
31 };
32
33 testScript = ''
34 $machine->succeed("modprobe zfs");
35 $machine->succeed("zpool status");
36
37 $machine->succeed("ls /dev");
38
39 $machine->succeed(
40 "mkdir /tmp/mnt",
41
42 "udevadm settle",
43 "parted --script /dev/vdb mklabel msdos",
44 "parted --script /dev/vdb -- mkpart primary 1024M -1s",
45 "udevadm settle",
46
47 "zpool create rpool /dev/vdb1",
48 "zfs create -o mountpoint=legacy rpool/root",
49 "mount -t zfs rpool/root /tmp/mnt",
50 "udevadm settle",
51
52 "umount /tmp/mnt",
53 "zpool destroy rpool",
54 "udevadm settle"
55
56 );
57
58 '' + extraTest;
59
60 };
61
62
63in {
64
65 stable = makeZfsTest "stable" { };
66
67 unstable = makeZfsTest "unstable" {
68 enableUnstable = true;
69 extraTest = ''
70 $machine->succeed(
71 "echo password | zpool create -o altroot='/tmp/mnt' -O encryption=aes-256-gcm -O keyformat=passphrase rpool /dev/vdb1",
72 "zfs create -o mountpoint=legacy rpool/root",
73 "mount -t zfs rpool/root /tmp/mnt",
74 "udevadm settle",
75
76 "umount /tmp/mnt",
77 "zpool destroy rpool",
78 "udevadm settle"
79 );
80 '';
81 };
82
83 installer = (import ./installer.nix { }).zfsroot;
84
85}