Fixup fromcvs/togit conversion
[pkgsrcv2.git] / sysutils / sysbuild / files / sysbuild_test.sh
1 #! @ATF_SH@
2 # Copyright 2012 Google Inc.
3 # All rights reserved.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions are
7 # met:
8 #
9 # * Redistributions of source code must retain the above copyright
10 #   notice, this list of conditions and the following disclaimer.
11 # * Redistributions in binary form must reproduce the above copyright
12 #   notice, this list of conditions and the following disclaimer in the
13 #   documentation and/or other materials provided with the distribution.
14 # * Neither the name of Google Inc. nor the names of its contributors
15 #   may be used to endorse or promote products derived from this software
16 #   without specific prior written permission.
17 #
18 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30
31 # Path to a local cvsroot for testing purposes.
32 MOCK_CVSROOT=":local:$(pwd)/cvsroot"
33
34
35 # Creates a fake program that records its invocations for later processing.
36 #
37 # The fake program, when invoked, will append its arguments to a commands.log
38 # file in the test case's work directory.
39 #
40 # \param binary The path to the program to create.
41 # \param delegate If set to 'yes', execute the real program afterwards.
42 create_mock_binary() {
43     local binary="${1}"; shift
44     local delegate=no
45     [ ${#} -eq 0 ] || { delegate="${1}"; shift; }
46
47     cat >"${binary}" <<EOF
48 #! /bin/sh
49
50 logfile="${HOME}/commands.log"
51 echo "Command: \${0##*/}" >>"\${logfile}"
52 echo "Directory: \$(pwd)" >>"\${logfile}"
53 for arg in "\${@}"; do
54     echo "Arg: \${arg}" >>"\${logfile}"
55 done
56     echo >>"\${logfile}"
57 EOF
58
59     if [ "${delegate}" = yes ]; then
60         cat >>"${binary}" <<EOF
61 PATH="${PATH}"
62 exec "\${0##*/}" "\${@}"
63 EOF
64     fi
65
66     chmod +x "${binary}"
67 }
68
69
70 # Creates a fake CVS repository with a src and an xsrc module.
71 #
72 # \param repository Path to the repository to create.
73 create_mock_cvsroot() {
74     local repository="${1}"; shift
75
76     atf_check -o ignore -e ignore cvs -d "${repository}" init
77
78     mkdir src
79     cd src
80     create_mock_binary build.sh
81     echo "first revision" >file-in-src
82     cvs -d "${repository}" import -m "Import." src VENDOR_TAG release_tag
83     cd -
84     rm -rf src
85
86     mkdir xsrc
87     cd xsrc
88     echo "first revision" >file-in-xsrc
89     cvs -d "${repository}" import -m "Import." xsrc VENDOR_TAG release_tag
90     cd -
91     rm -rf xsrc
92 }
93
94
95 atf_test_case build__custom_dirs
96 build__custom_dirs_body() {
97     create_mock_cvsroot "${MOCK_CVSROOT}"
98
99     create_mock_binary cvs yes
100     PATH="$(pwd):${PATH}"
101
102     cat >test.conf <<EOF
103 BUILD_ROOT=$(pwd)/b
104 CVSROOT=${MOCK_CVSROOT}
105 RELEASEDIR=$(pwd)/r
106 SRCDIR=$(pwd)/s
107 XSRCDIR=$(pwd)/x
108 EOF
109
110     atf_check -o save:stdout -e save:stderr sysbuild -c test.conf build
111
112     cat >expout <<EOF
113 Command: cvs
114 Directory: ${HOME}/s/.cvs-checkout
115 Arg: -d${MOCK_CVSROOT}
116 Arg: -q
117 Arg: checkout
118 Arg: -P
119 Arg: src
120
121 Command: cvs
122 Directory: ${HOME}/x/.cvs-checkout
123 Arg: -d${MOCK_CVSROOT}
124 Arg: -q
125 Arg: checkout
126 Arg: -P
127 Arg: xsrc
128
129 Command: build.sh
130 Directory: ${HOME}/s
131 Arg: -D${HOME}/b/$(uname -m)/destdir
132 Arg: -M${HOME}/b/$(uname -m)/obj
133 Arg: -N2
134 Arg: -R${HOME}/r
135 Arg: -T${HOME}/b/$(uname -m)/tools
136 Arg: -U
137 Arg: -X${HOME}/x
138 Arg: -m$(uname -m)
139 Arg: -x
140 Arg: release
141
142 EOF
143     atf_check -o file:expout cat commands.log
144 }
145
146
147 atf_test_case build__defaults
148 build__defaults_body() {
149     create_mock_cvsroot "${MOCK_CVSROOT}"
150
151     create_mock_binary cvs yes
152     PATH="$(pwd):${PATH}"
153
154     atf_check -o save:stdout -e save:stderr sysbuild \
155         -c /dev/null -o CVSROOT="${MOCK_CVSROOT}" build
156
157     cat >expout <<EOF
158 Command: cvs
159 Directory: ${HOME}/sysbuild/src/.cvs-checkout
160 Arg: -d${MOCK_CVSROOT}
161 Arg: -q
162 Arg: checkout
163 Arg: -P
164 Arg: src
165
166 Command: build.sh
167 Directory: ${HOME}/sysbuild/src
168 Arg: -D${HOME}/sysbuild/$(uname -m)/destdir
169 Arg: -M${HOME}/sysbuild/$(uname -m)/obj
170 Arg: -N2
171 Arg: -R${HOME}/sysbuild/release
172 Arg: -T${HOME}/sysbuild/$(uname -m)/tools
173 Arg: -U
174 Arg: -m$(uname -m)
175 Arg: release
176
177 EOF
178     atf_check -o file:expout cat commands.log
179 }
180
181
182 atf_test_case build__remove_all
183 build__remove_all_body() {
184     create_mock_cvsroot "${MOCK_CVSROOT}"
185     mkdir sysbuild
186     cd sysbuild
187     atf_check -o ignore -e ignore cvs -d"${MOCK_CVSROOT}" checkout -P src
188     cd -
189
190     create_mock_binary cvs
191     PATH="$(pwd):${PATH}"
192
193     mkdir -p "sysbuild/$(uname -m)/destdir/a"
194     mkdir -p "sysbuild/$(uname -m)/obj/b"
195     mkdir -p "sysbuild/$(uname -m)/tools/c"
196     mkdir -p "sysbuild/$(uname -m)/keep-me"
197
198     atf_check -o save:stdout -e save:stderr sysbuild \
199         -c /dev/null -o CVSROOT="${MOCK_CVSROOT}" build
200
201     [ ! -d "sysbuild/$(uname -m)/destdir" ] || atf_fail "destdir not removed"
202     [ ! -d "sysbuild/$(uname -m)/obj" ] || atf_fail "obj not removed"
203     [ ! -d "sysbuild/$(uname -m)/tools" ] || atf_fail "tools not removed"
204     [ -d "sysbuild/$(uname -m)/keep-me" ] || atf_fail "All of buildroot removed"
205 }
206
207
208 atf_test_case build__fast_mode
209 build__fast_mode_body() {
210     create_mock_cvsroot "${MOCK_CVSROOT}"
211     mkdir sysbuild
212     cd sysbuild
213     atf_check -o ignore -e ignore cvs -d"${MOCK_CVSROOT}" checkout -P src
214     cd -
215
216     create_mock_binary cvs
217     PATH="$(pwd):${PATH}"
218
219     mkdir -p "sysbuild/$(uname -m)/destdir/bin"
220     mkdir -p "sysbuild/$(uname -m)/destdir/stand/$(uname -m)/1.2.3"
221
222     atf_check -o save:stdout -e save:stderr sysbuild \
223         -c /dev/null -o CVSROOT="${MOCK_CVSROOT}" build -f
224
225     cat >expout <<EOF
226 Command: build.sh
227 Directory: ${HOME}/sysbuild/src
228 Arg: -D${HOME}/sysbuild/$(uname -m)/destdir
229 Arg: -M${HOME}/sysbuild/$(uname -m)/obj
230 Arg: -N2
231 Arg: -R${HOME}/sysbuild/release
232 Arg: -T${HOME}/sysbuild/$(uname -m)/tools
233 Arg: -U
234 Arg: -m$(uname -m)
235 Arg: -u
236 Arg: release
237
238 EOF
239     atf_check -o file:expout cat commands.log
240
241     [ -d "sysbuild/$(uname -m)/destdir/bin" ] \
242         || atf_fail "Deleted a directory that should not have been deleted"
243     [ ! -d "sysbuild/$(uname -m)/destdir/stand/$(uname -m)/1.2.3" ] \
244         || atf_fail "Obsolete modules not deleted"
245 }
246
247
248 atf_test_case build__many_machines
249 build__many_machines_body() {
250     create_mock_cvsroot "${MOCK_CVSROOT}"
251
252     create_mock_binary cvs yes
253     PATH="$(pwd):${PATH}"
254
255     atf_check -o save:stdout -e save:stderr sysbuild \
256         -c /dev/null -o CVSROOT="${MOCK_CVSROOT}" \
257         -o MACHINES="amd64 macppc shark" -o NJOBS=2 build
258
259     cat >expout <<EOF
260 Command: cvs
261 Directory: ${HOME}/sysbuild/src/.cvs-checkout
262 Arg: -d${MOCK_CVSROOT}
263 Arg: -q
264 Arg: checkout
265 Arg: -P
266 Arg: src
267
268 Command: build.sh
269 Directory: ${HOME}/sysbuild/src
270 Arg: -D${HOME}/sysbuild/amd64/destdir
271 Arg: -M${HOME}/sysbuild/amd64/obj
272 Arg: -N2
273 Arg: -R${HOME}/sysbuild/release
274 Arg: -T${HOME}/sysbuild/amd64/tools
275 Arg: -U
276 Arg: -j2
277 Arg: -mamd64
278 Arg: release
279
280 Command: build.sh
281 Directory: ${HOME}/sysbuild/src
282 Arg: -D${HOME}/sysbuild/macppc/destdir
283 Arg: -M${HOME}/sysbuild/macppc/obj
284 Arg: -N2
285 Arg: -R${HOME}/sysbuild/release
286 Arg: -T${HOME}/sysbuild/macppc/tools
287 Arg: -U
288 Arg: -j2
289 Arg: -mmacppc
290 Arg: release
291
292 Command: build.sh
293 Directory: ${HOME}/sysbuild/src
294 Arg: -D${HOME}/sysbuild/shark/destdir
295 Arg: -M${HOME}/sysbuild/shark/obj
296 Arg: -N2
297 Arg: -R${HOME}/sysbuild/release
298 Arg: -T${HOME}/sysbuild/shark/tools
299 Arg: -U
300 Arg: -j2
301 Arg: -mshark
302 Arg: release
303
304 EOF
305     atf_check -o file:expout cat commands.log
306 }
307
308
309 atf_test_case build__with_x11
310 build__with_x11_body() {
311     create_mock_cvsroot "${MOCK_CVSROOT}"
312
313     create_mock_binary cvs yes
314     PATH="$(pwd):${PATH}"
315
316     atf_check -o save:stdout -e save:stderr sysbuild \
317         -c /dev/null -o CVSROOT="${MOCK_CVSROOT}" \
318         -o XSRCDIR="${HOME}/sysbuild/xsrc" build
319
320     cat >expout <<EOF
321 Command: cvs
322 Directory: ${HOME}/sysbuild/src/.cvs-checkout
323 Arg: -d${MOCK_CVSROOT}
324 Arg: -q
325 Arg: checkout
326 Arg: -P
327 Arg: src
328
329 Command: cvs
330 Directory: ${HOME}/sysbuild/xsrc/.cvs-checkout
331 Arg: -d${MOCK_CVSROOT}
332 Arg: -q
333 Arg: checkout
334 Arg: -P
335 Arg: xsrc
336
337 Command: build.sh
338 Directory: ${HOME}/sysbuild/src
339 Arg: -D${HOME}/sysbuild/$(uname -m)/destdir
340 Arg: -M${HOME}/sysbuild/$(uname -m)/obj
341 Arg: -N2
342 Arg: -R${HOME}/sysbuild/release
343 Arg: -T${HOME}/sysbuild/$(uname -m)/tools
344 Arg: -U
345 Arg: -X${HOME}/sysbuild/xsrc
346 Arg: -m$(uname -m)
347 Arg: -x
348 Arg: release
349
350 EOF
351     atf_check -o file:expout cat commands.log
352 }
353
354
355 atf_test_case build__some_args
356 build__some_args_body() {
357     create_mock_cvsroot "${MOCK_CVSROOT}"
358
359     create_mock_binary cvs yes
360     PATH="$(pwd):${PATH}"
361
362     atf_check -o save:stdout -e save:stderr sysbuild \
363         -c /dev/null -o CVSROOT="${MOCK_CVSROOT}" build a foo b
364
365     cat >expout <<EOF
366 Command: cvs
367 Directory: ${HOME}/sysbuild/src/.cvs-checkout
368 Arg: -d${MOCK_CVSROOT}
369 Arg: -q
370 Arg: checkout
371 Arg: -P
372 Arg: src
373
374 Command: build.sh
375 Directory: ${HOME}/sysbuild/src
376 Arg: -D${HOME}/sysbuild/$(uname -m)/destdir
377 Arg: -M${HOME}/sysbuild/$(uname -m)/obj
378 Arg: -N2
379 Arg: -R${HOME}/sysbuild/release
380 Arg: -T${HOME}/sysbuild/$(uname -m)/tools
381 Arg: -U
382 Arg: -m$(uname -m)
383 Arg: a
384 Arg: foo
385 Arg: b
386
387 EOF
388     atf_check -o file:expout cat commands.log
389 }
390
391
392 atf_test_case config__builtins
393 config__builtins_body() {
394     cat >expout <<EOF
395 BUILD_ROOT = ${HOME}/sysbuild
396 BUILD_TARGETS = release
397 CVSROOT = :ext:anoncvs@anoncvs.NetBSD.org:/cvsroot
398 CVSTAG is undefined
399 INCREMENTAL_BUILD = false
400 MACHINES = $(uname -m)
401 NJOBS is undefined
402 RELEASEDIR = ${HOME}/sysbuild/release
403 SRCDIR = ${HOME}/sysbuild/src
404 UPDATE_SOURCES = true
405 XSRCDIR is undefined
406 EOF
407     atf_check -o file:expout sysbuild -c /dev/null config
408 }
409
410
411 atf_test_case config__path__components
412 config__path__components_body() {
413     mkdir .sysbuild
414     mkdir system
415     export SYSBUILD_ETCDIR="$(pwd)/system"
416
417     echo "BUILD_TARGETS=foo" >my-file
418     atf_check -o match:"BUILD_TARGETS = foo" sysbuild -c ./my-file config
419 }
420
421
422 atf_test_case config__path__extension
423 config__path__extension_body() {
424     mkdir .sysbuild
425     mkdir system
426     export SYSBUILD_ETCDIR="$(pwd)/system"
427
428     echo "BUILD_TARGETS=bar" >my-file.conf
429     atf_check -o match:"BUILD_TARGETS = bar" sysbuild -c my-file.conf config
430 }
431
432
433 atf_test_case config__name__system_directory
434 config__name__system_directory_body() {
435     mkdir .sysbuild
436     mkdir system
437     export SYSBUILD_ETCDIR="$(pwd)/system"
438
439     echo "BUILD_TARGETS='some value'" >system/foo.conf
440     atf_check -o match:"BUILD_TARGETS = some value" sysbuild -c foo config
441 }
442
443
444 atf_test_case config__name__user_directory
445 config__name__user_directory_body() {
446     mkdir .sysbuild
447     mkdir system
448     export SYSBUILD_ETCDIR="$(pwd)/system"
449
450     echo "BUILD_TARGETS='some value'" >system/foo.conf
451     echo "BUILD_TARGETS='other value'" >.sysbuild/foo.conf
452     atf_check -o match:"BUILD_TARGETS = other value" sysbuild -c foo config
453 }
454
455
456 atf_test_case config__name__not_found
457 config__name__not_found_body() {
458     mkdir .sysbuild
459     mkdir system
460     export SYSBUILD_ETCDIR="$(pwd)/system"
461
462     cat >experr <<EOF
463 sysbuild: E: Cannot locate configuration named 'foobar'
464 Type 'man sysbuild' for help
465 EOF
466     atf_check -s exit:1 -o empty -e file:experr sysbuild -c foobar config
467 }
468
469
470 atf_test_case config__overrides
471 config__overrides_body() {
472     cat >custom.conf <<EOF
473 BUILD_ROOT=/tmp/test
474 CVSTAG=the-tag-override
475 EOF
476
477     cat >expout <<EOF
478 BUILD_ROOT = /tmp/test
479 BUILD_TARGETS = release
480 CVSROOT = foo bar
481 CVSTAG = the-new-tag
482 INCREMENTAL_BUILD = false
483 MACHINES = $(uname -m)
484 NJOBS is undefined
485 RELEASEDIR = ${HOME}/sysbuild/release
486 SRCDIR is undefined
487 UPDATE_SOURCES = true
488 XSRCDIR is undefined
489 EOF
490     atf_check -o file:expout sysbuild -c custom.conf -o CVSROOT="foo bar" \
491         -o CVSTAG=the-new-tag -o SRCDIR= config
492 }
493
494
495 atf_test_case config__too_many_args
496 config__too_many_args_body() {
497     cat >experr <<EOF
498 sysbuild: E: config does not take any arguments
499 Type 'man sysbuild' for help
500 EOF
501     atf_check -s exit:1 -e file:experr sysbuild -c /dev/null config foo
502 }
503
504
505 atf_test_case fetch__checkout__src_only
506 fetch__checkout__src_only_body() {
507     create_mock_cvsroot "${MOCK_CVSROOT}"
508     cat >test.conf <<EOF
509 CVSROOT="${MOCK_CVSROOT}"
510 SRCDIR="$(pwd)/checkout/src"
511 XSRCDIR=
512 EOF
513
514     atf_check -o ignore -e not-match:"xsrc" sysbuild -c test.conf fetch
515     test -f checkout/src/file-in-src || atf_fail "src not checked out"
516     test ! -d checkout/xsrc || atf_fail "xsrc checked out but not requested"
517 }
518
519
520 atf_test_case fetch__checkout__src_and_xsrc
521 fetch__checkout__src_and_xsrc_body() {
522     create_mock_cvsroot "${MOCK_CVSROOT}"
523     cat >test.conf <<EOF
524 CVSROOT="${MOCK_CVSROOT}"
525 SRCDIR="$(pwd)/checkout/src"
526 XSRCDIR="$(pwd)/checkout/xsrc"
527 EOF
528
529     atf_check -o ignore -e ignore sysbuild -c test.conf fetch
530     test -f checkout/src/file-in-src || atf_fail "src not checked out"
531     test -f checkout/xsrc/file-in-xsrc || atf_fail "xsrc not checked out"
532 }
533
534
535 atf_test_case fetch__update__src_only
536 fetch__update__src_only_body() {
537     create_mock_cvsroot "${MOCK_CVSROOT}"
538     cat >test.conf <<EOF
539 CVSROOT="${MOCK_CVSROOT}"
540 SRCDIR="$(pwd)/checkout/src"
541 XSRCDIR=
542 EOF
543
544     mkdir checkout
545     cd checkout
546     atf_check -o ignore -e ignore cvs -d"${MOCK_CVSROOT}" checkout -P src
547     cd -
548
549     cp -rf checkout/src src-copy
550     cd src-copy
551     echo "second revision" >file-in-src
552     cvs commit -m "Second revision."
553     cd -
554
555     test -f checkout/src/file-in-src || atf_fail "src not present yet"
556     if grep "second revision" checkout/src/file-in-src >/dev/null; then
557         atf_fail "second revision already present"
558     fi
559
560     atf_check -o ignore -e not-match:"xsrc" sysbuild -c test.conf fetch
561
562     grep "second revision" checkout/src/file-in-src >/dev/null \
563         || atf_fail "src not updated"
564     test ! -d checkout/xsrc || atf_fail "xsrc checked out but not requested"
565 }
566
567
568 atf_test_case fetch__update__src_and_xsrc
569 fetch__update__src_and_xsrc_body() {
570     create_mock_cvsroot "${MOCK_CVSROOT}"
571     cat >test.conf <<EOF
572 CVSROOT="${MOCK_CVSROOT}"
573 SRCDIR="$(pwd)/checkout/src"
574 XSRCDIR="$(pwd)/checkout/xsrc"
575 EOF
576
577     mkdir checkout
578     cd checkout
579     atf_check -o ignore -e ignore cvs -d"${MOCK_CVSROOT}" checkout -P src xsrc
580     cd -
581
582     cp -rf checkout/src src-copy
583     cd src-copy
584     echo "second revision" >file-in-src
585     cvs commit -m "Second revision."
586     cd -
587
588     cp -rf checkout/xsrc xsrc-copy
589     cd xsrc-copy
590     echo "second revision" >file-in-xsrc
591     cvs commit -m "Second revision."
592     cd -
593
594     test -f checkout/src/file-in-src || atf_fail "src not present yet"
595     if grep "second revision" checkout/src/file-in-src >/dev/null; then
596         atf_fail "second revision already present"
597     fi
598     test -f checkout/xsrc/file-in-xsrc || atf_fail "xsrc not present yet"
599     if grep "second revision" checkout/xsrc/file-in-xsrc >/dev/null; then
600         atf_fail "second revision already present"
601     fi
602
603     atf_check -o ignore -e ignore sysbuild -c test.conf fetch
604
605     grep "second revision" checkout/src/file-in-src >/dev/null \
606         || atf_fail "src not updated"
607     grep "second revision" checkout/xsrc/file-in-xsrc >/dev/null \
608         || atf_fail "xsrc not updated"
609 }
610
611
612 atf_test_case fetch__too_many_args
613 fetch__too_many_args_body() {
614     cat >experr <<EOF
615 sysbuild: E: fetch does not take any arguments
616 Type 'man sysbuild' for help
617 EOF
618     atf_check -s exit:1 -e file:experr sysbuild -c /dev/null fetch foo
619 }
620
621
622 atf_test_case no_command
623 no_command_body() {
624     cat >experr <<EOF
625 sysbuild: E: No command specified
626 Type 'man sysbuild' for help
627 EOF
628     atf_check -s exit:1 -e file:experr sysbuild
629 }
630
631
632 atf_test_case unknown_command
633 unknown_command_body() {
634     cat >experr <<EOF
635 sysbuild: E: Unknown command foo
636 Type 'man sysbuild' for help
637 EOF
638     atf_check -s exit:1 -e file:experr sysbuild foo
639 }
640
641
642 atf_test_case unknown_flag
643 unknown_flag_body() {
644     cat >experr <<EOF
645 sysbuild: E: Unknown option -Z
646 Type 'man sysbuild' for help
647 EOF
648     atf_check -s exit:1 -e file:experr sysbuild -Z
649 }
650
651
652 atf_init_test_cases() {
653     atf_add_test_case build__custom_dirs
654     atf_add_test_case build__defaults
655     atf_add_test_case build__remove_all
656     atf_add_test_case build__fast_mode
657     atf_add_test_case build__many_machines
658     atf_add_test_case build__with_x11
659     atf_add_test_case build__some_args
660
661     atf_add_test_case config__builtins
662     atf_add_test_case config__path__components
663     atf_add_test_case config__path__extension
664     atf_add_test_case config__name__system_directory
665     atf_add_test_case config__name__user_directory
666     atf_add_test_case config__name__not_found
667     atf_add_test_case config__overrides
668     atf_add_test_case config__too_many_args
669
670     atf_add_test_case fetch__checkout__src_only
671     atf_add_test_case fetch__checkout__src_and_xsrc
672     atf_add_test_case fetch__update__src_only
673     atf_add_test_case fetch__update__src_and_xsrc
674     atf_add_test_case fetch__too_many_args
675
676     atf_add_test_case no_command
677     atf_add_test_case unknown_command
678     atf_add_test_case unknown_flag
679 }