security/nss/coverage/report.sh

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rwxr-xr-x

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 #!/bin/bash
     2 #
     3 # This Source Code Form is subject to the terms of the Mozilla Public
     4 # License, v. 2.0. If a copy of the MPL was not distributed with this
     5 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
     7 OS=`uname -s`
     8 ARCH=`uname -p`
     9 SCRIPT_DIR=`pwd`
    10 DATE=`date +%Y-%m-%d`
    12 if [ $# -lt 1 -o $# -gt 3 ]; then
    13     echo "Usage: $0 [securitytip|securityjes5] <date> <architecture>"
    14     exit 1
    15 fi
    17 BRANCH="$1"
    19 if [ "${BRANCH}" != "securitytip" -a "${BRANCH}" != "securityjes5" ]; then
    20     echo "Usage: $0 [securitytip|securityjes5] <date> <architecture>"
    21     exit 1
    22 fi
    24 if [ $# -ge 2 ]; then
    25     DATE=$2
    26 fi
    28 if [ $# -ge 3 ]; then
    29     ARCH=$3
    30 fi
    32 HEADER="Code Coverage - NSS - ${BRANCH} - ${OS}/${ARCH} - ${DATE}"
    34 COV_DIR="/share/builds/mccrel3/security/coverage"
    35 BRANCH_DIR="${COV_DIR}/${BRANCH}"
    36 DATE_DIR="${BRANCH_DIR}/${DATE}-${ARCH}"
    37 CVS_DIR="${DATE_DIR}/cvs_mozilla"
    38 TCOV_DIR="${DATE_DIR}/tcov_mozilla"
    39 OUTPUT="${DATE_DIR}/nss.html"
    41 LIB_PATH="/mozilla/security/nss/lib"
    42 CVS_PATH="${CVS_DIR}${LIB_PATH}"
    43 TCOV_PATH="${TCOV_DIR}${LIB_PATH}"
    45 MIN_GREEN=70
    46 MIN_YELLOW=40
    48 print_header()
    49 {
    50     echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final\">" 
    51     echo "<HTML><HEAD><TITLE>${HEADER}</TITLE></HEAD><BODY>" 
    52     echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"100%\">"
    53     echo "<TR><TH BGCOLOR=\"GREY\"><H2>${HEADER}</H2></TH></TR>"
    54     echo "</TABLE><BR>"
    55 }
    57 print_footer()
    58 {
    59     echo "</BODY></HTML>"
    60 }
    62 print_notes()
    63 {
    64     echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"100%\">"
    65     echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"LIGHTGREY\"><TD><A HREF=\"http://wikihome.sfbay.sun.com/jes-security/Wiki.jsp?page=Code_Coverage_Test_Execution\">Test Execution Notes</A></TD></TR>"
    66     echo "</TABLE><BR>"
    67 }
    69 print_legend()
    70 {
    71     echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"100%\">"
    72     echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"GREY\"><TH>Legend</TH></TR>"
    73     echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"LIGHTGREEN\"><TD>${MIN_GREEN}% - 100% of blocks tested</TD></TR>"
    74     echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"YELLOW\"><TD>${MIN_YELLOW}% - ${MIN_GREEN}% of blocks tested</TD></TR>"
    75     echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"ORANGE\"><TD>0% - ${MIN_YELLOW}% of blocks tested</TD></TR>"
    76     echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"RED\"><TD>File not tested (these files are not included into statistics)</TD></TR>"
    77     echo "</TABLE>"
    78 }
    80 set_color()
    81 {
    82     if [ ${PERCENT_INT} -le ${MIN_YELLOW} ]; then
    83         bgcolor="ORANGE"
    84     elif [ ${PERCENT_INT} -le ${MIN_GREEN} ]; then
    85         bgcolor="YELLOW"
    86     else
    87         bgcolor="LIGHTGREEN"
    88     fi    
    89 }
    91 create_table()
    92 {
    93     echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"100%\">"
    94     echo "<TR><TH BGCOLOR=\"GREY\" COLSPAN=\"2\">${DIR}</TH></TR>"
    95     echo "<TR BGCOLOR=\"DARKGREY\"><TH WIDTH=\"50%\">File</TH>"
    96     echo "<TH>Tested blocks (Tested blocks/Total blocks/Total lines)</TR>"
    97 }
    99 close_table()
   100 {
   101     if [ "${LASTDIR}" != "" ]; then
   102         if [ ${DFILES} -gt 0 ]; then
   103             if [ ${DBLOCKS_TOTAL} -eq 0 ]; then
   104                 PERCENT_INT=0
   105             else
   106                 PERCENT_INT=`expr ${DBLOCKS_EXEC} \* 100 \/ ${DBLOCKS_TOTAL}`
   107             fi
   108             set_color
   110             echo "<TR><TH BGCOLOR=\"${bgcolor}\" COLSPAN=\"2\">Total: ${PERCENT_INT}% (${DBLOCKS_EXEC}/${DBLOCKS_TOTAL})</TH></TR>"
   111         else
   112             echo "<TR><TH BGCOLOR=\"RED\" COLSPAN=\"2\">Total: Not tested</TH></TR>"
   113         fi
   114         echo "</TABLE><BR>"
   115     fi
   116 }
   118 print_line()
   119 {
   120     LINES_TOTAL=`wc -l "${file}" | /usr/bin/awk '{print $1}'`
   122     if [ -r "${TCOV_PATH}/${DIR}/${FILE}" ]; then
   123         BLOCKS_EXEC=`cat "${TCOV_PATH}/${DIR}/${FILE}" | grep "Basic blocks executed" | /usr/bin/awk '{print $1}'`
   124         BLOCKS_TOTAL=`cat "${TCOV_PATH}/${DIR}/${FILE}" | grep "Basic blocks in this file" | /usr/bin/awk '{print $1}'`
   126         DBLOCKS_EXEC=`expr ${DBLOCKS_EXEC} + ${BLOCKS_EXEC}`
   127         DBLOCKS_TOTAL=`expr ${DBLOCKS_TOTAL} + ${BLOCKS_TOTAL}`
   128         TBLOCKS_EXEC=`expr ${TBLOCKS_EXEC} + ${BLOCKS_EXEC}`
   129         TBLOCKS_TOTAL=`expr ${TBLOCKS_TOTAL} + ${BLOCKS_TOTAL}`
   131         TFILES=`expr ${TFILES} + 1`
   132         DFILES=`expr ${DFILES} + 1`
   134         PERCENT_EXEC=`cat "${TCOV_PATH}/${DIR}/${FILE}" | grep "Percent of the file executed" | /usr/bin/awk '{print $1}'`
   135         PERCENT_INT=`echo ${PERCENT_EXEC} | cut -d. -f1`
   136         set_color
   138         echo "<TR><TD BGCOLOR=\"LIGHTGREY\"><A HREF=\"${TCOV_PATH}/${DIR}/${FILE}\">${FILE}</A></TD>"
   139         echo "<TD BGCOLOR=\"${bgcolor}\">${PERCENT_EXEC}% (${BLOCKS_EXEC}/${BLOCKS_TOTAL}/${LINES_TOTAL})</TD></TR>"
   140     else
   141         echo "<TR><TD BGCOLOR=\"LIGHTGREY\"><A HREF=\"${file}\">${FILE}</A></TD>"
   142         echo "<TD BGCOLOR=\"RED\">Not tested (0/?/${LINES_TOTAL})</TD></TR>"
   143     fi
   144 }
   146 print_total()
   147 {
   148     echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"100%\">"
   149     if [ ${TFILES} -gt 0 ]; then
   150         if [ ${TBLOCKS_TOTAL} -eq 0 ]; then
   151             PERCENT_INT=0
   152         else
   153             PERCENT_INT=`expr ${TBLOCKS_EXEC} \* 100 \/ ${TBLOCKS_TOTAL}`
   154         fi
   155         set_color
   157         echo "<TR><TH BGCOLOR=\"${bgcolor}\"><H2>Total: ${PERCENT_INT}% (${TBLOCKS_EXEC}/${TBLOCKS_TOTAL})</H2></TH></TR>"
   158     else
   159         echo "<TR><TH BGCOLOR=\"RED\"><H2>Total: Not tested</H2></TH></TR>"
   160     fi
   161     echo "</TABLE><BR>"
   162 }
   164 process_cmd()
   165 {
   166     LASTDIR=""
   167     TBLOCKS_EXEC=0
   168     TBLOCKS_TOTAL=0
   169     TFILES=0
   171     for dir in `find "${CVS_PATH}" -type d | sort`
   172     do
   173         DIR=`echo "${dir}" | sed "s:^${CVS_PATH}/::"`
   174         for file in `ls -1 ${dir}/*.c 2> /dev/null`
   175         do 
   176             if [ "${DIR}" != "${LASTDIR}" ]; then
   177                 close_table
   178                 create_table 
   180                 LASTDIR="${DIR}";
   181                 DBLOCKS_EXEC=0
   182                 DBLOCKS_TOTAL=0
   183                 DFILES=0
   184             fi
   186             FILE=`echo "${file}" | sed "s:^.*/\(.*.c\):\1:"`
   187             print_line
   188         done
   189     done
   191     close_table
   192     print_total
   193 }
   195 report()
   196 {
   197     print_header > "${OUTPUT}"
   198     print_notes >> "${OUTPUT}"
   199     process_cmd >> "${OUTPUT}"
   200     print_legend >> "${OUTPUT}"
   201     print_footer >> "${OUTPUT}"
   202 }
   204 report
   206 exit 0

mercurial