Whamcloud - gitweb
b=23014 sgpdd-survey acc-sm integration
[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 MSKIPPED=0
8 export OSKIPPED=0
9
10 # This is the default set of tests to run.
11 DEFAULT_SUITES="runtests sanity sanity-benchmark sanityn lfsck liblustre
12                 runracer replay-single conf-sanity recovery-small
13                 replay-ost-single replay-dual insanity sanity-quota sanity-sec
14                 sanity-gss performance-sanity large-scale recovery-mds-scale 
15                 recovery-double-scale recovery-random-scale parallel-scale 
16                 lustre_rsync-test metadata-updates ost-pools lnet-selftest
17                 mmp obdfilter-survey sgpdd-survey"
18
19 if [[ -n $@ ]]; then
20     ACC_SM_ONLY="${ACC_SM_ONLY} $@"
21 fi
22
23 [ "$SIZE" ] || SIZE=$((RAMKB * 2))
24 [ "$RSIZE" ] || RSIZE=512
25 [ "$UID" ] || UID=1000
26 [ "$MOUNT" ] || MOUNT=/mnt/lustre
27 [ "$MOUNT2" ] || MOUNT2=${MOUNT}2
28 [ "$TMP" ] || TMP=/tmp
29 [ "$COUNT" ] || COUNT=1000
30 [ "$DEBUG_LVL" ] || DEBUG_LVL=0
31 [ "$DEBUG_OFF" ] || DEBUG_OFF="eval lctl set_param debug=\"$DEBUG_LVL\""
32 [ "$DEBUG_ON" ] || DEBUG_ON="eval lctl set_param debug=0x33f0484"
33
34 export TF_FAIL=$TMP/tf.fail
35
36 if [ "$ACC_SM_ONLY" ]; then
37     for O in $DEFAULT_SUITES; do
38         O=$(echo $O | tr "-" "_" | tr "[:lower:]" "[:upper:]")
39         export ${O}="no"
40     done
41     for O in $ACC_SM_ONLY; do
42         O=`echo ${O%.sh} | tr "-" "_"`
43         O=`echo $O | tr "[:lower:]" "[:upper:]"`
44         export ${O}="yes"
45     done
46 fi
47
48 STARTTIME=`date +%s`
49
50 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
51 . $LUSTRE/tests/test-framework.sh
52 init_test_env
53
54 if $GSS; then
55     # liblustre doesn't support GSS
56     export LIBLUSTRE=no
57 else
58     export SANITY_GSS="no"
59 fi
60
61 SETUP=${SETUP:-setupall}
62 FORMAT=${FORMAT:-formatall}
63 CLEANUP=${CLEANUP:-stopall}
64
65 setup_if_needed() {
66     nfs_client_mode && return
67
68     local MOUNTED=$(mounted_lustre_filesystems)
69     if $(echo $MOUNTED | grep -w -q $MOUNT); then
70         check_config_clients $MOUNT
71         init_facets_vars
72         init_param_vars
73         return
74     fi
75
76     echo "Lustre is not mounted, trying to do setup SETUP=$SETUP ... "
77     [ "$REFORMAT" ] && $FORMAT
78     $SETUP
79
80     MOUNTED=$(mounted_lustre_filesystems)
81     if ! $(echo $MOUNTED | grep -w -q $MOUNT); then
82         echo "Lustre is not mounted after setup! SETUP=$SETUP"
83         exit 1
84     fi
85 }
86
87 find_in_path() {
88     target=$1
89     for dir in $(tr : " " <<< $PATH); do
90       if [ -e $dir/$target ]; then
91           echo "$dir/$target found in PATH"
92           return 0
93       fi
94     done
95     return 1
96 }
97
98 title() {
99     # update titlebar if stdin is attaached to an xterm
100     if ${UPDATE_TITLEBAR:-false}; then
101         if tty -s; then
102             case $TERM in 
103                 xterm*)
104                     echo -ne "\033]2; acceptance-small: $* \007" >&0
105                     ;;
106             esac
107         fi
108     fi 
109     log "-----============= acceptance-small: "$*" ============----- $(date)"
110 }
111
112 is_sanity_benchmark() {
113     local benchmarks="dbench bonnie iozone fsx"
114     local suite=$1
115     for b in $benchmarks; do
116         if [ "$b" == "$suite" ]; then
117             return 0
118         fi
119     done
120     return 1
121 }
122
123 run_suite() {
124     local suite_name=$(echo ${1%.sh} | tr "[:upper:]_" "[:lower:]-" )
125     local suite=$(echo ${suite_name} | tr "[:lower:]-" "[:upper:]_")
126     local suite_only=ONLY # Change to ${suite}_ONLY after fixing YALA
127
128     if is_sanity_benchmark ${suite_name}; then
129         suite_only=suite_name
130         suite_script=$LUSTRE/tests/sanity-benchmark.sh
131     elif [ -e $LUSTRE/tests/${suite_name}.sh ]; then
132         suite_script=$LUSTRE/tests/${suite_name}.sh
133     elif [ -e $LUSTRE/tests/$suite_name ]; then
134         suite_script=$LUSTRE/tests/$suite_name
135     elif find_in_path $suite_name; then
136         suite_script=${suite_name}
137     elif find_in_path ${suite_name}.sh; then
138         suite_script=${suite_name}.sh
139     else
140         echo "Can't find test script for $suite_name"
141         return 1
142     fi
143
144     echo "$suite_script located."
145     if [[ ${!suite} != no ]]; then
146         local rc
147         local status
148         local duration
149         local start_ts=$(date +%s)
150         rm -rf $TF_FAIL
151         title $suite_name
152         log_test $suite_name
153         bash $suite_script ${!suite_only}
154         rc=$?
155         duration=$(($(date +%s) - $start_ts))
156         if [ -f $TF_FAIL -o $rc -ne 0 ]; then
157             status="FAIL"
158         else
159             status="PASS"
160         fi
161         echo "Script: $status"
162         log_test_status $duration $status
163
164         $CLEANUP
165         [ x$suite = xSGPDD_SURVEY ] || $SETUP
166
167         eval ${suite}="done"
168     else
169         echo "Skipping $suite_name"
170     fi
171 }
172
173 run_suites() {
174     for suite in $*; do
175         run_suite $suite
176     done
177 }
178
179 export NAME MOUNT START CLEAN
180 . $LUSTRE/tests/cfg/$NAME.sh
181
182 assert_env mds_HOST MDS_MKFS_OPTS 
183 assert_env ost_HOST OST_MKFS_OPTS OSTCOUNT
184 assert_env FSNAME MOUNT MOUNT2
185
186 setup_if_needed
187 init_logging
188
189 run_suites ${ACC_SM_ONLY:-$DEFAULT_SUITES}
190
191 RC=$?
192 title FINISHED
193 echo "Finished at `date` in $((`date +%s` - $STARTTIME))s"
194 print_summary
195 [ "$MSKIPPED" = 1 ] && log "FAIL: remote MDS tests skipped" && RC=1
196 [ "$OSKIPPED" = 1 ] && log "FAIL: remote OST tests skipped" && RC=1
197 echo "$0: completed with rc $RC" && exit $RC