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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2017 Red Hat, Inc. All Rights Reserved.
#
# FS QA Test 423
#
# Test the statx system call
#
. ./common/preamble
_begin_fstest auto quick
# Override the default cleanup function.
_cleanup()
{
cd /
rm -f $tmp.*
rm -rf $TEST_DIR/$seq-*
}
# Import common functions.
. ./common/filter
# real QA test starts here
# Modify as appropriate.
_supported_fs generic
_require_test
_require_test_program "stat_test"
_require_test_program "af_unix"
_require_statx
_require_symlinks
_require_mknod
function check_stat () {
$here/src/stat_test $* || echo stat_test failed
}
function create_af_unix () {
$here/src/af_unix $* || echo af_unix failed
}
###############################################################################
#
# Check statx'ing of various types of object
#
# After each object is created, barring the first, we check that the creation
# time and the change time of the new object as same as or later than the
# corresponding timestamps on the previous object created.
#
###############################################################################
echo "Test statx on a fifo"
mkfifo -m 0600 $TEST_DIR/$seq-fifo
check_stat $TEST_DIR/$seq-fifo \
ts_order \
stx_type=fifo \
stx_mode=0600 \
stx_rdev_major=0 \
stx_rdev_minor=0 \
stx_nlink=1
echo "Test statx on a chardev"
mknod -m 0600 $TEST_DIR/$seq-null c 1 3
check_stat $TEST_DIR/$seq-null \
ts_order \
ref=$TEST_DIR/$seq-fifo \
ts=B,b \
ts=M,m \
stx_type=char \
stx_mode=0600 \
stx_rdev_major=1 \
stx_rdev_minor=3 \
stx_nlink=1
echo "Test statx on a directory"
mkdir $TEST_DIR/$seq-dir
check_stat $TEST_DIR/$seq-dir \
ts_order \
ref=$TEST_DIR/$seq-null \
ts=B,b \
ts=M,m \
stx_type=dir \
stx_mode=0755 \
stx_rdev_major=0 \
stx_rdev_minor=0
echo "Test statx on a blockdev"
mknod -m 0600 $TEST_DIR/$seq-loopy b 7 123
check_stat $TEST_DIR/$seq-loopy \
ts_order \
ref=$TEST_DIR/$seq-dir \
ts=B,b \
ts=M,m \
stx_type=block \
stx_mode=0600 \
stx_rdev_major=7 \
stx_rdev_minor=123 \
stx_nlink=1
echo "Test statx on a file"
dd if=/dev/zero of=$TEST_DIR/$seq-file bs=1024 count=20
check_stat $TEST_DIR/$seq-file \
ts_order \
ref=$TEST_DIR/$seq-loopy \
ts=B,b \
ts=M,m \
stx_type=file \
stx_size=20480 \
stx_rdev_major=0 \
stx_rdev_minor=0 \
stx_nlink=1
echo "Test statx on a symlink"
target=$TEST_DIR/$seq-nowhere
ln -s $target $TEST_DIR/$seq-symlink
check_stat $TEST_DIR/$seq-symlink \
ts_order \
ref=$TEST_DIR/$seq-file \
ts=B,b \
ts=M,m \
stx_type=sym \
stx_size=${#target} \
stx_rdev_major=0 \
stx_rdev_minor=0 \
stx_nlink=1
echo "Test statx on an AF_UNIX socket"
create_af_unix $TEST_DIR/$seq-sock
check_stat $TEST_DIR/$seq-sock \
ts_order \
ref=$TEST_DIR/$seq-symlink \
ts=B,b \
ts=M,m \
stx_type=sock \
stx_rdev_major=0 \
stx_rdev_minor=0 \
stx_nlink=1
#
# Test hard link creation. Make sure that the file's ctime is now same as or
# later than the creation time of the socket, but that the file's creation time
# still lies somewhere between those of the directory and the socket.
#
echo "Test a hard link to a file"
ln $TEST_DIR/$seq-file $TEST_DIR/$seq-link
check_stat $TEST_DIR/$seq-link \
ref=$TEST_DIR/$seq-dir \
ts=B,b \
ref=$TEST_DIR/$seq-sock \
ts=b,B \
ts=B,c \
ts=C,c \
ref=$TEST_DIR/$seq-file \
cmp_ref \
stx_nlink=2
# Done. We leave the success determination to the output comparator.
status=0
exit
|