diff mbox

[bug#50967,00/12] Move (gnu home-services XYZ) to (gnu services XYZ)

Message ID 87k0im74x5.fsf@gmail.com
State Accepted
Headers show

Commit Message

Oleg Pykhalov Oct. 9, 2021, 12:34 p.m. UTC
Ludovic Courtès <ludo@gnu.org> writes:

>> From eec2ab5f514ec6e156244898f8a635baf323ab70 Mon Sep 17 00:00:00 2001
>> From: Oleg Pykhalov <go.wigust@gmail.com>
>> Date: Tue, 5 Oct 2021 02:10:25 +0300
>> Subject: [PATCH] scripts: home: Make sure profile directory exists.

[…]

> Also, wouldn’t it be easier to set HOME to a new directory?
>
>> +        guix home reconfigure "${test_directory}/home.scm"

We probably should clean temporary $HOME directory with 'rm -rf' or
delete each file with 'rm' and then invoke 'rmdir' inside a Bash's
'trap'.  I fill worry about removing operations on $HOME directories.

Alternative is not to remove $HOME by calling some command and just exit
from a namespace, which will remove $HOME mounted as tmpfs after exiting
a process running the guix-home.sh test.

[…]

> Could you send an updated patch?

Also returned Andrew's 'guix home search' tests.

And 'home-bash-service-type' is replaced with 'simple-service' to not to
block the guix-home.sh test from merging in master until completion of
discussion about file-like objects.
Oleg.

Comments

Ludovic Courtès Oct. 9, 2021, 2:34 p.m. UTC | #1
Oleg Pykhalov <go.wigust@gmail.com> skribis:

> Ludovic Courtès <ludo@gnu.org> writes:
>
>>> From eec2ab5f514ec6e156244898f8a635baf323ab70 Mon Sep 17 00:00:00 2001
>>> From: Oleg Pykhalov <go.wigust@gmail.com>
>>> Date: Tue, 5 Oct 2021 02:10:25 +0300
>>> Subject: [PATCH] scripts: home: Make sure profile directory exists.
>
> […]
>
>> Also, wouldn’t it be easier to set HOME to a new directory?
>>
>>> +        guix home reconfigure "${test_directory}/home.scm"
>
> We probably should clean temporary $HOME directory with 'rm -rf' or
> delete each file with 'rm' and then invoke 'rmdir' inside a Bash's
> 'trap'.  I fill worry about removing operations on $HOME directories.

Like you wrote, the trap should “rm -rf $test_directory” rather than “rm
-rf $HOME”.  It’s safer.  :-)

> Also returned Andrew's 'guix home search' tests.
>
> And 'home-bash-service-type' is replaced with 'simple-service' to not to
> block the guix-home.sh test from merging in master until completion of
> discussion about file-like objects.

OK.

> From 4b29f7f1592f4256c7cd628624d2225e2d427a9d Mon Sep 17 00:00:00 2001
> From: Oleg Pykhalov <go.wigust@gmail.com>
> Date: Sat, 9 Oct 2021 14:52:10 +0300
> Subject: [PATCH 1/2] scripts: home: Make sure profile directory exists.
>
> * guix/scripts/home.scm (process-action): Make sure profile directory exists.

LGTM.

> From 5cc0b064af3f4a6238722fbb451a98b499c8d6d2 Mon Sep 17 00:00:00 2001
> From: Oleg Pykhalov <go.wigust@gmail.com>
> Date: Sat, 9 Oct 2021 14:52:13 +0300
> Subject: [PATCH 2/2] tests: Add guix-home.sh.
>
> * tests/guix-home.sh: New file.
> * Makefile.am (SH_TESTS): Add this.

LGTM, thanks!

Ludo’.
Oleg Pykhalov Oct. 9, 2021, 7:39 p.m. UTC | #2
Merged 2 patches from the current issue.

Also:
- Moved (gnu home-services) to (gnu services).
- Added two tests for home-bash-service-type.
- Fixed the documentation.

Oleg.
diff mbox

Patch

From 5cc0b064af3f4a6238722fbb451a98b499c8d6d2 Mon Sep 17 00:00:00 2001
From: Oleg Pykhalov <go.wigust@gmail.com>
Date: Sat, 9 Oct 2021 14:52:13 +0300
Subject: [PATCH 2/2] tests: Add guix-home.sh.

* tests/guix-home.sh: New file.
* Makefile.am (SH_TESTS): Add this.
---
 Makefile.am        |   1 +
 tests/guix-home.sh | 122 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 123 insertions(+)
 create mode 100644 tests/guix-home.sh

diff --git a/Makefile.am b/Makefile.am
index bb0b5989d2..b341031ec9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -552,6 +552,7 @@  SH_TESTS =					\
   tests/guix-package-aliases.sh			\
   tests/guix-package-net.sh			\
   tests/guix-system.sh				\
+  tests/guix-home.sh				\
   tests/guix-archive.sh				\
   tests/guix-authenticate.sh			\
   tests/guix-environment.sh			\
diff --git a/tests/guix-home.sh b/tests/guix-home.sh
new file mode 100644
index 0000000000..f251304083
--- /dev/null
+++ b/tests/guix-home.sh
@@ -0,0 +1,122 @@ 
+
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2021 Andrew Tropin <andrew@trop.in>
+# Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
+#
+# This file is part of GNU Guix.
+#
+# GNU Guix is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# GNU Guix is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+#
+# Test the 'guix home' using the external store, if any.
+#
+
+set -e
+
+guix home --version
+
+NIX_STORE_DIR="$(guile -c '(use-modules (guix config))(display %storedir)')"
+localstatedir="$(guile -c '(use-modules (guix config))(display %localstatedir)')"
+GUIX_DAEMON_SOCKET="$localstatedir/guix/daemon-socket/socket"
+export NIX_STORE_DIR GUIX_DAEMON_SOCKET
+
+# Run tests only when a "real" daemon is available.
+if ! guile -c '(use-modules (guix)) (exit (false-if-exception (open-connection)))'
+then
+    exit 77
+fi
+
+STORE_PARENT="$(dirname "$NIX_STORE_DIR")"
+export STORE_PARENT
+if test "$STORE_PARENT" = "/"; then exit 77; fi
+
+run_guix_home_without_home()
+{
+    set -e
+
+    # Save current directory (Guix source directory) for later mount
+    test_directory="$(mktemp -d)"
+    trap 'umount $test_directory; rmdir $test_directory' EXIT
+    mount --bind "$PWD" "$test_directory"
+
+    # Make $HOME directory empty to preserve user's files
+    mount --types tmpfs none "$HOME"
+
+    # Mount Guix source directory in a clean environment
+    mkdir -p "$PWD"
+    mount --bind "$test_directory" "$PWD"
+    cd "$PWD" || exit 77
+
+    #
+    # Test 'guix home reconfigure'.
+    #
+
+    cat > "home.scm" <<'EOF'
+(use-modules (guix gexp)
+             (gnu home)
+             (gnu home-services)
+             (gnu services))
+
+(home-environment
+ (services
+  (list
+   (simple-service 'test-config
+                   home-files-service-type
+                   (list `("config/test.conf"
+                           ,(plain-file
+                             "tmp-file.txt"
+                             "the content of ~/.config/test.conf")))))))
+EOF
+
+    guix home reconfigure "${test_directory}/home.scm"
+    test -d "${HOME}/.guix-home"
+    grep -q "the content of ~/.config/test.conf" "${HOME}/.config/test.conf"
+
+    #
+    # Test 'guix home describe'.
+    #
+
+    configuration_file()
+    {
+        guix home describe                      \
+            | grep 'configuration file:'        \
+            | cut -d : -f 2                     \
+            | xargs echo
+    }
+    test "$(cat "$(configuration_file)")" == "$(cat home.scm)"
+
+    canonical_file_name()
+    {
+        guix home describe                      \
+            | grep 'canonical file name:'       \
+            | cut -d : -f 2                     \
+            | xargs echo
+    }
+    test "$(canonical_file_name)" == "$(readlink "${HOME}/.guix-home")"
+
+    #
+    # Test 'guix home search'.
+    #
+
+    guix home search mcron | grep "^name: home-mcron"
+    guix home search job manager | grep "^name: home-mcron"
+}
+export -f run_guix_home_without_home
+
+if unshare -r true # Are user namespaces supported?
+then
+    unshare --mount --map-root-user --fork sh -c "run_guix_home_without_home"
+else
+    exit 77
+fi
-- 
2.33.0