94a34b21a033ad8a7fc596109cc4298e1a1fb38a
[xfstests-dev.git] / 019
1 #! /bin/sh
2 # XFS QA Test No. 019
3 # $Id: 1.1 $
4 #
5 # mkfs protofile test
6 #
7 #-----------------------------------------------------------------------
8 # Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
9
10 # This program is free software; you can redistribute it and/or modify it
11 # under the terms of version 2 of the GNU General Public License as
12 # published by the Free Software Foundation.
13
14 # This program is distributed in the hope that it would be useful, but
15 # WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17
18 # Further, this software is distributed without any warranty that it is
19 # free of the rightful claim of any third person regarding infringement
20 # or the like.  Any license provided herein, whether implied or
21 # otherwise, applies only to this software file.  Patent licenses, if
22 # any, provided herein do not apply to combinations of this program with
23 # other software, or any other product whatsoever.
24
25 # You should have received a copy of the GNU General Public License along
26 # with this program; if not, write the Free Software Foundation, Inc., 59
27 # Temple Place - Suite 330, Boston MA 02111-1307, USA.
28
29 # Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
30 # Mountain View, CA  94043, or:
31
32 # http://www.sgi.com 
33
34 # For further information regarding this notice, see: 
35
36 # http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
37 #-----------------------------------------------------------------------
38 #
39 # creator
40 owner=dxm@sgi.com
41
42 seq=`basename $0`
43 echo "QA output created by $seq"
44
45 here=`pwd`
46 tmp=/tmp/$$
47 seqfull="$seq.full"
48 status=1        # failure is the default!
49 # get standard environment, filters and checks
50 . ./common.rc
51 . ./common.filter
52
53 _cleanup()
54 {
55     echo "*** unmount"
56     umount $SCRATCH_MNT 2>/dev/null
57     rm -f $tmp.*
58 }
59 trap "_cleanup; exit \$status" 0 1 2 3 15
60
61 _full()
62 {
63     echo ""            >>$seqfull      
64     echo "*** $* ***"  >>$seqfull
65     echo ""            >>$seqfull
66 }
67
68 _filter_stat()
69 {
70     sed '
71         /^Access:/d;
72         /^Modify:/d;
73         /^Change:/d;
74         s/Device: *[0-9][0-9]*,[0-9][0-9]*/Device: <DEVICE>/;
75         s/Inode: *[0-9][0-9]*/Inode: <INODE>/;
76         s/Size: *[0-9][0-9]* *Filetype: Dir/Size: <DSIZE> Filetype: Dir/;
77     ' | tr -s ' '
78 }
79
80 # real QA test starts here
81
82 _require_scratch
83
84 protofile=$tmp.proto
85 tempfile=$tmp.file
86
87 echo fish >$tempfile
88 $here/src/devzero -b 2048 -n 2 $tempfile.2 -c -v 44
89
90 cat >$protofile <<EOF
91 DUMMY1
92 0 0
93 : root directory
94 d--777 3 1
95 : a directory
96 directory d--755 3 1 
97 file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0 ---755 3 1 $tempfile
98 file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1 ---755 3 1 $tempfile
99 file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2 ---755 3 1 $tempfile
100 file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3 ---755 3 1 $tempfile
101 file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4 ---755 3 1 $tempfile
102 $
103 : back in the root
104 setuid -u-666 0 0 $tempfile
105 setgid --g666 0 0 $tempfile
106 setugid -ug666 0 0 $tempfile
107 block_device b--012 3 1 161 162 
108 char_device c--345 3 1 177 178
109 pipe p--670 0 0
110 symlink l--123 0 0 bigfile
111 : a file we actually read
112 bigfile ---666 3 0 $tempfile.2
113 : done
114 $
115 EOF
116
117 if [ $? -ne 0 ]
118 then
119     _fail "failed to create test protofile"
120 fi
121
122 _verify_fs()
123 {
124         echo "*** create FS version $1"
125         VERSION="-n version=$1"
126
127         rm -f $seqfull
128         umount $SCRATCH_DEV >/dev/null 2>&1
129
130         _full "mkfs"
131         mkfs_xfs $VERSION -p $protofile $SCRATCH_DEV >>$seqfull 2>&1 \
132                 || _fail "mount failed"
133
134         echo "*** check FS"
135         _check_fs $SCRATCH_DEV
136
137         echo "*** mount FS"
138         _full " mount"
139         mount -t xfs $SCRATCH_DEV $SCRATCH_MNT >>$seqfull 2>&1 \
140                 || _fail "mount failed"
141     
142         echo "*** verify FS"
143         (cd $SCRATCH_MNT ; find . | sort \
144                 | xargs $here/src/lstat64 | _filter_stat)
145         diff -q $SCRATCH_MNT/bigfile $tempfile.2 \
146                 || _fail "bigfile corrupted"
147     
148         echo "*** unmount FS"
149         _full "umount"
150         umount $SCRATCH_DEV >>$seqfull 2>&1 \
151                 || _fail "umount failed"
152             
153         echo "*** check FS"
154         _check_fs $SCRATCH_DEV
155 }
156
157 _verify_fs 1
158 _verify_fs 2
159
160 echo "*** done"
161 rm $seqfull
162 status=0
163 exit