f42b62bb20c0a48b9cd499ac181ead59d50435a3
[xfstests-dev.git] / tests / xfs / 019
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
4 #
5 # FS QA Test No. 019
6 #
7 # mkfs protofile test
8 #
9 seq=`basename $0`
10 seqres=$RESULT_DIR/$seq
11 echo "QA output created by $seq"
12
13 here=`pwd`
14 tmp=/tmp/$$
15 seqfull="$seqres.full"
16 status=1        # failure is the default!
17 # get standard environment, filters and checks
18 . ./common/rc
19 . ./common/filter
20
21 _cleanup()
22 {
23     echo "*** unmount"
24     _scratch_unmount 2>/dev/null
25     rm -f $tmp.*
26 }
27 trap "_cleanup; exit \$status" 0 1 2 3 15
28
29 _full()
30 {
31     echo ""            >>$seqfull
32     echo "*** $* ***"  >>$seqfull
33     echo ""            >>$seqfull
34 }
35
36 _filter_stat()
37 {
38     sed '
39         /^Access:/d;
40         /^Modify:/d;
41         /^Change:/d;
42         s/Device: *[0-9][0-9]*,[0-9][0-9]*/Device: <DEVICE>/;
43         s/Inode: *[0-9][0-9]*/Inode: <INODE>/;
44         s/Size: *[0-9][0-9]* *Filetype: Dir/Size: <DSIZE> Filetype: Dir/;
45     ' | tr -s ' '
46 }
47
48 # real QA test starts here
49 _supported_fs xfs
50 _supported_os Linux
51
52 _require_scratch
53
54 protofile=$tmp.proto
55 tempfile=$tmp.file
56
57 echo fish >$tempfile
58 $here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2 
59
60 cat >$protofile <<EOF
61 DUMMY1
62 0 0
63 : root directory
64 d--777 3 1
65 : a directory
66 directory d--755 3 1 
67 file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0 ---755 3 1 $tempfile
68 file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1 ---755 3 1 $tempfile
69 file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2 ---755 3 1 $tempfile
70 file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3 ---755 3 1 $tempfile
71 file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4 ---755 3 1 $tempfile
72 $
73 : back in the root
74 setuid -u-666 0 0 $tempfile
75 setgid --g666 0 0 $tempfile
76 setugid -ug666 0 0 $tempfile
77 block_device b--012 3 1 161 162 
78 char_device c--345 3 1 177 178
79 pipe p--670 0 0
80 symlink l--123 0 0 bigfile
81 : a file we actually read
82 bigfile ---666 3 0 $tempfile.2
83 : done
84 $
85 EOF
86
87 if [ $? -ne 0 ]
88 then
89     _fail "failed to create test protofile"
90 fi
91
92 _verify_fs()
93 {
94         echo "*** create FS version $1"
95         VERSION="-n version=$1"
96
97         rm -f $seqfull
98         _scratch_unmount >/dev/null 2>&1
99
100         _full "mkfs"
101         _scratch_mkfs_xfs $VERSION -p $protofile >>$seqfull 2>&1 \
102                 || _fail "mkfs failed"
103
104         echo "*** check FS"
105         _check_scratch_fs
106
107         echo "*** mount FS"
108         _full " mount"
109         _try_scratch_mount >>$seqfull 2>&1 \
110                 || _fail "mount failed"
111
112         echo "*** verify FS"
113         (cd $SCRATCH_MNT ; find . | LC_COLLATE=POSIX sort \
114                 | grep -v ".use_space" \
115                 | xargs $here/src/lstat64 | _filter_stat)
116         diff -q $SCRATCH_MNT/bigfile $tempfile.2 \
117                 || _fail "bigfile corrupted"
118
119         echo "*** unmount FS"
120         _full "umount"
121         _scratch_unmount >>$seqfull 2>&1 \
122                 || _fail "umount failed"
123 }
124
125 #_verify_fs 1
126 _verify_fs 2
127
128 echo "*** done"
129 rm $seqfull
130 status=0
131 exit