]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.sbin/fstyp/tests/fstyp_test.sh
MFC r345034:
[FreeBSD/FreeBSD.git] / usr.sbin / fstyp / tests / fstyp_test.sh
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
30 atf_test_case cd9660
31 cd9660_head() {
32         atf_set "descr" "fstyp(8) should detect cd9660 filesystems"
33 }
34 cd9660_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
41 atf_test_case cd9660_label
42 cd9660_label_head() {
43         atf_set "descr" "fstyp(8) can read the label on a cd9660 filesystem"
44 }
45 cd9660_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
53 atf_test_case dir
54 dir_head() {
55         atf_set "descr" "fstyp(8) should fail on a directory"
56 }
57 dir_body() {
58         atf_check -s exit:0 mkdir dir
59         atf_check -s exit:1 -e match:"not a disk" fstyp dir
60 }
61
62 atf_test_case exfat
63 exfat_head() {
64         atf_set "descr" "fstyp(8) can detect exFAT filesystems"
65 }
66 exfat_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
71 atf_test_case empty
72 empty_head() {
73         atf_set "descr" "fstyp(8) should fail on an empty file"
74 }
75 empty_body() {
76         atf_check -s exit:0 touch empty
77         atf_check -s exit:1 -e match:"filesystem not recognized" fstyp empty
78 }
79
80 atf_test_case ext2
81 ext2_head() {
82         atf_set "descr" "fstyp(8) can detect ext2 filesystems"
83 }
84 ext2_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
90 atf_test_case ext3
91 ext3_head() {
92         atf_set "descr" "fstyp(8) can detect ext3 filesystems"
93 }
94 ext3_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
100 atf_test_case ext4
101 ext4_head() {
102         atf_set "descr" "fstyp(8) can detect ext4 filesystems"
103 }
104 ext4_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
110 atf_test_case ext4_label
111 ext4_label_head() {
112         atf_set "descr" "fstyp(8) can read the label on an ext4 filesystem"
113 }
114 ext4_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
119 atf_test_case fat12
120 fat12_head() {
121         atf_set "descr" "fstyp(8) can detect FAT12 filesystems"
122 }
123 fat12_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
130 atf_test_case fat16
131 fat16_head() {
132         atf_set "descr" "fstyp(8) can detect FAT16 filesystems"
133 }
134 fat16_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
141 atf_test_case fat32
142 fat32_head() {
143         atf_set "descr" "fstyp(8) can detect FAT32 filesystems"
144 }
145 fat32_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
153 atf_test_case fat32_label
154 fat32_label_head() {
155         atf_set "descr" "fstyp(8) can read the label on an msdos filesystem"
156 }
157 fat32_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
166 atf_test_case ntfs
167 ntfs_head() {
168         atf_set "descr" "fstyp(8) can detect ntfs filesystems"
169 }
170 ntfs_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
176 atf_test_case ntfs_with_label
177 ntfs_with_label_head() {
178         atf_set "descr" "fstyp(8) can read labels on ntfs filesystems"
179 }
180 ntfs_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
186 atf_test_case ufs1
187 ufs1_head() {
188         atf_set "descr" "fstyp(8) should detect UFS version 1 filesystems"
189 }
190 ufs1_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
197 atf_test_case ufs2
198 ufs2_head() {
199         atf_set "descr" "fstyp(8) should detect UFS version 2 filesystems"
200 }
201 ufs2_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
208 atf_test_case ufs2_label
209 ufs2_label_head() {
210         atf_set "descr" "fstyp(8) can read the label on a UFS v2 filesystem"
211 }
212 ufs2_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
218 atf_test_case ufs_on_device cleanup
219 ufs_on_device_head() {
220         atf_set "descr" "fstyp(8) should work on device nodes"
221         atf_set "require.user" "root"
222 }
223 ufs_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 }
233 ufs_on_device_cleanup() {
234         md=$(cat mdname)
235         if [ -n "$md" ]; then
236                 mdconfig -d -u "$md"
237         fi
238 }
239
240 atf_test_case zeros
241 zeros_head() {
242         atf_set "descr" "fstyp(8) should fail on a zero-filled file"
243 }
244 zeros_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
250 atf_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 }