security/nss/coverage/report.sh

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/security/nss/coverage/report.sh	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,206 @@
     1.4 +#!/bin/bash
     1.5 +#
     1.6 +# This Source Code Form is subject to the terms of the Mozilla Public
     1.7 +# License, v. 2.0. If a copy of the MPL was not distributed with this
     1.8 +# file, You can obtain one at http://mozilla.org/MPL/2.0/.
     1.9 +
    1.10 +OS=`uname -s`
    1.11 +ARCH=`uname -p`
    1.12 +SCRIPT_DIR=`pwd`
    1.13 +DATE=`date +%Y-%m-%d`
    1.14 +
    1.15 +if [ $# -lt 1 -o $# -gt 3 ]; then
    1.16 +    echo "Usage: $0 [securitytip|securityjes5] <date> <architecture>"
    1.17 +    exit 1
    1.18 +fi
    1.19 +
    1.20 +BRANCH="$1"
    1.21 +
    1.22 +if [ "${BRANCH}" != "securitytip" -a "${BRANCH}" != "securityjes5" ]; then
    1.23 +    echo "Usage: $0 [securitytip|securityjes5] <date> <architecture>"
    1.24 +    exit 1
    1.25 +fi
    1.26 +
    1.27 +if [ $# -ge 2 ]; then
    1.28 +    DATE=$2
    1.29 +fi
    1.30 +
    1.31 +if [ $# -ge 3 ]; then
    1.32 +    ARCH=$3
    1.33 +fi
    1.34 +
    1.35 +HEADER="Code Coverage - NSS - ${BRANCH} - ${OS}/${ARCH} - ${DATE}"
    1.36 +
    1.37 +COV_DIR="/share/builds/mccrel3/security/coverage"
    1.38 +BRANCH_DIR="${COV_DIR}/${BRANCH}"
    1.39 +DATE_DIR="${BRANCH_DIR}/${DATE}-${ARCH}"
    1.40 +CVS_DIR="${DATE_DIR}/cvs_mozilla"
    1.41 +TCOV_DIR="${DATE_DIR}/tcov_mozilla"
    1.42 +OUTPUT="${DATE_DIR}/nss.html"
    1.43 +
    1.44 +LIB_PATH="/mozilla/security/nss/lib"
    1.45 +CVS_PATH="${CVS_DIR}${LIB_PATH}"
    1.46 +TCOV_PATH="${TCOV_DIR}${LIB_PATH}"
    1.47 +
    1.48 +MIN_GREEN=70
    1.49 +MIN_YELLOW=40
    1.50 +
    1.51 +print_header()
    1.52 +{
    1.53 +    echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2 Final\">" 
    1.54 +    echo "<HTML><HEAD><TITLE>${HEADER}</TITLE></HEAD><BODY>" 
    1.55 +    echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"100%\">"
    1.56 +    echo "<TR><TH BGCOLOR=\"GREY\"><H2>${HEADER}</H2></TH></TR>"
    1.57 +    echo "</TABLE><BR>"
    1.58 +}
    1.59 +
    1.60 +print_footer()
    1.61 +{
    1.62 +    echo "</BODY></HTML>"
    1.63 +}
    1.64 +
    1.65 +print_notes()
    1.66 +{
    1.67 +    echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"100%\">"
    1.68 +    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>"
    1.69 +    echo "</TABLE><BR>"
    1.70 +}
    1.71 +
    1.72 +print_legend()
    1.73 +{
    1.74 +    echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"100%\">"
    1.75 +    echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"GREY\"><TH>Legend</TH></TR>"
    1.76 +    echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"LIGHTGREEN\"><TD>${MIN_GREEN}% - 100% of blocks tested</TD></TR>"
    1.77 +    echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"YELLOW\"><TD>${MIN_YELLOW}% - ${MIN_GREEN}% of blocks tested</TD></TR>"
    1.78 +    echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"ORANGE\"><TD>0% - ${MIN_YELLOW}% of blocks tested</TD></TR>"
    1.79 +    echo "<TR ALIGN=\"CENTER\" BGCOLOR=\"RED\"><TD>File not tested (these files are not included into statistics)</TD></TR>"
    1.80 +    echo "</TABLE>"
    1.81 +}
    1.82 +
    1.83 +set_color()
    1.84 +{
    1.85 +    if [ ${PERCENT_INT} -le ${MIN_YELLOW} ]; then
    1.86 +        bgcolor="ORANGE"
    1.87 +    elif [ ${PERCENT_INT} -le ${MIN_GREEN} ]; then
    1.88 +        bgcolor="YELLOW"
    1.89 +    else
    1.90 +        bgcolor="LIGHTGREEN"
    1.91 +    fi    
    1.92 +}
    1.93 +
    1.94 +create_table()
    1.95 +{
    1.96 +    echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"100%\">"
    1.97 +    echo "<TR><TH BGCOLOR=\"GREY\" COLSPAN=\"2\">${DIR}</TH></TR>"
    1.98 +    echo "<TR BGCOLOR=\"DARKGREY\"><TH WIDTH=\"50%\">File</TH>"
    1.99 +    echo "<TH>Tested blocks (Tested blocks/Total blocks/Total lines)</TR>"
   1.100 +}
   1.101 +
   1.102 +close_table()
   1.103 +{
   1.104 +    if [ "${LASTDIR}" != "" ]; then
   1.105 +        if [ ${DFILES} -gt 0 ]; then
   1.106 +            if [ ${DBLOCKS_TOTAL} -eq 0 ]; then
   1.107 +                PERCENT_INT=0
   1.108 +            else
   1.109 +                PERCENT_INT=`expr ${DBLOCKS_EXEC} \* 100 \/ ${DBLOCKS_TOTAL}`
   1.110 +            fi
   1.111 +            set_color
   1.112 +
   1.113 +            echo "<TR><TH BGCOLOR=\"${bgcolor}\" COLSPAN=\"2\">Total: ${PERCENT_INT}% (${DBLOCKS_EXEC}/${DBLOCKS_TOTAL})</TH></TR>"
   1.114 +        else
   1.115 +            echo "<TR><TH BGCOLOR=\"RED\" COLSPAN=\"2\">Total: Not tested</TH></TR>"
   1.116 +        fi
   1.117 +        echo "</TABLE><BR>"
   1.118 +    fi
   1.119 +}
   1.120 +
   1.121 +print_line()
   1.122 +{
   1.123 +    LINES_TOTAL=`wc -l "${file}" | /usr/bin/awk '{print $1}'`
   1.124 +
   1.125 +    if [ -r "${TCOV_PATH}/${DIR}/${FILE}" ]; then
   1.126 +        BLOCKS_EXEC=`cat "${TCOV_PATH}/${DIR}/${FILE}" | grep "Basic blocks executed" | /usr/bin/awk '{print $1}'`
   1.127 +        BLOCKS_TOTAL=`cat "${TCOV_PATH}/${DIR}/${FILE}" | grep "Basic blocks in this file" | /usr/bin/awk '{print $1}'`
   1.128 +
   1.129 +        DBLOCKS_EXEC=`expr ${DBLOCKS_EXEC} + ${BLOCKS_EXEC}`
   1.130 +        DBLOCKS_TOTAL=`expr ${DBLOCKS_TOTAL} + ${BLOCKS_TOTAL}`
   1.131 +        TBLOCKS_EXEC=`expr ${TBLOCKS_EXEC} + ${BLOCKS_EXEC}`
   1.132 +        TBLOCKS_TOTAL=`expr ${TBLOCKS_TOTAL} + ${BLOCKS_TOTAL}`
   1.133 +
   1.134 +        TFILES=`expr ${TFILES} + 1`
   1.135 +        DFILES=`expr ${DFILES} + 1`
   1.136 +
   1.137 +        PERCENT_EXEC=`cat "${TCOV_PATH}/${DIR}/${FILE}" | grep "Percent of the file executed" | /usr/bin/awk '{print $1}'`
   1.138 +        PERCENT_INT=`echo ${PERCENT_EXEC} | cut -d. -f1`
   1.139 +        set_color
   1.140 +
   1.141 +        echo "<TR><TD BGCOLOR=\"LIGHTGREY\"><A HREF=\"${TCOV_PATH}/${DIR}/${FILE}\">${FILE}</A></TD>"
   1.142 +        echo "<TD BGCOLOR=\"${bgcolor}\">${PERCENT_EXEC}% (${BLOCKS_EXEC}/${BLOCKS_TOTAL}/${LINES_TOTAL})</TD></TR>"
   1.143 +    else
   1.144 +        echo "<TR><TD BGCOLOR=\"LIGHTGREY\"><A HREF=\"${file}\">${FILE}</A></TD>"
   1.145 +        echo "<TD BGCOLOR=\"RED\">Not tested (0/?/${LINES_TOTAL})</TD></TR>"
   1.146 +    fi
   1.147 +}
   1.148 +
   1.149 +print_total()
   1.150 +{
   1.151 +    echo "<TABLE ALIGN=\"CENTER\" WIDTH=\"100%\">"
   1.152 +    if [ ${TFILES} -gt 0 ]; then
   1.153 +        if [ ${TBLOCKS_TOTAL} -eq 0 ]; then
   1.154 +            PERCENT_INT=0
   1.155 +        else
   1.156 +            PERCENT_INT=`expr ${TBLOCKS_EXEC} \* 100 \/ ${TBLOCKS_TOTAL}`
   1.157 +        fi
   1.158 +        set_color
   1.159 +
   1.160 +        echo "<TR><TH BGCOLOR=\"${bgcolor}\"><H2>Total: ${PERCENT_INT}% (${TBLOCKS_EXEC}/${TBLOCKS_TOTAL})</H2></TH></TR>"
   1.161 +    else
   1.162 +        echo "<TR><TH BGCOLOR=\"RED\"><H2>Total: Not tested</H2></TH></TR>"
   1.163 +    fi
   1.164 +    echo "</TABLE><BR>"
   1.165 +}
   1.166 +
   1.167 +process_cmd()
   1.168 +{
   1.169 +    LASTDIR=""
   1.170 +    TBLOCKS_EXEC=0
   1.171 +    TBLOCKS_TOTAL=0
   1.172 +    TFILES=0
   1.173 +
   1.174 +    for dir in `find "${CVS_PATH}" -type d | sort`
   1.175 +    do
   1.176 +        DIR=`echo "${dir}" | sed "s:^${CVS_PATH}/::"`
   1.177 +        for file in `ls -1 ${dir}/*.c 2> /dev/null`
   1.178 +        do 
   1.179 +            if [ "${DIR}" != "${LASTDIR}" ]; then
   1.180 +                close_table
   1.181 +                create_table 
   1.182 +
   1.183 +                LASTDIR="${DIR}";
   1.184 +                DBLOCKS_EXEC=0
   1.185 +                DBLOCKS_TOTAL=0
   1.186 +                DFILES=0
   1.187 +            fi
   1.188 +
   1.189 +            FILE=`echo "${file}" | sed "s:^.*/\(.*.c\):\1:"`
   1.190 +            print_line
   1.191 +        done
   1.192 +    done
   1.193 +
   1.194 +    close_table
   1.195 +    print_total
   1.196 +}
   1.197 +
   1.198 +report()
   1.199 +{
   1.200 +    print_header > "${OUTPUT}"
   1.201 +    print_notes >> "${OUTPUT}"
   1.202 +    process_cmd >> "${OUTPUT}"
   1.203 +    print_legend >> "${OUTPUT}"
   1.204 +    print_footer >> "${OUTPUT}"
   1.205 +}
   1.206 +
   1.207 +report
   1.208 +
   1.209 +exit 0

mercurial