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