Index: local/run.coco.sh =================================================================== diff -u -r23d228183fb3bea51cdefa7979f20345b4198dbd -rc28bb75d80a72b195cbe5625ff302aab40f04aeb --- local/run.coco.sh (.../run.coco.sh) (revision 23d228183fb3bea51cdefa7979f20345b4198dbd) +++ local/run.coco.sh (.../run.coco.sh) (revision c28bb75d80a72b195cbe5625ff302aab40f04aeb) @@ -1,119 +1,276 @@ +#!/bin/bash +# cmcsexeimport --csmes coco/tst_models/tst_models.csmes --title tst_models --csexe coco/tst_models/tst_models.csexe 2>coco/log/tst_models_cmcsexeimport.err | tee coco/tst_models/tst_models_cmcsexeimport.log +# cmreport --csmes=tst_models/tst_models.csmes --html=Report/index 2>coco/log/tst_models_cmreport.err | tee coco/tst_models/tst_models_cmreport.log + +ERR_TESTSUITE=10000 +ERR_COCO_SERVER_CONNECTION=1001 +ERR_CANBUS_SETUP=1002 + +COCO_SERVER=192.168.10.41 QT_VER=5.12.5 -QT_DIR="/opt/Qt$QT_VER/5.12.5/gcc_64/bin" +QT_PATH="/opt/Qt$QT_VER/$QT_VER/gcc_64/bin" -APPLICATION=/home/denali/Projects/application -WORKING_DIR=$HOME/coco +QT_TESTS_LIST_FILE=tst_names.lst +QT_TESTS_LIST_PATH=$HOME/Projects/scripts/local/ + +APPLICATION_DIR=application +TESTSUITE_DIR=testsuites + +WORKING_DIR=coco +LOG_DIR=logs +BUILD_DIR=build +MERGE_DIR=merge +REPORT_DIR=report DENALI_SQUISH=denaliSquish -REPORT=Report -LOG=Logs -UNITTEST_RESULT=0 -REPORT_PATH=$WORKING_DIR/$REPORT -LOG_PATH=$REPORT_PATH/$LOG -COCO_SERVER=192.168.10.41 +PROJECT_PATH=$HOME/Projects/ +WORKING_PATH=$HOME/coco +REPORT_PATH=$WORKING_PATH/$REPORT_DIR +LOG_PATH=$WORKING_PATH/$LOG_DIR +BUILD_PATH=$WORKING_PATH/$BUILD_DIR +MERGE_PATH=$WORKING_PATH/$MERGE_DIR +AUT_PATH="$BUILD_PATH/$DENALI_SQUISH" +APPLICATION_PATH=$PROJECT_PATH/$APPLICATION_DIR +TESTSUITE_PATH=$PROJECT_PATH/$TESTSUITE_DIR -function check_server() { -ping 192.168.100.41 -c 2 -W 1 -if [ -n "$?" ]; then - echo "Coco Lic Server unreachable" - exit 1000 -fi + +VCAN_SCRIPT=$PROJECT_PATH/scripts/setupCAN/setupVCAN.sh +SQUISH_SERVER=/opt/squishqt/bin/squishserver +SQUISH_RUNNER=/opt/squishqt/bin/squishrunner + +REPORT_COCO=$REPORT_PATH/coco +REPORT_SQUISH=$REPORT_PATH/squish +REPORT_QTTEST=$REPORT_PATH/qttest + +##### ---------- HELPER ----------------------------------------------------------------------------------------------- +function generate_alarm_mapping() { + echo " ------------------------------ Generating the alarms mapping" + # alarmMapping must run in the application folder. + pushd $APPLICATION_PATH + ./alarmMapping.sh + popd } -function cleanup() { - rm -frd $WORKING_DIR - create_folders + +##### ---------- SERVER ----------------------------------------------------------------------------------------------- +##### ---------- SERVER COCO ------------------------------------------------------------------------------------------ +function server_coco_check() { + ping "$COCO_SERVER" -c 2 -W 1 + if [ "$?" != "0" ]; then + echo " ------------------------------ Coco Lic Server unreachable" + exit $ERR_COCO_SERVER_CONNECTION + fi } -function create_folders() { - mkdir -p $WORKING_DIR - mkdir -p $REPORT_PATH + +##### ---------- SERVER SQUISH ---------------------------------------------------------------------------------------- +function server_squish_start() { + echo " ------------------------------ Starting the Squish Server" + # configuring the server + $SQUISH_SERVER \ + --config addAUT $DENALI_SQUISH \ + $AUT_PATH/ \ + 2> $LOG_PATH/squishqtserver.err \ + | tee $LOG_PATH/squishqtserver.log + + # running the server + $SQUISH_SERVER & # must have '&' +} + + +function server_squish_run() { + echo " ------------------------------ Starting tests" + $SQUISH_RUNNER \ + --testsuite $TESTSUITE_PATH \ + --exitCodeOnFail $ERR_TESTSUITE \ + --reportgen html,$REPORT_SQUISH \ + 2> $LOG_PATH/squishqtrunner.err \ + | tee $LOG_PATH/squishqtrunner.log +} + + +function server_squish_stop() { + echo " ------------------------------ Stopping the Squish Server" + $SQUISH_SERVER --stop +} + + +##### ---------- INIT ------------------------------------------------------------------------------------------------- +function cleanup_directories() { + rm -frd $WORKING_PATH + mkdir -p $WORKING_PATH mkdir -p $LOG_PATH + mkdir -p $MERGE_PATH + mkdir -p $REPORT_PATH + mkdir -p $REPORT_COCO + mkdir -p $REPORT_SQUISH + mkdir -p $REPORT_QTTEST } -function build_with_coverage() { - echo "Run qmake" + +##### ---------- TESTS ------------------------------------------------------------------------------------------------ +function tests_copy_list() { + cp $QT_TESTS_LIST_PATH/$QT_TESTS_LIST_FILE $WORKING_PATH +} + + +function tests_read_list() { + QT_TESTS_LIST=() + + echo " ------------------------------ Test List:" + while read -r line + do + test=`echo $line | sed -e 's/^[[:space:]]*//' | sed -e '/^#/d'` + if [ "$test" != "" ]; then + QT_TESTS_LIST+=($test) + echo " - $test" + fi + done < "$QT_TESTS_LIST_FILE" +} + + +function tests_setup() { + if [ $($VCAN_SCRIPT) -eq 0 ];then + echo " ------------------------------ Canbus setup failed" + exit $ERR_CANBUS_SETUP + fi +} + +function tests_run() { + for test in ${QT_TESTS_LIST[@]};do + pushd $BUILD_PATH/$test + if [ "$test" == "$DENALI_SQUISH" ]; then + server_squish_start + server_squish_run + server_squish_stop + else + $BUILD_PATH/$test/$test \ + 2> $LOG_PATH/$test.err \ + | tee $REPORT_QTTEST/$test.report + fi + popd + done +} + +##### ---------- COVERAGE --------------------------------------------------------------------------------------------- +function coverage_build() { + echo " ------------------------------ Run qmake" echo $(pwd) - $QT_DIR/qmake \ - $APPLICATION/denali.pro \ + + $QT_PATH/qmake \ + $APPLICATION_PATH/denali.pro \ -spec linux-g++ \ - CONFIG+=qtquickcompiler \ CONFIG+="$1" \ CONFIG+=CodeCoverage \ - TARGET="$1" + TARGET="$BUILD_PATH/$1/$1" echo "Run make" /usr/bin/make \ LINK=csg++ AR=csar CXX=csg++ CC=csgcc -j4 \ - 2> $LOG_PATH/build_for_"$1".err \ - | tee $LOG_PATH/build_for_"$1".log && + 2> "$LOG_PATH/build_$1".err \ + | tee "$LOG_PATH/build_$1".log /usr/bin/make clean - echo "Cleaned for next build" + rm *.csmes + echo " ------------------------------ Cleaned for next build" } -function coverageMerge() { - echo "Merging the excecution report databases" + +function coverage_merge() { + echo " ------------------------------ Merging the excecution report databases" + local csmes="" + for test in ${QT_TESTS_LIST[@]};do + csmes+="$BUILD_PATH/$test/$test.csmes " + done + cmmerge \ - -o denali.csmes \ - $DENALI_SQUISH.csmes \ - 2> $LOG_PATH/cmmerge.err \ - | tee $LOG_PATH/cmmerge.log + -o $MERGE_PATH/$MERGE_DIR.csmes \ + $csmes \ + 2> $LOG_PATH/$MERGE_DIR.err \ + | tee $LOG_PATH/$MERGE_DIR.log } -function coverageImport() { - echo "Importing the execution report into the coverage database" - cmcsexeimport \ - -m $DENALI_SQUISH.csmes \ - -t Squish \ - -e $DENALI_SQUISH.csexe \ - 2> $LOG_PATH/cmcsexeimport_squish.err \ - | tee $LOG_PATH/cmcsexeimport_squish.log + +function coverage_import() { + echo " ------------------------------ Importing the execution report into the coverage database" + local csexe="" + for test in ${QT_TESTS_LIST[@]};do + echo $BUILD_PATH/$test/$test.csexe + cmcsexeimport \ + --csmes=$MERGE_PATH/$MERGE_DIR.csmes \ + --title=$test \ + --csexe=$BUILD_PATH/$test/$test.csexe \ + 2> $LOG_PATH/import_$test.err \ + | tee $LOG_PATH/import_$test.log + done } -function coverageReport() { + +function coverage_report() { REPORT_TYPE="html" - REPORT_CMD="--html=$REPORT_PATH/index" + REPORT_CMD="--html=$REPORT_COCO/index" if [[ "$1" == "csv" ]]; then - REPORT_TYPE="csv" - REPORT_FILE=report_out.csv - REPORT_CMD="--csv-excel=$REPORT_FILE" + REPORT_TYPE="csv" + REPORT_FILE=report_out.csv + REPORT_CMD="--csv-excel=$REPORT_FILE" fi - echo "Generating the coverage report <$REPORT_TYPE>" + echo " ------------------------------ Generating the coverage report <$REPORT_TYPE>" cmreport \ - --csmes=$DENALI_SQUISH.csmes \ + --csmes=$MERGE_PATH/$MERGE_DIR.csmes \ $REPORT_CMD \ - 2> $LOG_PATH/cmreport.err \ - | tee $LOG_PATH/cmreport.log - mv report_out.csv Report/ - echo "Out file location : $(pwd)/Report/$REPORT_FILE" -} + 2> $LOG_PATH/report.err \ + | tee $LOG_PATH/report.log -function copy_TestsResults_IntoServer() { - echo "Copy the reports to server" - cp -rd $REPORT_PATH/* $REPORT_DIR - sync;sync;sync; + if [[ "$1" == "csv" ]]; then + mv report_out.csv report/ + fi + echo " ------------------------------ Out file location : $(pwd)/$REPORT_COCO/$REPORT_FILE" } -if [ "$1" = "--build" ]; then - cleanup - cd $WORKING_DIR - build_with_coverage $DENALI_SQUISH + +##### ---------- MAIN ------------------------------------------------------------------------------------------------- +if [ "$1" == "--build" ]; then + server_coco_check + cleanup_directories + cd $WORKING_PATH + tests_copy_list + tests_read_list + generate_alarm_mapping + for test in ${QT_TESTS_LIST[@]};do + coverage_build $test + done fi -if [ "$1" = "--report" ]; then - create_folders - cd $WORKING_DIR - #coverageMerge # no need to merge since we only running one version of the application - coverageImport - coverageReport "$2" + +if [ "$1" == "--run" ]; then + cd $WORKING_PATH + tests_read_list + tests_run fi -if [ "$1" = "" ]; then + +if [ "$1" == "--merge" ]; then + server_coco_check + cd $WORKING_PATH + tests_read_list + coverage_merge + coverage_import +fi + + +if [ "$1" == "--report" ]; then + server_coco_check + cd $WORKING_PATH + coverage_report "$2" +fi + + +if [ "$1" == "" ]; then echo "Usage:" echo "run.coco.sh " - echo "--build build and instrment the applicaiotn from $HOME/Projects/application" + echo "--build build and instrment the application and tests from $APPLICATION_PATH" + echo "--run run the tests" + echo "--merge merge the test results" echo "--report create the execution report of the ran applicaiton" echo " report type html:default, csv" fi -