Subject: [bug#58812] [PATCH 2/5] tests: Add a tests/utils.sh support file.

From: Maxim Cournoyer <[email-masked]>
Date: Wed, 26 Oct 2022 23:50:57 -0400

The purpose of this file will be to accumulate support shell functions for the
shell-authored tests.

* tests/shell-utils.scm: New file.
* tests/utils.sh: Likewise.
* Makefile.am (EXTRA_DIST): Register them.
---
 Makefile.am           |  3 +++
 tests/shell-utils.scm | 29 +++++++++++++++++++++++++++++
 tests/utils.sh        | 33 +++++++++++++++++++++++++++++++++
 3 files changed, 65 insertions(+)
 create mode 100644 tests/shell-utils.scm
 create mode 100644 tests/utils.sh

diff --git a/Makefile.am b/Makefile.am
index 6cc7c0c4a0..14cbdcb011 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -16,6 +16,7 @@
 # Copyright © 2019 Efraim Flashner <[email-masked]>
 # Copyright © 2021 Chris Marusich <[email-masked]>
 # Copyright © 2021 Andrew Tropin <[email-masked]>
+# Copyright © 2021, 2022 Maxim Cournoyer <[email-masked]>
 #
 # This file is part of GNU Guix.
 #
@@ -700,7 +701,9 @@ EXTRA_DIST +=						\
   tests/keys/rsa.pub					\
   tests/keys/signing-key.pub				\
   tests/keys/signing-key.sec				\
+  tests/shell-utils.scm					\
   tests/test.drv					\
+  tests/utils.sh					\
   $(TESTS)
 
 if !BUILD_DAEMON_OFFLOAD
diff --git a/tests/shell-utils.scm b/tests/shell-utils.scm
new file mode 100644
index 0000000000..3ae9a414cd
--- /dev/null
+++ b/tests/shell-utils.scm
@@ -0,0 +1,29 @@
+;; GNU Guix --- Functional package management for GNU
+;; Copyright © 2022 Maxim Cournoyer <[email-masked]>
+;;
+;; 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/>.
+;;
+;; Commentary:
+;;
+;; This file contains procedures that support the shell functions defined in
+;; tests/utils.sh.
+(use-modules (gnu build linux-container))
+
+(define (container-support?)
+  (unless (and (user-namespace-supported?)
+               (unprivileged-user-namespace-supported?)
+               (setgroups-supported?))
+    (exit 1)))
diff --git a/tests/utils.sh b/tests/utils.sh
new file mode 100644
index 0000000000..ba17f0de15
--- /dev/null
+++ b/tests/utils.sh
@@ -0,0 +1,33 @@
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2022 Maxim Cournoyer <[email-masked]>
+#
+# 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/>.
+#
+# Commentary:
+#
+# This file provides utility shell functions that can be used in the shell
+# test scripts.  The file is intended to be sourced as a shell library.
+
+BASEDIR=$(dirname "$0")
+
+HAS_CONTAINER_SUPPORT=
+has_container_support() {
+    if [ -z "$HAS_CONTAINER_SUPPORT" ]; then
+        guile -l "$BASEDIR/shell-utils.scm"  -c '(container-support?)'
+        HAS_CONTAINER_SUPPORT=$?
+    fi
+    return "$HAS_CONTAINER_SUPPORT"
+}
-- 
2.37.3