1.1 --- a/regression/ns-3-run-tests.sh Fri Oct 31 15:55:28 2008 -0700
1.2 +++ b/regression/ns-3-run-tests.sh Tue Feb 10 16:13:29 2009 -0800
1.3 @@ -21,25 +21,47 @@
1.4 # Add ability to easily configure options
1.5 # Scp the results to a web-browsable directory
1.6
1.7 -#
1.8 -# Who to send the mail to (overridden by command line argument)
1.9 -#
1.10 -if [ $1 ]
1.11 -then
1.12 - REPO=$1
1.13 -else
1.14 - echo "Error: please specify a repo"
1.15 - exit 1
1.16 -fi
1.17
1.18 -#
1.19 -# Who to send the mail to (overridden by command line argument)
1.20 -#
1.21 +usage()
1.22 +{
1.23 +cat << EOF
1.24 +usage: $0 options
1.25
1.26 -if [ $2 ]
1.27 -then
1.28 - MAILTO=$2
1.29 -fi
1.30 +This script runs the ns-3 branch through the ns-regression testbed.
1.31 +OPTIONS:
1.32 + -h Help: show this message
1.33 + -n ns-3 branch Default: ns-3-dev
1.34 + -r regression branch Default: ns-3-dev-ref-traces
1.35 + -m mailto address. Where to send the mail. If unspecified, program output will just scroll onto stdout.
1.36 +EOF
1.37 +}
1.38 +
1.39 +REPO=ns-3-dev
1.40 +TRACES=ns-3-dev-ref-traces
1.41 +MAILTO=
1.42 +
1.43 +while getopts "hn:r:m:" OPTION
1.44 +do
1.45 + case $OPTION in
1.46 + h)
1.47 + usage
1.48 + exit
1.49 + ;;
1.50 + n)
1.51 + REPO=$OPTARG
1.52 + ;;
1.53 + r)
1.54 + TRACES=$OPTARG
1.55 + ;;
1.56 + m)
1.57 + MAILTO=$OPTARG
1.58 + ;;
1.59 + ?)
1.60 + usage
1.61 + exit
1.62 + //
1.63 + esac
1.64 +done
1.65
1.66 #
1.67 # Incredibly, there seems to be a bug related to path length in mercurial 1.01
1.68 @@ -49,8 +71,7 @@
1.69 #
1.70 USER_DIR=${MAILTO%%@*}
1.71
1.72 -hostlist="ns-regression ns-ubuntu-intrepid ns-old darwin-ppc"
1.73 -
1.74 +WHOAMI=`whoami`
1.75 if [ $USER_DIR ]
1.76 then
1.77 BASEDIR="/tmp/$USER_DIR"
1.78 @@ -58,13 +79,19 @@
1.79 BASEDIR="/tmp/`whoami`"
1.80 fi
1.81
1.82 +if [ $MAILTO ] && [ $MAILTO == "ns-commits@isi.edu" ] && [ $WHOAMI != "nsnam" ]
1.83 +then
1.84 + echo "Error: must be user nsnam to mailto ns-commits; did you forget to add your address as an argument?"
1.85 + exit 1
1.86 +fi
1.87 +
1.88 +# Some of these could become options as well
1.89 +#
1.90 +HOSTLIST="ns-regression ns-ubuntu-intrepid ns-fedora-core-10 ns-old darwin-ppc"
1.91 TESTDIR="tests"
1.92 -
1.93 LOGFILE=$BASEDIR/$TESTDIR/daily.log
1.94 -
1.95 # How to run the regression tests
1.96 WAFVALGRINDCMD="./waf --valgrind --regression"
1.97 -
1.98 WAFREGRESSIONCMD="./waf --regression"
1.99
1.100 die() {
1.101 @@ -80,14 +107,6 @@
1.102 exit 1
1.103 }
1.104
1.105 -WHOAMI=`whoami`
1.106 -
1.107 -if [ $MAILTO == "ns-commits@isi.edu" ] && [ $WHOAMI != "nsnam" ]
1.108 -then
1.109 - echo "Error: must be user nsnam to mailto ns-commits; did you forget to add your address as an argument?"
1.110 - exit 1
1.111 -fi
1.112 -
1.113 # Clean up last night's or previous run's file, if anys
1.114 rm -rf $BASEDIR/$TESTDIR
1.115 mkdir -p $BASEDIR/$TESTDIR
1.116 @@ -103,14 +122,20 @@
1.117 # There is a difference between the directory to which the repository is cloned and the repository name
1.118 # itself. Example: hg clone http://code.nsnam.org/craigdo/ns-3-yadda creates directory ns-3-yadda.
1.119 REPO_DIR=${REPO##*/}
1.120 -rm -rf $REPO_DIR
1.121 -hg clone http://code.nsnam.org/$REPO
1.122 -cd $REPO_DIR || die "FAILURE: couldn't clone $REPO"
1.123 -cd ../
1.124 +TRACES_DIR=${TRACES##*/}
1.125 +hg clone http://code.nsnam.org/ns-3-allinone
1.126 +cd ns-3-allinone
1.127 +./download.py -n $REPO -r $TRACES
1.128 +if [ $? == 0 ]; then
1.129 + echo "download.py success" 1>>$LOGFILE
1.130 +else
1.131 + die "FAILURE: download.py failure for repo $REPO"
1.132 +fi
1.133 +cd ..
1.134
1.135 # Foreach compile-farm host
1.136
1.137 -for host in $hostlist; do
1.138 +for host in $HOSTLIST; do
1.139 # First, run it locally on the host machine ns-regression
1.140 if [ "$host" == `exec hostname` ]
1.141 then
1.142 @@ -120,9 +145,12 @@
1.143 /usr/bin/g++ --version | head -1 1>>$LOGFILE
1.144 echo "----------------------------- " 1>>$LOGFILE
1.145 mkdir tmp
1.146 - cp -r $REPO_DIR tmp/
1.147 - cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR
1.148 - (./waf -d debug configure > configure.stdout) >& configure.stderr
1.149 + cp -r ns-3-allinone tmp/
1.150 + cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone
1.151 + # Build nsc and anything else controlled by master build script
1.152 + ./build.py
1.153 + cd $REPO_DIR
1.154 + (./waf -d debug configure --with-nsc=../nsc --with-pybindgen=../pybindgen --with-regression-traces=../$TRACES_DIR > configure.stdout) >& configure.stderr
1.155 (./waf -j4 > build.stdout) >& build.stderr
1.156 if [ -e "./build/debug/utils/run-tests" ]; then
1.157 $WAFVALGRINDCMD >& waf-regression.out
1.158 @@ -147,10 +175,10 @@
1.159 die "Stopping regression tests"
1.160 fi
1.161
1.162 - cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR
1.163 + cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR
1.164 rm -rf build
1.165
1.166 - (./waf -d optimized configure > configure.stdout) >& configure.stderr
1.167 + (./waf -d optimized configure --with-nsc=../nsc --with-pybindgen=../pybindgen --with-regression-traces=../$TRACES_DIR > configure.stdout) >& configure.stderr
1.168 (./waf -j4 > build.stdout) >& build.stderr
1.169 if [ -e "./build/optimized/utils/run-tests" ]; then
1.170 $WAFVALGRINDCMD >& waf-regression.out
1.171 @@ -175,21 +203,26 @@
1.172 die "Stopping regression tests"
1.173 fi
1.174 # Run gcc-3.4
1.175 - rm -rf tmp
1.176 echo "" 1>> $LOGFILE
1.177 echo "Regression testing for machine: $host" 1>>$LOGFILE
1.178 uname -s -r -m 1>>$LOGFILE
1.179 /usr/bin/g++-3.4 --version | head -1 1>>$LOGFILE
1.180 echo "----------------------------- " 1>>$LOGFILE
1.181 - mkdir tmp
1.182 - cp -r $REPO_DIR tmp/
1.183 - cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR
1.184 - (CXX=g++-3.4 ./waf -d debug configure > configure.stdout) >& configure.stderr
1.185 + cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR
1.186 + cd ../nsc
1.187 + python scons.py -c
1.188 + CC=gcc-3.4 python scons.py
1.189 + cd ../$REPO_DIR
1.190 + rm -rf build
1.191 + (CXX=g++-3.4 ./waf -d debug configure --with-nsc=../nsc --with-pybindgen=../pybindgen --with-regression-traces=../$TRACES_DIR > configure.stdout) >& configure.stderr
1.192 (./waf -j4 > build.stdout) >& build.stderr
1.193 if [ -e "./build/debug/utils/run-tests" ]; then
1.194 $WAFREGRESSIONCMD >& waf-regression.out
1.195 if [ $? == 0 ]; then
1.196 echo "SUCCESS: waf -d debug configure; $WAFREGRESSIONCMD passed on $REPO " 1>>$LOGFILE
1.197 + # clean out gcc-3.4 nsc
1.198 + cd ../nsc
1.199 + python scons.py -c
1.200 else
1.201 cat waf-regression.out >> $LOGFILE
1.202 die "FAILURE: waf -d debug configure; $WAFREGRESSIONCMD failed on $REPO"
1.203 @@ -208,7 +241,8 @@
1.204 echo "" 1>> $LOGFILE
1.205 die "Stopping regression tests"
1.206 fi
1.207 - else
1.208 + else
1.209 + #
1.210 # Run on external hosts
1.211 #
1.212 echo "" 1>>$LOGFILE
1.213 @@ -218,57 +252,62 @@
1.214 ssh $host /usr/bin/g++ --version | head -1 1>>$LOGFILE
1.215 echo "----------------------------- " 1>>$LOGFILE
1.216 ssh $host mkdir -p $BASEDIR/$TESTDIR/tmp
1.217 - rsync -avz -e ssh $BASEDIR/$TESTDIR/$REPO_DIR $host:$BASEDIR/tests/tmp
1.218 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; ./waf distclean"
1.219 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; (./waf -d debug configure > configure.stdout) >& configure.stderr"
1.220 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; (./waf > build.stdout) >& build.stderr"
1.221 + # rsync -avz -e ssh $BASEDIR/$TESTDIR/$REPO_DIR $host:$BASEDIR/tests/tmp
1.222 + rsync -avz -e ssh $BASEDIR/$TESTDIR/ns-3-allinone $host:$BASEDIR/tests/tmp
1.223 + # Temporary-- remove nsc directory on external machine
1.224 + # This prevents ns-3 from auto-finding nsc in the ../nsc directory
1.225 + # A cleaner solution is to do a platform check whether nsc is supported
1.226 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone; rm -rf nsc"
1.227 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; ./waf distclean"
1.228 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; (./waf -d debug configure --with-pybindgen=../pybindgen --with-regression-traces=../$TRACES_DIR > configure.stdout) >& configure.stderr"
1.229 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; (./waf > build.stdout) >& build.stderr"
1.230 if [ $? != 0 ]; then
1.231 echo "FAILURE: waf -d debug configure; building failed on $host" 1>>$LOGFILE
1.232 echo "" 1>> $LOGFILE
1.233 echo "Configure stderr: " 1>>$LOGFILE
1.234 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; cat configure.stderr" >> $LOGFILE
1.235 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; cat configure.stderr" >> $LOGFILE
1.236 echo "" 1>> $LOGFILE
1.237 echo "Build stderr: " 1>>$LOGFILE
1.238 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; cat build.stderr" >> $LOGFILE
1.239 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; cat build.stderr" >> $LOGFILE
1.240 echo "" 1>> $LOGFILE
1.241 echo "ns3modulegen.log: " 1>>$LOGFILE
1.242 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; cat build/debug/bindings/python/ns3modulegen.log" >> $LOGFILE
1.243 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; cat build/debug/bindings/python/ns3modulegen.log" >> $LOGFILE
1.244 cat build/debug/bindings/python/ns3modulegen.log >> $LOGFILE
1.245 echo "" 1>> $LOGFILE
1.246 die "Stopping regression tests"
1.247 fi
1.248 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; $WAFREGRESSIONCMD >& waf-regression.out"
1.249 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; $WAFREGRESSIONCMD >& waf-regression.out"
1.250 if [ $? == 0 ]; then
1.251 echo "SUCCESS: waf -d debug configure; $WAFREGRESSIONCMD passed on $host " 1>>$LOGFILE
1.252 else
1.253 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; cat waf-regression.out" >> $LOGFILE
1.254 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; cat waf-regression.out" >> $LOGFILE
1.255 die "FAILURE: waf -d debug configure; $WAFREGRESSIONCMD failed on $host "
1.256 fi
1.257 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; ./waf distclean"
1.258 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; ./waf distclean"
1.259
1.260 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; (./waf -d optimized configure > configure.stdout) >& configure.stderr"
1.261 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; (./waf > build.stdout) >& build.stderr"
1.262 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; (./waf -d optimized configure --with-pybindgen=../pybindgen --with-regression-traces=../$TRACES_DIR > configure.stdout) >& configure.stderr"
1.263 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; (./waf > build.stdout) >& build.stderr"
1.264 if [ $? != 0 ]; then
1.265 echo "FAILURE: waf -d optimized configure; building failed on $host" 1>>$LOGFILE
1.266 echo "" 1>> $LOGFILE
1.267 echo "Configure stderr: " 1>>$LOGFILE
1.268 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; cat configure.stderr" >> $LOGFILE
1.269 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; cat configure.stderr" >> $LOGFILE
1.270 echo "" 1>> $LOGFILE
1.271 echo "Build stderr: " 1>>$LOGFILE
1.272 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; cat build.stderr" >> $LOGFILE
1.273 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; cat build.stderr" >> $LOGFILE
1.274 echo "" 1>> $LOGFILE
1.275 echo "ns3modulegen.log: " 1>>$LOGFILE
1.276 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; cat build/optimized/bindings/python/ns3modulegen.log" >> $LOGFILE
1.277 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; cat build/optimized/bindings/python/ns3modulegen.log" >> $LOGFILE
1.278 cat build/debug/bindings/python/ns3modulegen.log >> $LOGFILE
1.279 echo "" 1>> $LOGFILE
1.280 die "Stopping regression tests"
1.281 fi
1.282 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; $WAFREGRESSIONCMD >& waf-regression.out"
1.283 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; $WAFREGRESSIONCMD >& waf-regression.out"
1.284 if [ $? == 0 ]; then
1.285 echo "SUCCESS: waf -d optimized configure; $WAFREGRESSIONCMD passed on $host " 1>>$LOGFILE
1.286 else
1.287
1.288 - ssh $host "cd $BASEDIR/$TESTDIR/tmp/$REPO_DIR; cat waf-regression.out" >> $LOGFILE
1.289 + ssh $host "cd $BASEDIR/$TESTDIR/tmp/ns-3-allinone/$REPO_DIR; cat waf-regression.out" >> $LOGFILE
1.290 die "FAILURE: waf -d optimized configure; $WAFREGRESSIONCMD failed on $host "
1.291 fi
1.292 fi
1.293 @@ -280,7 +319,7 @@
1.294 then
1.295 cat $LOGFILE | mail -s "$REPO: output of run-tests: success" "$MAILTO"
1.296 else
1.297 - echo $LOGFILE
1.298 + cat $LOGFILE
1.299 fi
1.300
1.301 rm -rf $BASEDIR