xref: /freebsd-src/contrib/netbsd-tests/usr.sbin/mtree/t_mtree.sh (revision 61c1328eb016476ee7ff5ad65d8224bb43e572db)
1f40f3adcSEnji Cooper# $NetBSD: t_mtree.sh,v 1.7 2017/01/14 20:45:16 christos Exp $
257718be8SEnji Cooper#
357718be8SEnji Cooper# Copyright (c) 2009, 2012 The NetBSD Foundation, Inc.
457718be8SEnji Cooper# All rights reserved.
557718be8SEnji Cooper#
657718be8SEnji Cooper# Redistribution and use in source and binary forms, with or without
757718be8SEnji Cooper# modification, are permitted provided that the following conditions
857718be8SEnji Cooper# are met:
957718be8SEnji Cooper# 1. Redistributions of source code must retain the above copyright
1057718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer.
1157718be8SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright
1257718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer in the
1357718be8SEnji Cooper#    documentation and/or other materials provided with the distribution.
1457718be8SEnji Cooper#
1557718be8SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
1657718be8SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
1757718be8SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1857718be8SEnji Cooper# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
1957718be8SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2057718be8SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2157718be8SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2257718be8SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2357718be8SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2457718be8SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2557718be8SEnji Cooper# POSSIBILITY OF SUCH DAMAGE.
2657718be8SEnji Cooper#
2757718be8SEnji Cooper
2857718be8SEnji Cooper# Postprocess mtree output, canonicalising portions that
2957718be8SEnji Cooper# are expected to differ from one run to another.
3057718be8SEnji Cooper#
3157718be8SEnji Cooper
3257718be8SEnji Cooperh_postprocess()
3357718be8SEnji Cooper{
3457718be8SEnji Cooper	sed -e '
3557718be8SEnji Cooper		/^#	   user: /s/:.*/: x/
3657718be8SEnji Cooper		/^#	machine: /s/:.*/: x/
3757718be8SEnji Cooper		/^#	   tree: /s/:.*/: x/
3857718be8SEnji Cooper		/^#	   date: /s/:.*/: x/
3957718be8SEnji Cooper		' \
4057718be8SEnji Cooper	    -e '/type=dir/s/ size=[0-9]*//'
4157718be8SEnji Cooper}
4257718be8SEnji Cooper
4357718be8SEnji Cooperh_check()
4457718be8SEnji Cooper{
4557718be8SEnji Cooper        diff -Nru "$1" "$2" || atf_fail "files $1 and $2 differ"
4657718be8SEnji Cooper}
4757718be8SEnji Cooper
4857718be8SEnji Cooper
4957718be8SEnji Cooperatf_test_case mtree_create
5057718be8SEnji Cooperatf_test_case netbsd6_create
5157718be8SEnji Coopercreate_head()
5257718be8SEnji Cooper{
5357718be8SEnji Cooper	atf_set "descr" "Create a specfile describing a directory tree"
5457718be8SEnji Cooper}
5557718be8SEnji Cooper
5657718be8SEnji Coopercreate_setup()
5757718be8SEnji Cooper{
5857718be8SEnji Cooper	# create some directories
5957718be8SEnji Cooper	rm -fr create
6057718be8SEnji Cooper	mkdir -p create/a/1 create/a/2 create/b
6157718be8SEnji Cooper	# create some files
6257718be8SEnji Cooper	for file in create/top.file.1 \
6357718be8SEnji Cooper		    create/a/a.file.1 \
6457718be8SEnji Cooper		    create/a/a.file.2 \
6557718be8SEnji Cooper		    create/a/1/a1.file.1 \
6657718be8SEnji Cooper		    create/b/b.file.1 \
6757718be8SEnji Cooper		    create/b/b.file.2
6857718be8SEnji Cooper	do
6957718be8SEnji Cooper		echo "$file" >$file
7057718be8SEnji Cooper	done
7157718be8SEnji Cooper	# hard link to file in same dir
7257718be8SEnji Cooper	ln create/b/b.file.1 create/b/b.hardlink.1
7357718be8SEnji Cooper	# hard link to file in another dir
7457718be8SEnji Cooper	ln create/b/b.file.2 create/a/a.hardlink.b2
7557718be8SEnji Cooper	# symlink to file
7657718be8SEnji Cooper	ln -s a.file.1 create/a.symlink.1
7757718be8SEnji Cooper	# symlink to dir
7857718be8SEnji Cooper	ln -s b create/top.symlink.b
7957718be8SEnji Cooper	# dangling symlink
8057718be8SEnji Cooper	ln -s nonexistent create/top.dangling
8157718be8SEnji Cooper}
8257718be8SEnji Cooper
8357718be8SEnji Coopercreate_body()
8457718be8SEnji Cooper{
8557718be8SEnji Cooper	create_setup
8657718be8SEnji Cooper
8757718be8SEnji Cooper	# run mtree and check output
8857718be8SEnji Cooper	( cd create && mtree -F ${FLAVOR} -c -k type,nlink,link,size,sha256 ) >output.raw \
8957718be8SEnji Cooper	|| atf_fail "mtree exit status $?"
9057718be8SEnji Cooper	h_postprocess <output.raw >output
9157718be8SEnji Cooper	h_check "$(atf_get_srcdir)/${FLAVOR}_d_create.out" output
9257718be8SEnji Cooper}
9357718be8SEnji Cooper
9457718be8SEnji Coopermtree_create_head()
9557718be8SEnji Cooper{
9657718be8SEnji Cooper	FLAVOR=mtree create_head
9757718be8SEnji Cooper}
9857718be8SEnji Coopernetbsd6_create_head()
9957718be8SEnji Cooper{
10057718be8SEnji Cooper	FLAVOR=netbsd6 create_head
10157718be8SEnji Cooper}
10257718be8SEnji Cooper
10357718be8SEnji Coopermtree_create_body()
10457718be8SEnji Cooper{
10557718be8SEnji Cooper	FLAVOR=mtree create_body
10657718be8SEnji Cooper}
10757718be8SEnji Coopernetbsd6_create_body()
10857718be8SEnji Cooper{
10957718be8SEnji Cooper	FLAVOR=netbsd6 create_body
11057718be8SEnji Cooper}
11157718be8SEnji Cooper
11257718be8SEnji Cooper
11357718be8SEnji Cooperatf_test_case mtree_check
11457718be8SEnji Cooperatf_test_case netbsd6_check
11557718be8SEnji Coopercheck_head()
11657718be8SEnji Cooper{
11757718be8SEnji Cooper	atf_set "descr" "Check a directory tree against a specfile"
11857718be8SEnji Cooper}
11957718be8SEnji Cooper
12057718be8SEnji Coopercheck_body()
12157718be8SEnji Cooper{
12257718be8SEnji Cooper	# we use the same directory tree and specfile as in the "create" test
12357718be8SEnji Cooper	create_setup
12457718be8SEnji Cooper
12557718be8SEnji Cooper	# run mtree and check output
12657718be8SEnji Cooper	( cd create && mtree -F ${FLAVOR}  ) <"$(atf_get_srcdir)/${FLAVOR}_d_create.out" >output \
12757718be8SEnji Cooper	|| atf_fail "mtree exit status $?"
12857718be8SEnji Cooper	h_check /dev/null output
12957718be8SEnji Cooper}
13057718be8SEnji Cooper
13157718be8SEnji Coopermtree_check_head()
13257718be8SEnji Cooper{
13357718be8SEnji Cooper	FLAVOR=mtree check_head
13457718be8SEnji Cooper}
13557718be8SEnji Coopernetbsd6_check_head()
13657718be8SEnji Cooper{
13757718be8SEnji Cooper	FLAVOR=netbsd6 check_head
13857718be8SEnji Cooper}
13957718be8SEnji Cooper
14057718be8SEnji Coopermtree_check_body()
14157718be8SEnji Cooper{
14257718be8SEnji Cooper	FLAVOR=mtree check_body
14357718be8SEnji Cooper}
14457718be8SEnji Coopernetbsd6_check_body()
14557718be8SEnji Cooper{
14657718be8SEnji Cooper	FLAVOR=netbsd6 check_body
14757718be8SEnji Cooper}
14857718be8SEnji Cooper
14957718be8SEnji Cooper
15057718be8SEnji Cooperatf_test_case mtree_convert_C
15157718be8SEnji Cooperatf_test_case netbsd6_convert_C
15257718be8SEnji Cooperconvert_C_head()
15357718be8SEnji Cooper{
15457718be8SEnji Cooper	atf_set "descr" "Convert a specfile to mtree -C format, unsorted"
15557718be8SEnji Cooper}
15657718be8SEnji Cooper
15757718be8SEnji Cooperconvert_C_body()
15857718be8SEnji Cooper{
15957718be8SEnji Cooper	mtree -F ${FLAVOR} -C -K all <"$(atf_get_srcdir)/d_convert.in" >output
16057718be8SEnji Cooper	h_check "$(atf_get_srcdir)/d_convert_C.out" output
16157718be8SEnji Cooper}
16257718be8SEnji Cooper
16357718be8SEnji Coopermtree_convert_C_head()
16457718be8SEnji Cooper{
16557718be8SEnji Cooper	FLAVOR=mtree convert_C_head
16657718be8SEnji Cooper}
16757718be8SEnji Coopernetbsd6_convert_C_head()
16857718be8SEnji Cooper{
16957718be8SEnji Cooper	FLAVOR=netbsd6 convert_C_head
17057718be8SEnji Cooper}
17157718be8SEnji Cooper
17257718be8SEnji Coopermtree_convert_C_body()
17357718be8SEnji Cooper{
17457718be8SEnji Cooper	FLAVOR=mtree convert_C_body
17557718be8SEnji Cooper}
17657718be8SEnji Coopernetbsd6_convert_C_body()
17757718be8SEnji Cooper{
17857718be8SEnji Cooper	FLAVOR=netbsd6 convert_C_body
17957718be8SEnji Cooper}
18057718be8SEnji Cooper
18157718be8SEnji Cooper
18257718be8SEnji Cooperatf_test_case mtree_convert_C_S
18357718be8SEnji Cooperatf_test_case netbsd6_convert_C_S
18457718be8SEnji Cooperconvert_C_S_head()
18557718be8SEnji Cooper{
18657718be8SEnji Cooper	atf_set "descr" "Convert a specfile to mtree -C format, sorted"
18757718be8SEnji Cooper}
18857718be8SEnji Cooper
18957718be8SEnji Cooperconvert_C_S_body()
19057718be8SEnji Cooper{
19157718be8SEnji Cooper	mtree -F ${FLAVOR} -C -S -K all <"$(atf_get_srcdir)/d_convert.in" >output
19257718be8SEnji Cooper	h_check "$(atf_get_srcdir)/d_convert_C_S.out" output
19357718be8SEnji Cooper}
19457718be8SEnji Cooper
19557718be8SEnji Coopermtree_convert_C_S_head()
19657718be8SEnji Cooper{
19757718be8SEnji Cooper	FLAVOR=mtree convert_C_S_head
19857718be8SEnji Cooper}
19957718be8SEnji Coopernetbsd6_convert_C_S_head()
20057718be8SEnji Cooper{
20157718be8SEnji Cooper	FLAVOR=netbsd6 convert_C_S_head
20257718be8SEnji Cooper}
20357718be8SEnji Cooper
20457718be8SEnji Coopermtree_convert_C_S_body()
20557718be8SEnji Cooper{
20657718be8SEnji Cooper	FLAVOR=mtree convert_C_S_body
20757718be8SEnji Cooper}
20857718be8SEnji Coopernetbsd6_convert_C_S_body()
20957718be8SEnji Cooper{
21057718be8SEnji Cooper	FLAVOR=netbsd6 convert_C_S_body
21157718be8SEnji Cooper}
21257718be8SEnji Cooper
21357718be8SEnji Cooper
21457718be8SEnji Cooperatf_test_case mtree_convert_D
21557718be8SEnji Cooperatf_test_case netbsd6_convert_D
21657718be8SEnji Cooperconvert_D_head()
21757718be8SEnji Cooper{
21857718be8SEnji Cooper	atf_set "descr" "Convert a specfile to mtree -D format, unsorted"
21957718be8SEnji Cooper}
22057718be8SEnji Cooper
22157718be8SEnji Cooperconvert_D_body()
22257718be8SEnji Cooper{
22357718be8SEnji Cooper	mtree -F ${FLAVOR} -D -K all <"$(atf_get_srcdir)/d_convert.in" >output
22457718be8SEnji Cooper	h_check "$(atf_get_srcdir)/d_convert_D.out" output
22557718be8SEnji Cooper}
22657718be8SEnji Cooper
22757718be8SEnji Coopermtree_convert_D_head()
22857718be8SEnji Cooper{
22957718be8SEnji Cooper	FLAVOR=mtree convert_D_head
23057718be8SEnji Cooper}
23157718be8SEnji Coopernetbsd6_convert_D_head()
23257718be8SEnji Cooper{
23357718be8SEnji Cooper	FLAVOR=netbsd6 convert_D_head
23457718be8SEnji Cooper}
23557718be8SEnji Cooper
23657718be8SEnji Coopermtree_convert_D_body()
23757718be8SEnji Cooper{
23857718be8SEnji Cooper	FLAVOR=mtree convert_D_body
23957718be8SEnji Cooper}
24057718be8SEnji Coopernetbsd6_convert_D_body()
24157718be8SEnji Cooper{
24257718be8SEnji Cooper	FLAVOR=netbsd6 convert_D_body
24357718be8SEnji Cooper}
24457718be8SEnji Cooper
24557718be8SEnji Cooper
24657718be8SEnji Cooperatf_test_case mtree_convert_D_S
24757718be8SEnji Cooperatf_test_case netbsd6_convert_D_S
24857718be8SEnji Cooperconvert_D_S_head()
24957718be8SEnji Cooper{
25057718be8SEnji Cooper	atf_set "descr" "Convert a specfile to mtree -D format, sorted"
25157718be8SEnji Cooper}
25257718be8SEnji Cooper
25357718be8SEnji Cooperconvert_D_S_body()
25457718be8SEnji Cooper{
25557718be8SEnji Cooper	mtree -F ${FLAVOR} -D -S -K all <"$(atf_get_srcdir)/d_convert.in" >output
25657718be8SEnji Cooper	h_check "$(atf_get_srcdir)/d_convert_D_S.out" output
25757718be8SEnji Cooper}
25857718be8SEnji Cooper
25957718be8SEnji Coopermtree_convert_D_S_head()
26057718be8SEnji Cooper{
26157718be8SEnji Cooper	FLAVOR=mtree convert_D_S_head
26257718be8SEnji Cooper}
26357718be8SEnji Coopernetbsd6_convert_D_S_head()
26457718be8SEnji Cooper{
26557718be8SEnji Cooper	FLAVOR=netbsd6 convert_D_S_head
26657718be8SEnji Cooper}
26757718be8SEnji Cooper
26857718be8SEnji Coopermtree_convert_D_S_body()
26957718be8SEnji Cooper{
27057718be8SEnji Cooper	FLAVOR=mtree convert_D_S_body
27157718be8SEnji Cooper}
27257718be8SEnji Coopernetbsd6_convert_D_S_body()
27357718be8SEnji Cooper{
27457718be8SEnji Cooper	FLAVOR=netbsd6 convert_D_S_body
27557718be8SEnji Cooper}
27657718be8SEnji Cooper
27757718be8SEnji Cooper
27857718be8SEnji Cooperatf_test_case mtree_ignore
27957718be8SEnji Cooperatf_test_case netbs6_ignore
28057718be8SEnji Cooperignore_head()
28157718be8SEnji Cooper{
28257718be8SEnji Cooper	atf_set "descr" "Test that -d ignores symlinks (PR bin/41061)"
28357718be8SEnji Cooper}
28457718be8SEnji Cooper
28557718be8SEnji Cooperignore_body()
28657718be8SEnji Cooper{
28780d53cbeSJulio Merino	# Kyua 0.11 and above point TMPDIR to our work directory and atf-check
28880d53cbeSJulio Merino	# generates a temporary file, which confuses mtree.  Put the mtree files
28980d53cbeSJulio Merino	# into a subdirectory.
29080d53cbeSJulio Merino	#
29180d53cbeSJulio Merino	# See https://github.com/jmmv/kyua/issues/133 for details.
29280d53cbeSJulio Merino	mkdir root && cd root
29380d53cbeSJulio Merino
29457718be8SEnji Cooper	mkdir newdir
29557718be8SEnji Cooper	mtree -F ${FLAVOR} -c | mtree -F ${FLAVOR} -Ck uid,gid,mode > mtree.spec
29657718be8SEnji Cooper	ln -s newdir otherdir
29757718be8SEnji Cooper
29857718be8SEnji Cooper	# This yields "extra: otherdir" even with -d.
29957718be8SEnji Cooper	# (PR bin/41061)
30057718be8SEnji Cooper	atf_check -s ignore -o empty -e empty -x "mtree -F ${FLAVOR} -d < mtree.spec"
30157718be8SEnji Cooper
30257718be8SEnji Cooper	# Delete the symlink and re-verify.
30357718be8SEnji Cooper	#
30457718be8SEnji Cooper	rm otherdir
30557718be8SEnji Cooper	atf_check -s ignore -o empty -e empty -x "mtree -F ${FLAVOR} -d < mtree.spec"
30657718be8SEnji Cooper}
30757718be8SEnji Cooper
30857718be8SEnji Coopermtree_ignore_head()
30957718be8SEnji Cooper{
31057718be8SEnji Cooper	FLAVOR=mtree ignore_head
31157718be8SEnji Cooper}
31257718be8SEnji Coopernetbsd6_ignore_head()
31357718be8SEnji Cooper{
31457718be8SEnji Cooper	FLAVOR=netbsd6 ignore_head
31557718be8SEnji Cooper}
31657718be8SEnji Cooper
31757718be8SEnji Coopermtree_ignore_body()
31857718be8SEnji Cooper{
31957718be8SEnji Cooper	FLAVOR=mtree ignore_body
32057718be8SEnji Cooper}
32157718be8SEnji Coopernetbsd6_ignore_body()
32257718be8SEnji Cooper{
32380d53cbeSJulio Merino	# Kyua 0.11 and above point TMPDIR to our work directory and atf-check
32480d53cbeSJulio Merino	# generates a temporary file, which confuses mtree.  Put the mtree files
32580d53cbeSJulio Merino	# into a subdirectory.
32680d53cbeSJulio Merino	#
32780d53cbeSJulio Merino	# See https://github.com/jmmv/kyua/issues/133 for details.
32880d53cbeSJulio Merino	mkdir root && cd root
32980d53cbeSJulio Merino
33057718be8SEnji Cooper	FLAVOR=netbsd6 ignore_body
33157718be8SEnji Cooper}
33257718be8SEnji Cooper
33357718be8SEnji Cooper
33457718be8SEnji Cooperatf_test_case mtree_merge
33557718be8SEnji Cooperatf_test_case netbsd6_merge
33657718be8SEnji Coopermerge_head()
33757718be8SEnji Cooper{
33857718be8SEnji Cooper	atf_set "descr" "Merge records of different type"
33957718be8SEnji Cooper}
34057718be8SEnji Cooper
34157718be8SEnji Coopermerge_body()
34257718be8SEnji Cooper{
34357718be8SEnji Cooper	mtree -F ${FLAVOR} -C -M -K all <"$(atf_get_srcdir)/d_merge.in" >output
34457718be8SEnji Cooper	h_check "$(atf_get_srcdir)/d_merge_C_M.out" output
34557718be8SEnji Cooper	# same again, with sorting
34657718be8SEnji Cooper	mtree -F ${FLAVOR} -C -M -S -K all <"$(atf_get_srcdir)/d_merge.in" >output
34757718be8SEnji Cooper	h_check "$(atf_get_srcdir)/d_merge_C_M_S.out" output
34857718be8SEnji Cooper}
34957718be8SEnji Cooper
35057718be8SEnji Coopermtree_merge_head()
35157718be8SEnji Cooper{
35257718be8SEnji Cooper	FLAVOR=mtree merge_head
35357718be8SEnji Cooper}
35457718be8SEnji Coopernetbsd6_merge_head()
35557718be8SEnji Cooper{
35657718be8SEnji Cooper	FLAVOR=netbsd6 merge_head
35757718be8SEnji Cooper}
35857718be8SEnji Cooper
35957718be8SEnji Coopermtree_merge_body()
36057718be8SEnji Cooper{
36157718be8SEnji Cooper	FLAVOR=mtree merge_body
36257718be8SEnji Cooper}
36357718be8SEnji Coopernetbsd6_merge_body()
36457718be8SEnji Cooper{
36557718be8SEnji Cooper	FLAVOR=netbsd6 merge_body
36657718be8SEnji Cooper}
36757718be8SEnji Cooper
36857718be8SEnji Cooper
36957718be8SEnji Cooperatf_test_case mtree_nonemptydir
37057718be8SEnji Cooperatf_test_case netbsd6_nonemptydir
37157718be8SEnji Coopernonemptydir_head()
37257718be8SEnji Cooper{
37357718be8SEnji Cooper	atf_set "descr" "Test that new non-empty " \
37457718be8SEnji Cooper			"directories are recorded (PR bin/25693)"
37557718be8SEnji Cooper}
37657718be8SEnji Cooper
37757718be8SEnji Coopernonemptydir_body()
37857718be8SEnji Cooper{
37957718be8SEnji Cooper	mkdir testdir
38057718be8SEnji Cooper	cd testdir
38157718be8SEnji Cooper
38257718be8SEnji Cooper	mtree -F ${FLAVOR} -c > mtree.spec
38357718be8SEnji Cooper
38457718be8SEnji Cooper	if [ ! -f mtree.spec ]; then
38557718be8SEnji Cooper		atf_fail "mtree failed"
38657718be8SEnji Cooper	fi
38757718be8SEnji Cooper
38857718be8SEnji Cooper	touch bar
38957718be8SEnji Cooper	atf_check -s ignore -o save:output -x "mtree -F ${FLAVOR} -f mtree.spec"
39057718be8SEnji Cooper
39157718be8SEnji Cooper	if [ ! -n "$(egrep "extra: bar" output)" ]; then
39257718be8SEnji Cooper		atf_fail "mtree did not record changes (PR bin/25693)"
39357718be8SEnji Cooper	fi
39457718be8SEnji Cooper}
39557718be8SEnji Cooper
39657718be8SEnji Coopermtree_nonemptydir_head()
39757718be8SEnji Cooper{
39857718be8SEnji Cooper	FLAVOR=mtree nonemptydir_head
39957718be8SEnji Cooper}
40057718be8SEnji Coopernetbsd6_nonemptydir_head()
40157718be8SEnji Cooper{
40257718be8SEnji Cooper	FLAVOR=netbsd6 nonemptydir_head
40357718be8SEnji Cooper}
40457718be8SEnji Cooper
40557718be8SEnji Coopermtree_nonemptydir_body()
40657718be8SEnji Cooper{
40757718be8SEnji Cooper	FLAVOR=mtree nonemptydir_body
40857718be8SEnji Cooper}
40957718be8SEnji Coopernetbsd6_nonemptydir_body()
41057718be8SEnji Cooper{
41157718be8SEnji Cooper	FLAVOR=netbsd6 nonemptydir_body
41257718be8SEnji Cooper}
41357718be8SEnji Cooper
414*4f4b548bSBryan Dreweryatf_test_case mtree_specspec_type
415*4f4b548bSBryan Drewerymtree_specspec_type_head()
416*4f4b548bSBryan Drewery{
417*4f4b548bSBryan Drewery	atf_set "descr" "Test that spec comparisons detect type changes"
418*4f4b548bSBryan Drewery}
419*4f4b548bSBryan Drewery
420*4f4b548bSBryan Drewerymtree_specspec_type_body()
421*4f4b548bSBryan Drewery{
422*4f4b548bSBryan Drewery	mkdir testdir
423*4f4b548bSBryan Drewery
424*4f4b548bSBryan Drewery	touch testdir/bar
425*4f4b548bSBryan Drewery	mtree -c -p testdir > mtree1.spec
426*4f4b548bSBryan Drewery
427*4f4b548bSBryan Drewery	if [ ! -f mtree1.spec ]; then
428*4f4b548bSBryan Drewery		atf_fail "mtree failed"
429*4f4b548bSBryan Drewery	fi
430*4f4b548bSBryan Drewery
431*4f4b548bSBryan Drewery	rm -f testdir/bar
432*4f4b548bSBryan Drewery	ln -s foo testdir/bar
433*4f4b548bSBryan Drewery	# uid change is expected to be ignored as done in -C
434*4f4b548bSBryan Drewery	chown -h operator testdir/bar
435*4f4b548bSBryan Drewery	mtree -c -p testdir > mtree2.spec
436*4f4b548bSBryan Drewery
437*4f4b548bSBryan Drewery	if [ ! -f mtree2.spec ]; then
438*4f4b548bSBryan Drewery		atf_fail "mtree failed"
439*4f4b548bSBryan Drewery	fi
440*4f4b548bSBryan Drewery
441*4f4b548bSBryan Drewery	atf_check -s ignore -o save:output \
442*4f4b548bSBryan Drewery	    -x "mtree -f mtree1.spec -f mtree2.spec"
443*4f4b548bSBryan Drewery
444*4f4b548bSBryan Drewery	if ! cut -f 3 output | egrep -q "bar file" || \
445*4f4b548bSBryan Drewery	    ! cut -f 3 output | egrep -q "bar link"; then
446*4f4b548bSBryan Drewery		atf_fail "mtree did not detect type change"
447*4f4b548bSBryan Drewery	fi
448*4f4b548bSBryan Drewery}
44957718be8SEnji Cooper
45057718be8SEnji Cooperatf_init_test_cases()
45157718be8SEnji Cooper{
45257718be8SEnji Cooper	atf_add_test_case mtree_create
45357718be8SEnji Cooper	atf_add_test_case mtree_check
45457718be8SEnji Cooper	atf_add_test_case mtree_convert_C
45557718be8SEnji Cooper	atf_add_test_case mtree_convert_C_S
45657718be8SEnji Cooper	atf_add_test_case mtree_convert_D
45757718be8SEnji Cooper	atf_add_test_case mtree_convert_D_S
45857718be8SEnji Cooper	atf_add_test_case mtree_ignore
45957718be8SEnji Cooper	atf_add_test_case mtree_merge
46057718be8SEnji Cooper	atf_add_test_case mtree_nonemptydir
461*4f4b548bSBryan Drewery	atf_add_test_case mtree_specspec_type
46257718be8SEnji Cooper
46357718be8SEnji Cooper	atf_add_test_case netbsd6_create
46457718be8SEnji Cooper	atf_add_test_case netbsd6_check
46557718be8SEnji Cooper	atf_add_test_case netbsd6_convert_C
46657718be8SEnji Cooper	atf_add_test_case netbsd6_convert_C_S
46757718be8SEnji Cooper	atf_add_test_case netbsd6_convert_D
46857718be8SEnji Cooper	atf_add_test_case netbsd6_convert_D_S
46957718be8SEnji Cooper	atf_add_test_case netbsd6_ignore
47057718be8SEnji Cooper	atf_add_test_case netbsd6_merge
47157718be8SEnji Cooper	atf_add_test_case netbsd6_nonemptydir
47257718be8SEnji Cooper}
473