From 56c4f9d0052c60aba6b2b8a8a7976cc3f808000d Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Sun, 31 Oct 2021 18:22:25 +0100 Subject: [PATCH] nixosTest: Fix infinite recursion involving hasContext testScript when useNixStoreImage = true The involved test was nixosTests.nextcloud.basic21. It has a testScript that is strict in nodes.nextcloud.config.system.build.vm, in assertions about imagemagick being in the system closure. The recursion was introduced in 329a4461a7a1898b3aad13968a232a054422c4fb from https://github.com/NixOS/nixpkgs/pull/140792 --- nixos/lib/testing-python.nix | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/nixos/lib/testing-python.nix b/nixos/lib/testing-python.nix index b1e9bed4a5c1..cce017a6441d 100644 --- a/nixos/lib/testing-python.nix +++ b/nixos/lib/testing-python.nix @@ -218,6 +218,7 @@ rec { build-vms = import ./build-vms.nix { inherit system lib pkgs minimal specialArgs; extraConfigurations = extraConfigurations ++ [( + { config, ... }: { virtualisation.qemu.package = qemu_pkg; @@ -230,7 +231,17 @@ rec { # copied to the image. virtualisation.additionalPaths = lib.optional - (builtins.hasContext testScript') + # A testScript may evaluate nodes, which has caused + # infinite recursions. The demand cycle involves: + # testScript --> + # nodes --> + # toplevel --> + # additionalPaths --> + # hasContext testScript' --> + # testScript (ad infinitum) + # If we don't need to build an image, we can break this + # cycle by short-circuiting when useNixStoreImage is false. + (config.virtualisation.useNixStoreImage && builtins.hasContext testScript') (pkgs.writeStringReferencesToFile testScript'); # Ensure we do not use aliases. Ideally this is only set