Unverified Commit 7f7df390 authored by tomberek's avatar tomberek Committed by GitHub
Browse files

Merge pull request #335672 from tomberek/tomberek.nixos_test

nixosTest.nix-upgrade: init
parents 549912e6 33b5aab8
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -680,6 +680,7 @@ in {
  nix-config = handleTest ./nix-config.nix {};
  nix-ld = handleTest ./nix-ld.nix {};
  nix-misc = handleTest ./nix/misc.nix {};
  nix-upgrade = handleTest ./nix/upgrade.nix {inherit (pkgs) nixVersions;};
  nix-required-mounts = runTest ./nix-required-mounts;
  nix-serve = handleTest ./nix-serve.nix {};
  nix-serve-ssh = handleTest ./nix-serve-ssh.nix {};
+108 −0
Original line number Diff line number Diff line
{ pkgs, nixVersions, ... }:
let
  lib = pkgs.lib;

  fallback-paths-external = pkgs.writeTextDir "fallback-paths.nix" ''
    {
      ${pkgs.system} = "${nixVersions.latest}";
    }'';

  inputDrv = import ../.. {
    configuration = {
      imports = [ nixos-module ];
      nix.package = nixVersions.latest;
      boot.isContainer = true;

      users.users.alice.isNormalUser = true;
    };
    system = pkgs.system;
  };

  nixos-module = builtins.toFile "nixos-module.nix" ''
    { lib, pkgs, modulesPath, ... }:
    {
      imports = [
        (modulesPath + "/profiles/minimal.nix")
        (modulesPath + "/testing/test-instrumentation.nix")
      ];

      hardware.enableAllFirmware = lib.mkForce false;

      nix.settings.substituters = lib.mkForce [];
      nix.settings.hashed-mirrors = null;
      nix.settings.connect-timeout = 1;
      nix.extraOptions = "experimental-features = nix-command";

      environment.localBinInPath = true;
      users.users.alice = {
        isNormalUser = true;
        packages = [ pkgs.nixVersions.latest ];
      };
      documentation.enable = false;
    }
  '';
in

pkgs.testers.nixosTest {
  name = "nix-upgrade-${nixVersions.stable.version}-${nixVersions.latest.version}";
  meta.maintainers = with lib.maintainers; [ tomberek ];

  nodes.machine = {
    imports = [ nixos-module ];

    nix.package = nixVersions.stable;
    system.extraDependencies = [
      fallback-paths-external
      inputDrv.system
    ];
  };

  testScript = ''
    machine.start()
    machine.wait_for_unit("multi-user.target")

    with subtest("nix-current"):
        # Create a profile to pretend we are on non-NixOS

        print(machine.succeed("nix --version"))
        print(machine.succeed("nix-env -i /run/current-system/sw/bin/nix -p /root/.local"))

    with subtest("nix-upgrade"):
        print(machine.succeed("nix upgrade-nix --nix-store-paths-url file://${fallback-paths-external}/fallback-paths.nix --profile /root/.local"))
        result = machine.succeed("nix --version")
        print(result)

        import re
        match = re.match(r".*${nixVersions.latest.version}$",result)
        if not match: raise Exception("Couldn't find new version in output: " + result)

    with subtest("nix-build-with-mismatch-daemon"):
        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")


    with subtest("remove-new-nix"):
        machine.succeed("rm -rf /root/.local")

        result = machine.succeed("nix --version")
        print(result)

        import re
        match = re.match(r".*${nixVersions.stable.version}$",result)

    with subtest("upgrade-via-switch-to-configuration"):
        # not using nixos-rebuild due to nix-instantiate being called and forcing all drv's to be rebuilt
        print(machine.succeed("${inputDrv.system.outPath}/bin/switch-to-configuration switch"))
        result = machine.succeed("nix --version")
        print(result)

        import re
        match = re.match(r".*${nixVersions.latest.version}$",result)
        if not match: raise Exception("Couldn't find new version in output: " + result)

    with subtest("nix-build-with-new-daemon"):
        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")

    with subtest("nix-collect-garbage-with-old-nix"):
        machine.succeed("${nixVersions.stable}/bin/nix-collect-garbage")
  '';
}
+2 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ in
, mdbook-linkcheck
, nlohmann_json
, nixosTests
, nixVersions
, openssl
, perl
, pkg-config
@@ -261,6 +262,7 @@ self = stdenv.mkDerivation {
      # Basic smoke test that needs to pass when upgrading nix.
      # Note that this test does only test the nixVersions.stable attribute.
      misc = nixosTests.nix-misc.default;
      upgrade = nixosTests.nix-upgrade;

      srcVersion = runCommand "nix-src-version" {
        inherit version;