|
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 |