| 
									
										
										
										
											2018-11-11 17:41:11 +09:00
										 |  |  | { system ? builtins.currentSystem, | 
					
						
							|  |  |  |   config ? {}, | 
					
						
							|  |  |  |   pkgs ? import ../.. { inherit system config; } | 
					
						
							|  |  |  | }: | 
					
						
							| 
									
										
										
										
											2017-11-14 02:56:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-28 08:54:17 +01:00
										 |  |  | with import ../lib/testing-python.nix { inherit system pkgs; }; | 
					
						
							| 
									
										
										
										
											2017-11-14 02:56:03 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | let | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   makeZfsTest = name: | 
					
						
							| 
									
										
										
										
											2021-01-10 13:23:32 +01:00
										 |  |  |     { kernelPackage ? if enableUnstable then pkgs.linuxPackages_latest else pkgs.linuxPackages | 
					
						
							| 
									
										
										
										
											2017-11-14 02:56:03 +08:00
										 |  |  |     , enableUnstable ? false | 
					
						
							|  |  |  |     , extraTest ? "" | 
					
						
							|  |  |  |     }: | 
					
						
							|  |  |  |     makeTest { | 
					
						
							|  |  |  |       name = "zfs-" + name; | 
					
						
							| 
									
										
										
										
											2021-01-10 20:08:30 +01:00
										 |  |  |       meta = with pkgs.lib.maintainers; { | 
					
						
							| 
									
										
										
										
											2017-11-14 02:56:03 +08:00
										 |  |  |         maintainers = [ adisbladis ]; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-18 15:05:22 +02:00
										 |  |  |       machine = { pkgs, lib, ... }: { | 
					
						
							| 
									
										
										
										
											2020-01-28 08:54:17 +01:00
										 |  |  |         virtualisation.emptyDiskImages = [ 4096 ]; | 
					
						
							|  |  |  |         networking.hostId = "deadbeef"; | 
					
						
							|  |  |  |         boot.kernelPackages = kernelPackage; | 
					
						
							|  |  |  |         boot.supportedFilesystems = [ "zfs" ]; | 
					
						
							|  |  |  |         boot.zfs.enableUnstable = enableUnstable; | 
					
						
							| 
									
										
										
										
											2017-11-14 02:56:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-28 08:54:17 +01:00
										 |  |  |         environment.systemPackages = [ pkgs.parted ]; | 
					
						
							| 
									
										
										
										
											2020-08-18 15:05:22 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Setup regular fileSystems machinery to ensure forceImportAll can be | 
					
						
							|  |  |  |         # tested via the regular service units. | 
					
						
							| 
									
										
										
										
											2021-02-14 12:23:50 +01:00
										 |  |  |         virtualisation.fileSystems = { | 
					
						
							| 
									
										
										
										
											2020-08-18 15:05:22 +02:00
										 |  |  |           "/forcepool" = { | 
					
						
							|  |  |  |             device = "forcepool"; | 
					
						
							|  |  |  |             fsType = "zfs"; | 
					
						
							|  |  |  |             options = [ "noauto" ]; | 
					
						
							|  |  |  |           }; | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # forcepool doesn't exist at first boot, and we need to manually test | 
					
						
							|  |  |  |         # the import after tweaking the hostId. | 
					
						
							|  |  |  |         systemd.services.zfs-import-forcepool.wantedBy = lib.mkVMOverride []; | 
					
						
							|  |  |  |         systemd.targets.zfs.wantedBy = lib.mkVMOverride []; | 
					
						
							|  |  |  |         boot.zfs.forceImportAll = true; | 
					
						
							|  |  |  |         # /dev/disk/by-id doesn't get populated in the NixOS test framework | 
					
						
							|  |  |  |         boot.zfs.devNodes = "/dev/disk/by-uuid"; | 
					
						
							| 
									
										
										
										
											2020-01-28 08:54:17 +01:00
										 |  |  |       }; | 
					
						
							| 
									
										
										
										
											2017-11-14 02:56:03 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |       testScript = ''
 | 
					
						
							| 
									
										
										
										
											2019-10-27 13:53:36 +01:00
										 |  |  |         machine.succeed( | 
					
						
							| 
									
										
										
										
											2020-01-28 08:54:17 +01:00
										 |  |  |             "modprobe zfs", | 
					
						
							|  |  |  |             "zpool status", | 
					
						
							|  |  |  |             "ls /dev", | 
					
						
							|  |  |  |             "mkdir /tmp/mnt", | 
					
						
							|  |  |  |             "udevadm settle", | 
					
						
							|  |  |  |             "parted --script /dev/vdb mklabel msdos", | 
					
						
							|  |  |  |             "parted --script /dev/vdb -- mkpart primary 1024M -1s", | 
					
						
							|  |  |  |             "udevadm settle", | 
					
						
							|  |  |  |             "zpool create rpool /dev/vdb1", | 
					
						
							|  |  |  |             "zfs create -o mountpoint=legacy rpool/root", | 
					
						
							|  |  |  |             "mount -t zfs rpool/root /tmp/mnt", | 
					
						
							|  |  |  |             "udevadm settle", | 
					
						
							|  |  |  |             "umount /tmp/mnt", | 
					
						
							|  |  |  |             "zpool destroy rpool", | 
					
						
							|  |  |  |             "udevadm settle", | 
					
						
							| 
									
										
										
										
											2019-10-27 13:53:36 +01:00
										 |  |  |         ) | 
					
						
							| 
									
										
										
										
											2020-02-19 11:38:15 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         machine.succeed( | 
					
						
							|  |  |  |             'echo password | zpool create -o altroot="/tmp/mnt" ' | 
					
						
							|  |  |  |             + "-O encryption=aes-256-gcm -O keyformat=passphrase rpool /dev/vdb1", | 
					
						
							|  |  |  |             "zfs create -o mountpoint=legacy rpool/root", | 
					
						
							|  |  |  |             "mount -t zfs rpool/root /tmp/mnt", | 
					
						
							|  |  |  |             "udevadm settle", | 
					
						
							|  |  |  |             "umount /tmp/mnt", | 
					
						
							|  |  |  |             "zpool destroy rpool", | 
					
						
							|  |  |  |             "udevadm settle", | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2020-08-18 15:05:22 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         with subtest("boot.zfs.forceImportAll works"): | 
					
						
							|  |  |  |             machine.succeed( | 
					
						
							|  |  |  |                 "rm /etc/hostid", | 
					
						
							|  |  |  |                 "zgenhostid deadcafe", | 
					
						
							|  |  |  |                 "zpool create forcepool /dev/vdb1 -O mountpoint=legacy", | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |             machine.shutdown() | 
					
						
							|  |  |  |             machine.start() | 
					
						
							|  |  |  |             machine.succeed("udevadm settle") | 
					
						
							|  |  |  |             machine.fail("zpool import forcepool") | 
					
						
							|  |  |  |             machine.succeed( | 
					
						
							|  |  |  |                 "systemctl start zfs-import-forcepool.service", | 
					
						
							|  |  |  |                 "mount -t zfs forcepool /tmp/mnt", | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2017-11-14 02:56:03 +08:00
										 |  |  |       '' + extraTest;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   stable = makeZfsTest "stable" { }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   unstable = makeZfsTest "unstable" { | 
					
						
							|  |  |  |     enableUnstable = true; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   installer = (import ./installer.nix { }).zfsroot; | 
					
						
							|  |  |  | } |