vuls: init at 0.27.0
[NixPkgs.git] / nixos / tests / nix / upgrade.nix
blobc55441586b322f11bb746d3a9385b970c7ca17e5
1 { pkgs, nixVersions, ... }:
2 let
3   lib = pkgs.lib;
5   fallback-paths-external = pkgs.writeTextDir "fallback-paths.nix" ''
6     {
7       ${pkgs.system} = "${nixVersions.latest}";
8     }'';
10   inputDrv = import ../.. {
11     configuration = {
12       imports = [ nixos-module ];
13       nix.package = nixVersions.latest;
14       boot.isContainer = true;
16       users.users.alice.isNormalUser = true;
17     };
18     system = pkgs.system;
19   };
21   nixos-module = builtins.toFile "nixos-module.nix" ''
22     { lib, pkgs, modulesPath, ... }:
23     {
24       imports = [
25         (modulesPath + "/profiles/minimal.nix")
26         (modulesPath + "/testing/test-instrumentation.nix")
27       ];
29       hardware.enableAllFirmware = lib.mkForce false;
31       nix.settings.substituters = lib.mkForce [];
32       nix.settings.hashed-mirrors = null;
33       nix.settings.connect-timeout = 1;
34       nix.extraOptions = "experimental-features = nix-command";
36       environment.localBinInPath = true;
37       users.users.alice = {
38         isNormalUser = true;
39         packages = [ pkgs.nixVersions.latest ];
40       };
41       documentation.enable = false;
42     }
43   '';
46 pkgs.testers.nixosTest {
47   name = "nix-upgrade-${nixVersions.stable.version}-${nixVersions.latest.version}";
48   meta.maintainers = with lib.maintainers; [ tomberek ];
50   nodes.machine = {
51     imports = [ nixos-module ];
53     nix.package = nixVersions.stable;
54     system.extraDependencies = [
55       fallback-paths-external
56       inputDrv.system
57     ];
58   };
60   testScript = ''
61     machine.start()
62     machine.wait_for_unit("multi-user.target")
64     with subtest("nix-current"):
65         # Create a profile to pretend we are on non-NixOS
67         print(machine.succeed("nix --version"))
68         print(machine.succeed("nix-env -i /run/current-system/sw/bin/nix -p /root/.local"))
70     with subtest("nix-upgrade"):
71         print(machine.succeed("nix upgrade-nix --nix-store-paths-url file://${fallback-paths-external}/fallback-paths.nix --profile /root/.local"))
72         result = machine.succeed("nix --version")
73         print(result)
75         import re
76         match = re.match(r".*${nixVersions.latest.version}$",result)
77         if not match: raise Exception("Couldn't find new version in output: " + result)
79     with subtest("nix-build-with-mismatch-daemon"):
80         machine.succeed("runuser -u alice -- nix build --expr 'derivation {name =\"test\"; system = \"${pkgs.system}\";builder = \"/bin/sh\"; args = [\"-c\" \"echo test > $out\"];}' --print-out-paths")
83     with subtest("remove-new-nix"):
84         machine.succeed("rm -rf /root/.local")
86         result = machine.succeed("nix --version")
87         print(result)
89         import re
90         match = re.match(r".*${nixVersions.stable.version}$",result)
92     with subtest("upgrade-via-switch-to-configuration"):
93         # not using nixos-rebuild due to nix-instantiate being called and forcing all drv's to be rebuilt
94         print(machine.succeed("${inputDrv.system.outPath}/bin/switch-to-configuration switch"))
95         result = machine.succeed("nix --version")
96         print(result)
98         import re
99         match = re.match(r".*${nixVersions.latest.version}$",result)
100         if not match: raise Exception("Couldn't find new version in output: " + result)
102     with subtest("nix-build-with-new-daemon"):
103         machine.succeed("runuser -u alice -- nix build --expr 'derivation {name =\"test-new\"; system = \"${pkgs.system}\";builder = \"/bin/sh\"; args = [\"-c\" \"echo test > $out\"];}' --print-out-paths")
105     with subtest("nix-collect-garbage-with-old-nix"):
106         machine.succeed("${nixVersions.stable}/bin/nix-collect-garbage")
107   '';