Message ID | 87lf3e4l26.fsf@trop.in |
---|---|
State | Accepted |
Headers | show |
Series | [bug#50912] tests: Add tests for guix home cli. | expand |
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 |
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.
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>
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.
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 --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"