Whamcloud - gitweb
LU-8882 osd: use bydnode methods to access DMU
[fs/lustre-release.git] / lustre / tests / posix.sh
1 #!/bin/bash
2 #set -vx
3 set -e
4
5 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
6 . $LUSTRE/tests/test-framework.sh
7 init_test_env $@
8 . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
9 init_logging
10
11 POSIX_DIR=${POSIX_DIR:-"$LUSTRE/tests/posix"}
12 POSIX_SRC=${POSIX_SRC:-"/usr/src/posix"}
13 BASELINE_FS=${BASELINE_FS:-"ext4"}
14
15 # SLES does not support read-write access to an ext4 file system by default
16 [[ -e /etc/SuSE-release ]] && BASELINE_FS=ext3
17
18 if [[ $(facet_fstype $SINGLEMDS) = zfs ]]; then
19         BASELINE_FS=zfs
20         ! which $ZFS $ZPOOL >/dev/null 2>&1 &&
21                 skip_env "need $ZFS and $ZPOOL commands" && exit 0
22
23         POSIX_ZPOOL=$FSNAME-posix
24         POSIX_ZFS=$POSIX_ZPOOL/${POSIX_ZPOOL##$FSNAME-}
25 fi
26
27 check_and_setup_lustre
28 build_test_filter
29
30 cleanup_loop_dev() {
31     local mnt=$1
32     local dev=$2
33     local file=$3
34
35     # if we only have 1 arg, we will search for dev
36     if [[ $# = 1 ]]; then
37         dev=$(losetup -a | grep "$mnt" | cut -d: -f1)
38         [[ -n $dev ]] && losetup -d $dev
39     else # we need all args
40         [[ -z $mnt ]] || [[ -z $dev ]] || [[ -z $file ]] &&
41             error "Can't cleanup loop device"
42         umount -f $mnt
43         losetup -d $dev && rm -rf $mnt
44         rm -f $file
45     fi
46
47         [[ $BASELINE_FS != zfs ]] || destroy_zpool client $POSIX_ZPOOL
48 }
49
50 setup_loop_dev() {
51         local mnt=$1
52         local dev=$2
53         local file=$3
54         local rc=0
55
56         echo "Make a loop file system with $file on $dev"
57         dd if=/dev/zero of=$file bs=1024k count=500 > /dev/null
58         if ! losetup $dev $file; then
59                 rc=$?
60                 echo "can't set up $dev for $file"
61                 return $rc
62         fi
63
64         if [[ $BASELINE_FS = zfs ]]; then
65                 create_zpool client $POSIX_ZPOOL $dev || return ${PIPESTATUS[0]}
66                 create_zfs client $POSIX_ZFS || return ${PIPESTATUS[0]}
67                 dev=$POSIX_ZFS
68
69         elif ! eval mkfs.$BASELINE_FS $dev; then
70                 rc=$?
71                 echo "mkfs.$BASELINE_FS on $dev failed"
72                 return $rc
73         fi
74         mkdir -p $mnt
75         if ! mount -t $BASELINE_FS $dev $mnt; then
76                 rc=$?
77                 echo "mount $BASELINE_FS failed"
78                 return $rc
79         fi
80         echo
81         return $rc
82 }
83
84 test_1() {
85         local allnodes="$(comma_list $(nodes_list))"
86         local tfile="$TMP/$BASELINE_FS-file"
87         local mntpnt=$POSIX_SRC/$BASELINE_FS
88         local loopbase
89         local loopdev
90         local rc=0
91
92         # We start at loop1 because posix build uses loop0
93         [ -b /dev/loop/1 ] && loopbase=/dev/loop/
94         [ -b /dev/loop1 ] && loopbase=/dev/loop
95         if [ -z "$loopbase" ]; then
96                 # there is no /dev/loop by default on EL7, LU-6707.
97                 load_module loop max_loop=8 || error "load loop module failed"
98                 loopbase=/dev/loop
99         fi
100
101         for i in $(seq 1 7); do
102                 losetup $loopbase$i > /dev/null 2>&1 && continue || true
103                 loopdev=$loopbase$i
104                 break
105         done
106
107         [ -z "$loopdev" ] && error "Can not find loop device"
108
109         if ! setup_loop_dev $mntpnt $loopdev $tfile; then
110                 cleanup_loop_dev "$mntpnt" "$loopdev" "$tfile"
111                 error "Setup loop device failed"
112         fi
113
114         # copy the source over to ext mount point
115         if ! cp -af ${POSIX_SRC}/*.* $mntpnt; then
116                 cleanup_loop_dev "$mntpnt" "$loopdev" "$tfile"
117                 error "Copy POSIX test suite failed"
118         fi
119         export POSIX_SRC=$mntpnt
120         . $POSIX_DIR/posix.cfg
121
122         setup_posix_users $allnodes
123         if ! setup_posix; then
124                 delete_posix_users $allnodes
125                 cleanup_loop_dev "$POSIX_SRC"
126                 cleanup_loop_dev "$mntpnt" "$loopdev" "$tfile"
127                 error "Setup POSIX test suite failed"
128         fi
129
130         log "Run POSIX test against lustre filesystem"
131         run_posix $MOUNT compare || \
132                 error_noexit "Run POSIX testsuite on $MOUNT failed"
133
134         [[ -d "$MOUNT/TESTROOT" ]] && rm -fr $MOUNT/TESTROOT
135         delete_posix_users $allnodes
136         cleanup_loop_dev "$POSIX_SRC"
137         cleanup_loop_dev "$mntpnt" "$loopdev" "$tfile"
138 }
139 run_test 1 "install, build, run posix on $BASELINE_FS and lustre, then compare"
140
141 complete $SECONDS
142 check_and_cleanup_lustre
143 exit_status