From 0d991011eae2f27715ffb716d373ab8dd27991b6 Mon Sep 17 00:00:00 2001 From: asomers Date: Thu, 20 Aug 2015 15:37:47 +0000 Subject: [PATCH] Add ATF functional tests for fstyp(8). No ZFS or GELI tests yet. Reviewed by: trasz, ngie MFC after: 2 weeks Sponsored by: SpectraLogic Differential Revision: https://reviews.freebsd.org/D2801 --- etc/mtree/BSD.tests.dist | 2 + usr.sbin/fstyp/Makefile | 6 + usr.sbin/fstyp/tests/Makefile | 15 ++ usr.sbin/fstyp/tests/ext2.img.bz2 | Bin 0 -> 365 bytes usr.sbin/fstyp/tests/ext3.img.bz2 | Bin 0 -> 362 bytes usr.sbin/fstyp/tests/ext4.img.bz2 | Bin 0 -> 373 bytes usr.sbin/fstyp/tests/ext4_with_label.img.bz2 | Bin 0 -> 369 bytes usr.sbin/fstyp/tests/fstyp_test.sh | 234 +++++++++++++++++++ usr.sbin/fstyp/tests/ntfs.img.bz2 | Bin 0 -> 35821 bytes usr.sbin/fstyp/tests/ntfs_with_label.img.bz2 | Bin 0 -> 35809 bytes 10 files changed, 257 insertions(+) create mode 100644 usr.sbin/fstyp/tests/Makefile create mode 100644 usr.sbin/fstyp/tests/ext2.img.bz2 create mode 100644 usr.sbin/fstyp/tests/ext3.img.bz2 create mode 100644 usr.sbin/fstyp/tests/ext4.img.bz2 create mode 100644 usr.sbin/fstyp/tests/ext4_with_label.img.bz2 create mode 100755 usr.sbin/fstyp/tests/fstyp_test.sh create mode 100644 usr.sbin/fstyp/tests/ntfs.img.bz2 create mode 100644 usr.sbin/fstyp/tests/ntfs_with_label.img.bz2 diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist index d16bb4759f1f..3d2ff5156642 100644 --- a/etc/mtree/BSD.tests.dist +++ b/etc/mtree/BSD.tests.dist @@ -574,6 +574,8 @@ usr.sbin etcupdate .. + fstyp + .. newsyslog .. nmtree diff --git a/usr.sbin/fstyp/Makefile b/usr.sbin/fstyp/Makefile index 786fb2a4edbe..2ef858abea24 100644 --- a/usr.sbin/fstyp/Makefile +++ b/usr.sbin/fstyp/Makefile @@ -13,6 +13,12 @@ MAN= fstyp.8 WARNS?= 0 +.include + +.if ${MK_TESTS} != "no" +SUBDIR+= tests +.endif + .if ${MK_ZFS} != "no" IGNORE_PRAGMA= YES diff --git a/usr.sbin/fstyp/tests/Makefile b/usr.sbin/fstyp/tests/Makefile new file mode 100644 index 000000000000..db686b59c314 --- /dev/null +++ b/usr.sbin/fstyp/tests/Makefile @@ -0,0 +1,15 @@ +# $FreeBSD$ + +TESTSDIR= ${TESTSBASE}/usr.sbin/fstyp + +ATF_TESTS_SH= fstyp_test + +FILES= ext2.img.bz2 +FILES+= ext3.img.bz2 +FILES+= ext4.img.bz2 +FILES+= ext4_with_label.img.bz2 +FILES+= ntfs.img.bz2 +FILES+= ntfs_with_label.img.bz2 +FILESDIR= ${TESTSDIR} + +.include diff --git a/usr.sbin/fstyp/tests/ext2.img.bz2 b/usr.sbin/fstyp/tests/ext2.img.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..b07389ed77c840bf509036ee64a794e14ba3b692 GIT binary patch literal 365 zcmV-z0h0bgT4*^jL0KkKSw%aKegFU&fB*jf|3F2FKuBPSUI+!n-UwiT018w!3WPu+ z0tkRdhFGux6`L^83L^w)GHn_Gs4x>o38ny;N2#)DJkNMssJBhU$eo|7X0044yL z4^inbkwl;}JtIvTXvoks8Ud3aXc_H`_tG9Nm6tqLX*?3d@0BuqvUv``!wL7)&6 z*b|rvmb?-|O1r~(M6s4cNYYX;rqGGaBwb=cOBLNXfyBI-*&HzZ2rAs>LxS|B< zlx9!^W;%9CNrQ0+09i6C|2LD$!XDv?BXdjxFp>{CL{Myc6P>GYiADf{y6nR0clEVU z;_2cdC3~J0){$NG2ps7o`XI~%STkSpc)qo$Kz!etB+o7CO#lRx1Rorchy+DaulT!? LDZ+$;DcpPTbvu(I literal 0 HcmV?d00001 diff --git a/usr.sbin/fstyp/tests/ext3.img.bz2 b/usr.sbin/fstyp/tests/ext3.img.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..7d8b9e21ca630d084b43b518297585f077d8bd79 GIT binary patch literal 362 zcmV-w0hRtjT4*^jL0KkKS%hoZLjV97fB*jf{9-~0NXX=X%77(B?hIlG3<^Ln0T4g{ z0)PN>o=C6(6`L^7qG)KIjT0Fsp&B&FkYNK%(t4Q>Q^};$!h=L8Gz|a%00000000dF zMJcErlTE3RX`@3-n1BpT0MKMN*rz1Ts8jlf8a#Y~uB{V0KbGJd)M zsAKXFOCPi#0gBoPywAogYDWqW%l3hoP(1<;1|yf@ho>{Zh?CfeqldJWX$-(e4DqFA zVS)M2@BNV?A}N+&^!viRQLF;(%B07}NfeajcAvA2fFziY_69u2r2tA4`*}s&kxmpO IAsY5jz$T`eD*ylh literal 0 HcmV?d00001 diff --git a/usr.sbin/fstyp/tests/ext4.img.bz2 b/usr.sbin/fstyp/tests/ext4.img.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..d24e0f88415e24be095cf4c5641a805e19da2a7d GIT binary patch literal 373 zcmV-*0gC=YT4*^jL0KkKS#mNwHUIz}fB*m7`NnKXLRfG>UVsHv&M0m|KmbS(FakgT z0sw$Rj)<@UI3gNpDrtmi>R^UI$k4#l8Vxi(OpG-dk>rOBG{Fppnq*|c0j7X3nl#CP z1Pug=5}IUfOeT#0(?OA-01W^D111a7v5Z8PB=sdr70gkgCQMp_B*j^!Lc9{&%d|uV zGe8Rq5Gv6T0VN6{FxIK!C2%J4hnx zwNmT=Ni6qDVgXkwQ3*6aX%cc~OB5IsT3#$d0HpUV-jC%E(kL*qdQd63$d_Z_=EEUw z-~dSajzdVL9^4E?crN;es|M*r^&%Oo56_b^9d~jtXoAx@f{>$86^b?$ki=lERwP7n zB58hK>(T1c_IYteRwP6`rVDLjr$)*R^w$DPeMtdsm|UPZyAWDOg2o7-5>P>)(0t*P TKq4zVpW^OFrwS4dMn{IgPV1Kr literal 0 HcmV?d00001 diff --git a/usr.sbin/fstyp/tests/ext4_with_label.img.bz2 b/usr.sbin/fstyp/tests/ext4_with_label.img.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..4b77619b05e747334b34bb92690f53043a69da3a GIT binary patch literal 369 zcmV-%0gnDcT4*^jL0KkKS-fBQNdN#HfB*j6_(Dl3L`d=hO28#&jyPfn00F=N5P(n^ z0s??To`|pkI3gNlQf*BG2Bw+}k5Py+2GjwxfXU>@+EC*rO${|r$}CBfIADn}V>GN)1h)3>5dlr0 z1zQj*q9OuH6a>b#TBc$li=hCPE?bFbCpz3NPg?cp=Dvq@s%d~XOAsJ2+9_a&yiI6S z&?J?|L`ViURH71SfYKz^LloE)G7ThvD0`Y$<9^5C6cw|2P%z!1CcJx`>#hFC08!S3 zx8S7MH&ZIXZK0`B6w5RvrtM9jkIq%R5eRsZ=tRU&VDD2uBQrZgGd+_YymI2&g36XG z@)aqk3m6d~E9NNKnRB0gN`IN;hDW2LiPh(M)1cz}vP3nVZDJ?{m2g3*&}G#)fJ9dM Pf5qI9P81|B7yeQ}W1pKu literal 0 HcmV?d00001 diff --git a/usr.sbin/fstyp/tests/fstyp_test.sh b/usr.sbin/fstyp/tests/fstyp_test.sh new file mode 100755 index 000000000000..8a1ea7209cc2 --- /dev/null +++ b/usr.sbin/fstyp/tests/fstyp_test.sh @@ -0,0 +1,234 @@ +# $FreeBSD$ + +atf_test_case cd9660 +cd9660_head() { + atf_set "descr" "fstyp(8) should detect cd9660 filesystems" +} +cd9660_body() { + atf_check -s exit:0 mkdir -p dir/emptydir # makefs requires a nonempty directory + atf_check -s exit:0 -o ignore makefs -t cd9660 -Z -s 64m cd9660.img dir + atf_check -s exit:0 -o inline:"cd9660\n" fstyp cd9660.img + atf_check -s exit:0 -o inline:"cd9660\n" fstyp -l cd9660.img +} + +atf_test_case cd9660_label +cd9660_label_head() { + atf_set "descr" "fstyp(8) can read the label on a cd9660 filesystem" +} +cd9660_label_body() { + atf_check -s exit:0 mkdir -p dir/emptydir # makefs requires a nonempty directory + atf_check -s exit:0 -o ignore makefs -t cd9660 -o label=Foo -Z -s 64m cd9660.img dir + atf_check -s exit:0 -o inline:"cd9660\n" fstyp cd9660.img + # Note: cd9660 labels are always upper case + atf_check -s exit:0 -o inline:"cd9660 FOO\n" fstyp -l cd9660.img +} + +atf_test_case dir +dir_head() { + atf_set "descr" "fstyp(8) should fail on a directory" +} +dir_body() { + atf_check -s exit:0 mkdir dir + atf_check -s exit:1 -e match:"not a disk" fstyp dir +} + +atf_test_case empty +empty_head() { + atf_set "descr" "fstyp(8) should fail on an empty file" +} +empty_body() { + atf_check -s exit:0 touch empty + atf_check -s exit:1 -e match:"filesystem not recognized" fstyp empty +} + +atf_test_case ext2 +ext2_head() { + atf_set "descr" "fstyp(8) can detect ext2 filesystems" +} +ext2_body() { + bzcat $(atf_get_srcdir)/ext2.img.bz2 > ext2.img + atf_check -s exit:0 -o inline:"ext2fs\n" fstyp ext2.img + atf_check -s exit:0 -o inline:"ext2fs\n" fstyp -l ext2.img +} + +atf_test_case ext3 +ext3_head() { + atf_set "descr" "fstyp(8) can detect ext3 filesystems" +} +ext3_body() { + bzcat $(atf_get_srcdir)/ext3.img.bz2 > ext3.img + atf_check -s exit:0 -o inline:"ext2fs\n" fstyp ext3.img + atf_check -s exit:0 -o inline:"ext2fs\n" fstyp -l ext3.img +} + +atf_test_case ext4 +ext4_head() { + atf_set "descr" "fstyp(8) can detect ext4 filesystems" +} +ext4_body() { + bzcat $(atf_get_srcdir)/ext4.img.bz2 > ext4.img + atf_check -s exit:0 -o inline:"ext2fs\n" fstyp ext4.img + atf_check -s exit:0 -o inline:"ext2fs\n" fstyp -l ext4.img +} + +atf_test_case ext4_label +ext4_label_head() { + atf_set "descr" "fstyp(8) can read the label on an ext4 filesystem" +} +ext4_label_body() { + bzcat $(atf_get_srcdir)/ext4_with_label.img.bz2 > ext4_with_label.img + atf_check -s exit:0 -o inline:"ext2fs foo\n" fstyp -l ext4_with_label.img +} + +atf_test_case fat12 +fat12_head() { + atf_set "descr" "fstyp(8) can detect FAT12 filesystems" +} +fat12_body() { + atf_check -s exit:0 truncate -s 64m msdos.img + atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 12 ./msdos.img + atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img + atf_check -s exit:0 -o inline:"msdosfs\n" fstyp -l msdos.img +} + +atf_test_case fat16 +fat16_head() { + atf_set "descr" "fstyp(8) can detect FAT16 filesystems" +} +fat16_body() { + atf_check -s exit:0 truncate -s 64m msdos.img + atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 16 ./msdos.img + atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img + atf_check -s exit:0 -o inline:"msdosfs\n" fstyp -l msdos.img +} + +atf_test_case fat32 +fat32_head() { + atf_set "descr" "fstyp(8) can detect FAT32 filesystems" +} +fat32_body() { + atf_check -s exit:0 truncate -s 64m msdos.img + atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 32 -c 1 \ + ./msdos.img + atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img + atf_check -s exit:0 -o inline:"msdosfs\n" fstyp -l msdos.img +} + +atf_test_case fat32_label +fat32_label_head() { + atf_set "descr" "fstyp(8) can read the label on an msdos filesystem" +} +fat32_label_body() { + atf_check -s exit:0 truncate -s 64m msdos.img + atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 32 -L Foo -c 1 \ + ./msdos.img + atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img + # Note: msdos labels are always upper case + atf_check -s exit:0 -o inline:"msdosfs FOO\n" fstyp -l msdos.img +} + +atf_test_case ntfs +ntfs_head() { + atf_set "descr" "fstyp(8) can detect ntfs filesystems" +} +ntfs_body() { + bzcat $(atf_get_srcdir)/ntfs.img.bz2 > ntfs.img + atf_check -s exit:0 -o inline:"ntfs\n" fstyp ntfs.img + atf_check -s exit:0 -o inline:"ntfs\n" fstyp -l ntfs.img +} + +atf_test_case ntfs_with_label +ntfs_with_label_head() { + atf_set "descr" "fstyp(8) can read labels on ntfs filesystems" +} +ntfs_with_label_body() { + bzcat $(atf_get_srcdir)/ntfs_with_label.img.bz2 > ntfs_with_label.img + atf_check -s exit:0 -o inline:"ntfs\n" fstyp ntfs_with_label.img + atf_check -s exit:0 -o inline:"ntfs Foo\n" fstyp -l ntfs_with_label.img +} + +atf_test_case ufs1 +ufs1_head() { + atf_set "descr" "fstyp(8) should detect UFS version 1 filesystems" +} +ufs1_body() { + atf_check -s exit:0 mkdir dir + atf_check -s exit:0 -o ignore makefs -Z -s 64m ufs.img dir + atf_check -s exit:0 -o inline:"ufs\n" fstyp ufs.img + atf_check -s exit:0 -o inline:"ufs\n" fstyp -l ufs.img +} + +atf_test_case ufs2 +ufs2_head() { + atf_set "descr" "fstyp(8) should detect UFS version 2 filesystems" +} +ufs2_body() { + atf_check -s exit:0 mkdir dir + atf_check -s exit:0 -o ignore makefs -o version=2 -Z -s 64m ufs.img dir + atf_check -s exit:0 -o inline:"ufs\n" fstyp ufs.img + atf_check -s exit:0 -o inline:"ufs\n" fstyp -l ufs.img +} + +atf_test_case ufs2_label +ufs2_label_head() { + atf_set "descr" "fstyp(8) can read the label on a UFS v2 filesystem" +} +ufs2_label_body() { + atf_check -s exit:0 mkdir dir + atf_check -s exit:0 -o ignore makefs -o version=2,label="foo" -Z -s 64m ufs.img dir + atf_check -s exit:0 -o inline:"ufs foo\n" fstyp -l ufs.img +} + +atf_test_case ufs_on_device cleanup +ufs_on_device_head() { + atf_set "descr" "fstyp(8) should work on device nodes" + atf_set "require.user" "root" +} +ufs_on_device_body() { + mdconfig -a -t swap -s 64m > mdname + md=$(cat mdname) + if [ -z "$md" ]; then + atf_fail "Failed to create md(4) device" + fi + atf_check -s exit:0 -o ignore newfs -L foo /dev/$md + atf_check -s exit:0 -o inline:"ufs\n" fstyp /dev/$md + atf_check -s exit:0 -o inline:"ufs foo\n" fstyp -l /dev/$md +} +ufs_on_device_cleanup() { + md=$(cat mdname) + if [ -n "$md" ]; then + mdconfig -d -u "$md" + fi +} + +atf_test_case zeros +zeros_head() { + atf_set "descr" "fstyp(8) should fail on a zero-filled file" +} +zeros_body() { + atf_check -s exit:0 truncate -s 256m zeros + atf_check -s exit:1 -e match:"filesystem not recognized" fstyp zeros +} + + +atf_init_test_cases() { + atf_add_test_case cd9660 + atf_add_test_case cd9660_label + atf_add_test_case dir + atf_add_test_case empty + atf_add_test_case ext2 + atf_add_test_case ext3 + atf_add_test_case ext4 + atf_add_test_case ext4_label + atf_add_test_case fat12 + atf_add_test_case fat16 + atf_add_test_case fat32 + atf_add_test_case fat32_label + atf_add_test_case ntfs + atf_add_test_case ntfs_with_label + atf_add_test_case ufs1 + atf_add_test_case ufs2 + atf_add_test_case ufs2_label + atf_add_test_case ufs_on_device + atf_add_test_case zeros +} diff --git a/usr.sbin/fstyp/tests/ntfs.img.bz2 b/usr.sbin/fstyp/tests/ntfs.img.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..5843e0b7f5abe23235f4aaeda17ff20cbdf0f2b6 GIT binary patch literal 35821 zcmcG12S5}_ur}tyd}|iPG`OOKLy;T|sEn(ut`P$$pojGLNkCB~DN%CH>F=Jf1kt;D@BLigOm)>)Roy+^HQhb4-o`3rLzN=e=_-n^c>)s?89X>Pi;N{ViAKe^1@s{YCl|#>YimcqMyZ`FB#fw%f zKDF)0zPsybD-m?pVRXt0+NKdh){GF{Co)W4WZR1Qn>H)R-+ZJ!LSnAS(BmRQy+n43 z#7>+%`HINRDH9)V8-3eLgmzOzM0E1v^`jq6zA18R?r7<2YbKALfAhidO|;3IS3Q&n z+AK18-UyK?D>e<~-;`Xl`21+v`tzIqoWE!|cH3)�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 H*nJNGq5#4@ literal 0 HcmV?d00001 diff --git a/usr.sbin/fstyp/tests/ntfs_with_label.img.bz2 b/usr.sbin/fstyp/tests/ntfs_with_label.img.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..9e2c4cfbad0680b41944fe6053d94858faffca8a GIT binary patch literal 35809 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