diff mbox series

[bug#50912] tests: Add tests for guix home cli.

Message ID 87lf3e4l26.fsf@trop.in
State Accepted
Headers show
Series [bug#50912] tests: Add tests for guix home cli. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

Andrew Tropin Sept. 30, 2021, 6:43 a.m. UTC
* tests/guix-home.sh: New file.
* Makefile.am (SH_TESTS): Add tests/guix-home.sh.
---


 Makefile.am        |  1 +
 tests/guix-home.sh | 99 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 100 insertions(+)
 create mode 100644 tests/guix-home.sh

Comments

Andrew Tropin Sept. 30, 2021, 6:57 a.m. UTC | #1
Added a few checks very similar to what I found in tests/guix-system.sh,
just to be sure that cli at least works somehow.  I think it will be
enough for beginnig and propose to add new test cases, when we face any
issues to prevent regressions or when new functionality is added.
Xinglu Chen Oct. 1, 2021, 1:56 p.m. UTC | #2
On Thu, Sep 30 2021, Andrew Tropin wrote:

> * tests/guix-home.sh: New file.
> * Makefile.am (SH_TESTS): Add tests/guix-home.sh.
> ---
>
>
>  Makefile.am        |  1 +
>  tests/guix-home.sh | 99 ++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 100 insertions(+)
>  create mode 100644 tests/guix-home.sh
>
> diff --git a/Makefile.am b/Makefile.am
> index b66789fa0b..5bf2567dc8 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -546,6 +546,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..cb015c907f
> --- /dev/null
> +++ b/tests/guix-home.sh
> @@ -0,0 +1,99 @@
> +# GNU Guix --- Functional package management for GNU
> +# Copyright © 2021 Andrew Tropin <andrew@trop.in>
> +#
> +# 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 'guix home' cli.
> +#
> +
> +set -e
> +
> +guix home --version
> +
> +tmpfile="t-guix-home-$$"
> +errorfile="t-guix-home-error-$$"
> +
> +# Note: This directory is chosen outside $builddir so that relative file name
> +# canonicalization doesn't mess up with 'current-source-directory', used by
> +# 'local-file' ('load' forces 'relative' for
> +# %FILE-PORT-NAME-CANONICALIZATION.)
> +tmpdir="${TMPDIR:-/tmp}/t-guix-home-$$"
> +mkdir "$tmpdir"
> +
> +trap 'rm -f "$tmpfile" "$errorfile" "$tmpdir"/*; rmdir "$tmpdir"' EXIT
> +
> +# Reporting of syntax errors.
> +
> +cat > "$tmpfile"<<EOF
> +;; This is line 1, and the next one is line 2.
> +   (home-environment
> +    (packages))
> +;; The 'T' is at column 3.
> +EOF
> +
> +if guix home build "$tmpfile" 2> "$errorfile"
> +then
> +    # This must not succeed.
> +    exit 1
> +else
> +    grep "$tmpfile:3:4: error: (packages): invalid field specifier" "$errorfile"
> +fi
> +
> +
> +cat > "$tmpfile"<<EOF
> +;; This is line 1, and the next one is line 2.
> +   (home-environment
> +;; This is line 3, and there is no closing paren!
> +EOF
> +
> +if guix home build "$tmpfile" 2> "$errorfile"
> +then
> +    # This must not succeed.
> +    exit 1
> +else
> +    # Guile 3.0.6 gets line/column numbers for 'read-error' wrong
> +    # (zero-indexed): <https://bugs.gnu.org/48089>.
> +    grep "$tmpfile:4:1: missing closing paren" "$errorfile" || \
> +    grep "$tmpfile:3:0: missing closing paren" "$errorfile"
> +fi
> +
> +# Reporting of duplicate system service declaration.
> +
> +cat > "$tmpfile" <<EOF
> +(use-modules (gnu))
> +(use-modules (gnu home-services shepherd))
> +
> +(home-environment
> +  (services (list (service home-shepherd-service-type)
> +                  (simple-service 'test-shepherd-extension
> +                   home-shepherd-service-type '())
> +                  (service home-shepherd-service-type)
> +                  (service home-shepherd-service-type))))
> +EOF
> +
> +if guix home build "$tmpfile" 2> "$errorfile"
> +then
> +    # This must not succeed.
> +    exit 1
> +else
> +    grep "guix home: error: more than one target service of type 'home-shepherd'" "$errorfile"
> +fi
> +
> +# Searching.
> +
> +guix home search mcron | grep "^name: home-mcron"
> +guix home search job manager | grep "^name: home-mcron"
> -- 
> 2.33.0

The tests themselves LGTM, but some additional things should probably be
tested

* The provided file doesn’t return a <home-environment>

    guix home build /tmp/test.scm
    guix home: error: '/tmp/test.scm' does not return a home environment

* Maybe something like ‘Reporting unmet shepherd requirements’ in
  ‘guix-system.sh’

‘guix home import’ should also be tested, but we will have to wait for
the fixes[1] to get merged first.

[1]: <https://issues.guix.gnu.org/50873>
Andrew Tropin Oct. 5, 2021, 9:47 a.m. UTC | #3
On 2021-10-01 15:56, Xinglu Chen wrote:

> On Thu, Sep 30 2021, Andrew Tropin wrote:
>
>> * tests/guix-home.sh: New file.
>> * Makefile.am (SH_TESTS): Add tests/guix-home.sh.
>> ---
>>
>>
>>  Makefile.am        |  1 +
>>  tests/guix-home.sh | 99 ++++++++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 100 insertions(+)
>>  create mode 100644 tests/guix-home.sh
>>
>> diff --git a/Makefile.am b/Makefile.am
>> index b66789fa0b..5bf2567dc8 100644
>> --- a/Makefile.am
>> +++ b/Makefile.am
>> @@ -546,6 +546,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..cb015c907f
>> --- /dev/null
>> +++ b/tests/guix-home.sh
>> @@ -0,0 +1,99 @@
>> +# GNU Guix --- Functional package management for GNU
>> +# Copyright © 2021 Andrew Tropin <andrew@trop.in>
>> +#
>> +# 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 'guix home' cli.
>> +#
>> +
>> +set -e
>> +
>> +guix home --version
>> +
>> +tmpfile="t-guix-home-$$"
>> +errorfile="t-guix-home-error-$$"
>> +
>> +# Note: This directory is chosen outside $builddir so that relative file name
>> +# canonicalization doesn't mess up with 'current-source-directory', used by
>> +# 'local-file' ('load' forces 'relative' for
>> +# %FILE-PORT-NAME-CANONICALIZATION.)
>> +tmpdir="${TMPDIR:-/tmp}/t-guix-home-$$"
>> +mkdir "$tmpdir"
>> +
>> +trap 'rm -f "$tmpfile" "$errorfile" "$tmpdir"/*; rmdir "$tmpdir"' EXIT
>> +
>> +# Reporting of syntax errors.
>> +
>> +cat > "$tmpfile"<<EOF
>> +;; This is line 1, and the next one is line 2.
>> +   (home-environment
>> +    (packages))
>> +;; The 'T' is at column 3.
>> +EOF
>> +
>> +if guix home build "$tmpfile" 2> "$errorfile"
>> +then
>> +    # This must not succeed.
>> +    exit 1
>> +else
>> +    grep "$tmpfile:3:4: error: (packages): invalid field specifier" "$errorfile"
>> +fi
>> +
>> +
>> +cat > "$tmpfile"<<EOF
>> +;; This is line 1, and the next one is line 2.
>> +   (home-environment
>> +;; This is line 3, and there is no closing paren!
>> +EOF
>> +
>> +if guix home build "$tmpfile" 2> "$errorfile"
>> +then
>> +    # This must not succeed.
>> +    exit 1
>> +else
>> +    # Guile 3.0.6 gets line/column numbers for 'read-error' wrong
>> +    # (zero-indexed): <https://bugs.gnu.org/48089>.
>> +    grep "$tmpfile:4:1: missing closing paren" "$errorfile" || \
>> +    grep "$tmpfile:3:0: missing closing paren" "$errorfile"
>> +fi
>> +
>> +# Reporting of duplicate system service declaration.
>> +
>> +cat > "$tmpfile" <<EOF
>> +(use-modules (gnu))
>> +(use-modules (gnu home-services shepherd))
>> +
>> +(home-environment
>> +  (services (list (service home-shepherd-service-type)
>> +                  (simple-service 'test-shepherd-extension
>> +                   home-shepherd-service-type '())
>> +                  (service home-shepherd-service-type)
>> +                  (service home-shepherd-service-type))))
>> +EOF
>> +
>> +if guix home build "$tmpfile" 2> "$errorfile"
>> +then
>> +    # This must not succeed.
>> +    exit 1
>> +else
>> +    grep "guix home: error: more than one target service of type 'home-shepherd'" "$errorfile"
>> +fi
>> +
>> +# Searching.
>> +
>> +guix home search mcron | grep "^name: home-mcron"
>> +guix home search job manager | grep "^name: home-mcron"
>> -- 
>> 2.33.0
>
> The tests themselves LGTM, but some additional things should probably be
> tested
>
> * The provided file doesn’t return a <home-environment>
>
>     guix home build /tmp/test.scm
>     guix home: error: '/tmp/test.scm' does not return a home environment

Good idea, probably I'll provide a few more test, like successful
building of a simple home environment, when migration to new namespace
will be finished.

>
> * Maybe something like ‘Reporting unmet shepherd requirements’ in
>   ‘guix-system.sh’
>
> ‘guix home import’ should also be tested, but we will have to wait for
> the fixes[1] to get merged first.
>
> [1]: <https://issues.guix.gnu.org/50873>

Perhaps it can be done in the patch series with fixes for guix home
import, just after this test script is merged.  BTW, thank you for
cleaning it up.
Oleg Pykhalov Oct. 19, 2021, 2:11 p.m. UTC | #4
Hi,

Andrew Tropin <andrew@trop.in> writes:

> * tests/guix-home.sh: New file.
> * Makefile.am (SH_TESTS): Add tests/guix-home.sh.
> ---
>
>
>  Makefile.am        |  1 +
>  tests/guix-home.sh | 99 ++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 100 insertions(+)
>  create mode 100644 tests/guix-home.sh
>
> diff --git a/Makefile.am b/Makefile.am
> index b66789fa0b..5bf2567dc8 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -546,6 +546,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			\

[…]

I copied 'guix home search' tests and replaced everything else with
another test suite as discussed at https://issues.guix.gnu.org/50967#35

Closing the current issue.

Oleg.
diff mbox series

Patch

diff --git a/Makefile.am b/Makefile.am
index b66789fa0b..5bf2567dc8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -546,6 +546,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..cb015c907f
--- /dev/null
+++ b/tests/guix-home.sh
@@ -0,0 +1,99 @@ 
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2021 Andrew Tropin <andrew@trop.in>
+#
+# 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 'guix home' cli.
+#
+
+set -e
+
+guix home --version
+
+tmpfile="t-guix-home-$$"
+errorfile="t-guix-home-error-$$"
+
+# Note: This directory is chosen outside $builddir so that relative file name
+# canonicalization doesn't mess up with 'current-source-directory', used by
+# 'local-file' ('load' forces 'relative' for
+# %FILE-PORT-NAME-CANONICALIZATION.)
+tmpdir="${TMPDIR:-/tmp}/t-guix-home-$$"
+mkdir "$tmpdir"
+
+trap 'rm -f "$tmpfile" "$errorfile" "$tmpdir"/*; rmdir "$tmpdir"' EXIT
+
+# Reporting of syntax errors.
+
+cat > "$tmpfile"<<EOF
+;; This is line 1, and the next one is line 2.
+   (home-environment
+    (packages))
+;; The 'T' is at column 3.
+EOF
+
+if guix home build "$tmpfile" 2> "$errorfile"
+then
+    # This must not succeed.
+    exit 1
+else
+    grep "$tmpfile:3:4: error: (packages): invalid field specifier" "$errorfile"
+fi
+
+
+cat > "$tmpfile"<<EOF
+;; This is line 1, and the next one is line 2.
+   (home-environment
+;; This is line 3, and there is no closing paren!
+EOF
+
+if guix home build "$tmpfile" 2> "$errorfile"
+then
+    # This must not succeed.
+    exit 1
+else
+    # Guile 3.0.6 gets line/column numbers for 'read-error' wrong
+    # (zero-indexed): <https://bugs.gnu.org/48089>.
+    grep "$tmpfile:4:1: missing closing paren" "$errorfile" || \
+    grep "$tmpfile:3:0: missing closing paren" "$errorfile"
+fi
+
+# Reporting of duplicate system service declaration.
+
+cat > "$tmpfile" <<EOF
+(use-modules (gnu))
+(use-modules (gnu home-services shepherd))
+
+(home-environment
+  (services (list (service home-shepherd-service-type)
+                  (simple-service 'test-shepherd-extension
+                   home-shepherd-service-type '())
+                  (service home-shepherd-service-type)
+                  (service home-shepherd-service-type))))
+EOF
+
+if guix home build "$tmpfile" 2> "$errorfile"
+then
+    # This must not succeed.
+    exit 1
+else
+    grep "guix home: error: more than one target service of type 'home-shepherd'" "$errorfile"
+fi
+
+# Searching.
+
+guix home search mcron | grep "^name: home-mcron"
+guix home search job manager | grep "^name: home-mcron"