gtk and wayland update
[jackhill/guix/guix.git] / tests / guix-home.sh
index f054d15..3151f66 100644 (file)
@@ -1,5 +1,5 @@
 # GNU Guix --- Functional package management for GNU
-# Copyright © 2021 Andrew Tropin <andrew@trop.in>
+# Copyright © 2021-2023 Andrew Tropin <andrew@trop.in>
 # Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
 # Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
 #
@@ -26,6 +26,16 @@ set -e
 
 guix home --version
 
+container_supported ()
+{
+    if guile -c '((@ (guix scripts environment) assert-container-features))'
+    then
+       return 0
+    else
+       return 1
+    fi
+}
+
 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"
@@ -47,25 +57,12 @@ trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT
 (
     cd "$test_directory" || exit 77
 
-    HOME="$test_directory"
-    export HOME
-
-    #
-    # Test 'guix home reconfigure'.
-    #
-
-    echo "# This file will be overridden and backed up." > "$HOME/.bashrc"
-    mkdir "$HOME/.config"
-    echo "This file will be overridden too." > "$HOME/.config/test.conf"
-    echo "This file will stay around." > "$HOME/.config/random-file"
-
-    echo -n "# dot-bashrc test file for guix home" > "dot-bashrc"
-
     cat > "home.scm" <<'EOF'
 (use-modules (guix gexp)
              (gnu home)
              (gnu home services)
              (gnu home services shells)
+             (gnu packages bash)
              (gnu services))
 
 (home-environment
@@ -73,7 +70,7 @@ trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT
   (list
    (simple-service 'test-config
                    home-files-service-type
-                   (list `("config/test.conf"
+                   (list `(".config/test.conf"
                            ,(plain-file
                              "tmp-file.txt"
                              "the content of ~/.config/test.conf"))))
@@ -83,9 +80,20 @@ trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT
              (guix-defaults? #t)
              (bashrc (list (local-file "dot-bashrc")))))
 
+   (simple-service 'add-environment-variable
+                   home-environment-variables-service-type
+                   `(("TODAY" . "26 messidor")
+                     ("SHELL" . ,(file-append bash "/bin/bash"))
+                     ("BUILDHOST_TIME" . ,#~(strftime "%c"
+                                             (localtime (current-time))))
+                     ("STRING_WITH_ESCAPES" . "chars: \" /\\")
+                     ("LITERAL" . ,(literal-string "${abc}"))))
+
    (simple-service 'home-bash-service-extension-test
                    home-bash-service-type
                    (home-bash-extension
+                    (environment-variables
+                      '(("PS1" . "$GUIX_ENVIRONMENT λ ")))
                     (bashrc
                      (list
                       (plain-file
@@ -93,6 +101,50 @@ trap 'chmod -Rf +w "$test_directory"; rm -rf "$test_directory"' EXIT
                        "# the content of bashrc-test-config.sh"))))))))
 EOF
 
+    echo -n "# dot-bashrc test file for guix home" > "dot-bashrc"
+
+    # Check whether the graph commands work as expected.
+    guix home extension-graph "home.scm" | grep 'label = "home-activation"'
+    guix home extension-graph "home.scm" | grep 'label = "home-symlink-manager"'
+    guix home extension-graph "home.scm" | grep 'label = "home"'
+
+    # There are no Shepherd services so the one below must fail.
+    ! guix home shepherd-graph "home.scm"
+
+    if container_supported
+    then
+       # Run the home in a container.  Always use bash inside container for
+        # reproducibility of the tests.
+        # TODO: Make container independent from external environment variables.
+        SHELL=bash
+       guix home container home.scm -- true
+       ! guix home container home.scm -- false
+       test "$(guix home container home.scm -- echo '$HOME')" = "$HOME"
+       guix home container home.scm -- cat '~/.config/test.conf' | \
+           grep "the content of"
+       guix home container home.scm -- test -h '~/.bashrc'
+       test "$(guix home container home.scm -- id -u)" = 1000
+       ! guix home container home.scm -- test -f '$HOME/sample/home.scm'
+       guix home container home.scm --expose="$PWD=$HOME/sample" -- \
+            test -f '$HOME/sample/home.scm'
+       ! guix home container home.scm --expose="$PWD=$HOME/sample" -- \
+            rm -v '$HOME/sample/home.scm'
+    else
+       echo "'guix home container' test SKIPPED" >&2
+    fi
+
+    HOME="$test_directory"
+    export HOME
+
+    #
+    # Test 'guix home reconfigure'.
+    #
+
+    echo "# This file will be overridden and backed up." > "$HOME/.bashrc"
+    mkdir "$HOME/.config"
+    echo "This file will be overridden too." > "$HOME/.config/test.conf"
+    echo "This file will stay around." > "$HOME/.config/random-file"
+
     guix home reconfigure "${test_directory}/home.scm"
     test -d "${HOME}/.guix-home"
     test -h "${HOME}/.bash_profile"
@@ -101,6 +153,14 @@ EOF
 # dot-bashrc test file for guix home
 # the content of bashrc-test-config.sh"
     grep -q "the content of ~/.config/test.conf" "${HOME}/.config/test.conf"
+    grep '^export PS1="\$GUIX_ENVIRONMENT λ "$' "${HOME}/.bash_profile"
+
+    ( . "${HOME}/.guix-home/setup-environment"; test "$TODAY" = "26 messidor" )
+    ( . "${HOME}/.guix-home/setup-environment"; test "$LITERAL" = '${abc}' )
+    ( . "${HOME}/.guix-home/setup-environment";
+      test "$STRING_WITH_ESCAPES" = "chars: \" /\\")
+    ( . "${HOME}/.guix-home/setup-environment";
+      echo "$SHELL" | grep "/gnu/store/.*/bin/bash" )
 
     # This one should still be here.
     grep "stay around" "$HOME/.config/random-file"