···
2
-
system ? builtins.currentSystem,
4
-
pkgs ? import ../.. { inherit system config; },
7
-
with import ../lib/testing-python.nix { inherit system pkgs; };
12
-
virtualisation.useBootLoader = true;
13
-
virtualisation.useEFIBoot = true;
14
-
boot.loader.systemd-boot.enable = true;
15
-
boot.loader.efi.canTouchEfiVariables = true;
16
-
environment.systemPackages = [ pkgs.efibootmgr ];
17
-
system.switch.enable = true;
11
+
virtualisation.useBootLoader = true;
12
+
virtualisation.useEFIBoot = true;
13
+
boot.loader.systemd-boot.enable = true;
14
+
boot.loader.efi.canTouchEfiVariables = true;
15
+
environment.systemPackages = [ pkgs.efibootmgr ];
16
+
system.switch.enable = true;
···
partitionTableType = "efixbootldr";
installBootLoader = true;
34
+
# Don't copy the channel to avoid rebuilding this image, and all tests
35
+
# that use it, every time that nixpkgs changes
36
+
copyChannel = false;
···
94
-
name = "systemd-boot";
95
-
meta.maintainers = with pkgs.lib.maintainers; [
98
+
name = "systemd-boot";
99
+
meta.maintainers = with lib.maintainers; [
100
-
nodes.machine = common;
104
+
nodes.machine = common;
104
-
machine.wait_for_unit("multi-user.target")
108
+
machine.wait_for_unit("multi-user.target")
106
-
machine.succeed("test -e /boot/loader/entries/nixos-generation-1.conf")
107
-
machine.succeed("grep 'sort-key nixos' /boot/loader/entries/nixos-generation-1.conf")
110
+
machine.succeed("test -e /boot/loader/entries/nixos-generation-1.conf")
111
+
machine.succeed("grep 'sort-key nixos' /boot/loader/entries/nixos-generation-1.conf")
109
-
# Ensure we actually booted using systemd-boot
110
-
# Magic number is the vendor UUID used by systemd-boot.
112
-
"test -e /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
113
+
# Ensure we actually booted using systemd-boot
114
+
# Magic number is the vendor UUID used by systemd-boot.
116
+
"test -e /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
115
-
# "bootctl install" should have created an EFI entry
116
-
machine.succeed('efibootmgr | grep "Linux Boot Manager"')
119
+
# "bootctl install" should have created an EFI entry
120
+
machine.succeed('efibootmgr | grep "Linux Boot Manager"')
# Test that systemd-boot works with secure boot
121
-
secureBoot = makeTest {
122
-
name = "systemd-boot-secure-boot";
126
+
secureBoot = runTest (
127
+
{ pkgs, lib, ... }:
129
+
name = "systemd-boot-secure-boot";
125
-
imports = [ common ];
126
-
environment.systemPackages = [ pkgs.sbctl ];
127
-
virtualisation.useSecureBoot = true;
134
+
imports = [ common ];
135
+
environment.systemPackages = [ pkgs.sbctl ];
136
+
virtualisation.useSecureBoot = true;
132
-
efiArch = pkgs.stdenv.hostPlatform.efiArch;
136
-
machine.start(allow_reboot=True)
137
-
machine.wait_for_unit("multi-user.target")
142
+
efiArch = pkgs.stdenv.hostPlatform.efiArch;
145
+
machine.start(allow_reboot=True)
146
+
machine.wait_for_unit("multi-user.target")
139
-
machine.succeed("sbctl create-keys")
140
-
machine.succeed("sbctl enroll-keys --yes-this-might-brick-my-machine")
141
-
machine.succeed('sbctl sign /boot/EFI/systemd/systemd-boot${efiArch}.efi')
142
-
machine.succeed('sbctl sign /boot/EFI/BOOT/BOOT${toUpper efiArch}.EFI')
143
-
machine.succeed('sbctl sign /boot/EFI/nixos/*${nodes.machine.system.boot.loader.kernelFile}.efi')
148
+
machine.succeed("sbctl create-keys")
149
+
machine.succeed("sbctl enroll-keys --yes-this-might-brick-my-machine")
150
+
machine.succeed('sbctl sign /boot/EFI/systemd/systemd-boot${efiArch}.efi')
151
+
machine.succeed('sbctl sign /boot/EFI/BOOT/BOOT${lib.toUpper efiArch}.EFI')
152
+
machine.succeed('sbctl sign /boot/EFI/nixos/*${nodes.machine.system.boot.loader.kernelFile}.efi')
147
-
assert "Secure Boot: enabled (user)" in machine.succeed("bootctl status")
156
+
assert "Secure Boot: enabled (user)" in machine.succeed("bootctl status")
151
-
basicXbootldr = makeTest {
152
-
name = "systemd-boot-xbootldr";
153
-
meta.maintainers = with pkgs.lib.maintainers; [ sdht0 ];
161
+
basicXbootldr = runTest (
164
+
name = "systemd-boot-xbootldr";
165
+
meta.maintainers = with lib.maintainers; [ sdht0 ];
155
-
nodes.machine = commonXbootldr;
167
+
nodes.machine = commonXbootldr;
160
-
${customDiskImage nodes}
172
+
${customDiskImage nodes}
163
-
machine.wait_for_unit("multi-user.target")
175
+
machine.wait_for_unit("multi-user.target")
165
-
machine.succeed("test -e /efi/EFI/systemd/systemd-bootx64.efi")
166
-
machine.succeed("test -e /boot/loader/entries/nixos-generation-1.conf")
177
+
machine.succeed("test -e /efi/EFI/systemd/systemd-bootx64.efi")
178
+
machine.succeed("test -e /boot/loader/entries/nixos-generation-1.conf")
168
-
# Ensure we actually booted using systemd-boot
169
-
# Magic number is the vendor UUID used by systemd-boot.
171
-
"test -e /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
180
+
# Ensure we actually booted using systemd-boot
181
+
# Magic number is the vendor UUID used by systemd-boot.
183
+
"test -e /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
174
-
# "bootctl install" should have created an EFI entry
175
-
machine.succeed('efibootmgr | grep "Linux Boot Manager"')
186
+
# "bootctl install" should have created an EFI entry
187
+
machine.succeed('efibootmgr | grep "Linux Boot Manager"')
# Check that specialisations create corresponding boot entries.
180
-
specialisation = makeTest {
181
-
name = "systemd-boot-specialisation";
182
-
meta.maintainers = with pkgs.lib.maintainers; [
193
+
specialisation = runTest (
194
+
{ pkgs, lib, ... }:
196
+
name = "systemd-boot-specialisation";
197
+
meta.maintainers = with lib.maintainers; [
188
-
{ pkgs, lib, ... }:
190
-
imports = [ common ];
191
-
specialisation.something.configuration = {
192
-
boot.loader.systemd-boot.sortKey = "something";
203
+
{ pkgs, lib, ... }:
205
+
imports = [ common ];
206
+
specialisation.something.configuration = {
207
+
boot.loader.systemd-boot.sortKey = "something";
194
-
# Since qemu will dynamically create a devicetree blob when starting
195
-
# up, it is not straight forward to create an export of that devicetree
196
-
# blob without knowing before-hand all the flags we would pass to qemu
197
-
# (we would then be able to use `dumpdtb`). Thus, the following config
198
-
# will not boot, but it does allow us to assert that the boot entry has
199
-
# the correct contents.
200
-
boot.loader.systemd-boot.installDeviceTree = pkgs.stdenv.hostPlatform.isAarch64;
201
-
hardware.deviceTree.name = "dummy.dtb";
202
-
hardware.deviceTree.package = lib.mkForce (
203
-
pkgs.runCommand "dummy-devicetree-package" { } ''
205
-
cp ${pkgs.emptyFile} $out/dummy.dtb
209
+
# Since qemu will dynamically create a devicetree blob when starting
210
+
# up, it is not straight forward to create an export of that devicetree
211
+
# blob without knowing before-hand all the flags we would pass to qemu
212
+
# (we would then be able to use `dumpdtb`). Thus, the following config
213
+
# will not boot, but it does allow us to assert that the boot entry has
214
+
# the correct contents.
215
+
boot.loader.systemd-boot.installDeviceTree = pkgs.stdenv.hostPlatform.isAarch64;
216
+
hardware.deviceTree.name = "dummy.dtb";
217
+
hardware.deviceTree.package = lib.mkForce (
218
+
pkgs.runCommand "dummy-devicetree-package" { } ''
220
+
cp ${pkgs.emptyFile} $out/dummy.dtb
215
-
machine.wait_for_unit("multi-user.target")
230
+
machine.wait_for_unit("multi-user.target")
218
-
"test -e /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
221
-
"grep -q 'title NixOS (something)' /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
224
-
"grep 'sort-key something' /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
227
-
+ pkgs.lib.optionalString pkgs.stdenv.hostPlatform.isAarch64 ''
229
-
r"grep 'devicetree /EFI/nixos/[a-z0-9]\{32\}.*dummy' /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
233
+
"test -e /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
236
+
"grep -q 'title NixOS (something)' /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
239
+
"grep 'sort-key something' /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
242
+
+ pkgs.lib.optionalString pkgs.stdenv.hostPlatform.isAarch64 ''
244
+
r"grep 'devicetree /EFI/nixos/[a-z0-9]\{32\}.*dummy' /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
# Boot without having created an EFI entry--instead using default "/EFI/BOOT/BOOTX64.EFI"
235
-
fallback = makeTest {
236
-
name = "systemd-boot-fallback";
237
-
meta.maintainers = with pkgs.lib.maintainers; [
251
+
fallback = runTest (
252
+
{ pkgs, lib, ... }:
254
+
name = "systemd-boot-fallback";
255
+
meta.maintainers = with lib.maintainers; [
243
-
{ pkgs, lib, ... }:
245
-
imports = [ common ];
246
-
boot.loader.efi.canTouchEfiVariables = mkForce false;
261
+
{ pkgs, lib, ... }:
263
+
imports = [ common ];
264
+
boot.loader.efi.canTouchEfiVariables = lib.mkForce false;
251
-
machine.wait_for_unit("multi-user.target")
269
+
machine.wait_for_unit("multi-user.target")
253
-
machine.succeed("test -e /boot/loader/entries/nixos-generation-1.conf")
271
+
machine.succeed("test -e /boot/loader/entries/nixos-generation-1.conf")
255
-
# Ensure we actually booted using systemd-boot
256
-
# Magic number is the vendor UUID used by systemd-boot.
258
-
"test -e /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
273
+
# Ensure we actually booted using systemd-boot
274
+
# Magic number is the vendor UUID used by systemd-boot.
276
+
"test -e /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
261
-
# "bootctl install" should _not_ have created an EFI entry
262
-
machine.fail('efibootmgr | grep "Linux Boot Manager"')
279
+
# "bootctl install" should _not_ have created an EFI entry
280
+
machine.fail('efibootmgr | grep "Linux Boot Manager"')
266
-
update = makeTest {
267
-
name = "systemd-boot-update";
268
-
meta.maintainers = with pkgs.lib.maintainers; [
288
+
name = "systemd-boot-update";
289
+
meta.maintainers = with lib.maintainers; [
273
-
nodes.machine = common;
294
+
nodes.machine = common;
276
-
machine.succeed("mount -o remount,rw /boot")
297
+
machine.succeed("mount -o remount,rw /boot")
279
-
# Replace version inside sd-boot with something older. See magic[] string in systemd src/boot/efi/boot.c
282
-
find /boot -iname '*boot*.efi' -print0 | \
283
-
xargs -0 -I '{}' sed -i 's/#### LoaderInfo: systemd-boot .* ####/#### LoaderInfo: systemd-boot 000.0-1-notnixos ####/' '{}'
286
-
return machine.succeed("/run/current-system/bin/switch-to-configuration boot 2>&1")
300
+
# Replace version inside sd-boot with something older. See magic[] string in systemd src/boot/efi/boot.c
303
+
find /boot -iname '*boot*.efi' -print0 | \
304
+
xargs -0 -I '{}' sed -i 's/#### LoaderInfo: systemd-boot .* ####/#### LoaderInfo: systemd-boot 000.0-1-notnixos ####/' '{}'
307
+
return machine.succeed("/run/current-system/bin/switch-to-configuration boot 2>&1")
289
-
assert "updating systemd-boot from 000.0-1-notnixos to " in output, "Couldn't find systemd-boot update message"
290
-
assert 'to "/boot/EFI/systemd/systemd-bootx64.efi"' in output, "systemd-boot not copied to to /boot/EFI/systemd/systemd-bootx64.efi"
291
-
assert 'to "/boot/EFI/BOOT/BOOTX64.EFI"' in output, "systemd-boot not copied to to /boot/EFI/BOOT/BOOTX64.EFI"
310
+
assert "updating systemd-boot from 000.0-1-notnixos to " in output, "Couldn't find systemd-boot update message"
311
+
assert 'to "/boot/EFI/systemd/systemd-bootx64.efi"' in output, "systemd-boot not copied to to /boot/EFI/systemd/systemd-bootx64.efi"
312
+
assert 'to "/boot/EFI/BOOT/BOOTX64.EFI"' in output, "systemd-boot not copied to to /boot/EFI/BOOT/BOOTX64.EFI"
293
-
with subtest("Test that updating works with lowercase bootx64.efi"):
295
-
# Move to tmp file name first, otherwise mv complains the new location is the same
296
-
"mv /boot/EFI/BOOT/BOOTX64.EFI /boot/EFI/BOOT/bootx64.efi.new",
297
-
"mv /boot/EFI/BOOT/bootx64.efi.new /boot/EFI/BOOT/bootx64.efi",
300
-
assert "updating systemd-boot from 000.0-1-notnixos to " in output, "Couldn't find systemd-boot update message"
301
-
assert 'to "/boot/EFI/systemd/systemd-bootx64.efi"' in output, "systemd-boot not copied to to /boot/EFI/systemd/systemd-bootx64.efi"
302
-
assert 'to "/boot/EFI/BOOT/BOOTX64.EFI"' in output, "systemd-boot not copied to to /boot/EFI/BOOT/BOOTX64.EFI"
314
+
with subtest("Test that updating works with lowercase bootx64.efi"):
316
+
# Move to tmp file name first, otherwise mv complains the new location is the same
317
+
"mv /boot/EFI/BOOT/BOOTX64.EFI /boot/EFI/BOOT/bootx64.efi.new",
318
+
"mv /boot/EFI/BOOT/bootx64.efi.new /boot/EFI/BOOT/bootx64.efi",
321
+
assert "updating systemd-boot from 000.0-1-notnixos to " in output, "Couldn't find systemd-boot update message"
322
+
assert 'to "/boot/EFI/systemd/systemd-bootx64.efi"' in output, "systemd-boot not copied to to /boot/EFI/systemd/systemd-bootx64.efi"
323
+
assert 'to "/boot/EFI/BOOT/BOOTX64.EFI"' in output, "systemd-boot not copied to to /boot/EFI/BOOT/BOOTX64.EFI"
308
-
optionalAttrs (meta.availableOn { inherit system; } pkgs.memtest86plus) (makeTest {
328
+
memtest86 = runTestOn [ "x86_64-linux" ] (
name = "systemd-boot-memtest86";
310
-
meta.maintainers = with maintainers; [ julienmalka ];
332
+
meta.maintainers = with lib.maintainers; [ julienmalka ];
···
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
machine.succeed("test -e /boot/efi/memtest86/memtest.efi")
325
-
netbootxyz = makeTest {
326
-
name = "systemd-boot-netbootxyz";
327
-
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
348
+
netbootxyz = runTest (
351
+
name = "systemd-boot-netbootxyz";
352
+
meta.maintainers = with lib.maintainers; [ julienmalka ];
330
-
{ pkgs, lib, ... }:
332
-
imports = [ common ];
333
-
boot.loader.systemd-boot.netbootxyz.enable = true;
355
+
{ pkgs, lib, ... }:
357
+
imports = [ common ];
358
+
boot.loader.systemd-boot.netbootxyz.enable = true;
337
-
machine.succeed("test -e /boot/loader/entries/netbootxyz.conf")
338
-
machine.succeed("test -e /boot/efi/netbootxyz/netboot.xyz.efi")
362
+
machine.succeed("test -e /boot/loader/entries/netbootxyz.conf")
363
+
machine.succeed("test -e /boot/efi/netbootxyz/netboot.xyz.efi")
342
-
edk2-uefi-shell = makeTest {
343
-
name = "systemd-boot-edk2-uefi-shell";
344
-
meta.maintainers = with pkgs.lib.maintainers; [ iFreilicht ];
368
+
edk2-uefi-shell = runTest (
371
+
name = "systemd-boot-edk2-uefi-shell";
372
+
meta.maintainers = with lib.maintainers; [ iFreilicht ];
349
-
imports = [ common ];
350
-
boot.loader.systemd-boot.edk2-uefi-shell.enable = true;
377
+
imports = [ common ];
378
+
boot.loader.systemd-boot.edk2-uefi-shell.enable = true;
354
-
machine.succeed("test -e /boot/loader/entries/edk2-uefi-shell.conf")
355
-
machine.succeed("test -e /boot/efi/edk2-uefi-shell/shell.efi")
382
+
machine.succeed("test -e /boot/loader/entries/edk2-uefi-shell.conf")
383
+
machine.succeed("test -e /boot/efi/edk2-uefi-shell/shell.efi")
359
-
windows = makeTest {
360
-
name = "systemd-boot-windows";
361
-
meta.maintainers = with pkgs.lib.maintainers; [ iFreilicht ];
388
+
windows = runTest (
391
+
name = "systemd-boot-windows";
392
+
meta.maintainers = with lib.maintainers; [ iFreilicht ];
366
-
imports = [ common ];
367
-
boot.loader.systemd-boot.windows = {
369
-
efiDeviceHandle = "HD0c1";
370
-
sortKey = "before_all_others";
372
-
"Ten".efiDeviceHandle = "FS0";
374
-
title = "Title with-_-punctuation ...?!";
375
-
efiDeviceHandle = "HD0d4";
397
+
imports = [ common ];
398
+
boot.loader.systemd-boot.windows = {
400
+
efiDeviceHandle = "HD0c1";
401
+
sortKey = "before_all_others";
403
+
"Ten".efiDeviceHandle = "FS0";
405
+
title = "Title with-_-punctuation ...?!";
406
+
efiDeviceHandle = "HD0d4";
382
-
machine.succeed("test -e /boot/efi/edk2-uefi-shell/shell.efi")
413
+
machine.succeed("test -e /boot/efi/edk2-uefi-shell/shell.efi")
384
-
machine.succeed("test -e /boot/loader/entries/windows_7.conf")
385
-
machine.succeed("test -e /boot/loader/entries/windows_Ten.conf")
386
-
machine.succeed("test -e /boot/loader/entries/windows_11.conf")
415
+
machine.succeed("test -e /boot/loader/entries/windows_7.conf")
416
+
machine.succeed("test -e /boot/loader/entries/windows_Ten.conf")
417
+
machine.succeed("test -e /boot/loader/entries/windows_11.conf")
388
-
machine.succeed("grep 'efi /efi/edk2-uefi-shell/shell.efi' /boot/loader/entries/windows_7.conf")
389
-
machine.succeed("grep 'efi /efi/edk2-uefi-shell/shell.efi' /boot/loader/entries/windows_Ten.conf")
390
-
machine.succeed("grep 'efi /efi/edk2-uefi-shell/shell.efi' /boot/loader/entries/windows_11.conf")
419
+
machine.succeed("grep 'efi /efi/edk2-uefi-shell/shell.efi' /boot/loader/entries/windows_7.conf")
420
+
machine.succeed("grep 'efi /efi/edk2-uefi-shell/shell.efi' /boot/loader/entries/windows_Ten.conf")
421
+
machine.succeed("grep 'efi /efi/edk2-uefi-shell/shell.efi' /boot/loader/entries/windows_11.conf")
392
-
machine.succeed("grep 'HD0c1:EFI\\\\Microsoft\\\\Boot\\\\Bootmgfw.efi' /boot/loader/entries/windows_7.conf")
393
-
machine.succeed("grep 'FS0:EFI\\\\Microsoft\\\\Boot\\\\Bootmgfw.efi' /boot/loader/entries/windows_Ten.conf")
394
-
machine.succeed("grep 'HD0d4:EFI\\\\Microsoft\\\\Boot\\\\Bootmgfw.efi' /boot/loader/entries/windows_11.conf")
423
+
machine.succeed("grep 'HD0c1:EFI\\\\Microsoft\\\\Boot\\\\Bootmgfw.efi' /boot/loader/entries/windows_7.conf")
424
+
machine.succeed("grep 'FS0:EFI\\\\Microsoft\\\\Boot\\\\Bootmgfw.efi' /boot/loader/entries/windows_Ten.conf")
425
+
machine.succeed("grep 'HD0d4:EFI\\\\Microsoft\\\\Boot\\\\Bootmgfw.efi' /boot/loader/entries/windows_11.conf")
396
-
machine.succeed("grep 'sort-key before_all_others' /boot/loader/entries/windows_7.conf")
397
-
machine.succeed("grep 'sort-key o_windows_Ten' /boot/loader/entries/windows_Ten.conf")
398
-
machine.succeed("grep 'sort-key zzz' /boot/loader/entries/windows_11.conf")
427
+
machine.succeed("grep 'sort-key before_all_others' /boot/loader/entries/windows_7.conf")
428
+
machine.succeed("grep 'sort-key o_windows_Ten' /boot/loader/entries/windows_Ten.conf")
429
+
machine.succeed("grep 'sort-key zzz' /boot/loader/entries/windows_11.conf")
400
-
machine.succeed("grep 'title Windows 7' /boot/loader/entries/windows_7.conf")
401
-
machine.succeed("grep 'title Windows Ten' /boot/loader/entries/windows_Ten.conf")
402
-
machine.succeed('grep "title Title with-_-punctuation ...?!" /boot/loader/entries/windows_11.conf')
431
+
machine.succeed("grep 'title Windows 7' /boot/loader/entries/windows_7.conf")
432
+
machine.succeed("grep 'title Windows Ten' /boot/loader/entries/windows_Ten.conf")
433
+
machine.succeed('grep "title Title with-_-punctuation ...?!" /boot/loader/entries/windows_11.conf')
406
-
memtestSortKey = makeTest {
407
-
name = "systemd-boot-memtest-sortkey";
408
-
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
438
+
memtestSortKey = runTest (
441
+
name = "systemd-boot-memtest-sortkey";
442
+
meta.maintainers = with lib.maintainers; [ julienmalka ];
411
-
{ pkgs, lib, ... }:
413
-
imports = [ common ];
414
-
boot.loader.systemd-boot.memtest86.enable = true;
415
-
boot.loader.systemd-boot.memtest86.sortKey = "apple";
419
-
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
420
-
machine.succeed("test -e /boot/efi/memtest86/memtest.efi")
421
-
machine.succeed("grep 'sort-key apple' /boot/loader/entries/memtest86.conf")
425
-
entryFilenameXbootldr = makeTest {
426
-
name = "systemd-boot-entry-filename-xbootldr";
427
-
meta.maintainers = with pkgs.lib.maintainers; [ sdht0 ];
430
-
{ pkgs, lib, ... }:
432
-
imports = [ commonXbootldr ];
433
-
boot.loader.systemd-boot.memtest86.enable = true;
439
-
${customDiskImage nodes}
442
-
machine.wait_for_unit("multi-user.target")
445
+
{ pkgs, lib, ... }:
447
+
imports = [ common ];
448
+
boot.loader.systemd-boot.memtest86.enable = true;
449
+
boot.loader.systemd-boot.memtest86.sortKey = "apple";
444
-
machine.succeed("test -e /efi/EFI/systemd/systemd-bootx64.efi")
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
446
-
machine.succeed("test -e /boot/EFI/memtest86/memtest.efi")
454
+
machine.succeed("test -e /boot/efi/memtest86/memtest.efi")
455
+
machine.succeed("grep 'sort-key apple' /boot/loader/entries/memtest86.conf")
450
-
extraEntries = makeTest {
451
-
name = "systemd-boot-extra-entries";
452
-
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
460
+
entryFilenameXbootldr = runTest (
463
+
name = "systemd-boot-entry-filename-xbootldr";
464
+
meta.maintainers = with lib.maintainers; [ sdht0 ];
455
-
{ pkgs, lib, ... }:
457
-
imports = [ common ];
458
-
boot.loader.systemd-boot.extraEntries = {
467
+
{ pkgs, lib, ... }:
469
+
imports = [ commonXbootldr ];
470
+
boot.loader.systemd-boot.memtest86.enable = true;
466
-
machine.succeed("test -e /boot/loader/entries/banana.conf")
467
-
machine.succeed("test -e /boot/efi/nixos/.extra-files/loader/entries/banana.conf")
476
+
${customDiskImage nodes}
479
+
machine.wait_for_unit("multi-user.target")
481
+
machine.succeed("test -e /efi/EFI/systemd/systemd-bootx64.efi")
482
+
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
483
+
machine.succeed("test -e /boot/EFI/memtest86/memtest.efi")
471
-
extraFiles = makeTest {
472
-
name = "systemd-boot-extra-files";
473
-
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
488
+
extraEntries = runTest (
491
+
name = "systemd-boot-extra-entries";
492
+
meta.maintainers = with lib.maintainers; [ julienmalka ];
476
-
{ pkgs, lib, ... }:
478
-
imports = [ common ];
479
-
boot.loader.systemd-boot.extraFiles = {
480
-
"efi/fruits/tomato.efi" = pkgs.netbootxyz-efi;
495
+
{ pkgs, lib, ... }:
497
+
imports = [ common ];
498
+
boot.loader.systemd-boot.extraEntries = {
485
-
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
486
-
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
490
-
switch-test = makeTest {
491
-
name = "systemd-boot-switch-test";
492
-
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
506
+
machine.succeed("test -e /boot/loader/entries/banana.conf")
507
+
machine.succeed("test -e /boot/efi/nixos/.extra-files/loader/entries/banana.conf")
512
+
extraFiles = runTest (
515
+
name = "systemd-boot-extra-files";
516
+
meta.maintainers = with lib.maintainers; [ julienmalka ];
498
-
{ pkgs, nodes, ... }:
519
+
{ pkgs, lib, ... }:
boot.loader.systemd-boot.extraFiles = {
"efi/fruits/tomato.efi" = pkgs.netbootxyz-efi;
505
-
# These are configs for different nodes, but we'll use them here in `machine`
506
-
system.extraDependencies = [
507
-
nodes.common.system.build.toplevel
508
-
nodes.with_netbootxyz.system.build.toplevel
515
-
imports = [ common ];
516
-
boot.loader.systemd-boot.netbootxyz.enable = true;
523
-
originalSystem = nodes.machine.system.build.toplevel;
524
-
baseSystem = nodes.common.system.build.toplevel;
525
-
finalSystem = nodes.with_netbootxyz.system.build.toplevel;
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
531
-
with subtest("remove files when no longer needed"):
532
-
machine.succeed("${baseSystem}/bin/switch-to-configuration boot")
533
-
machine.fail("test -e /boot/efi/fruits/tomato.efi")
534
-
machine.fail("test -d /boot/efi/fruits")
535
-
machine.succeed("test -d /boot/efi/nixos/.extra-files")
536
-
machine.fail("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
537
-
machine.fail("test -d /boot/efi/nixos/.extra-files/efi/fruits")
534
+
switch-test = runTest (
537
+
name = "systemd-boot-switch-test";
538
+
meta.maintainers = with lib.maintainers; [ julienmalka ];
539
-
with subtest("files are added back when needed again"):
540
-
machine.succeed("${originalSystem}/bin/switch-to-configuration boot")
541
-
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
542
-
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
544
-
with subtest("simultaneously removing and adding files works"):
545
-
machine.succeed("${finalSystem}/bin/switch-to-configuration boot")
546
-
machine.fail("test -e /boot/efi/fruits/tomato.efi")
547
-
machine.fail("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
548
-
machine.succeed("test -e /boot/loader/entries/netbootxyz.conf")
549
-
machine.succeed("test -e /boot/efi/netbootxyz/netboot.xyz.efi")
550
-
machine.succeed("test -e /boot/efi/nixos/.extra-files/loader/entries/netbootxyz.conf")
551
-
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/netbootxyz/netboot.xyz.efi")
544
+
{ pkgs, nodes, ... }:
546
+
imports = [ common ];
547
+
boot.loader.systemd-boot.extraFiles = {
548
+
"efi/fruits/tomato.efi" = pkgs.netbootxyz-efi;
555
-
garbage-collect-entry = makeTest {
556
-
name = "systemd-boot-garbage-collect-entry";
557
-
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
551
+
# These are configs for different nodes, but we'll use them here in `machine`
552
+
system.extraDependencies = [
553
+
nodes.common.system.build.toplevel
554
+
nodes.with_netbootxyz.system.build.toplevel
562
-
{ pkgs, nodes, ... }:
564
-
imports = [ common ];
561
+
imports = [ common ];
562
+
boot.loader.systemd-boot.netbootxyz.enable = true;
566
-
# These are configs for different nodes, but we'll use them here in `machine`
567
-
system.extraDependencies = [
568
-
nodes.common.system.build.toplevel
569
+
originalSystem = nodes.machine.system.build.toplevel;
570
+
baseSystem = nodes.common.system.build.toplevel;
571
+
finalSystem = nodes.with_netbootxyz.system.build.toplevel;
574
+
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
575
+
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
577
+
with subtest("remove files when no longer needed"):
578
+
machine.succeed("${baseSystem}/bin/switch-to-configuration boot")
579
+
machine.fail("test -e /boot/efi/fruits/tomato.efi")
580
+
machine.fail("test -d /boot/efi/fruits")
581
+
machine.succeed("test -d /boot/efi/nixos/.extra-files")
582
+
machine.fail("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
583
+
machine.fail("test -d /boot/efi/nixos/.extra-files/efi/fruits")
585
+
with subtest("files are added back when needed again"):
586
+
machine.succeed("${originalSystem}/bin/switch-to-configuration boot")
587
+
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
588
+
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
590
+
with subtest("simultaneously removing and adding files works"):
591
+
machine.succeed("${finalSystem}/bin/switch-to-configuration boot")
592
+
machine.fail("test -e /boot/efi/fruits/tomato.efi")
593
+
machine.fail("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
594
+
machine.succeed("test -e /boot/loader/entries/netbootxyz.conf")
595
+
machine.succeed("test -e /boot/efi/netbootxyz/netboot.xyz.efi")
596
+
machine.succeed("test -e /boot/efi/nixos/.extra-files/loader/entries/netbootxyz.conf")
597
+
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/netbootxyz/netboot.xyz.efi")
602
+
garbage-collect-entry = runTest (
605
+
name = "systemd-boot-garbage-collect-entry";
606
+
meta.maintainers = with lib.maintainers; [ julienmalka ];
611
+
{ pkgs, nodes, ... }:
613
+
imports = [ common ];
615
+
# These are configs for different nodes, but we'll use them here in `machine`
616
+
system.extraDependencies = [
617
+
nodes.common.system.build.toplevel
576
-
baseSystem = nodes.common.system.build.toplevel;
579
-
machine.succeed("nix-env -p /nix/var/nix/profiles/system --set ${baseSystem}")
580
-
machine.succeed("nix-env -p /nix/var/nix/profiles/system --delete-generations 1")
581
-
machine.succeed("${baseSystem}/bin/switch-to-configuration boot")
582
-
machine.fail("test -e /boot/loader/entries/nixos-generation-1.conf")
583
-
machine.succeed("test -e /boot/loader/entries/nixos-generation-2.conf")
625
+
baseSystem = nodes.common.system.build.toplevel;
628
+
machine.succeed("nix-env -p /nix/var/nix/profiles/system --set ${baseSystem}")
629
+
machine.succeed("nix-env -p /nix/var/nix/profiles/system --delete-generations 1")
630
+
machine.succeed("${baseSystem}/bin/switch-to-configuration boot")
631
+
machine.fail("test -e /boot/loader/entries/nixos-generation-1.conf")
632
+
machine.succeed("test -e /boot/loader/entries/nixos-generation-2.conf")
587
-
no-bootspec = makeTest {
588
-
name = "systemd-boot-no-bootspec";
589
-
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
637
+
no-bootspec = runTest (
640
+
name = "systemd-boot-no-bootspec";
641
+
meta.maintainers = with lib.maintainers; [ julienmalka ];
592
-
imports = [ common ];
593
-
boot.bootspec.enable = false;
644
+
imports = [ common ];
645
+
boot.bootspec.enable = false;
598
-
machine.wait_for_unit("multi-user.target")
650
+
machine.wait_for_unit("multi-user.target")