blob: e61232f94fadc19b5fc7ca47ea9ed7e2188ac85b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# GNU Guix --- Functional package management for GNU
# Copyright © 2023 Maxim Cournoyer <maxim@guixotic.coop>
# Copyright © 2023-2024, 2026 Ludovic Courtès <ludo@gnu.org>
#
# 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 time-machine' command-line utility.
#
channels_file="channels-test-$$.scm"
log_file="log-test-$$.log"
trap "rm -f $channels_file $log_file" EXIT
cat > "$channels_file" <<EOF
(system "echo rm -rf /")
%default-channels
EOF
# This must fail: 'system' is not among the available bindings in the
# evaluation sandbox.
guix time-machine -C "$channels_file" && echo false
cat > "$channels_file" <<EOF
(use-modules (system foreign))
%default-channels
EOF
# Likewise, 'use-modules' is not available.
guix time-machine -C "$channels_file" && echo false
# Get 'time-machine' to download a channel file with an untrusted channel.
# Check that this fails with a "'guix' is not trusted" message.
cat > "$channels_file" <<EOF
(use-modules (guix tests http)
(guix diagnostics)
(guix scripts time-machine))
(define channels
'(list (channel
(name 'guix)
(url "https://example.org/evil/guix.git")
(branch "devel")
(commit "cabba9e900d2350aef42e65643de78500b2aad06")
(introduction
(make-channel-introduction
"badcafef1d5c170db68aa4bbfb77024fdc468ed3"
(openpgp-fingerprint
"CABB A9EE 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5"))))))
(with-http-server (list (list 200 (object->string channels)))
(let ((error (open-output-string)))
(catch 'quit
(lambda ()
(parameterize ((guix-warning-port error))
(guix-time-machine "-C" (%local-url) "--" "describe")
(primitive-exit 1)))
(lambda _
(exit (->bool (string-contains (get-output-string error)
"'guix' is not trusted")))))))
EOF
guix repl -- "$channels_file"
# Under 'pre-inst-env', there are zero trusted channels by default.
cat > "$channels_file" <<EOF
%default-channels
EOF
# Ignore the user's ~/.config/guix/trusted-channels.scm and ensure this
# command fails.
XDG_CONFIG_HOME="$XDG_CACHE_HOME/dot-config" \
guix time-machine -C "$channels_file" --allow-untrusted-channels=no 2> "$log_file" && false
grep "'guix' is not trusted" "$log_file"
if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null
then
# Ignore the user's ~/.config/guix/trusted-channels.scm. Under
# ./pre-inst-env zero channels are trusted by default so the following
# command must fail.
XDG_CONFIG_HOME="$XDG_CACHE_HOME/dot-config" \
guix time-machine \
-C swh:1:cnt:003e1e0c1b9b358082201332c926ae54e9549002 \
2> "$log_file" \
&& false
grep "'guix' is not trusted" "$log_file"
fi
if [ -d "$abs_top_srcdir/.git" ] \
|| guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null
then
guix time-machine --version
else
echo "This test requires networking or a local Git checkout; skipping." >&2
exit 77
fi
if [ -d "$abs_top_srcdir/.git" ]
then
# Note: No "file://" prefix because that makes cloning much more expensive
# for some reason.
EXTRA_OPTIONS="--url=$abs_top_srcdir"
else
EXTRA_OPTIONS=""
fi
# Visiting a commit older than v0.16.0 must fail (this test is expensive
# because it clones the whole repository).
guix time-machine -q --commit=v0.15.0 $EXTRA_OPTIONS -- describe && false
true
|