Whamcloud - gitweb
b=24410 exit with error if NFSCLIENT is set, but no nfs export found
[fs/lustre-release.git] / lustre / tests / acceptance-small.sh
1 #!/bin/bash
2 # script which _must_ complete successfully (at minimum) before checkins to
3 # the CVS HEAD are allowed.
4 #set -vx
5 set -e
6
7 export TESTSUITE_LIST="RUNTESTS SANITY DBENCH BONNIE IOZONE FSX SANITYN LFSCK LIBLUSTRE RACER REPLAY_SINGLE CONF_SANITY RECOVERY_SMALL REPLAY_OST_SINGLE REPLAY_DUAL REPLAY_VBR INSANITY SANITY_QUOTA PERFORMANCE_SANITY LARGE_SCALE RECOVERY_MDS_SCALE RECOVERY_DOUBLE_SCALE RECOVERY_RANDOM_SCALE PARALLEL_SCALE METADATA_UPDATES OST_POOLS SANITY_BENCHMARK LNET_SELFTEST MMP OBDFILTER_SURVEY SGPDD_SURVEY"
8
9 if [ "$ACC_SM_ONLY" ]; then
10     for O in $TESTSUITE_LIST; do
11         export ${O}="no"
12     done
13     for O in $ACC_SM_ONLY; do
14         O=`echo ${O%.sh} | tr "-" "_"`
15         O=`echo $O | tr "[:lower:]" "[:upper:]"`
16         export ${O}="yes"
17     done
18 fi
19
20 LIBLUSTRETESTS=${LIBLUSTRETESTS:-../liblustre/tests}
21
22 RANTEST=""
23
24 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
25 . $LUSTRE/tests/test-framework.sh
26 init_test_env $@
27
28 SETUP=${SETUP:-setupall}
29 FORMAT=${FORMAT:-formatall}
30 CLEANUP=${CLEANUP:-stopall}
31
32 setup_if_needed() {
33     nfs_client_mode && return
34
35     local MOUNTED=$(mounted_lustre_filesystems)
36     if $(echo $MOUNTED | grep -w -q $MOUNT); then
37         check_config_clients $MOUNT
38         init_facets_vars
39         init_param_vars
40         return
41     fi
42
43     echo "Lustre is not mounted, trying to do setup SETUP=$SETUP ... "
44     [ "$REFORMAT" ] && $FORMAT
45     $SETUP
46
47     MOUNTED=$(mounted_lustre_filesystems)
48     if ! $(echo $MOUNTED | grep -w -q $MOUNT); then
49         echo "Lustre is not mounted after setup! SETUP=$SETUP"
50         exit 1
51     fi
52 }
53
54 find_in_path() {
55     target=$1
56     for dir in $(tr : " " <<< $PATH); do
57       if [ -e $dir/$target ]; then
58           echo "$dir/$target found in PATH"
59           return 0
60       fi
61     done
62     return 1
63 }
64
65 title() {
66     # update titlebar if stdin is attached to an xterm
67     if ${UPDATE_TITLEBAR:-false}; then
68         if tty -s; then
69             case $TERM in 
70                 xterm*)
71                     echo -ne "\033]2; acceptance-small: $* \007" >&0
72                     ;;
73             esac
74         fi
75     fi 
76     log "-----============= acceptance-small: "$*" ============----- `date`"
77     RANTEST=${RANTEST}$*", "
78 }
79
80 skip_remost() {
81         remote_ost_nodsh && log "SKIP: $1: remote OST with nodsh" && return 0
82         return 1
83 }
84
85 skip_remmds() {
86         remote_mds_nodsh && log "SKIP: $1: remote MDS with nodsh" && return 0
87         return 1
88 }
89
90 # cleanup the logs of all suites
91 cleanup_log () {
92     local suite
93     local o=$(echo $O | tr "[:upper:]" "[:lower:]")
94     o=${o//_/-}
95     
96     rm -f ${TMP}/${o}.log
97 }
98
99 cleanup_logs () {
100     local suite
101     for suite in ${ACC_SM_ONLY:-$TESTSUITE_LIST}; do
102         cleanup_log $suite
103     done
104 }
105
106 export NAME MOUNT START CLEAN
107 . $LUSTRE/tests/cfg/$NAME.sh
108
109 assert_env mds_HOST MDS_MKFS_OPTS MDSDEV
110 assert_env ost_HOST OST_MKFS_OPTS OSTCOUNT
111 assert_env FSNAME MOUNT MOUNT2
112
113 setup_if_needed
114
115 for s in ${ACC_SM_ONLY:-$TESTSUITE_LIST}; do
116     suite_name=$(echo ${s%.sh} | tr "[:upper:]_" "[:lower:]-" )
117     suite=$(echo ${suite_name} | tr "[:lower:]-" "[:upper:]_")
118     suite_only=ONLY # Change to ${suite}_ONLY after fixing YALA
119
120     if is_sanity_benchmark ${suite_name}; then
121         suite_only=suite_name
122         suite_script=$LUSTRE/tests/sanity-benchmark.sh
123     elif [ -e $LUSTRE/tests/${suite_name}.sh ]; then
124         suite_script=$LUSTRE/tests/${suite_name}.sh
125     elif [ -e $LUSTRE/tests/$suite_name ]; then
126         suite_script=$LUSTRE/tests/$suite_name
127     elif find_in_path $suite_name; then
128         suite_script=${suite_name}
129     elif find_in_path ${suite_name}.sh; then
130         suite_script=${suite_name}.sh
131     else
132         echo "Can't find test script for $suite_name"
133         exit 1
134     fi
135
136     echo "$suite_script located."
137
138     if [[ ${!suite} = no ]]; then
139         echo "Skipping $suite_name"
140         continue
141     fi
142
143     start_ts=$(date +%s)
144     title $suite_name
145     bash $suite_script ${!suite_only}
146     rc=$?
147     duration=$(($(date +%s) - $start_ts))
148     if [ $rc -ne 0 ]; then
149         RC=$rc
150         status="FAIL"
151     else
152         status="PASS"
153     fi
154     echo "Script: $status"
155
156
157     $CLEANUP
158     [ x$suite = xSGPDD_SURVEY ] || $SETUP
159     eval ${suite}="done"
160 done
161
162 RC=$?
163 title FINISHED
164 echo "Finished at `date` in ${SECONDS}s"
165 echo "Tests ran: $RANTEST"
166 print_summary
167 [ "$MSKIPPED" = 1 ] && log "FAIL: remote MDS tests skipped" && RC=1
168 [ "$OSKIPPED" = 1 ] && log "FAIL: remote OST tests skipped" && RC=1
169 echo "$0: completed with rc $RC" && exit $RC