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