aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2022-03-02 16:07:00 +0100
committerGitHub <noreply@github.com>2022-03-02 16:07:00 +0100
commitb2da2a22c64a040f3cc83180f636b5fe972c16b1 (patch)
treeec53db14bd0eddf5dfa7707af3a9b81108653104
parent1aca6b9f17d9f251c60c5cc4e8499bd89a0ab31a (diff)
parent5850fd17b4aff50ac9f6b5f8570acc5cf4f43226 (diff)
Merge pull request #6194 from edolstra/nix-profile
Add basic tests for 'nix profile'
-rw-r--r--src/nix/profile.cc26
-rw-r--r--tests/bash-profile.sh9
-rw-r--r--tests/local.mk5
-rw-r--r--tests/nix-profile.sh71
-rw-r--r--tests/user-envs.sh1
5 files changed, 90 insertions, 22 deletions
diff --git a/src/nix/profile.cc b/src/nix/profile.cc
index 0e8dc4380..82507db2c 100644
--- a/src/nix/profile.cc
+++ b/src/nix/profile.cc
@@ -373,15 +373,15 @@ struct CmdProfileRemove : virtual EvalCommand, MixDefaultProfile, MixProfileElem
if (removedCount == 0) {
for (auto matcher: matchers) {
- if (const size_t* index = std::get_if<size_t>(&matcher)){
- warn("'%d' is not a valid index in profile", *index);
- } else if (const Path* path = std::get_if<Path>(&matcher)){
- warn("'%s' does not match any paths in profile", *path);
- } else if (const RegexPattern* regex = std::get_if<RegexPattern>(&matcher)){
- warn("'%s' does not match any packages in profile", regex->pattern);
+ if (const size_t * index = std::get_if<size_t>(&matcher)){
+ warn("'%d' is not a valid index", *index);
+ } else if (const Path * path = std::get_if<Path>(&matcher)){
+ warn("'%s' does not match any paths", *path);
+ } else if (const RegexPattern * regex = std::get_if<RegexPattern>(&matcher)){
+ warn("'%s' does not match any packages", regex->pattern);
}
}
- warn ("Try `nix profile list` to see the current profile.");
+ warn ("Use 'nix profile list' to see the current profile.");
}
updateProfile(newManifest.build(store));
}
@@ -454,12 +454,12 @@ struct CmdProfileUpgrade : virtual SourceExprCommand, MixDefaultProfile, MixProf
if (upgradedCount == 0) {
for (auto & matcher : matchers) {
- if (const size_t* index = std::get_if<size_t>(&matcher)){
- warn("'%d' is not a valid index in profile", *index);
- } else if (const Path* path = std::get_if<Path>(&matcher)){
- warn("'%s' does not match any paths in profile", *path);
- } else if (const RegexPattern* regex = std::get_if<RegexPattern>(&matcher)){
- warn("'%s' does not match any packages in profile", regex->pattern);
+ if (const size_t * index = std::get_if<size_t>(&matcher)){
+ warn("'%d' is not a valid index", *index);
+ } else if (const Path * path = std::get_if<Path>(&matcher)){
+ warn("'%s' does not match any paths", *path);
+ } else if (const RegexPattern * regex = std::get_if<RegexPattern>(&matcher)){
+ warn("'%s' does not match any packages", regex->pattern);
}
}
warn ("Use 'nix profile list' to see the current profile.");
diff --git a/tests/bash-profile.sh b/tests/bash-profile.sh
new file mode 100644
index 000000000..e2e0d1090
--- /dev/null
+++ b/tests/bash-profile.sh
@@ -0,0 +1,9 @@
+source common.sh
+
+sed -e "s|@localstatedir@|$TEST_ROOT/profile-var|g" -e "s|@coreutils@|$coreutils|g" < ../scripts/nix-profile.sh.in > $TEST_ROOT/nix-profile.sh
+
+user=$(whoami)
+rm -rf $TEST_HOME $TEST_ROOT/profile-var
+mkdir -p $TEST_HOME
+USER=$user $SHELL -e -c ". $TEST_ROOT/nix-profile.sh; set"
+USER=$user $SHELL -e -c ". $TEST_ROOT/nix-profile.sh" # test idempotency
diff --git a/tests/local.mk b/tests/local.mk
index 53a9179a3..c3a6aa1fc 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -89,10 +89,11 @@ nix_tests = \
build.sh \
ca/nix-run.sh \
db-migration.sh \
- nix-profile.sh \
+ bash-profile.sh \
pass-as-file.sh \
describe-stores.sh \
- store-ping.sh
+ store-ping.sh \
+ nix-profile.sh
ifeq ($(HAVE_LIBCPUID), 1)
nix_tests += compute-levels.sh
diff --git a/tests/nix-profile.sh b/tests/nix-profile.sh
index e2e0d1090..f134d70a4 100644
--- a/tests/nix-profile.sh
+++ b/tests/nix-profile.sh
@@ -1,9 +1,68 @@
source common.sh
-sed -e "s|@localstatedir@|$TEST_ROOT/profile-var|g" -e "s|@coreutils@|$coreutils|g" < ../scripts/nix-profile.sh.in > $TEST_ROOT/nix-profile.sh
+clearStore
+clearProfiles
-user=$(whoami)
-rm -rf $TEST_HOME $TEST_ROOT/profile-var
-mkdir -p $TEST_HOME
-USER=$user $SHELL -e -c ". $TEST_ROOT/nix-profile.sh; set"
-USER=$user $SHELL -e -c ". $TEST_ROOT/nix-profile.sh" # test idempotency
+# Make a flake.
+flake1Dir=$TEST_ROOT/flake1
+mkdir -p $flake1Dir
+
+cat > $flake1Dir/flake.nix <<EOF
+{
+ description = "Bla bla";
+
+ outputs = { self }: with import ./config.nix; rec {
+ packages.$system.default = mkDerivation {
+ name = "simple-\${builtins.readFile ./version}";
+ builder = builtins.toFile "builder.sh"
+ ''
+ mkdir -p \$out/bin
+ cat > \$out/bin/hello <<EOF
+ #! ${shell}
+ echo Hello \${builtins.readFile ./who}
+ EOF
+ chmod +x \$out/bin/hello
+ '';
+ };
+ };
+}
+EOF
+
+printf World > $flake1Dir/who
+printf 1.0 > $flake1Dir/version
+
+cp ./config.nix $flake1Dir/
+
+# Test upgrading from nix-env.
+nix-env -f ./user-envs.nix -i foo-1.0
+nix profile list | grep '0 - - .*-foo-1.0'
+nix profile install $flake1Dir -L
+[[ $($TEST_HOME/.nix-profile/bin/hello) = "Hello World" ]]
+nix profile history
+nix profile history | grep "packages.$system.default: ∅ -> 1.0"
+nix profile diff-closures | grep 'env-manifest.nix: ε → ∅'
+
+# Test upgrading a package.
+printf NixOS > $flake1Dir/who
+printf 2.0 > $flake1Dir/version
+nix profile upgrade 1
+[[ $($TEST_HOME/.nix-profile/bin/hello) = "Hello NixOS" ]]
+nix profile history | grep "packages.$system.default: 1.0 -> 2.0"
+
+# Test 'history', 'diff-closures'.
+nix profile diff-closures
+
+# Test rollback.
+nix profile rollback
+[[ $($TEST_HOME/.nix-profile/bin/hello) = "Hello World" ]]
+
+# Test uninstall.
+[ -e $TEST_HOME/.nix-profile/bin/foo ]
+nix profile remove 0
+(! [ -e $TEST_HOME/.nix-profile/bin/foo ])
+nix profile history | grep 'foo: 1.0 -> ∅'
+nix profile diff-closures | grep 'Version 3 -> 4'
+
+# Test wipe-history.
+nix profile wipe-history
+[[ $(nix profile history | grep Version | wc -l) -eq 1 ]]
diff --git a/tests/user-envs.sh b/tests/user-envs.sh
index aebf6a2a2..430688de1 100644
--- a/tests/user-envs.sh
+++ b/tests/user-envs.sh
@@ -9,7 +9,6 @@ clearProfiles
# Query installed: should be empty.
test "$(nix-env -p $profiles/test -q '*' | wc -l)" -eq 0
-mkdir -p $TEST_HOME
nix-env --switch-profile $profiles/test
# Query available: should contain several.