add VM test for nix upgrade-nix
This commit adds a new NixOS VM test, which tests that `nix upgrade-nix`
works on both kinds of profiles (manifest.nix and manifest.json).
Done as a separate commit from 831d18a13, since it relies on the
--store-path argument from 026c90e5f as well.
Change-Id: I5fc94b751d252862cb6cffb541a4c072faad9f3b
This commit is contained in:
parent
ee5a1b5a4c
commit
e2ab89a74b
|
@ -141,6 +141,8 @@ in
|
|||
|
||||
nix-copy = runNixOSTestFor "x86_64-linux" ./nix-copy.nix;
|
||||
|
||||
nix-upgrade-nix = runNixOSTestFor "x86_64-linux" ./nix-upgrade-nix.nix;
|
||||
|
||||
nssPreload = runNixOSTestFor "x86_64-linux" ./nss-preload.nix;
|
||||
|
||||
githubFlakes = runNixOSTestFor "x86_64-linux" ./github-flakes.nix;
|
||||
|
|
80
tests/nixos/nix-upgrade-nix.nix
Normal file
80
tests/nixos/nix-upgrade-nix.nix
Normal file
|
@ -0,0 +1,80 @@
|
|||
{ lib, config, ... }:
|
||||
|
||||
/**
|
||||
* Test that nix upgrade-nix works regardless of whether /nix/var/nix/profiles/default
|
||||
* is a nix-env style profile or a nix profile style profile.
|
||||
*/
|
||||
|
||||
let
|
||||
pkgs = config.nodes.machine.nixpkgs.pkgs;
|
||||
|
||||
lix = pkgs.nix;
|
||||
lixVersion = lib.getVersion lix;
|
||||
|
||||
newNix = pkgs.nixVersions.unstable;
|
||||
newNixVersion = lib.getVersion newNix;
|
||||
|
||||
in {
|
||||
name = "nix-upgrade-nix";
|
||||
|
||||
nodes = {
|
||||
machine = { config, lib, pkgs, ... }: {
|
||||
virtualisation.writableStore = true;
|
||||
virtualisation.additionalPaths = [ pkgs.hello.drvPath ];
|
||||
nix.settings.substituters = lib.mkForce [ ];
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
services.getty.autologinUser = "root";
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
testScript = { nodes }: ''
|
||||
# fmt: off
|
||||
|
||||
start_all()
|
||||
|
||||
machine.succeed("nix --version >&2")
|
||||
|
||||
# Install Lix into the default profile, overriding /run/current-system/sw/bin/nix,
|
||||
# and thus making Lix think we're not on NixOS.
|
||||
machine.succeed("nix-env --install '${lib.getBin lix}' --profile /nix/var/nix/profiles/default >&2")
|
||||
|
||||
# Make sure that correctly got inserted into our PATH.
|
||||
default_profile_nix_path = machine.succeed("command -v nix")
|
||||
print(default_profile_nix_path)
|
||||
assert default_profile_nix_path.strip() == "/nix/var/nix/profiles/default/bin/nix", \
|
||||
f"{default_profile_nix_path.strip()=} != /nix/var/nix/profiles/default/bin/nix"
|
||||
|
||||
# And that it's the Nix we specified.
|
||||
default_profile_version = machine.succeed("nix --version")
|
||||
assert "${lixVersion}" in default_profile_version, f"${lixVersion} not in {default_profile_version}"
|
||||
|
||||
# Upgrade to a different version of Nix, and make sure that also worked.
|
||||
|
||||
machine.succeed("nix upgrade-nix --store-path ${newNix} >&2")
|
||||
default_profile_version = machine.succeed("nix --version")
|
||||
print(default_profile_version)
|
||||
assert "${newNixVersion}" in default_profile_version, f"${newNixVersion} not in {default_profile_version}"
|
||||
|
||||
# Now 'break' this profile -- use nix profile on it so nix-env will no longer work on it.
|
||||
machine.succeed(
|
||||
"nix profile install --profile /nix/var/nix/profiles/default '${pkgs.hello.drvPath}^*' >&2"
|
||||
)
|
||||
|
||||
# Confirm that nix-env is broken.
|
||||
machine.fail(
|
||||
"nix-env --query --installed --profile /nix/var/nix/profiles/default >&2"
|
||||
)
|
||||
|
||||
# And use nix upgrade-nix one more time, on the `nix profile` style profile.
|
||||
# (Specifying Lix by full path so we can use --store-path.)
|
||||
machine.succeed(
|
||||
"${lib.getBin lix}/bin/nix upgrade-nix --store-path '${lix}' >&2"
|
||||
)
|
||||
|
||||
default_profile_version = machine.succeed("nix --version")
|
||||
print(default_profile_version)
|
||||
assert "${lixVersion}" in default_profile_version, f"${lixVersion} not in {default_profile_version}"
|
||||
'';
|
||||
|
||||
}
|
Loading…
Reference in a new issue