3 # SPDX-License-Identifier: BSD-2-Clause-FreeBSD
5 # Copyright (c) 2015 Alan Somers
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
10 # 1. Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in the
14 # documentation and/or other materials provided with the distribution.
16 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 atf_set "descr" "fstyp(8) should detect cd9660 filesystems"
35 atf_check -s exit:0 mkdir -p dir/emptydir # makefs requires a nonempty directory
36 atf_check -s exit:0 -o ignore makefs -t cd9660 -Z -s 64m cd9660.img dir
37 atf_check -s exit:0 -o inline:"cd9660\n" fstyp cd9660.img
38 atf_check -s exit:0 -o inline:"cd9660\n" fstyp -l cd9660.img
41 atf_test_case cd9660_label
43 atf_set "descr" "fstyp(8) can read the label on a cd9660 filesystem"
46 atf_check -s exit:0 mkdir -p dir/emptydir # makefs requires a nonempty directory
47 atf_check -s exit:0 -o ignore makefs -t cd9660 -o label=Foo -Z -s 64m cd9660.img dir
48 atf_check -s exit:0 -o inline:"cd9660\n" fstyp cd9660.img
49 # Note: cd9660 labels are always upper case
50 atf_check -s exit:0 -o inline:"cd9660 FOO\n" fstyp -l cd9660.img
55 atf_set "descr" "fstyp(8) should fail on a directory"
58 atf_check -s exit:0 mkdir dir
59 atf_check -s exit:1 -e match:"not a disk" fstyp dir
64 atf_set "descr" "fstyp(8) can detect exFAT filesystems"
67 bzcat $(atf_get_srcdir)/dfr-01-xfat.img.bz2 > exfat.img
68 atf_check -s exit:0 -o inline:"exfat\n" fstyp -u exfat.img
71 atf_test_case exfat_label
73 atf_set "descr" "fstyp(8) can read exFAT labels"
76 bzcat $(atf_get_srcdir)/dfr-01-xfat.img.bz2 > exfat.img
77 atf_check -s exit:0 -o inline:"exfat exFat\n" fstyp -u -l exfat.img
82 atf_set "descr" "fstyp(8) should fail on an empty file"
85 atf_check -s exit:0 touch empty
86 atf_check -s exit:1 -e match:"filesystem not recognized" fstyp empty
91 atf_set "descr" "fstyp(8) can detect ext2 filesystems"
94 bzcat $(atf_get_srcdir)/ext2.img.bz2 > ext2.img
95 atf_check -s exit:0 -o inline:"ext2fs\n" fstyp ext2.img
96 atf_check -s exit:0 -o inline:"ext2fs\n" fstyp -l ext2.img
101 atf_set "descr" "fstyp(8) can detect ext3 filesystems"
104 bzcat $(atf_get_srcdir)/ext3.img.bz2 > ext3.img
105 atf_check -s exit:0 -o inline:"ext2fs\n" fstyp ext3.img
106 atf_check -s exit:0 -o inline:"ext2fs\n" fstyp -l ext3.img
111 atf_set "descr" "fstyp(8) can detect ext4 filesystems"
114 bzcat $(atf_get_srcdir)/ext4.img.bz2 > ext4.img
115 atf_check -s exit:0 -o inline:"ext2fs\n" fstyp ext4.img
116 atf_check -s exit:0 -o inline:"ext2fs\n" fstyp -l ext4.img
119 atf_test_case ext4_label
121 atf_set "descr" "fstyp(8) can read the label on an ext4 filesystem"
124 bzcat $(atf_get_srcdir)/ext4_with_label.img.bz2 > ext4_with_label.img
125 atf_check -s exit:0 -o inline:"ext2fs foo\n" fstyp -l ext4_with_label.img
130 atf_set "descr" "fstyp(8) can detect FAT12 filesystems"
133 atf_check -s exit:0 truncate -s 64m msdos.img
134 atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 12 ./msdos.img
135 atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img
136 atf_check -s exit:0 -o inline:"msdosfs\n" fstyp -l msdos.img
141 atf_set "descr" "fstyp(8) can detect FAT16 filesystems"
144 atf_check -s exit:0 truncate -s 64m msdos.img
145 atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 16 ./msdos.img
146 atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img
147 atf_check -s exit:0 -o inline:"msdosfs\n" fstyp -l msdos.img
152 atf_set "descr" "fstyp(8) can detect FAT32 filesystems"
155 atf_check -s exit:0 truncate -s 64m msdos.img
156 atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 32 -c 1 \
158 atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img
159 atf_check -s exit:0 -o inline:"msdosfs\n" fstyp -l msdos.img
162 atf_test_case fat32_label
164 atf_set "descr" "fstyp(8) can read the label on an msdos filesystem"
167 atf_check -s exit:0 truncate -s 64m msdos.img
168 atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 32 -L Foo -c 1 \
170 atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img
171 # Note: msdos labels are always upper case
172 atf_check -s exit:0 -o inline:"msdosfs FOO\n" fstyp -l msdos.img
177 atf_set "descr" "fstyp(8) can detect ntfs filesystems"
180 bzcat $(atf_get_srcdir)/ntfs.img.bz2 > ntfs.img
181 atf_check -s exit:0 -o inline:"ntfs\n" fstyp ntfs.img
182 atf_check -s exit:0 -o inline:"ntfs\n" fstyp -l ntfs.img
185 atf_test_case ntfs_with_label
186 ntfs_with_label_head() {
187 atf_set "descr" "fstyp(8) can read labels on ntfs filesystems"
189 ntfs_with_label_body() {
190 bzcat $(atf_get_srcdir)/ntfs_with_label.img.bz2 > ntfs_with_label.img
191 atf_check -s exit:0 -o inline:"ntfs\n" fstyp ntfs_with_label.img
192 atf_check -s exit:0 -o inline:"ntfs Foo\n" fstyp -l ntfs_with_label.img
197 atf_set "descr" "fstyp(8) should detect UFS version 1 filesystems"
200 atf_check -s exit:0 mkdir dir
201 atf_check -s exit:0 -o ignore makefs -Z -s 64m ufs.img dir
202 atf_check -s exit:0 -o inline:"ufs\n" fstyp ufs.img
203 atf_check -s exit:0 -o inline:"ufs\n" fstyp -l ufs.img
208 atf_set "descr" "fstyp(8) should detect UFS version 2 filesystems"
211 atf_check -s exit:0 mkdir dir
212 atf_check -s exit:0 -o ignore makefs -o version=2 -Z -s 64m ufs.img dir
213 atf_check -s exit:0 -o inline:"ufs\n" fstyp ufs.img
214 atf_check -s exit:0 -o inline:"ufs\n" fstyp -l ufs.img
217 atf_test_case ufs2_label
219 atf_set "descr" "fstyp(8) can read the label on a UFS v2 filesystem"
222 atf_check -s exit:0 mkdir dir
223 atf_check -s exit:0 -o ignore makefs -o version=2,label="foo" -Z -s 64m ufs.img dir
224 atf_check -s exit:0 -o inline:"ufs foo\n" fstyp -l ufs.img
227 atf_test_case ufs_on_device cleanup
228 ufs_on_device_head() {
229 atf_set "descr" "fstyp(8) should work on device nodes"
230 atf_set "require.user" "root"
232 ufs_on_device_body() {
233 mdconfig -a -t swap -s 64m > mdname
235 if [ -z "$md" ]; then
236 atf_fail "Failed to create md(4) device"
238 atf_check -s exit:0 -o ignore newfs -L foo /dev/$md
239 atf_check -s exit:0 -o inline:"ufs\n" fstyp /dev/$md
240 atf_check -s exit:0 -o inline:"ufs foo\n" fstyp -l /dev/$md
242 ufs_on_device_cleanup() {
244 if [ -n "$md" ]; then
251 atf_set "descr" "fstyp(8) should fail on a zero-filled file"
254 atf_check -s exit:0 truncate -s 256m zeros
255 atf_check -s exit:1 -e match:"filesystem not recognized" fstyp zeros
259 atf_init_test_cases() {
260 atf_add_test_case cd9660
261 atf_add_test_case cd9660_label
262 atf_add_test_case dir
263 atf_add_test_case empty
264 atf_add_test_case exfat
265 atf_add_test_case exfat_label
266 atf_add_test_case ext2
267 atf_add_test_case ext3
268 atf_add_test_case ext4
269 atf_add_test_case ext4_label
270 atf_add_test_case fat12
271 atf_add_test_case fat16
272 atf_add_test_case fat32
273 atf_add_test_case fat32_label
274 atf_add_test_case ntfs
275 atf_add_test_case ntfs_with_label
276 atf_add_test_case ufs1
277 atf_add_test_case ufs2
278 atf_add_test_case ufs2_label
279 atf_add_test_case ufs_on_device
280 atf_add_test_case zeros