xref: /freebsd/usr.sbin/fstyp/tests/fstyp_test.sh (revision 6683132d54bd6d589889e43dabdc53d35e38a028)
1#!/bin/sh
2#
3# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
4#
5# Copyright (c) 2015 Alan Somers
6#
7# Redistribution and use in source and binary forms, with or without
8# modification, are permitted provided that the following conditions
9# are met:
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.
15#
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
26# SUCH DAMAGE.
27
28# $FreeBSD$
29
30atf_test_case cd9660
31cd9660_head() {
32	atf_set "descr" "fstyp(8) should detect cd9660 filesystems"
33}
34cd9660_body() {
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
39}
40
41atf_test_case cd9660_label
42cd9660_label_head() {
43	atf_set "descr" "fstyp(8) can read the label on a cd9660 filesystem"
44}
45cd9660_label_body() {
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
51}
52
53atf_test_case dir
54dir_head() {
55	atf_set "descr" "fstyp(8) should fail on a directory"
56}
57dir_body() {
58	atf_check -s exit:0 mkdir dir
59	atf_check -s exit:1 -e match:"not a disk" fstyp dir
60}
61
62atf_test_case exfat
63exfat_head() {
64	atf_set "descr" "fstyp(8) can detect exFAT filesystems"
65}
66exfat_body() {
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
69}
70
71atf_test_case empty
72empty_head() {
73	atf_set "descr" "fstyp(8) should fail on an empty file"
74}
75empty_body() {
76	atf_check -s exit:0 touch empty
77	atf_check -s exit:1 -e match:"filesystem not recognized" fstyp empty
78}
79
80atf_test_case ext2
81ext2_head() {
82	atf_set "descr" "fstyp(8) can detect ext2 filesystems"
83}
84ext2_body() {
85	bzcat $(atf_get_srcdir)/ext2.img.bz2 > ext2.img
86	atf_check -s exit:0 -o inline:"ext2fs\n" fstyp ext2.img
87	atf_check -s exit:0 -o inline:"ext2fs\n" fstyp -l ext2.img
88}
89
90atf_test_case ext3
91ext3_head() {
92	atf_set "descr" "fstyp(8) can detect ext3 filesystems"
93}
94ext3_body() {
95	bzcat $(atf_get_srcdir)/ext3.img.bz2 > ext3.img
96	atf_check -s exit:0 -o inline:"ext2fs\n" fstyp ext3.img
97	atf_check -s exit:0 -o inline:"ext2fs\n" fstyp -l ext3.img
98}
99
100atf_test_case ext4
101ext4_head() {
102	atf_set "descr" "fstyp(8) can detect ext4 filesystems"
103}
104ext4_body() {
105	bzcat $(atf_get_srcdir)/ext4.img.bz2 > ext4.img
106	atf_check -s exit:0 -o inline:"ext2fs\n" fstyp ext4.img
107	atf_check -s exit:0 -o inline:"ext2fs\n" fstyp -l ext4.img
108}
109
110atf_test_case ext4_label
111ext4_label_head() {
112	atf_set "descr" "fstyp(8) can read the label on an ext4 filesystem"
113}
114ext4_label_body() {
115	bzcat $(atf_get_srcdir)/ext4_with_label.img.bz2 > ext4_with_label.img
116	atf_check -s exit:0 -o inline:"ext2fs foo\n" fstyp -l ext4_with_label.img
117}
118
119atf_test_case fat12
120fat12_head() {
121	atf_set "descr" "fstyp(8) can detect FAT12 filesystems"
122}
123fat12_body() {
124	atf_check -s exit:0 truncate -s 64m msdos.img
125	atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 12 ./msdos.img
126	atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img
127	atf_check -s exit:0 -o inline:"msdosfs\n" fstyp -l msdos.img
128}
129
130atf_test_case fat16
131fat16_head() {
132	atf_set "descr" "fstyp(8) can detect FAT16 filesystems"
133}
134fat16_body() {
135	atf_check -s exit:0 truncate -s 64m msdos.img
136	atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 16 ./msdos.img
137	atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img
138	atf_check -s exit:0 -o inline:"msdosfs\n" fstyp -l msdos.img
139}
140
141atf_test_case fat32
142fat32_head() {
143	atf_set "descr" "fstyp(8) can detect FAT32 filesystems"
144}
145fat32_body() {
146	atf_check -s exit:0 truncate -s 64m msdos.img
147	atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 32 -c 1 \
148		./msdos.img
149	atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img
150	atf_check -s exit:0 -o inline:"msdosfs\n" fstyp -l msdos.img
151}
152
153atf_test_case fat32_label
154fat32_label_head() {
155	atf_set "descr" "fstyp(8) can read the label on an msdos filesystem"
156}
157fat32_label_body() {
158	atf_check -s exit:0 truncate -s 64m msdos.img
159	atf_check -s exit:0 -o ignore -e ignore newfs_msdos -F 32 -L Foo -c 1 \
160		./msdos.img
161	atf_check -s exit:0 -o inline:"msdosfs\n" fstyp msdos.img
162	# Note: msdos labels are always upper case
163	atf_check -s exit:0 -o inline:"msdosfs FOO\n" fstyp -l msdos.img
164}
165
166atf_test_case ntfs
167ntfs_head() {
168	atf_set "descr" "fstyp(8) can detect ntfs filesystems"
169}
170ntfs_body() {
171	bzcat $(atf_get_srcdir)/ntfs.img.bz2 > ntfs.img
172	atf_check -s exit:0 -o inline:"ntfs\n" fstyp ntfs.img
173	atf_check -s exit:0 -o inline:"ntfs\n" fstyp -l ntfs.img
174}
175
176atf_test_case ntfs_with_label
177ntfs_with_label_head() {
178	atf_set "descr" "fstyp(8) can read labels on ntfs filesystems"
179}
180ntfs_with_label_body() {
181	bzcat $(atf_get_srcdir)/ntfs_with_label.img.bz2 > ntfs_with_label.img
182	atf_check -s exit:0 -o inline:"ntfs\n" fstyp ntfs_with_label.img
183	atf_check -s exit:0 -o inline:"ntfs Foo\n" fstyp -l ntfs_with_label.img
184}
185
186atf_test_case ufs1
187ufs1_head() {
188	atf_set "descr" "fstyp(8) should detect UFS version 1 filesystems"
189}
190ufs1_body() {
191	atf_check -s exit:0 mkdir dir
192	atf_check -s exit:0 -o ignore makefs -Z -s 64m ufs.img dir
193	atf_check -s exit:0 -o inline:"ufs\n" fstyp ufs.img
194	atf_check -s exit:0 -o inline:"ufs\n" fstyp -l ufs.img
195}
196
197atf_test_case ufs2
198ufs2_head() {
199	atf_set "descr" "fstyp(8) should detect UFS version 2 filesystems"
200}
201ufs2_body() {
202	atf_check -s exit:0 mkdir dir
203	atf_check -s exit:0 -o ignore makefs -o version=2 -Z -s 64m ufs.img dir
204	atf_check -s exit:0 -o inline:"ufs\n" fstyp ufs.img
205	atf_check -s exit:0 -o inline:"ufs\n" fstyp -l ufs.img
206}
207
208atf_test_case ufs2_label
209ufs2_label_head() {
210	atf_set "descr" "fstyp(8) can read the label on a UFS v2 filesystem"
211}
212ufs2_label_body() {
213	atf_check -s exit:0 mkdir dir
214	atf_check -s exit:0 -o ignore makefs -o version=2,label="foo" -Z -s 64m ufs.img dir
215	atf_check -s exit:0 -o inline:"ufs foo\n" fstyp -l ufs.img
216}
217
218atf_test_case ufs_on_device cleanup
219ufs_on_device_head() {
220	atf_set "descr" "fstyp(8) should work on device nodes"
221	atf_set "require.user" "root"
222}
223ufs_on_device_body() {
224	mdconfig -a -t swap -s 64m > mdname
225	md=$(cat mdname)
226	if [ -z "$md" ]; then
227		atf_fail "Failed to create md(4) device"
228	fi
229	atf_check -s exit:0 -o ignore newfs -L foo /dev/$md
230	atf_check -s exit:0 -o inline:"ufs\n" fstyp /dev/$md
231	atf_check -s exit:0 -o inline:"ufs foo\n" fstyp -l /dev/$md
232}
233ufs_on_device_cleanup() {
234	md=$(cat mdname)
235	if [ -n "$md" ]; then
236		mdconfig -d -u "$md"
237	fi
238}
239
240atf_test_case zeros
241zeros_head() {
242	atf_set "descr" "fstyp(8) should fail on a zero-filled file"
243}
244zeros_body() {
245	atf_check -s exit:0 truncate -s 256m zeros
246	atf_check -s exit:1 -e match:"filesystem not recognized" fstyp zeros
247}
248
249
250atf_init_test_cases() {
251	atf_add_test_case cd9660
252	atf_add_test_case cd9660_label
253	atf_add_test_case dir
254	atf_add_test_case empty
255	atf_add_test_case exfat
256	atf_add_test_case ext2
257	atf_add_test_case ext3
258	atf_add_test_case ext4
259	atf_add_test_case ext4_label
260	atf_add_test_case fat12
261	atf_add_test_case fat16
262	atf_add_test_case fat32
263	atf_add_test_case fat32_label
264	atf_add_test_case ntfs
265	atf_add_test_case ntfs_with_label
266	atf_add_test_case ufs1
267	atf_add_test_case ufs2
268	atf_add_test_case ufs2_label
269	atf_add_test_case ufs_on_device
270	atf_add_test_case zeros
271}
272