Skip to content

Commit c600f69

Browse files
committed
Split configure tests
This splits the tests in the ones that make changes to system packages and users and those that don't. The former are a bit messy as they don't return to a clean, original state for each tests and that will introduce conflicts with further changes.
1 parent 0d62cb0 commit c600f69

File tree

3 files changed

+514
-1
lines changed

3 files changed

+514
-1
lines changed

.github/jobs/configure-checks/setup_configure_image.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ make configure
2020
cp submit/assert.bash .github/jobs/configure-checks/
2121

2222
# Run the configure tests for this usecase
23-
test_path="/__w/domjudge/domjudge" bats .github/jobs/configure-checks/all.bats
23+
test_path="/__w/domjudge/domjudge" bats .github/jobs/configure-checks/
Lines changed: 307 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,307 @@
1+
#!/usr/bin/env bats
2+
3+
load 'assert'
4+
5+
u="domjudge-bats-user"
6+
7+
distro_id=$(grep "^ID=" /etc/os-release)
8+
9+
cmd="apt-get"
10+
if [ "$distro_id" = "ID=fedora" ]; then
11+
cmd=dnf
12+
fi
13+
14+
translate () {
15+
args="$@"
16+
if [ "$distro_id" = "ID=fedora" ]; then
17+
args=${args/libcgroup-dev/libcgroup-devel}
18+
fi
19+
echo "$args"
20+
}
21+
22+
if [ -z ${test_path+x} ]; then
23+
test_path="/domjudge"
24+
# Used in the CI
25+
fi
26+
27+
setup_user() {
28+
id -u $u || (useradd $u ; groupadd $u || true )>/dev/null
29+
chown -R $u:$u ./
30+
}
31+
32+
setup() {
33+
setup_user
34+
for shared_file in config.log confdefs.h conftest.err; do
35+
chmod a+rw $shared_file || true
36+
done
37+
if [ "$distro_id" = "ID=fedora" ]; then
38+
repo-install httpd
39+
fi
40+
repo-install gcc g++ libcgroup-dev composer
41+
}
42+
43+
run_configure () {
44+
su $u -c "./configure $*"
45+
}
46+
47+
repo-install () {
48+
args=$(translate $@)
49+
${cmd} install $args -y >/dev/null
50+
}
51+
repo-remove () {
52+
args=$(translate $@)
53+
${cmd} remove $args -y #>/dev/null
54+
if [ "$distro_id" != "ID=fedora" ]; then
55+
apt-get autoremove -y 2>/dev/null
56+
fi
57+
}
58+
59+
@test "Run as root discouraged" {
60+
setup
61+
run su root -c "./configure"
62+
discourage_root="checking domjudge-user... configure: error: installing/running as root is STRONGLY DISCOURAGED, use --with-domjudge-user=root to override."
63+
assert_line "$discourage_root"
64+
run su root -c "./configure --with-domjudge-user=root"
65+
refute_line "$discourage_root"
66+
}
67+
68+
@test "Run as normal user" {
69+
setup
70+
run ./configure --with-domjudge-user=$u
71+
assert_line "checking domjudge-user... $u"
72+
run su $u -c "./configure"
73+
assert_line "checking domjudge-user... $u (default: current user)"
74+
}
75+
76+
@test "/opt configured" {
77+
setup
78+
run run_configure
79+
assert_line " * prefix..............: /opt/domjudge"
80+
assert_line " * documentation.......: /opt/domjudge/doc"
81+
assert_line " * domserver...........: /opt/domjudge/domserver"
82+
assert_line " - bin..............: /opt/domjudge/domserver/bin"
83+
assert_line " - etc..............: /opt/domjudge/domserver/etc"
84+
assert_line " - lib..............: /opt/domjudge/domserver/lib"
85+
assert_line " - log..............: /opt/domjudge/domserver/log"
86+
assert_line " - run..............: /opt/domjudge/domserver/run"
87+
assert_line " - sql..............: /opt/domjudge/domserver/sql"
88+
assert_line " - tmp..............: /opt/domjudge/domserver/tmp"
89+
assert_line " - webapp...........: /opt/domjudge/domserver/webapp"
90+
assert_line " - example_problems.: /opt/domjudge/domserver/example_problems"
91+
assert_line " * judgehost...........: /opt/domjudge/judgehost"
92+
assert_line " - bin..............: /opt/domjudge/judgehost/bin"
93+
assert_line " - etc..............: /opt/domjudge/judgehost/etc"
94+
assert_line " - lib..............: /opt/domjudge/judgehost/lib"
95+
assert_line " - libjudge.........: /opt/domjudge/judgehost/lib/judge"
96+
assert_line " - log..............: /opt/domjudge/judgehost/log"
97+
assert_line " - run..............: /opt/domjudge/judgehost/run"
98+
assert_line " - tmp..............: /opt/domjudge/judgehost/tmp"
99+
assert_line " - judge............: /opt/domjudge/judgehost/judgings"
100+
assert_line " - chroot...........: /chroot/domjudge"
101+
}
102+
103+
@test "Prefix configured" {
104+
setup
105+
run run_configure --prefix=/tmp
106+
refute_line " * prefix..............: /opt/domjudge"
107+
refute_line " * documentation.......: /opt/domjudge/doc"
108+
refute_line " * domserver...........: /opt/domjudge/domserver"
109+
refute_line " - bin..............: /opt/domjudge/domserver/bin"
110+
refute_line " - tmp..............: /opt/domjudge/domserver/tmp"
111+
refute_line " - example_problems.: /opt/domjudge/domserver/example_problems"
112+
refute_line " * judgehost...........: /opt/domjudge/judgehost"
113+
refute_line " - libjudge.........: /opt/domjudge/judgehost/lib/judge"
114+
refute_line " - log..............: /opt/domjudge/judgehost/log"
115+
refute_line " - run..............: /opt/domjudge/judgehost/run"
116+
refute_line " - tmp..............: /opt/domjudge/judgehost/tmp"
117+
refute_line " - judge............: /opt/domjudge/judgehost/judgings"
118+
assert_line " * prefix..............: /tmp"
119+
assert_line " * documentation.......: /tmp/doc"
120+
assert_line " * domserver...........: /tmp/domserver"
121+
assert_line " * judgehost...........: /tmp/judgehost"
122+
assert_line " - judge............: /tmp/judgehost/judgings"
123+
}
124+
125+
@test "Check FHS" {
126+
setup
127+
run run_configure --enable-fhs
128+
refute_line " * prefix..............: /opt/domjudge"
129+
refute_line " * documentation.......: /opt/domjudge/doc"
130+
refute_line " * domserver...........: /opt/domjudge/domserver"
131+
refute_line " - webapp...........: /opt/domjudge/domserver/webapp"
132+
refute_line " - example_problems.: /opt/domjudge/domserver/example_problems"
133+
refute_line " * judgehost...........: /opt/domjudge/judgehost"
134+
refute_line " - lib..............: /opt/domjudge/judgehost/lib"
135+
136+
assert_line " * prefix..............: /usr/local"
137+
assert_line " * documentation.......: /usr/local/share/doc/domjudge"
138+
assert_line " * domserver...........: "
139+
assert_line " - bin..............: /usr/local/bin"
140+
assert_line " - etc..............: /usr/local/etc/domjudge"
141+
assert_line " - lib..............: /usr/local/lib/domjudge"
142+
assert_line " - log..............: /usr/local/var/log/domjudge"
143+
assert_line " - run..............: /usr/local/var/run/domjudge"
144+
assert_line " - sql..............: /usr/local/share/domjudge/sql"
145+
assert_line " - tmp..............: /tmp"
146+
assert_line " - webapp...........: /usr/local/share/domjudge/webapp"
147+
assert_line " - example_problems.: /usr/local/share/domjudge/example_problems"
148+
assert_line " * judgehost...........: "
149+
assert_line " - bin..............: /usr/local/bin"
150+
assert_line " - etc..............: /usr/local/etc/domjudge"
151+
assert_line " - lib..............: /usr/local/lib/domjudge"
152+
assert_line " - libjudge.........: /usr/local/lib/domjudge/judge"
153+
assert_line " - log..............: /usr/local/var/log/domjudge"
154+
assert_line " - run..............: /usr/local/var/run/domjudge"
155+
assert_line " - tmp..............: /tmp"
156+
assert_line " - judge............: /usr/local/var/lib/domjudge/judgings"
157+
assert_line " - chroot...........: /chroot/domjudge"
158+
}
159+
160+
@test "Alternative dirs together with FHS" {
161+
setup
162+
run run_configure --enable-fhs --with-domserver_webappdir=/run/webapp --with-domserver_tmpdir=/tmp/domserver --with-judgehost_tmpdir=/srv/tmp --with-judgehost_judgedir=/srv/judgings --with-judgehost_chrootdir=/srv/chroot/domjudge
163+
assert_line " * prefix..............: /usr/local"
164+
assert_line " * documentation.......: /usr/local/share/doc/domjudge"
165+
assert_line " * domserver...........: "
166+
assert_line " - bin..............: /usr/local/bin"
167+
assert_line " - etc..............: /usr/local/etc/domjudge"
168+
assert_line " - lib..............: /usr/local/lib/domjudge"
169+
assert_line " - log..............: /usr/local/var/log/domjudge"
170+
assert_line " - run..............: /usr/local/var/run/domjudge"
171+
assert_line " - sql..............: /usr/local/share/domjudge/sql"
172+
refute_line " - tmp..............: /tmp"
173+
assert_line " - tmp..............: /tmp/domserver"
174+
refute_line " - webapp...........: /usr/local/share/domjudge/webapp"
175+
assert_line " - webapp...........: /run/webapp"
176+
assert_line " - example_problems.: /usr/local/share/domjudge/example_problems"
177+
assert_line " * judgehost...........: "
178+
assert_line " - bin..............: /usr/local/bin"
179+
assert_line " - etc..............: /usr/local/etc/domjudge"
180+
assert_line " - lib..............: /usr/local/lib/domjudge"
181+
assert_line " - libjudge.........: /usr/local/lib/domjudge/judge"
182+
assert_line " - log..............: /usr/local/var/log/domjudge"
183+
assert_line " - run..............: /usr/local/var/run/domjudge"
184+
refute_line " - tmp..............: /tmp"
185+
assert_line " - tmp..............: /srv/tmp"
186+
refute_line " - judge............: /usr/local/var/lib/domjudge/judgings"
187+
assert_line " - judge............: /srv/judgings"
188+
refute_line " - chroot...........: /chroot/domjudge"
189+
assert_line " - chroot...........: /srv/chroot/domjudge"
190+
}
191+
192+
@test "Alternative dirs together with defaults" {
193+
setup
194+
run run_configure "--with-judgehost_tmpdir=/srv/tmp --with-judgehost_judgedir=/srv/judgings --with-judgehost_chrootdir=/srv/chroot --with-domserver_logdir=/log"
195+
assert_line " * prefix..............: /opt/domjudge"
196+
assert_line " * documentation.......: /opt/domjudge/doc"
197+
assert_line " * domserver...........: /opt/domjudge/domserver"
198+
refute_line " - log..............: /opt/domjudge/domserver/log"
199+
assert_line " - log..............: /log"
200+
assert_line " * judgehost...........: /opt/domjudge/judgehost"
201+
refute_line " - tmp..............: /opt/domjudge/judgehost/tmp"
202+
assert_line " - tmp..............: /srv/tmp"
203+
refute_line " - judge............: /opt/domjudge/judgehost/judgings"
204+
assert_line " - judge............: /srv/judgings"
205+
refute_line " - chroot...........: /chroot/domjudge"
206+
assert_line " - chroot...........: /srv/chroot"
207+
}
208+
209+
@test "Default URL not set, docs mention" {
210+
setup
211+
run run_configure
212+
assert_line "checking baseurl... https://example.com/domjudge/"
213+
assert_line "Warning: base URL is unconfigured; generating team documentation will"
214+
assert_line "not work out of the box!"
215+
assert_line "Rerun configure with option '--with-baseurl=BASEURL' to correct this."
216+
assert_line " * website base URL....: https://example.com/domjudge/"
217+
assert_line " * documentation.......: /opt/domjudge/doc"
218+
run run_configure "--with-baseurl=https://contest.example.org"
219+
assert_line "checking baseurl... https://contest.example.org"
220+
refute_line "Warning: base URL is unconfigured; generating team documentation will"
221+
refute_line "not work out of the box!"
222+
refute_line "Rerun configure with option '--with-baseurl=BASEURL' to correct this."
223+
assert_line " * website base URL....: https://contest.example.org"
224+
}
225+
226+
@test "Change users" {
227+
setup
228+
run run_configure
229+
assert_line " * default user........: domjudge-bats-user"
230+
assert_line " * runguard user.......: domjudge-run"
231+
assert_line " * runguard group......: domjudge-run"
232+
assert_regex "^ \* webserver group\.\.\.\.\.: (www-data|apache|nginx)$"
233+
run run_configure "--with-domjudge-user=other_user --with-webserver-group=other_group --with-runuser=other-domjudge-run --with-rungroup=other-run-group"
234+
refute_line " * default user........: domjudge-bats-user"
235+
refute_line " * runguard user.......: domjudge-run"
236+
refute_line " * runguard group......: domjudge-run"
237+
for group in www-data apache nginx; do
238+
refute_line " * webserver group.....: $group"
239+
done
240+
assert_line " * default user........: other_user"
241+
assert_line " * runguard user.......: other-domjudge-run"
242+
assert_line " * runguard group......: other-run-group"
243+
assert_line " * webserver group.....: other_group"
244+
}
245+
246+
@test "No docs" {
247+
setup
248+
run run_configure
249+
assert_line " * documentation.......: /opt/domjudge/doc"
250+
run run_configure --enable-doc-build
251+
assert_line " * documentation.......: /opt/domjudge/doc"
252+
run run_configure --disable-doc-build
253+
assert_line " * documentation.......: /opt/domjudge/doc (disabled)"
254+
}
255+
256+
@test "Build default (effective host does both domserver & judgehost)" {
257+
if [ "$distro_id" = "ID=fedora" ]; then
258+
# Fails as libraries are not found
259+
skip
260+
fi
261+
setup
262+
run run_configure
263+
assert_line " * domserver...........: /opt/domjudge/domserver"
264+
assert_regex "^ \* webserver group\.\.\.\.\.: (www-data|apache|nginx)$"
265+
assert_line " * judgehost...........: /opt/domjudge/judgehost"
266+
assert_line " * runguard group......: domjudge-run"
267+
run make domserver
268+
assert_success
269+
run make judgehost
270+
assert_success
271+
}
272+
273+
@test "Build domserver disabled" {
274+
if [ "$distro_id" = "ID=fedora" ]; then
275+
# Fails as libraries are not found
276+
skip
277+
fi
278+
setup
279+
run run_configure --disable-domserver-build
280+
refute_line " * domserver...........: /opt/domjudge/domserver"
281+
for group in www-data apache nginx; do
282+
refute_line " * webserver group.....: $group"
283+
done
284+
assert_line " * judgehost...........: /opt/domjudge/judgehost"
285+
assert_line " * runguard group......: domjudge-run"
286+
run make domserver
287+
assert_failure
288+
run make judgehost
289+
assert_success
290+
}
291+
292+
@test "Build judgehost disabled" {
293+
if [ "$distro_id" = "ID=fedora" ]; then
294+
# Fails as libraries are not found
295+
skip
296+
fi
297+
setup
298+
run run_configure --disable-judgehost-build
299+
assert_line " * domserver...........: /opt/domjudge/domserver"
300+
assert_regex "^ \* webserver group\.\.\.\.\.: (www-data|apache|nginx)$"
301+
refute_line " * judgehost...........: /opt/domjudge/judgehost"
302+
refute_line " * runguard group......: domjudge-run"
303+
run make domserver
304+
assert_success
305+
run make judgehost
306+
assert_failure
307+
}

0 commit comments

Comments
 (0)