security/nss/coverage/report.sh

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:6e6b23fed8df
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/.
6
7 OS=`uname -s`
8 ARCH=`uname -p`
9 SCRIPT_DIR=`pwd`
10 DATE=`date +%Y-%m-%d`
11
12 if [ $# -lt 1 -o $# -gt 3 ]; then
13 echo "Usage: $0 [securitytip|securityjes5] <date> <architecture>"
14 exit 1
15 fi
16
17 BRANCH="$1"
18
19 if [ "${BRANCH}" != "securitytip" -a "${BRANCH}" != "securityjes5" ]; then
20 echo "Usage: $0 [securitytip|securityjes5] <date> <architecture>"
21 exit 1
22 fi
23
24 if [ $# -ge 2 ]; then
25 DATE=$2
26 fi
27
28 if [ $# -ge 3 ]; then
29 ARCH=$3
30 fi
31
32 HEADER="Code Coverage - NSS - ${BRANCH} - ${OS}/${ARCH} - ${DATE}"
33
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"
40
41 LIB_PATH="/mozilla/security/nss/lib"
42 CVS_PATH="${CVS_DIR}${LIB_PATH}"
43 TCOV_PATH="${TCOV_DIR}${LIB_PATH}"
44
45 MIN_GREEN=70
46 MIN_YELLOW=40
47
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 }
56
57 print_footer()
58 {
59 echo "</BODY></HTML>"
60 }
61
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 }
68
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 }
79
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 }
90
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 }
98
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
109
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 }
117
118 print_line()
119 {
120 LINES_TOTAL=`wc -l "${file}" | /usr/bin/awk '{print $1}'`
121
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}'`
125
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}`
130
131 TFILES=`expr ${TFILES} + 1`
132 DFILES=`expr ${DFILES} + 1`
133
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
137
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 }
145
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
156
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 }
163
164 process_cmd()
165 {
166 LASTDIR=""
167 TBLOCKS_EXEC=0
168 TBLOCKS_TOTAL=0
169 TFILES=0
170
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
179
180 LASTDIR="${DIR}";
181 DBLOCKS_EXEC=0
182 DBLOCKS_TOTAL=0
183 DFILES=0
184 fi
185
186 FILE=`echo "${file}" | sed "s:^.*/\(.*.c\):\1:"`
187 print_line
188 done
189 done
190
191 close_table
192 print_total
193 }
194
195 report()
196 {
197 print_header > "${OUTPUT}"
198 print_notes >> "${OUTPUT}"
199 process_cmd >> "${OUTPUT}"
200 print_legend >> "${OUTPUT}"
201 print_footer >> "${OUTPUT}"
202 }
203
204 report
205
206 exit 0

mercurial