#!/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.15.10 QT_PATH="/opt/Qt$QT_VER/$QT_VER/gcc_64/bin" 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 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 VCAN_SCRIPT=$PROJECT_PATH/scripts/setupCAN/setupVCAN.sh SQUISH_SERVER=/opt/squish-for-qt-7.1-20230505-1514/bin/squishserver SQUISH_RUNNER=/opt/squish-for-qt-7.1-20230505-1514/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 # save current directory and switch to $APPLICATION_PATH /Projects/application ./alarmMapping.sh popd # restore previous directory } ##### ---------- 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 } ##### ---------- 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 $TESTSUITE_PATH" $SQUISH_RUNNER \ --testsuite $TESTSUITE_PATH \ --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 } ##### ---------- TESTS ------------------------------------------------------------------------------------------------ function tests_copy_list() { cp $QT_TESTS_LIST_PATH/$QT_TESTS_LIST_FILE $WORKING_PATH } function tests_read_list() { QT_TESTS_LIST=() # initialize empty array # read a file $QT_TESTS_LIST_FILE. read each line echo " ------------------------------ Test List:" while read -r line do # remove leading spaces, remove lines that starts with #, store result in test test=`echo $line | sed -e 's/^[[:space:]]*//' | sed -e '/^#/d'` # if test is not empty then add it to the array 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_PATH/qmake \ $APPLICATION_PATH/denali.pro \ -spec linux-g++ \ CONFIG+="$1" \ CONFIG+=CodeCoverage \ TARGET="$BUILD_PATH/$1/$1" echo "Run make" /usr/bin/make \ LINK=csg++ AR=csar CXX=csg++ CC=csgcc -j4 \ 2> "$LOG_PATH/build_$1".err \ | tee "$LOG_PATH/build_$1".log /usr/bin/make clean rm *.csmes echo " ------------------------------ Cleaned for next build" } function coverage_merge() { # MMSS 1 Get all csmes reports from each test case echo " ------------------------------ Merging the excecution report databases" local csmes="" for test in ${QT_TESTS_LIST[@]};do csmes+="$BUILD_PATH/$test/$test.csmes " done cmmerge \ -o $MERGE_PATH/$MERGE_DIR.csmes \ $csmes \ 2> $LOG_PATH/$MERGE_DIR.err \ | tee $LOG_PATH/$MERGE_DIR.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 coverage_report() { REPORT_TYPE="html" REPORT_CMD="--html=$REPORT_COCO/index" if [[ "$1" == "csv" ]]; then REPORT_TYPE="csv" REPORT_FILE=report_out.csv REPORT_CMD="--csv-excel=$REPORT_FILE" fi echo " ------------------------------ Generating the coverage report <$REPORT_TYPE>" cmreport \ --csmes=$MERGE_PATH/$MERGE_DIR.csmes \ $REPORT_CMD \ 2> $LOG_PATH/report.err \ | tee $LOG_PATH/report.log if [[ "$1" == "csv" ]]; then mv report_out.csv report/ fi echo " ------------------------------ Out file location : $(pwd)/$REPORT_COCO/$REPORT_FILE" } function coverage_reports() { echo "processing separate execution reports" > $LOG_PATH/$MERGE_DIR.err | tee $LOG_PATH/$MERGE_DIR.log ############################################################################################# # # in each Loop eteration do the following: # 1) get csmes value # 2) Using $scmes variable execute coverage import command "cmcsexeimport" # 3) Using $cscmes execute coverage report command "cmreport" # ########################################################################################### for test in ${QT_TESTS_LIST[@]};do csmes="$BUILD_PATH/$test/$test.csmes" # coverage import echo $BUILD_PATH/$test/$test.csexe cmcsexeimport --csmes=$csmes --title==$test --csexe=$BUILD_PATH/$test/$test.csexe \ 2>> $LOG_PATH/import_$test.err | tee $LOG_PATH/import_$test.log fname=$(basename "$csmes") # remove path REPORT_FILE="${fname%.*}" # remove extension REPORT_TYPE="html" REPORT_CMD="--html=$REPORT_COCO/$REPORT_FILE" # .html echo "--------- Generating report $REPORT_FILE" if [[ "$1" == "csv" ]]; then REPORT_TYPE="csv" REPORT_FILE="${REPORT_FILE}.csv" REPORT_CMD="--csv-excel=$REPORT_FILE" fi echo " ------------------------------ Generating the coverage report <$REPORT_TYPE>" cmreport --csmes=$csmes $REPORT_CMD 2>> $LOG_PATH/report.err | tee $LOG_PATH/report.log if [[ "$1" == "csv" ]]; then mv report_out.csv report/ fi echo " ------------------------------ Out file location : $(pwd)/$REPORT_COCO/$REPORT_FILE" done } ##### ---------- 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" == "--run" ]; then cd $WORKING_PATH tests_read_list tests_run fi if [ "$1" == "--merge" ]; then server_coco_check cd $WORKING_PATH tests_read_list # generate Q_TESTS_LIST coverage_merge coverage_import fi if [ "$1" == "--report" ]; then server_coco_check cd $WORKING_PATH coverage_report "$2" fi if [ "$1" == "--reports" ]; then server_coco_check cd $WORKING_PATH tests_read_list # generate Q_TESTS_LIST coverage_reports "$2" fi if [ "$1" == "" ]; then echo "Usage:" echo "run.coco.sh " 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" echo "--reports Create seperate reports of the run applicaiton" echo " Report type html:default, csv" fi