summaryrefslogtreecommitdiff
path: root/tests/xfs/019
blob: f42b62bb20c0a48b9cd499ac181ead59d50435a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
#
# FS QA Test No. 019
#
# mkfs protofile test
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"

here=`pwd`
tmp=/tmp/$$
seqfull="$seqres.full"
status=1	# failure is the default!
# get standard environment, filters and checks
. ./common/rc
. ./common/filter

_cleanup()
{
    echo "*** unmount"
    _scratch_unmount 2>/dev/null
    rm -f $tmp.*
}
trap "_cleanup; exit \$status" 0 1 2 3 15

_full()
{
    echo ""            >>$seqfull
    echo "*** $* ***"  >>$seqfull
    echo ""            >>$seqfull
}

_filter_stat()
{
    sed '
        /^Access:/d;
        /^Modify:/d;
        /^Change:/d;
        s/Device: *[0-9][0-9]*,[0-9][0-9]*/Device: <DEVICE>/;
        s/Inode: *[0-9][0-9]*/Inode: <INODE>/;
        s/Size: *[0-9][0-9]* *Filetype: Dir/Size: <DSIZE> Filetype: Dir/;
    ' | tr -s ' '
}

# real QA test starts here
_supported_fs xfs
_supported_os Linux

_require_scratch

protofile=$tmp.proto
tempfile=$tmp.file

echo fish >$tempfile
$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2 

cat >$protofile <<EOF
DUMMY1
0 0
: root directory
d--777 3 1
: a directory
directory d--755 3 1 
file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0 ---755 3 1 $tempfile
file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1 ---755 3 1 $tempfile
file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2 ---755 3 1 $tempfile
file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3 ---755 3 1 $tempfile
file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4 ---755 3 1 $tempfile
$
: back in the root
setuid -u-666 0 0 $tempfile
setgid --g666 0 0 $tempfile
setugid -ug666 0 0 $tempfile
block_device b--012 3 1 161 162 
char_device c--345 3 1 177 178
pipe p--670 0 0
symlink l--123 0 0 bigfile
: a file we actually read
bigfile ---666 3 0 $tempfile.2
: done
$
EOF

if [ $? -ne 0 ]
then
    _fail "failed to create test protofile"
fi

_verify_fs()
{
	echo "*** create FS version $1"
	VERSION="-n version=$1"

	rm -f $seqfull
	_scratch_unmount >/dev/null 2>&1

	_full "mkfs"
	_scratch_mkfs_xfs $VERSION -p $protofile >>$seqfull 2>&1 \
		|| _fail "mkfs failed"

	echo "*** check FS"
	_check_scratch_fs

	echo "*** mount FS"
	_full " mount"
	_try_scratch_mount >>$seqfull 2>&1 \
		|| _fail "mount failed"

	echo "*** verify FS"
	(cd $SCRATCH_MNT ; find . | LC_COLLATE=POSIX sort \
		| grep -v ".use_space" \
		| xargs $here/src/lstat64 | _filter_stat)
	diff -q $SCRATCH_MNT/bigfile $tempfile.2 \
		|| _fail "bigfile corrupted"

	echo "*** unmount FS"
	_full "umount"
	_scratch_unmount >>$seqfull 2>&1 \
		|| _fail "umount failed"
}

#_verify_fs 1
_verify_fs 2

echo "*** done"
rm $seqfull
status=0
exit