profiles: Silence Info installation.
[jackhill/guix/guix.git] / tests / guix-system.sh
CommitLineData
c1202fb1 1# GNU Guix --- Functional package management for GNU
116244df 2# Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
c1202fb1
LC
3#
4# This file is part of GNU Guix.
5#
6# GNU Guix is free software; you can redistribute it and/or modify it
7# under the terms of the GNU General Public License as published by
8# the Free Software Foundation; either version 3 of the License, or (at
9# your option) any later version.
10#
11# GNU Guix is distributed in the hope that it will be useful, but
12# WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU General Public License for more details.
15#
16# You should have received a copy of the GNU General Public License
17# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
18
19#
122c87ea 20# Test the daemon and its interaction with 'guix substitute'.
c1202fb1
LC
21#
22
23set -e
24
25guix system --version
26
27tmpfile="t-guix-system-$$"
28errorfile="t-guix-system-error-$$"
29trap 'rm -f "$tmpfile" "$errorfile"' EXIT
30
116244df
LC
31# Reporting of syntax errors.
32
c1202fb1
LC
33cat > "$tmpfile"<<EOF
34;; This is line 1, and the next one is line 2.
35 (operating-system)
36;; The 'T' is at column 3.
37EOF
38
39if guix system vm "$tmpfile" 2> "$errorfile"
40then
41 # This must not succeed.
42 exit 1
43else
44 grep "$tmpfile:2:3:.*missing.* initializers" "$errorfile"
45fi
116244df
LC
46
47
2abcc97f
LC
48# Reporting of unbound variables.
49
50cat > "$tmpfile" <<EOF
51(use-modules (gnu)) ; 1
52(use-service-modules networking) ; 2
53
54(operating-system ; 4
55 (host-name "antelope") ; 5
56 (timezone "Europe/Paris") ; 6
57 (locale "en_US.UTF-8") ; 7
58
59 (bootloader (GRUB-config (device "/dev/sdX"))) ; 9
60 (file-systems (cons (file-system
61 (device "root")
62 (title 'label)
63 (mount-point "/")
64 (type "ext4"))
65 %base-file-systems)))
66EOF
67
68if guix system build "$tmpfile" -n 2> "$errorfile"
69then false
70else
71 grep "$tmpfile:9:.*[Uu]nbound variable.*GRUB-config" "$errorfile"
72fi
73
2d2651e7 74OS_BASE='
116244df
LC
75 (host-name "antelope")
76 (timezone "Europe/Paris")
77 (locale "en_US.UTF-8")
78
79 (bootloader (grub-configuration (device "/dev/sdX")))
80 (file-systems (cons (file-system
81 (device "root")
2d2651e7 82 (title (string->symbol "label"))
116244df
LC
83 (mount-point "/")
84 (type "ext4"))
85 %base-file-systems))
2d2651e7 86'
116244df 87
2d2651e7
LC
88# Reporting of duplicate service identifiers.
89
90cat > "$tmpfile" <<EOF
91(use-modules (gnu))
92(use-service-modules networking)
93
94(operating-system
95 $OS_BASE
116244df
LC
96 (services (cons* (dhcp-client-service)
97 (dhcp-client-service) ;twice!
98 %base-services)))
99EOF
100
101if guix system vm "$tmpfile" 2> "$errorfile"
102then
103 # This must not succeed.
104 exit 1
105else
106 grep "service 'networking'.*more than once" "$errorfile"
107fi
0c09a306 108
2d2651e7
LC
109# Reporting unmet dmd requirements.
110
111cat > "$tmpfile" <<EOF
112(use-modules (gnu) (gnu services dmd))
113(use-service-modules networking)
114
115(define buggy-service-type
116 (dmd-service-type
117 'buggy
118 (lambda _
119 (dmd-service
120 (provision '(buggy!))
121 (requirement '(does-not-exist))
122 (start #t)))))
123
124(operating-system
125 $OS_BASE
126 (services (cons (service buggy-service-type #t)
127 %base-services)))
128EOF
129
130if guix system build "$tmpfile" 2> "$errorfile"
131then
132 exit 1
133else
134 grep "service 'buggy!'.*'does-not-exist'.*undefined" "$errorfile"
135fi
136
137# Reporting inconsistent user accounts.
138
0c09a306
LC
139make_user_config ()
140{
141 cat > "$tmpfile" <<EOF
142(use-modules (gnu))
143(use-service-modules networking)
144
145(operating-system
146 (host-name "antelope")
147 (timezone "Europe/Paris")
148 (locale "en_US.UTF-8")
149
150 (bootloader (grub-configuration (device "/dev/sdX")))
151 (file-systems (cons (file-system
152 (device "root")
153 (title 'label)
154 (mount-point "/")
155 (type "ext4"))
156 %base-file-systems))
157 (users (list (user-account
158 (name "dave")
159 (home-directory "/home/dave")
160 (group "$1")
161 (supplementary-groups '("$2"))))))
162EOF
163}
164
165make_user_config "users" "wheel"
166guix system build "$tmpfile" -n # succeeds
167
f3f427c2
LC
168guix system build "$tmpfile" -d # succeeds
169guix system build "$tmpfile" -d | grep '\.drv$'
170
171guix system vm "$tmpfile" -d # succeeds
172guix system vm "$tmpfile" -d | grep '\.drv$'
173
0c09a306
LC
174make_user_config "group-that-does-not-exist" "users"
175if guix system build "$tmpfile" -n 2> "$errorfile"
176then false
177else grep "primary group.*group-that-does-not-exist.*undeclared" "$errorfile"; fi
178
179make_user_config "users" "group-that-does-not-exist"
180if guix system build "$tmpfile" -n 2> "$errorfile"
181then false
182else grep "supplementary group.*group-that-does-not-exist.*undeclared" "$errorfile"; fi