17bdfc3b7SEnji Cooper#
27bdfc3b7SEnji Cooper# Copyright 2015 EMC Corp.
37bdfc3b7SEnji Cooper# All rights reserved.
47bdfc3b7SEnji Cooper#
57bdfc3b7SEnji Cooper# Redistribution and use in source and binary forms, with or without
67bdfc3b7SEnji Cooper# modification, are permitted provided that the following conditions are
77bdfc3b7SEnji Cooper# met:
87bdfc3b7SEnji Cooper#
97bdfc3b7SEnji Cooper# * Redistributions of source code must retain the above copyright
107bdfc3b7SEnji Cooper#   notice, this list of conditions and the following disclaimer.
117bdfc3b7SEnji Cooper# * Redistributions in binary form must reproduce the above copyright
127bdfc3b7SEnji Cooper#   notice, this list of conditions and the following disclaimer in the
137bdfc3b7SEnji Cooper#   documentation and/or other materials provided with the distribution.
147bdfc3b7SEnji Cooper#
157bdfc3b7SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
167bdfc3b7SEnji Cooper# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
177bdfc3b7SEnji Cooper# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
187bdfc3b7SEnji Cooper# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
197bdfc3b7SEnji Cooper# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
207bdfc3b7SEnji Cooper# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
217bdfc3b7SEnji Cooper# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
227bdfc3b7SEnji Cooper# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
237bdfc3b7SEnji Cooper# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
247bdfc3b7SEnji Cooper# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
257bdfc3b7SEnji Cooper# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
267bdfc3b7SEnji Cooper
27fc2b0536SEnji Cooper# A note on specs:
28fc2b0536SEnji Cooper# - A copy of the ISO-9660 spec can be found here:
29a2aef24aSEitan Adler#   https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-119.pdf
30fc2b0536SEnji Cooper# - Any references to `rockridge` are referring to the `Rock Ridge` extensions
31fc2b0536SEnji Cooper#   of the ISO-9660 spec. A copy of the draft `IEEE-P1282` spec can be found
32fc2b0536SEnji Cooper#   here:
33fc2b0536SEnji Cooper#   http://www.ymi.com/ymi/sites/default/files/pdf/Rockridge.pdf
347bdfc3b7SEnji Cooper
357bdfc3b7SEnji CooperMAKEFS="makefs -t cd9660"
36fc2b0536SEnji CooperMOUNT="mount_cd9660"
377bdfc3b7SEnji Cooper
38fc2b0536SEnji Cooper. "$(dirname "$0")/makefs_tests_common.sh"
39fc2b0536SEnji Cooper
40fc2b0536SEnji Coopercommon_cleanup()
41fc2b0536SEnji Cooper{
42fc2b0536SEnji Cooper	if ! test_md_device=$(cat $TEST_MD_DEVICE_FILE); then
43fc2b0536SEnji Cooper		echo "$TEST_MD_DEVICE_FILE could not be opened; has an md(4) device been attached?"
44fc2b0536SEnji Cooper		return
45fc2b0536SEnji Cooper	fi
46fc2b0536SEnji Cooper
47fc2b0536SEnji Cooper	umount -f /dev/$test_md_device || :
48fc2b0536SEnji Cooper	mdconfig -d -u $test_md_device || :
49fc2b0536SEnji Cooper}
50fc2b0536SEnji Cooper
51fc2b0536SEnji Coopercheck_base_iso9660_image_contents()
52fc2b0536SEnji Cooper{
53fc2b0536SEnji Cooper	# Symlinks are treated like files when rockridge support isn't
54fc2b0536SEnji Cooper	# specified
55fc2b0536SEnji Cooper	check_image_contents "$@" -X c
56fc2b0536SEnji Cooper
57fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 test -L $TEST_INPUTS_DIR/c
58fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 test -f $TEST_MOUNT_DIR/c
59fc2b0536SEnji Cooper}
60fc2b0536SEnji Cooper
61f43b6872SBrad Davischeck_cd9660_support() {
62f43b6872SBrad Davis	kldstat -m cd9660 || \
63f43b6872SBrad Davis		atf_skip "Requires cd9660 filesystem support to be present in the kernel"
64f43b6872SBrad Davis}
65f43b6872SBrad Davis
66fc2b0536SEnji Cooperatf_test_case D_flag cleanup
67fc2b0536SEnji CooperD_flag_body()
68fc2b0536SEnji Cooper{
69fc2b0536SEnji Cooper	atf_skip "makefs crashes with SIGBUS with dupe mtree entries; see FreeBSD bug # 192839"
70fc2b0536SEnji Cooper
71fc2b0536SEnji Cooper	create_test_inputs
72fc2b0536SEnji Cooper
73fc2b0536SEnji Cooper	atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
74fc2b0536SEnji Cooper	    mtree -cp $TEST_INPUTS_DIR
75fc2b0536SEnji Cooper	atf_check -e empty -o not-empty -s exit:0 \
76fc2b0536SEnji Cooper	    $MAKEFS -F $TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
77fc2b0536SEnji Cooper
78fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
79fc2b0536SEnji Cooper	    cp $TEST_SPEC_FILE spec2.mtree
80fc2b0536SEnji Cooper	atf_check -e empty -o save:dupe_$TEST_SPEC_FILE -s exit:0 \
81fc2b0536SEnji Cooper	    cat $TEST_SPEC_FILE spec2.mtree
82fc2b0536SEnji Cooper
83fc2b0536SEnji Cooper	atf_check -e empty -o not-empty -s not-exit:0 \
84fc2b0536SEnji Cooper	    $MAKEFS -F dupe_$TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
85fc2b0536SEnji Cooper	atf_check -e empty -o not-empty -s exit:0 \
86fc2b0536SEnji Cooper	    $MAKEFS -D -F dupe_$TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
87fc2b0536SEnji Cooper}
88fc2b0536SEnji CooperD_flag_cleanup()
89fc2b0536SEnji Cooper{
90fc2b0536SEnji Cooper	common_cleanup
91fc2b0536SEnji Cooper}
92fc2b0536SEnji Cooper
93fc2b0536SEnji Cooperatf_test_case F_flag cleanup
94fc2b0536SEnji CooperF_flag_body()
95fc2b0536SEnji Cooper{
96fc2b0536SEnji Cooper	create_test_inputs
97fc2b0536SEnji Cooper
98fc2b0536SEnji Cooper	atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
99fc2b0536SEnji Cooper	    mtree -cp $TEST_INPUTS_DIR
100fc2b0536SEnji Cooper
101fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
102fc2b0536SEnji Cooper	    $MAKEFS -F $TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
103fc2b0536SEnji Cooper
10446b59ac8SBrooks Davis	check_cd9660_support
105fc2b0536SEnji Cooper	mount_image
106fc2b0536SEnji Cooper	check_base_iso9660_image_contents
107fc2b0536SEnji Cooper}
108fc2b0536SEnji CooperF_flag_cleanup()
109fc2b0536SEnji Cooper{
110fc2b0536SEnji Cooper	common_cleanup
111fc2b0536SEnji Cooper}
112fc2b0536SEnji Cooper
113fc2b0536SEnji Cooperatf_test_case from_mtree_spec_file cleanup
114fc2b0536SEnji Cooperfrom_mtree_spec_file_body()
115fc2b0536SEnji Cooper{
116fc2b0536SEnji Cooper	create_test_inputs
117fc2b0536SEnji Cooper
118fc2b0536SEnji Cooper	atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
119c213f0dbSEnji Cooper	    mtree -c -k "$DEFAULT_MTREE_KEYWORDS" -p $TEST_INPUTS_DIR
120fc2b0536SEnji Cooper	cd $TEST_INPUTS_DIR
121fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
122fc2b0536SEnji Cooper	    $MAKEFS $TEST_IMAGE $TEST_SPEC_FILE
123fc2b0536SEnji Cooper	cd -
124fc2b0536SEnji Cooper
12546b59ac8SBrooks Davis	check_cd9660_support
126fc2b0536SEnji Cooper	mount_image
127fc2b0536SEnji Cooper	check_base_iso9660_image_contents
128fc2b0536SEnji Cooper}
129fc2b0536SEnji Cooperfrom_mtree_spec_file_cleanup()
130fc2b0536SEnji Cooper{
131fc2b0536SEnji Cooper	common_cleanup
132fc2b0536SEnji Cooper}
133fc2b0536SEnji Cooper
134fc2b0536SEnji Cooperatf_test_case from_multiple_dirs cleanup
135fc2b0536SEnji Cooperfrom_multiple_dirs_body()
136fc2b0536SEnji Cooper{
137fc2b0536SEnji Cooper	test_inputs_dir2=$TMPDIR/inputs2
138fc2b0536SEnji Cooper
139fc2b0536SEnji Cooper	create_test_inputs
140fc2b0536SEnji Cooper
141fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 mkdir -p $test_inputs_dir2
142fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
143fc2b0536SEnji Cooper	    touch $test_inputs_dir2/multiple_dirs_test_file
144fc2b0536SEnji Cooper
145fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
146fc2b0536SEnji Cooper	    $MAKEFS $TEST_IMAGE $TEST_INPUTS_DIR $test_inputs_dir2
147fc2b0536SEnji Cooper
14846b59ac8SBrooks Davis	check_cd9660_support
149fc2b0536SEnji Cooper	mount_image
150fc2b0536SEnji Cooper	check_base_iso9660_image_contents -d $test_inputs_dir2
151fc2b0536SEnji Cooper}
152fc2b0536SEnji Cooperfrom_multiple_dirs_cleanup()
153fc2b0536SEnji Cooper{
154fc2b0536SEnji Cooper	common_cleanup
155fc2b0536SEnji Cooper}
156fc2b0536SEnji Cooper
157fc2b0536SEnji Cooperatf_test_case from_single_dir cleanup
158fc2b0536SEnji Cooperfrom_single_dir_body()
1597bdfc3b7SEnji Cooper{
1607bdfc3b7SEnji Cooper	create_test_inputs
1617bdfc3b7SEnji Cooper
1627bdfc3b7SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
1637bdfc3b7SEnji Cooper	    $MAKEFS $TEST_IMAGE $TEST_INPUTS_DIR
1647bdfc3b7SEnji Cooper
16546b59ac8SBrooks Davis	check_cd9660_support
166fc2b0536SEnji Cooper	mount_image
167fc2b0536SEnji Cooper	check_base_iso9660_image_contents
168fc2b0536SEnji Cooper}
169fc2b0536SEnji Cooperfrom_single_dir_cleanup()
170fc2b0536SEnji Cooper{
171fc2b0536SEnji Cooper	common_cleanup
172fc2b0536SEnji Cooper}
173fc2b0536SEnji Cooper
174fc2b0536SEnji Cooperatf_test_case o_flag_allow_deep_trees cleanup
175fc2b0536SEnji Coopero_flag_allow_deep_trees_body()
176fc2b0536SEnji Cooper{
177fc2b0536SEnji Cooper	create_test_inputs
178fc2b0536SEnji Cooper
179fc2b0536SEnji Cooper	# Make sure the "more than 8 levels deep" requirement is met.
180fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
181fc2b0536SEnji Cooper	    mkdir -p $TEST_INPUTS_DIR/a/b/c/d/e/f/g/h/i/j
182fc2b0536SEnji Cooper
183fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
184fc2b0536SEnji Cooper	    $MAKEFS -o allow-deep-trees $TEST_IMAGE $TEST_INPUTS_DIR
185fc2b0536SEnji Cooper
18646b59ac8SBrooks Davis	check_cd9660_support
187fc2b0536SEnji Cooper	mount_image
188fc2b0536SEnji Cooper	check_base_iso9660_image_contents
189fc2b0536SEnji Cooper}
190fc2b0536SEnji Coopero_flag_allow_deep_trees_cleanup()
191fc2b0536SEnji Cooper{
192fc2b0536SEnji Cooper	common_cleanup
193fc2b0536SEnji Cooper}
194fc2b0536SEnji Cooper
195fc2b0536SEnji Cooperatf_test_case o_flag_allow_max_name cleanup
196fc2b0536SEnji Coopero_flag_allow_max_name_body()
197fc2b0536SEnji Cooper{
198fc2b0536SEnji Cooper	atf_expect_fail "-o allow-max-name doesn't appear to be implemented on FreeBSD's copy of makefs [yet]"
199fc2b0536SEnji Cooper
200fc2b0536SEnji Cooper	create_test_inputs
201fc2b0536SEnji Cooper
202fc2b0536SEnji Cooper	long_path=$TEST_INPUTS_DIR/$(jot -s '' -b 0 37)
203fc2b0536SEnji Cooper
204fc2b0536SEnji Cooper	# Make sure the "37 char name" limit requirement is met.
205fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 touch $long_path
206fc2b0536SEnji Cooper
207fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
208fc2b0536SEnji Cooper	    $MAKEFS -o allow-max-name $TEST_IMAGE $TEST_INPUTS_DIR
209fc2b0536SEnji Cooper
21046b59ac8SBrooks Davis	check_cd9660_support
211fc2b0536SEnji Cooper	mount_image
212fc2b0536SEnji Cooper	check_base_iso9660_image_contents
213fc2b0536SEnji Cooper}
214fc2b0536SEnji Coopero_flag_allow_max_name_cleanup()
215fc2b0536SEnji Cooper{
216fc2b0536SEnji Cooper	common_cleanup
217fc2b0536SEnji Cooper}
218fc2b0536SEnji Cooper
21910bd2725SEnji Cooperatf_test_case o_flag_isolevel_1 cleanup
22010bd2725SEnji Coopero_flag_isolevel_1_body()
22110bd2725SEnji Cooper{
22210bd2725SEnji Cooper	atf_expect_fail "this testcase needs work; the filenames generated seem incorrect/corrupt"
22310bd2725SEnji Cooper
22410bd2725SEnji Cooper	create_test_inputs
22510bd2725SEnji Cooper
22610bd2725SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
22710bd2725SEnji Cooper	    $MAKEFS -o isolevel=1 $TEST_IMAGE $TEST_INPUTS_DIR
22810bd2725SEnji Cooper
22946b59ac8SBrooks Davis	check_cd9660_support
23010bd2725SEnji Cooper	mount_image
23110bd2725SEnji Cooper	check_base_iso9660_image_contents
23210bd2725SEnji Cooper}
23310bd2725SEnji Coopero_flag_isolevel_1_cleanup()
23410bd2725SEnji Cooper{
23510bd2725SEnji Cooper	common_cleanup
23610bd2725SEnji Cooper}
23710bd2725SEnji Cooper
23810bd2725SEnji Cooperatf_test_case o_flag_isolevel_2 cleanup
23910bd2725SEnji Coopero_flag_isolevel_2_body()
24010bd2725SEnji Cooper{
24110bd2725SEnji Cooper	create_test_inputs
24210bd2725SEnji Cooper
24310bd2725SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
24410bd2725SEnji Cooper	    $MAKEFS -o isolevel=2 $TEST_IMAGE $TEST_INPUTS_DIR
24510bd2725SEnji Cooper
24646b59ac8SBrooks Davis	check_cd9660_support
24710bd2725SEnji Cooper	mount_image
24810bd2725SEnji Cooper	check_base_iso9660_image_contents
24910bd2725SEnji Cooper}
25010bd2725SEnji Coopero_flag_isolevel_2_cleanup()
25110bd2725SEnji Cooper{
25210bd2725SEnji Cooper	common_cleanup
25310bd2725SEnji Cooper}
25410bd2725SEnji Cooper
25510bd2725SEnji Cooperatf_test_case o_flag_isolevel_3 cleanup
25610bd2725SEnji Coopero_flag_isolevel_3_body()
25710bd2725SEnji Cooper{
25810bd2725SEnji Cooper	create_test_inputs
25910bd2725SEnji Cooper
26010bd2725SEnji Cooper	# XXX: isolevel=3 isn't implemented yet. See FreeBSD bug # 203645
26110bd2725SEnji Cooper	if true; then
26210bd2725SEnji Cooper	atf_check -e match:'makefs: ISO Level 3 is greater than 2\.' -o empty -s not-exit:0 \
26310bd2725SEnji Cooper	    $MAKEFS -o isolevel=3 $TEST_IMAGE $TEST_INPUTS_DIR
26410bd2725SEnji Cooper	else
26510bd2725SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
26610bd2725SEnji Cooper	    $MAKEFS -o isolevel=3 $TEST_IMAGE $TEST_INPUTS_DIR
26746b59ac8SBrooks Davis
26846b59ac8SBrooks Davis	check_cd9660_support
26910bd2725SEnji Cooper	mount_image
27010bd2725SEnji Cooper	check_base_iso9660_image_contents
27110bd2725SEnji Cooper	fi
27210bd2725SEnji Cooper}
27310bd2725SEnji Coopero_flag_isolevel_3_cleanup()
27410bd2725SEnji Cooper{
27510bd2725SEnji Cooper	common_cleanup
27610bd2725SEnji Cooper}
27710bd2725SEnji Cooper
278fc2b0536SEnji Cooperatf_test_case o_flag_preparer
279d2435d7cSEnji Coopero_flag_preparer_head()
280d2435d7cSEnji Cooper{
281d2435d7cSEnji Cooper	atf_set "require.progs" "strings"
282d2435d7cSEnji Cooper}
283fc2b0536SEnji Coopero_flag_preparer_body()
284fc2b0536SEnji Cooper{
285fc2b0536SEnji Cooper	create_test_dirs
286fc2b0536SEnji Cooper
287fc2b0536SEnji Cooper	preparer='My Very First ISO'
288fc2b0536SEnji Cooper	preparer_uppercase="$(echo $preparer | tr '[[:lower:]]' '[[:upper:]]')"
289fc2b0536SEnji Cooper
290fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 touch $TEST_INPUTS_DIR/dummy_file
291fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
292fc2b0536SEnji Cooper	    $MAKEFS -o preparer="$preparer" $TEST_IMAGE $TEST_INPUTS_DIR
293fc2b0536SEnji Cooper	atf_check -e empty -o match:"$preparer_uppercase" -s exit:0 \
294fc2b0536SEnji Cooper	    strings $TEST_IMAGE
295fc2b0536SEnji Cooper}
296fc2b0536SEnji Cooper
297fc2b0536SEnji Cooperatf_test_case o_flag_publisher
298d2435d7cSEnji Coopero_flag_publisher_head()
299d2435d7cSEnji Cooper{
300d2435d7cSEnji Cooper	atf_set "require.progs" "strings"
301d2435d7cSEnji Cooper}
302fc2b0536SEnji Coopero_flag_publisher_body()
303fc2b0536SEnji Cooper{
304fc2b0536SEnji Cooper	create_test_dirs
305fc2b0536SEnji Cooper
306fc2b0536SEnji Cooper	publisher='My Super Awesome Publishing Company LTD'
307fc2b0536SEnji Cooper	publisher_uppercase="$(echo $publisher | tr '[[:lower:]]' '[[:upper:]]')"
308fc2b0536SEnji Cooper
309fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 touch $TEST_INPUTS_DIR/dummy_file
310fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
311fc2b0536SEnji Cooper	    $MAKEFS -o publisher="$publisher" $TEST_IMAGE $TEST_INPUTS_DIR
312fc2b0536SEnji Cooper	atf_check -e empty -o match:"$publisher_uppercase" -s exit:0 \
313fc2b0536SEnji Cooper	    strings $TEST_IMAGE
314fc2b0536SEnji Cooper}
315fc2b0536SEnji Cooper
316fc2b0536SEnji Cooperatf_test_case o_flag_rockridge cleanup
317fc2b0536SEnji Coopero_flag_rockridge_body()
318fc2b0536SEnji Cooper{
319fc2b0536SEnji Cooper	create_test_dirs
320fc2b0536SEnji Cooper
321fc2b0536SEnji Cooper	# Make sure the "more than 8 levels deep" requirement is met.
322fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
323fc2b0536SEnji Cooper	    mkdir -p $TEST_INPUTS_DIR/a/b/c/d/e/f/g/h/i/j
324fc2b0536SEnji Cooper
325fc2b0536SEnji Cooper	# Make sure the "pathname larger than 255 chars" requirement is met.
326fc2b0536SEnji Cooper	#
327fc2b0536SEnji Cooper	# $long_path's needs to be nested in a directory, as creating it
328fc2b0536SEnji Cooper	# outright as a 256 char filename via touch will fail with ENAMETOOLONG
329fc2b0536SEnji Cooper	long_path=$TEST_INPUTS_DIR/$(jot -s '/' -b "$(jot -s '' -b 0 64)" 4)
330fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 mkdir -p "$(dirname $long_path)"
331fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 touch "$long_path"
332fc2b0536SEnji Cooper
333fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
334fc2b0536SEnji Cooper	    $MAKEFS -o rockridge $TEST_IMAGE $TEST_INPUTS_DIR
335fc2b0536SEnji Cooper
33646b59ac8SBrooks Davis	check_cd9660_support
337fc2b0536SEnji Cooper	mount_image
338fc2b0536SEnji Cooper	check_image_contents -X .rr_moved
339fc2b0536SEnji Cooper
340fc2b0536SEnji Cooper	# .rr_moved is a special directory created when you have deep directory
341fc2b0536SEnji Cooper	# trees with rock ridge extensions on
342fc2b0536SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
343fc2b0536SEnji Cooper	    test -d $TEST_MOUNT_DIR/.rr_moved
344fc2b0536SEnji Cooper}
345fc2b0536SEnji Coopero_flag_rockridge_cleanup()
346fc2b0536SEnji Cooper{
347fc2b0536SEnji Cooper	common_cleanup
3487bdfc3b7SEnji Cooper}
3497bdfc3b7SEnji Cooper
350dc50fb36SEnji Cooperatf_test_case o_flag_rockridge_dev_nodes cleanup
351dc50fb36SEnji Coopero_flag_rockridge_dev_nodes_head()
352dc50fb36SEnji Cooper{
353dc50fb36SEnji Cooper	atf_set "descr" "Functional tests to ensure that dev nodes are handled properly with rockridge extensions (NetBSD kern/48852; FreeBSD bug 203648)"
354dc50fb36SEnji Cooper}
355dc50fb36SEnji Coopero_flag_rockridge_dev_nodes_body()
356dc50fb36SEnji Cooper{
357dc50fb36SEnji Cooper	create_test_dirs
358dc50fb36SEnji Cooper
359dc50fb36SEnji Cooper	(tar -cvf - -C /dev null && touch .tar_ok) | \
360dc50fb36SEnji Cooper	atf_check -e not-empty -o empty -s exit:0 tar -xvf - -C "$TEST_INPUTS_DIR"
361dc50fb36SEnji Cooper
362dc50fb36SEnji Cooper	atf_check -e empty -o empty -s exit:0 test -c $TEST_INPUTS_DIR/null
363dc50fb36SEnji Cooper	atf_check -e empty -o empty -s exit:0 test -f .tar_ok
364dc50fb36SEnji Cooper
365dc50fb36SEnji Cooper	atf_check -e empty -o empty -s exit:0 \
366dc50fb36SEnji Cooper	    $MAKEFS -o rockridge $TEST_IMAGE $TEST_INPUTS_DIR
367dc50fb36SEnji Cooper
36846b59ac8SBrooks Davis	check_cd9660_support
369dc50fb36SEnji Cooper	mount_image
370dc50fb36SEnji Cooper	check_image_contents
371dc50fb36SEnji Cooper}
372dc50fb36SEnji Coopero_flag_rockridge_dev_nodes_cleanup()
373dc50fb36SEnji Cooper{
374dc50fb36SEnji Cooper	common_cleanup
375dc50fb36SEnji Cooper}
376dc50fb36SEnji Cooper
3777bdfc3b7SEnji Cooperatf_init_test_cases()
3787bdfc3b7SEnji Cooper{
379fc2b0536SEnji Cooper	atf_add_test_case D_flag
380fc2b0536SEnji Cooper	atf_add_test_case F_flag
3817bdfc3b7SEnji Cooper
382fc2b0536SEnji Cooper	atf_add_test_case from_mtree_spec_file
383fc2b0536SEnji Cooper	atf_add_test_case from_multiple_dirs
384fc2b0536SEnji Cooper	atf_add_test_case from_single_dir
385fc2b0536SEnji Cooper
386fc2b0536SEnji Cooper	atf_add_test_case o_flag_allow_deep_trees
387fc2b0536SEnji Cooper	atf_add_test_case o_flag_allow_max_name
38810bd2725SEnji Cooper	atf_add_test_case o_flag_isolevel_1
38910bd2725SEnji Cooper	atf_add_test_case o_flag_isolevel_2
39010bd2725SEnji Cooper	atf_add_test_case o_flag_isolevel_3
391fc2b0536SEnji Cooper	atf_add_test_case o_flag_preparer
392fc2b0536SEnji Cooper	atf_add_test_case o_flag_publisher
393fc2b0536SEnji Cooper	atf_add_test_case o_flag_rockridge
394dc50fb36SEnji Cooper	atf_add_test_case o_flag_rockridge_dev_nodes
3957bdfc3b7SEnji Cooper}
396