makefs_ffs_tests.sh revision 321820
138136Sdfr#
238136Sdfr# Copyright 2015 EMC Corp.
338136Sdfr# All rights reserved.
438136Sdfr#
538136Sdfr# Redistribution and use in source and binary forms, with or without
638136Sdfr# modification, are permitted provided that the following conditions are
738136Sdfr# met:
838136Sdfr#
938136Sdfr# * Redistributions of source code must retain the above copyright
1038136Sdfr#   notice, this list of conditions and the following disclaimer.
1138136Sdfr# * Redistributions in binary form must reproduce the above copyright
1238136Sdfr#   notice, this list of conditions and the following disclaimer in the
1338136Sdfr#   documentation and/or other materials provided with the distribution.
1438136Sdfr#
1538136Sdfr# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1638136Sdfr# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1738136Sdfr# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1838136Sdfr# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
1938136Sdfr# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2038136Sdfr# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2138136Sdfr# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2238136Sdfr# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2338136Sdfr# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2438136Sdfr# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2538136Sdfr# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2650477Speter#
2738136Sdfr# $FreeBSD: stable/10/usr.sbin/makefs/tests/makefs_ffs_tests.sh 321820 2017-07-31 21:52:08Z asomers $
2838136Sdfr#
2947613Sdfr
3047613SdfrMAKEFS="makefs -t ffs"
3147613SdfrMOUNT="mount"
3250769Sdfr
3350769Sdfr. "$(dirname "$0")/makefs_tests_common.sh"
3450769Sdfr
3550769SdfrTEST_TUNEFS_OUTPUT=$TMPDIR/tunefs.output
3647398Sdfr
3750769Sdfrcommon_cleanup()
3847398Sdfr{
3955206Speter	if ! test_md_device=$(cat $TEST_MD_DEVICE_FILE); then
4047613Sdfr		echo "$TEST_MD_DEVICE_FILE could not be opened; has an md(4) device been attached?"
4147578Sdfr		return
42138506Simp	fi
43138506Simp
44138506Simp	umount -f /dev/$test_md_device || :
45138506Simp	mdconfig -d -u $test_md_device || :
46138506Simp}
4747578Sdfr
48138506Simpcheck_ffs_image_contents()
49138506Simp{
50138506Simp	atf_check -e save:$TEST_TUNEFS_OUTPUT -o empty -s exit:0 \
51184564Simp	    tunefs -p /dev/$(cat $TEST_MD_DEVICE_FILE)
5247578Sdfr
5366840Smsmith	check_image_contents "$@"
5466840Smsmith}
5566840Smsmith
5657368Sgjatf_test_case D_flag cleanup
5766840SmsmithD_flag_body()
5866840Smsmith{
5966840Smsmith	atf_skip "makefs crashes with SIGBUS with dupe mtree entries; see FreeBSD bug # 192839"
6041181Sdfr
6166840Smsmith	create_test_inputs
6266840Smsmith
6366840Smsmith	atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
6466840Smsmith	    mtree -cp $TEST_INPUTS_DIR
6566840Smsmith	atf_check -e empty -o not-empty -s exit:0 \
6666840Smsmith	    $MAKEFS -F $TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
6766840Smsmith
6866840Smsmith	atf_check -e empty -o empty -s exit:0 \
6957973Sphk	    cp $TEST_SPEC_FILE spec2.mtree
7057973Sphk	atf_check -e empty -o save:dupe_$TEST_SPEC_FILE -s exit:0 \
7157973Sphk	    cat $TEST_SPEC_FILE spec2.mtree
7250769Sdfr
7350769Sdfr	atf_check -e empty -o not-empty -s not-exit:0 \
7450769Sdfr	    $MAKEFS -F dupe_$TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
7550769Sdfr	atf_check -e empty -o not-empty -s exit:0 \
7650769Sdfr	    $MAKEFS -D -F dupe_$TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
7750769Sdfr}
7850769SdfrD_flag_cleanup()
7950769Sdfr{
8050769Sdfr	common_cleanup
8150769Sdfr}
8250769Sdfr
8350769Sdfratf_test_case F_flag cleanup
8450769SdfrF_flag_body()
8550769Sdfr{
8650769Sdfr	create_test_inputs
8750769Sdfr
8850769Sdfr	atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
8950769Sdfr	    mtree -cp $TEST_INPUTS_DIR
9050769Sdfr
9150769Sdfr	atf_check -e empty -o not-empty -s exit:0 \
9250769Sdfr	    $MAKEFS -F $TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
9350769Sdfr
9450769Sdfr	mount_image
9550769Sdfr	check_ffs_image_contents
9650769Sdfr}
9750769SdfrF_flag_cleanup()
9850769Sdfr{
9950769Sdfr	common_cleanup
10050769Sdfr}
10150769Sdfr
10250769Sdfratf_test_case from_mtree_spec_file cleanup
10350769Sdfrfrom_mtree_spec_file_body()
10450769Sdfr{
10538136Sdfr	create_test_inputs
10641181Sdfr
10741181Sdfr	atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
10841181Sdfr	    mtree -c -k "$DEFAULT_MTREE_KEYWORDS" -p $TEST_INPUTS_DIR
10941181Sdfr
11041181Sdfr	cd $TEST_INPUTS_DIR
11141181Sdfr	atf_check -e empty -o not-empty -s exit:0 \
11241181Sdfr	    $MAKEFS $TEST_IMAGE $TEST_SPEC_FILE
11341181Sdfr	cd -
11441181Sdfr
115105139Sjhb	mount_image
116105139Sjhb	check_ffs_image_contents
117105139Sjhb}
11841181Sdfrfrom_mtree_spec_file_cleanup()
11941181Sdfr{
12041181Sdfr	common_cleanup
12141181Sdfr}
12241181Sdfr
12347613Sdfratf_test_case from_multiple_dirs cleanup
12447613Sdfrfrom_multiple_dirs_body()
12547613Sdfr{
12647613Sdfr	test_inputs_dir2=$TMPDIR/inputs2
12782863Syokota
128184564Simp	create_test_inputs
129184564Simp
130184564Simp	atf_check -e empty -o empty -s exit:0 mkdir -p $test_inputs_dir2
131184564Simp	atf_check -e empty -o empty -s exit:0 \
13238136Sdfr	    touch $test_inputs_dir2/multiple_dirs_test_file
13338136Sdfr
13438136Sdfr	atf_check -e empty -o not-empty -s exit:0 \
13583051Syokota	    $MAKEFS $TEST_IMAGE $TEST_INPUTS_DIR $test_inputs_dir2
13683051Syokota
13783051Syokota	mount_image
13883051Syokota	check_image_contents -d $test_inputs_dir2
139144985Smdodd}
14083051Syokotafrom_multiple_dirs_cleanup()
14183051Syokota{
14238136Sdfr	common_cleanup
14338136Sdfr}
144105139Sjhb
145105139Sjhbatf_test_case from_single_dir cleanup
14638136Sdfrfrom_single_dir_body()
14738136Sdfr{
14838136Sdfr	create_test_inputs
14938136Sdfr
15045720Speter	atf_check -e empty -o not-empty -s exit:0 \
15145720Speter	    $MAKEFS -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
152105139Sjhb
15347613Sdfr	mount_image
15447613Sdfr	check_ffs_image_contents
15547613Sdfr}
15647613Sdfrfrom_single_dir_cleanup()
15782863Syokota{
158184564Simp	common_cleanup
159184564Simp}
160184564Simp
16147613Sdfratf_test_case o_flag_version_1 cleanup
162117337Sjhbo_flag_version_1_body()
163117337Sjhb{
164117337Sjhb	ffs_version=1
16550769Sdfr
16650769Sdfr	platform=$(uname)
16747613Sdfr	case "$platform" in
168141391Sphk	FreeBSD)
169141391Sphk		ffs_label=UFS${ffs_version}
170141391Sphk		;;
171141391Sphk	NetBSD)
172141391Sphk		ffs_label=FFSv${ffs_version}
173141391Sphk		;;
174141391Sphk	*)
175141391Sphk		atf_skip "Unsupported platform"
176141391Sphk		;;
17750769Sdfr	esac
178135262Sphk
179135262Sphk	create_test_inputs
180135262Sphk
181135262Sphk	atf_check -e empty -o not-empty -s exit:0 \
182135262Sphk	    $MAKEFS -M 1m -o version=$ffs_version $TEST_IMAGE $TEST_INPUTS_DIR
183135262Sphk
184185059Sjhb	mount_image
185185059Sjhb	atf_check -e ignore -o match:"$ffs_label" dumpfs $TEST_MOUNT_DIR
186185059Sjhb	check_ffs_image_contents
187117337Sjhb}
188117337Sjhbo_flag_version_1_cleanup()
18967442Snyan{
19067442Snyan	common_cleanup
19167442Snyan}
19267442Snyan
19367442Snyanatf_test_case o_flag_version_2 cleanup
19467442Snyano_flag_version_2_body()
19567442Snyan{
19667442Snyan	ffs_version=2
19767442Snyan
19867442Snyan	platform=$(uname)
19967442Snyan	case "$platform" in
20067442Snyan	FreeBSD)
20167442Snyan		ffs_label=UFS${ffs_version}
20255206Speter		;;
20347613Sdfr	NetBSD)
20447613Sdfr		ffs_label=FFSv${ffs_version}
205		;;
206	*)
207		atf_skip "Unsupported platform"
208		;;
209	esac
210
211	create_test_inputs
212
213	atf_check -e empty -o not-empty -s exit:0 \
214	    $MAKEFS -M 1m -o version=$ffs_version $TEST_IMAGE $TEST_INPUTS_DIR
215
216	mount_image
217	atf_check -e ignore -o match:"$ffs_label" dumpfs $TEST_MOUNT_DIR
218	check_ffs_image_contents
219}
220o_flag_version_2_cleanup()
221{
222	common_cleanup
223}
224
225atf_init_test_cases()
226{
227
228	atf_add_test_case D_flag
229	atf_add_test_case F_flag
230
231	atf_add_test_case from_mtree_spec_file
232	atf_add_test_case from_multiple_dirs
233	atf_add_test_case from_single_dir
234
235	atf_add_test_case o_flag_version_1
236	atf_add_test_case o_flag_version_2
237}
238