diff options
-rwxr-xr-x | src/usr/cxxtest/autosample | 366 | ||||
-rwxr-xr-x | src/usr/cxxtest/cxxtest-start.sh | 35 |
2 files changed, 401 insertions, 0 deletions
diff --git a/src/usr/cxxtest/autosample b/src/usr/cxxtest/autosample new file mode 100755 index 000000000..d5f19c63b --- /dev/null +++ b/src/usr/cxxtest/autosample @@ -0,0 +1,366 @@ +#!/bin/bash +################################################################################ +# Simics automation using autosim +## 2011-05-23 mww modified to run hostboot in simics +## 2011-06-02 mww check in first working version. +## Profuse thanks to Patrick Williams for getting this going +## on the Gerrit server!! +################################################################################ +function waitkb() +{ + + ## wait for kbhit to continue + ## echo "Hit any key to continue" + ## read kb + echo "." +} + +function usage() +{ + + echo "usage:" + echo "$0 [--quiet] backing_tree_dir sandbox_name path_to_hbicore_test_img " + +} + + +function stopsim() +{ + # Stop simics + echo "Stopping simics" + autosim $NOWIN $VERBOSE --stopsim + if [ $? -ne 0 ] ; then + echo "WARNING: Unable to stop simics cleanly" + fi +} + + +function stopserver() +{ + # Stop simics server + echo "Stopping simics server" + autosim $NOWIN $VERBOSE --stopserver + if [ $? -ne 0 ] ; then + echo "WARNING: Unable to stop simics server cleanly" + fi +} + + + +## mww verbose is the default. +VERBOSE=" --verbose" +if [ "$1" = "--quiet" ] ; then + VERBOSE="" + shift +fi + +## +## set up +## +DRIVER="$1" ## backing tree +TEST_SANDBOX="$2" ## test sandbox +HBICORE_TEST="$3" ## path to hbicore_test.img + +export SHELL="/bin/bash" ## Needed to fool workon to launch a bash shell, which + ## autosim expects. +NOWIN="--nowin" ## remote execution does not have a display... + +MACHINE="SALERNO" +HBOT_SIMICS_SETUP="/gsa/ausgsa/home/a/n/andrewg/web/public/hostboot/simics/hbot_simics_setup.pl" + +## gerrit creates a new workspace for every compile. +## cxxtest-start.sh will verify this and then export WORKSPACE_DIR for us. +SBXDIR=$WORKSPACE_DIR + +## autosim, mksb, workon, etc should look in $SANDBOXRC for the location of the sandbox. +## this is more effective than using -rc option (autosim has no option for this anyway) +LOCAL_SANDBOXRC="$WORKSPACE_DIR/my.sandboxrc" + + +if [ "$DRIVER" = "" ] ; then + echo "ERROR: you must specify a driver (backing tree) to run the tests with" + usage + exit 1 +fi + +if [ "$TEST_SANDBOX" = "" ] ; then + echo "ERROR: must specify a TEST_SANDBOX=" + usage + exit 1 +fi + +if [ ! -f "$HBICORE_TEST" ] ; then + echo "ERROR: you must specify a valid hbicore_test.bin file." + usage + exit 1 +fi + +## extract the pathname of hbicore_test.* from $HBICORE_TEST +## parse out the dir and file names for hbicore_test +HBICORE_TEST_DIR=${HBICORE_TEST%/*} +HBICORE_TEST_FILE=${HBICORE_TEST##*/} + + + +## let's get set up +cd $WORKSPACE_DIR + +echo "$0" +echo "VERBOSE = $VERBOSE" +echo "NOWIN = $NOWIN" +echo "BACKING_TREE = $DRIVER" +echo "TEST_SANDBOX = $TEST_SANDBOX" +echo "HBICORE_TEST = $HBICORE_TEST" +echo "HBICORE_TEST_DIR = $HBICORE_TEST_DIR" +echo "LOCAL_SANDBOXRC = $LOCAL_SANDBOXRC" +echo "SBXDIR = $SBXDIR" +echo "current directory is " `pwd` +# echo "env vars are " `env` + + + +waitkb + + +timestamp=`date +'%H:%M:%S'` +echo "$timestamp Starting autosample test..." + + +# Set up the test sandbox backed to the specified build +## Assumption here is that we will always run inside the workspace created by gerrit, +## so we always create a new sandbox +## + +echo "Setting up sandbox environment..." + + +## mksb fills the log with "please type backing tree file" if it can't find +## the -back file. We wish to avoid this. +if [ ! -d "$DRIVER" ] ; then + echo "cannot access the backing tree $DRIVER , aborting" + exit 1 +fi + + +## set $SANDBOXRC to the local one, this should cause this to make and run in a new sandbox +export SANDBOXRC=$LOCAL_SANDBOXRC + + +## at the base workspace dir. +if [ ! -d "$SBXDIR/$TEST_SANDBOX" ] ; then + echo "run mksb to create the sandbox " + mksb -rc $LOCAL_SANDBOXRC -dir $SBXDIR -back $DRIVER -sb $TEST_SANDBOX -m ppc + if [ $? -ne 0 ] ; then + echo "ERROR: mksb failed: $?" + exit 1 + fi +else + echo "$SBXDIR/$TEST_SANDBOX already exists, " `ls -la` + `usrsbinfo -s` + chkdrv=`usrsbinfo -s | grep " $TEST_SANDBOX "| awk '{ print $2 }'` + if [ "$chkdrv" != "$DRIVER" ] ; then + resb $DRIVER -sb $TEST_SANDBOX + fi +fi + +waitkb + +# Run set up in current shell +echo "run autosimsetup.." +. autosimsetup + +waitkb + +# Start the simics server +echo "Starting simics server in sandbox $TEST_SANDBOX on machine $MACHINE" +autosim $NOWIN $VERBOSE --startserver --wp --sandbox $TEST_SANDBOX --machine $MACHINE +if [ $? -ne 0 ] ; then + echo "ERROR: Unable to start simics server $?" + exit 1 +fi + + +waitkb + +## under normal circumstances $sb would be set by start_simics +export sb=$SBXDIR/$TEST_SANDBOX/src +echo $sb + +echo "** Set up simics directories **" +echo "start_simics -no_start -machine $MACHINE" > $sb/my_simics_env_setup +chmod 775 $sb/my_simics_env_setup +workon -sb $TEST_SANDBOX -mppc -c ./my_simics_env_setup + +echo "** Run workaround from Ched **" +/afs/rchland/usr2/ched/public/hostboot/fix_ph110510.sh + +echo " Create required config directory and copy in required file (make L3 8MB for now) **" +mkdir -p $sb/simu/configs/ && cp /gsa/ausgsa/home/a/n/andrewg/web/public/hostboot/simics/P8_SALERNO.config $sb/simu/configs/ + +echo "** Copy in the P8 scomdef **" +mkdir -p $sb/src/engd/scomdef && cp /gsa/ausgsa/home/a/n/andrewg/web/public/hostboot/simics/p8_910400.scomdef $sb/src/engd/scomdef/ + +echo "** Create img directory for hbicore.bin **" +mkdir -p $sb/../img + + +waitkb + + +## According to the new directions, the hbicore_test.bin file now needs to be +## copied to $sb/../img/hbicore.bin . This works out to $TEST_SANDBOX/img/hbicore.bin +## Note the name change; thus we are always pretty safe in always doing this. +## +echo "copy $HBICORE_TEST to $WORKSPACE_DIR/$TEST_SANDBOX/img/hbicore.bin" +cp $HBICORE_TEST $WORKSPACE_DIR/$TEST_SANDBOX/img/hbicore.bin +if [ $? -ne 0 ] ; then + echo "ERROR: Copy of $HBICORE_TEST to $TEST_SANDBOX/../img failed: $?" + exit 1 +fi + +## we also need the hbicore_test.syms file. Assume that it is the same dir as the .bin file. +## NOTE: it may already be there. +## +echo "copy hbicore_test.syms file to $WORKSPACE_DIR/img/hbicore_test.syms" +if [ ! -f "$WORKSPACE_DIR/img/hbicore_test.syms" ]; then + cp $HBICORE_TEST_DIR/hbicore_test.syms $WORKSPACE_DIR/img/hbicore_test.syms + if [ $? -ne 0 ] ; then + echo "ERROR: Copy of hbicore_test.syms to $WORKSPACE_DIR/img/ failed: $?" + exit 1 + fi +fi + + + +waitkb + + +# Start simics and wait for it to reach standby +echo "Starting simics" +#autosim $VERBOSE --startsim --chkpt standby <<< chkpt not working yet +autosim $NOWIN $VERBOSE --startsim +if [ $? -ne 0 ] ; then + echo "ERROR: Unable to start simics $?" + stopserver ## kill the server again. + exit 1 +fi + + +waitkb + + +## $$TODO Need to wait here for hostboot to finish +## for now just sleep for 20 seconds +sleep 20 + + +waitkb + +## grep for totaltests, etc. These will appear in the hbicore_test.syms file and +## look like the following: +## V,000292b8,00000000,00000008,CxxTest::totaltests +## V,000292c0,00000000,00000008,CxxTest::tracecalls +## V,000292c8,00000000,00000008,CxxTest::warnings +## V,000292d0,00000000,00000008,CxxTest::failedtests + +## V,00017888,00000000,00004000,kernel_printk_buffer + + +## grep for the globals +echo "find totaltests, etc in $HBICORE_TEST_DIR/hbicore_test.syms" +printk_buffer_addr=`grep "kernel_printk_buffer" $HBICORE_TEST_DIR/hbicore_test.syms | awk '{split($0,a,","); print a[2]}'` +printk_buffer_size=`grep "kernel_printk_buffer" $HBICORE_TEST_DIR/hbicore_test.syms | awk '{split($0,a,","); print a[4]}'` +totaltests_addr=`grep "CxxTest::g_TotalTests" $HBICORE_TEST_DIR/hbicore_test.syms | awk '{split($0,a,","); print a[2]}'` +failedtests_addr=`grep "CxxTest::g_FailedTests" $HBICORE_TEST_DIR/hbicore_test.syms | awk '{split($0,a,","); print a[2]}'` +warnings_addr=`grep "CxxTest::g_Warnings" $HBICORE_TEST_DIR/hbicore_test.syms | awk '{split($0,a,","); print a[2]}'` +tracecalls_addr=`grep "CxxTest::g_TraceCalls" $HBICORE_TEST_DIR/hbicore_test.syms | awk '{split($0,a,","); print a[2]}'` + + + +## note, don't use $VERBOSE here or you get all sorts of extra junk in the output file. +echo "====> dump totaltests..." +autosim $NOWIN --simcmd "phys_mem.x 0x$totaltests_addr 0x08" 1> $WORKSPACE_DIR/totaltests.log 2> /dev/null +if [ $? -ne 0 ] ; then + echo "ERROR: Unable to run $?" + stopsim + stopserver + exit 1 +fi +totaltests=`cat $WORKSPACE_DIR/totaltests.log | awk '{ print $5 }'` + + +echo "====> dump failedtests..." +autosim $NOWIN --simcmd "phys_mem.x 0x$failedtests_addr 0x08" 1> $WORKSPACE_DIR/failedtests.log 2> /dev/null +if [ $? -ne 0 ] ; then + echo "ERROR: Unable to run $?" + stopsim + stopserver + exit 1 +fi +failedtests=`cat $WORKSPACE_DIR/failedtests.log | awk '{ print $5 }'` + + +echo "====> dump warnings..." +autosim $NOWIN --simcmd "phys_mem.x 0x$warnings_addr 0x08" 1> $WORKSPACE_DIR/warnings.log 2> /dev/null +if [ $? -ne 0 ] ; then + echo "ERROR: Unable to run $?" + stopsim + stopserver + exit 1 +fi +warnings=`cat $WORKSPACE_DIR/warnings.log | awk '{ print $5 }'` + + +echo "====> dump tracecalls..." +autosim $NOWIN --simcmd "phys_mem.x 0x$tracecalls_addr 0x08" 1> $WORKSPACE_DIR/tracecalls.log 2> /dev/null +if [ $? -ne 0 ] ; then + echo "ERROR: Unable to run $?" + stopsim + stopserver + exit 1 +fi +tracecalls=`cat $WORKSPACE_DIR/tracecalls.log | awk '{ print $5 }'` + + + +echo "====> dump printk buffer..." +autosim $NOWIN --simcmd "memory_image_ln0.save $WORKSPACE_DIR/testprintk.log 0x$printk_buffer_addr 0x$printk_buffer_size" 1> /dev/null 2> /dev/null +if [ $? -ne 0 ] ; then +echo "ERROR: Unable to run $?" + stopsim + stopserver +exit 1 +fi + + +## done. Stop the simulation +stopsim + + +## now stop the server. +stopserver + + + +## print out ending. +timestamp=`date +'%H:%M:%S'` + +echo "----------------- Printk Buffer -------------------" +cat $WORKSPACE_DIR/testprintk.log + +echo +echo "===================================================" +echo "$timestamp Finished autosample test with no errors." +echo " total tests: $totaltests" +echo " failed tests: $failedtests" +echo " warnings: $warnings" +echo " trace calls: $tracecalls" +echo "===================================================" +echo + + +exit 0 + + + + diff --git a/src/usr/cxxtest/cxxtest-start.sh b/src/usr/cxxtest/cxxtest-start.sh new file mode 100755 index 000000000..50a88fdff --- /dev/null +++ b/src/usr/cxxtest/cxxtest-start.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# +# Front end to autosample - script to execute unit tests under simics. +# 2011-06-02 mww Initial (working) checkin +# + +## does gerrit export env vars for workspace??? +## when gerrit runs it will create a workspace with the built code tree +## and drop us into it. +export WORKSPACE_DIR=`pwd` +export AUTOSAMPLE="/gsa/ausgsa/projects/h/hostboot/test/autosample" +CXXTEST_REMOTE_SANDBOX="cxxtest_sb" + +if [ "$HOSTNAME" == "" ] ; then + echo "no HOSTNAME??" + export HOSTNAME=`hostname` +fi + + +## klog to get access to simics tools +AFSPASSWD="/gsa/ausgsa/projects/h/hostboot/gerrit-server/afspasswd.sh" +$AFSPASSWD | klog -cell austin -pipe +$AFSPASSWD | klog -cell rchland -pipe + +## This will create a sandbox inside the Gerrit workspace and run simics UT +## usage: autosample [--quiet] <backing-tree-dir> <sandbox-name> <hbicore_test.bin-image-from-make> +## /gsa/ausgsa/projects/h/hostboot/test/autosample /esw/fips740/Builds/b0513a_1121.740 cxxtest_sb $GERRIT_WS_DIR/img/hbicore_test.bin + +## run autosample to run simics unit tests +## NOTE: this assumes that someone has copied hbicore_test.bin and hbicore_test.syms $WORKSPACE_DIR/img directory +## usage: autosample [--quiet] <backing-tree-dir> <sandbox-name> <hbicore_test.bin-image-from-make> +$AUTOSAMPLE /esw/fips740/Builds/b0513a_1121.740 $CXXTEST_REMOTE_SANDBOX $WORKSPACE_DIR/img/hbicore_test.bin + +echo "Done." + |