summaryrefslogtreecommitdiff
path: root/tests/xfs/019
blob: 790a6821a32b8f93e637ecb33bb143b3fdabb500 (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
132
133
134
135
#! /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
#
. ./common/preamble
_begin_fstest mkfs auto quick

seqfull="$seqres.full"
rm -f $seqfull
# Import common functions.
. ./common/filter

# Override the default cleanup function.
_cleanup()
{
    echo "*** unmount"
    _scratch_unmount 2>/dev/null
    rm -f $tmp.*
}

_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

_require_scratch

# mkfs cannot create a filesystem with protofiles if realtime is enabled, so
# don't run this test if the rtinherit is anywhere in the mkfs options.
echo "$MKFS_OPTIONS" | grep -q "rtinherit" && \
	_notrun "Cannot mkfs with a protofile and -d rtinherit."

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
directory_setgid d-g755 3 2
file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_5 ---755 3 1 $tempfile
$
: back in the root
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"

	_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"
	diff -q $SCRATCH_MNT/symlink $tempfile.2 \
		|| _fail "symlink broken"

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

#_verify_fs 1
_verify_fs 2

echo "*** done"
status=0
exit