Index: local/run.coco.sh =================================================================== diff -u -r4294f85d44fb33898b6550015551dd8f67547013 -r88bb5f856ee15d3678a02ef142a2de819b33b1c3 --- local/run.coco.sh (.../run.coco.sh) (revision 4294f85d44fb33898b6550015551dd8f67547013) +++ local/run.coco.sh (.../run.coco.sh) (revision 88bb5f856ee15d3678a02ef142a2de819b33b1c3) @@ -1,4 +1,6 @@ #!/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 @@ -14,16 +16,17 @@ APPLICATION_DIR=application TESTSUITE_DIR=testsuites -REPORT_TYPE="html" -COVERAGE_METHOD="" -COVERAGE_NAME="" WORKING_DIR=coco LOG_DIR=logs BUILD_DIR=build MERGE_DIR=merge REPORT_DIR=report DENALI_SQUISH=denaliSquish +REPORT_TYPE="html" +COVERAGE_METHOD="" +COVERAGE_NAME="" + PROJECT_PATH=$HOME/Projects WORKING_PATH=$HOME/coco REPORT_PATH=$WORKING_PATH/$REPORT_DIR @@ -34,6 +37,7 @@ 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 @@ -43,35 +47,37 @@ REPORT_QTTEST=$REPORT_PATH/qttest SEPARATION_LINE="------------------------------------------------------------------------------" -##################################################################################### -# Helper functions -##################################################################################### - +##### ---------- HELPER ----------------------------------------------------------------------------------------------- function generate_alarm_mapping() { + echo " ------------------------------ Generating the alarms mapping" local start_time=`date` echo $SEPARATION_LINE 2>&1 | tee -a $SUMMARY_LOG echo "Generating the alarms mapping - $start_time" 2>&1 | tee -a $SUMMARY_LOG # alarmMapping must run in the application folder. - pushd $APPLICATION_PATH # save current directory and switch to $APPLICATION_PATH /Projects/application + pushd $APPLICATION_PATH ./alarmMapping.sh - local end_time=`date` elapsed_time "$start_time" "$end_time" "Alarms mapping completed - elapsed time" - popd # restore previous directory + popd } -# Check coco server License and coco server connection + +##### ---------- SERVER ----------------------------------------------------------------------------------------------- +##### ---------- SERVER COCO ------------------------------------------------------------------------------------------ function server_coco_check() { ping "$COCO_SERVER" -c 2 -W 1 if [ "$?" != "0" ]; then + echo " ------------------------------ Coco Lic Server unreachable" echo "*** Coco Lic Server unreachable ***" 2>&1 | tee -a $SUMMARY_LOG exit $ERR_COCO_SERVER_CONNECTION fi } -# launch SERVER SQUISH + +##### ---------- SERVER SQUISH ---------------------------------------------------------------------------------------- function server_squish_start() { + echo " ------------------------------ Starting the Squish Server" echo "Starting the Squish Server" 2>&1 | tee -a $SUMMARY_LOG # configuring the server $SQUISH_SERVER \ @@ -81,26 +87,31 @@ | tee $LOG_PATH/squishqtserver.log # running the server - $SQUISH_SERVER & # must have '&' + $SQUISH_SERVER & # must have '&' } + function server_squish_run() { + echo " ------------------------------ Starting tests $TESTSUITE_PATH" echo "Starting tests $TESTSUITE_PATH" 2>&1 | tee -a $SUMMARY_LOG - $SQUISH_RUNNER \ - --testsuite $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" echo "Stopping the Squish Server" 2>&1 | tee -a $SUMMARY_LOG $SQUISH_SERVER --stop } -function cleanup_directories() { - echo "Removing directories..." 2>&1 | tee -a $SUMMARY_LOG +##### ---------- INIT ------------------------------------------------------------------------------------------------- +function cleanup_directories() { + echo "Removing directories..." 2>&1 | tee -a $SUMMARY_LOG rm -frd $WORKING_PATH mkdir -p $WORKING_PATH mkdir -p $LOG_PATH @@ -111,16 +122,18 @@ mkdir -p $REPORT_QTTEST } + date_to_timestamp() { date -d "$1" +"%s" } + function elapsed_time() { start_timestamp=$(date_to_timestamp "$1") end_timestamp=$(date_to_timestamp "$2") title="Elapsed time" - # Check if $3 has any value + # Check if $3 (title) has any value if [ -n "$3" ]; then title="$3" fi @@ -179,7 +192,7 @@ COVERAGE_NAME="_function" ;; *) - # Handle unknown parameters or provide usage information + # Handle unknown parameters ;; esac done @@ -193,7 +206,7 @@ function copy_report_folder() { - # make a copy of the report folder using folder name with coverage emthod used + # make a copy of the report folder using folder name with coverage method used if [ -d "$REPORT_PATH" ]; then local new_name="$WORKING_PATH/report$1$COVERAGE_NAME" @@ -207,6 +220,7 @@ fi } + function usage(){ echo "Usage:" echo "run.coco.sh [options]" @@ -225,43 +239,45 @@ echo " --line Report line coverage measurements" echo " --function Report function coverage measurements" echo "" - echo " --reports [type] [coverage method] Create seperate reports" + echo " --reports [type] [coverage method] Create separate reports" echo " --all [type] [coverage method] Perform all phases: Build, run, merge, and reports" } -##################################################################################### -# Test functions -##################################################################################### +##### ---------- 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:" 2>&1 | tee -a $SUMMARY_LOG + # read a line at a time from file named $QT_TESTS_LIST_FILE. + echo "Test List:" 2>&1 | tee -a $SUMMARY_LOG + 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" 2>&1 | tee -a $SUMMARY_LOG + echo " - $test" 2>&1 | tee -a $SUMMARY_LOG fi done < "$QT_TESTS_LIST_FILE" } + function tests_setup() { if [ $($VCAN_SCRIPT) -eq 0 ];then + echo " ------------------------------ Canbus setup failed" echo "*** Canbus setup failed ***" 2>&1 | tee -a $SUMMARY_LOG exit $ERR_CANBUS_SETUP fi } + function tests_run() { for test in ${QT_TESTS_LIST[@]};do pushd $BUILD_PATH/$test @@ -278,12 +294,14 @@ done } + +##### ---------- COVERAGE --------------------------------------------------------------------------------------------- function coverage_build() { + echo " ------------------------------ Run qmake" + echo $(pwd) local start_time=`date` echo $SEPARATION_LINE 2>&1 | tee -a $SUMMARY_LOG - echo "Building - $1 - $start_time" 2>&1 | tee -a $SUMMARY_LOG - - echo $(pwd) + echo "Building - $1 - $start_time" 2>&1 | tee -a $SUMMARY_LOG $QT_PATH/qmake \ $APPLICATION_PATH/denali.pro \ @@ -293,30 +311,28 @@ TARGET="$BUILD_PATH/$1/$1" echo "Run make" - /usr/bin/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" local end_time=`date` elapsed_time "$start_time" "$end_time" "Building completed - elapsed time" } + function coverage_merge() { - ########################################################################################### # Use utility "cmmerge" to merge several instrumentation databases (.csmes file) together - # It behaves like the CoverageBrowser # cmmerge -o ... - ########################################################################################### - - # Get all csmes reports from each test case local start_time=`date` echo $SEPARATION_LINE 2>&1 | tee -a $SUMMARY_LOG echo "Merging the excecution report databases - $start_time" 2>&1 | tee -a $SUMMARY_LOG - + + echo " ------------------------------ Merging the excecution report databases" local csmes="" + # Get all csmes reports from each test case for test in ${QT_TESTS_LIST[@]};do csmes+="$BUILD_PATH/$test/$test.csmes " done @@ -331,11 +347,12 @@ elapsed_time "$start_time" "$end_time" "Merging completed - elapsed time" } + function coverage_import() { local start_time=`date` echo $SEPARATION_LINE 2>&1 | tee -a $SUMMARY_LOG echo "Importing execution report into coverage database - $start_time" 2>&1 | tee -a $SUMMARY_LOG - + echo " ------------------------------ Importing the execution report into the coverage database" local csexe="" for test in ${QT_TESTS_LIST[@]};do echo $BUILD_PATH/$test/$test.csexe @@ -351,18 +368,17 @@ elapsed_time "$start_time" "$end_time" "Importing completed - elapsed time" } + function coverage_report() { - ################################################################################################ - # cmreport – Code coverage report generation utilityt - # + # cmreport – Code coverage report generation utility # Coverage method options # --coverage-mcc: Report multiple condition code coverage measurements. # --coverage-mcdc: Report MC/DC coverage measurements. # --coverage-condition: Report condition coverage measurements. # --coverage-decision: Report decision coverage measurements. # --line-coverage: Report line coverage measurements. # --function-coverage: Report function coverage measurements. - ############################################################################################### + # #REPORT_TYPE="html" REPORT_CMD="--html=$REPORT_COCO/index" @@ -371,11 +387,10 @@ REPORT_FILE=report_out.csv REPORT_CMD="--csv-excel=$REPORT_FILE" fi - local start_time=`date` echo $SEPARATION_LINE 2>&1 | tee -a $SUMMARY_LOG echo "Generating coverage report - $start_time" 2>&1 | tee -a $SUMMARY_LOG - + echo " ------------------------------ Generating the coverage report <$REPORT_TYPE>" cmreport \ $COVERAGE_METHOD \ --csmes=$MERGE_PATH/$MERGE_DIR.csmes \ @@ -386,23 +401,21 @@ if [[ "$REPORT_TYPE" == "csv" ]]; then mv report_out.csv report/ fi - + echo " ------------------------------ Out file location : $(pwd)/$REPORT_COCO/$REPORT_FILE" local end_time=`date` echo "Single report generated: $(pwd)/$REPORT_COCO/$REPORT_FILE - $end_time" 2>&1 | tee -a $SUMMARY_LOG elapsed_time "$start_time" "$end_time" "" echo "" } + function separate_coverage_reports() { echo "Processing separate execution reports" > $LOG_PATH/$MERGE_DIR.err | tee $LOG_PATH/$MERGE_DIR.log - - ################################################################################## + # Each Loop iteration do: # 1) Get csmes value # 2) Execute coverage using coco command "cmcsexeimport" # 3) Execute coverage report using coco command "cmreport" - ################################################################################## - for test in ${QT_TESTS_LIST[@]};do local start_time=`date` csmes="$BUILD_PATH/$test/$test.csmes" @@ -417,7 +430,6 @@ #REPORT_TYPE="html" REPORT_CMD="--html=$REPORT_COCO/$REPORT_FILE" # .html - echo $SEPARATION_LINE 2>&1 | tee -a $SUMMARY_LOG echo "Generating report ${REPORT_FILE}.${REPORT_TYPE} - $start_time" 2>&1 | tee -a $SUMMARY_LOG @@ -426,16 +438,11 @@ REPORT_FILE="${REPORT_FILE}.csv" REPORT_CMD="--csv-excel=$REPORT_FILE" fi - - echo "########### ########### $COVERAGE_METHOD #########" - - - #cmreport $COVERAGE_METHOD --csmes=$csmes $REPORT_CMD 2> $LOG_PATH/report.err | tee $LOG_PATH/report.log - + echo "$COVERAGE_METHOD" + cmreport \ $COVERAGE_METHOD --csmes=$csmes $REPORT_CMD \ 2> $LOG_PATH/report.err | tee $LOG_PATH/report.log - if [[ "$REPORT_TYPE" == "csv" ]]; then mv report_out.csv report/ @@ -448,17 +455,21 @@ done } -##################################################################################### -# Application phases based on optional parameter -##################################################################################### +# Different functions callld from main entry that correspond to the phases: +# build +# run +# merge +# report +# reports +# all function build_phase() { server_coco_check cleanup_directories local start_time=`date` - echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG - echo "Starting Build Phase $start_time" 2>&1 | tee -a $SUMMARY_LOG - echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG + echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG + echo "Starting Build Phase $start_time" 2>&1 | tee -a $SUMMARY_LOG + echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG cd $WORKING_PATH tests_copy_list @@ -474,12 +485,13 @@ elapsed_time "$start_time" "$end_time" "Build phase elapsedd time" } + function run_phase() { touch $LOG_PATH/sun_summary.log local start_time=`date` - echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG - echo "Starting Run Phase $start_time" 2>&1 | tee -a $SUMMARY_LOG - echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG + echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG + echo "Starting Run Phase $start_time" 2>&1 | tee -a $SUMMARY_LOG + echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG cd $WORKING_PATH tests_read_list tests_run @@ -488,11 +500,12 @@ elapsed_time "$start_time" "$end_time" "Run phase elapsed time" } + function merge_phase() { local start_time=`date` - echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG - echo "Starting Merge Phase $start_time" 2>&1 | tee -a $SUMMARY_LOG - echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG + echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG + echo "Starting Merge Phase $start_time" 2>&1 | tee -a $SUMMARY_LOG + echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG server_coco_check cd $WORKING_PATH tests_read_list # generate Q_TESTS_LIST @@ -503,13 +516,14 @@ elapsed_time "$start_time" "$end_time" "Merge phase elapsed time" } + function single_report_phase() { local start_time=`date` - echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG - echo "Generating SingleReport Phase $start_time" 2>&1 | tee -a $SUMMARY_LOG - echo "Coverage Method: $COVERAGE_METHOD" 2>&1 | tee -a $SUMMARY_LOG - echo "Report Type: $REPORT_TYPE" 2>&1 | tee -a $SUMMARY_LOG - echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG + echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG + echo "Generating SingleReport Phase $start_time" 2>&1 | tee -a $SUMMARY_LOG + echo "Coverage Method: $COVERAGE_METHOD" 2>&1 | tee -a $SUMMARY_LOG + echo "Report Type: $REPORT_TYPE" 2>&1 | tee -a $SUMMARY_LOG + echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG server_coco_check cd $WORKING_PATH coverage_report "$2" @@ -518,13 +532,14 @@ elapsed_time "$start_time" "$end_time" "Single report generation phase elapsed time " } + function separate_report_phase() { local start_time=`date` - echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG - echo "Generating Separte Reports Phase $start_time" 2>&1 | tee -a $SUMMARY_LOG - echo "Coverage Method: $COVERAGE_METHOD" 2>&1 | tee -a $SUMMARY_LOG - echo "Report Type: $REPORT_TYPE" 2>&1 | tee -a $SUMMARY_LOG - echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG + echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG + echo "Generating Separte Reports Phase $start_time" 2>&1 | tee -a $SUMMARY_LOG + echo "Coverage Method: $COVERAGE_METHOD" 2>&1 | tee -a $SUMMARY_LOG + echo "Report Type: $REPORT_TYPE" 2>&1 | tee -a $SUMMARY_LOG + echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG server_coco_check cd $WORKING_PATH tests_read_list # generate Q_TESTS_LIST @@ -534,31 +549,30 @@ elapsed_time "$start_time" "$end_time" "Seperate report generation phase elapsed time" } -##################################################################################### -# M a i n E n t r y -##################################################################################### +##### ---------- MAIN ------------------------------------------------------------------------------------------------- clear -# if option --help or no parameters are provided then usage will appear and exit the scrpt +# if --help or no parameters provided then show usage if [ "$1" == "" ] || [ "$1" == "--help" ]; then usage exit 0 fi -# Check if the SUMMARY_LOG file exists, create it +# Check if the SUMMARY_LOG file exists, if not create it # summary log provides brief description of script task being executed, timestamp, and elapsed time -# summary.log will be recreated when build option is triggered, else entries will be appened +# summary.log will be recreated when build option is triggered. +# Entries will be appended since last build option SUMMARY_LOG="$LOG_PATH/summary.log" if [ ! -f "$SUMMARY_LOG" ]; then - # Create the log file with a time and date header - echo "###########################################################################" > "$SUMMARY_LOG" - echo "Summary Log - created on $(date)" >> "$SUMMARY_LOG" - echo "###########################################################################" >> "$SUMMARY_LOG" - echo " " >> "$SUMMARY_LOG" + # Create the log file with a timestamp header + echo "$SEPARATION_LINE" > "$SUMMARY_LOG" + echo "Summary Log - created on $(date)" >> "$SUMMARY_LOG" + echo "$SEPARATION_LINE" >> "$SUMMARY_LOG" + echo " " >> "$SUMMARY_LOG" fi -app_start_time=`date` # to calculate entire script execution elapsed time +app_start_time=`date` # used to calculate entire script elapsed time at the end if [ "$1" == "--build" ]; then build_phase @@ -581,15 +595,14 @@ merge_phase single_report_phase separate_report_phase - copy_report_folder "_all" # make a copy of the report folder using coveerage method used + copy_report_folder "_all" # make a copy of the report folder using coverage method used else usage exit 1 fi -echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG -echo "End of script - $(date)" 2>&1 | tee -a $SUMMARY_LOG -echo "###########################################################################" 2>&1 | tee -a $SUMMARY_LOG +echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG +echo "End of script - $(date)" 2>&1 | tee -a $SUMMARY_LOG +echo "$SEPARATION_LINE" 2>&1 | tee -a $SUMMARY_LOG app_end_time=`date` -elapsed_time "$app_start_time" "$app_end_time" "Total phase(s) elapsed time" - +elapsed_time "$app_start_time" "$app_end_time" "Total phase(s) elapsed time" \ No newline at end of file