|
1 #! /bin/bash |
|
2 |
|
3 # Ensure a failure of the first command inside a pipe |
|
4 # won't be hidden by commands later in the pipe. |
|
5 # (e.g. as in ./dosomething | grep) |
|
6 |
|
7 set -o pipefail |
|
8 |
|
9 proc_args() |
|
10 { |
|
11 while [ -n "$1" ]; do |
|
12 OPT=$(echo $1 | cut -d= -f1) |
|
13 VAL=$(echo $1 | cut -d= -f2) |
|
14 |
|
15 case $OPT in |
|
16 "--build-nss") |
|
17 BUILD_NSS=1 |
|
18 ;; |
|
19 "--test-nss") |
|
20 TEST_NSS=1 |
|
21 ;; |
|
22 "--build-jss") |
|
23 BUILD_JSS=1 |
|
24 ;; |
|
25 "--test-jss") |
|
26 TEST_JSS=1 |
|
27 ;; |
|
28 "--memtest") |
|
29 NSS_TESTS="memleak" |
|
30 export NSS_TESTS |
|
31 ;; |
|
32 "--nojsssign") |
|
33 NO_JSS_SIGN=1 |
|
34 ;; |
|
35 *) |
|
36 echo "Usage: $0 ..." |
|
37 echo " --memtest - run the memory leak tests" |
|
38 echo " --nojsssign - try to sign jss" |
|
39 echo " --build-nss" |
|
40 echo " --build-jss" |
|
41 echo " --test-nss" |
|
42 echo " --test-jss" |
|
43 exit 1 |
|
44 ;; |
|
45 esac |
|
46 |
|
47 shift |
|
48 done |
|
49 } |
|
50 |
|
51 set_env() |
|
52 { |
|
53 TOPDIR=$(pwd) |
|
54 HGDIR=$(pwd)$(echo "/hg") |
|
55 OUTPUTDIR=$(pwd)$(echo "/output") |
|
56 LOG_ALL="${OUTPUTDIR}/all.log" |
|
57 LOG_TMP="${OUTPUTDIR}/tmp.log" |
|
58 |
|
59 echo "hello" |grep --line-buffered hello >/dev/null 2>&1 |
|
60 [ $? -eq 0 ] && GREP_BUFFER="--line-buffered" |
|
61 } |
|
62 |
|
63 print_log() |
|
64 { |
|
65 DATE=$(date "+TB [%Y-%m-%d %H:%M:%S]") |
|
66 echo "${DATE} $*" |
|
67 echo "${DATE} $*" >> ${LOG_ALL} |
|
68 } |
|
69 |
|
70 print_result() |
|
71 { |
|
72 TESTNAME=$1 |
|
73 RET=$2 |
|
74 EXP=$3 |
|
75 |
|
76 if [ ${RET} -eq ${EXP} ]; then |
|
77 print_log "${TESTNAME} PASSED" |
|
78 else |
|
79 print_log "${TESTNAME} FAILED" |
|
80 fi |
|
81 } |
|
82 |
|
83 print_env() |
|
84 { |
|
85 print_log "######## Environment variables ########" |
|
86 |
|
87 uname -a | tee -a ${LOG_ALL} |
|
88 if [ -e "/etc/redhat-release" ]; then |
|
89 cat "/etc/redhat-release" | tee -a ${LOG_ALL} |
|
90 fi |
|
91 # don't print the MAIL command, it might contain a password |
|
92 env | grep -v "^MAIL=" | tee -a ${LOG_ALL} |
|
93 } |
|
94 |
|
95 set_cycle() |
|
96 { |
|
97 BITS=$1 |
|
98 OPT=$2 |
|
99 |
|
100 if [ "${BITS}" = "64" ]; then |
|
101 USE_64=1 |
|
102 JAVA_HOME=${JAVA_HOME_64} |
|
103 PORT_DBG=${PORT_64_DBG} |
|
104 PORT_OPT=${PORT_64_OPT} |
|
105 else |
|
106 USE_64= |
|
107 JAVA_HOME=${JAVA_HOME_32} |
|
108 PORT_DBG=${PORT_32_DBG} |
|
109 PORT_OPT=${PORT_32_OPT} |
|
110 fi |
|
111 export USE_64 |
|
112 export JAVA_HOME |
|
113 |
|
114 BUILD_OPT= |
|
115 if [ "${OPT}" = "OPT" ]; then |
|
116 BUILD_OPT=1 |
|
117 XPCLASS=xpclass.jar |
|
118 PORT=${PORT_OPT} |
|
119 else |
|
120 BUILD_OPT= |
|
121 XPCLASS=xpclass_dbg.jar |
|
122 PORT=${PORT_DBG} |
|
123 fi |
|
124 export BUILD_OPT |
|
125 |
|
126 PORT_JSS_SERVER=$(expr ${PORT} + 20) |
|
127 PORT_JSSE_SERVER=$(expr ${PORT} + 40) |
|
128 |
|
129 export PORT |
|
130 export PORT_JSS_SERVER |
|
131 export PORT_JSSE_SERVER |
|
132 } |
|
133 |
|
134 build_nss() |
|
135 { |
|
136 print_log "######## NSS - build - ${BITS} bits - ${OPT} ########" |
|
137 |
|
138 print_log "$ cd ${HGDIR}/nss" |
|
139 cd ${HGDIR}/nss |
|
140 |
|
141 print_log "$ ${MAKE} ${NSS_BUILD_TARGET}" |
|
142 #${MAKE} ${NSS_BUILD_TARGET} 2>&1 | tee -a ${LOG_ALL} | grep ${GREP_BUFFER} "^${MAKE}" |
|
143 ${MAKE} ${NSS_BUILD_TARGET} 2>&1 | tee -a ${LOG_ALL} |
|
144 RET=$? |
|
145 print_result "NSS - build - ${BITS} bits - ${OPT}" ${RET} 0 |
|
146 |
|
147 if [ ${RET} -eq 0 ]; then |
|
148 return 0 |
|
149 else |
|
150 tail -100 ${LOG_ALL} |
|
151 return ${RET} |
|
152 fi |
|
153 } |
|
154 |
|
155 build_jss() |
|
156 { |
|
157 print_log "######## JSS - build - ${BITS} bits - ${OPT} ########" |
|
158 |
|
159 print_log "$ cd ${HGDIR}/jss" |
|
160 cd ${HGDIR}/jss |
|
161 |
|
162 print_log "$ ${MAKE} ${JSS_BUILD_TARGET}" |
|
163 #${MAKE} ${JSS_BUILD_TARGET} 2>&1 | tee -a ${LOG_ALL} | grep ${GREP_BUFFER} "^${MAKE}" |
|
164 ${MAKE} ${JSS_BUILD_TARGET} 2>&1 | tee -a ${LOG_ALL} |
|
165 RET=$? |
|
166 print_result "JSS build - ${BITS} bits - ${OPT}" ${RET} 0 |
|
167 [ ${RET} -eq 0 ] || return ${RET} |
|
168 |
|
169 print_log "$ cd ${HGDIR}/dist" |
|
170 cd ${HGDIR}/dist |
|
171 |
|
172 if [ -z "${NO_JSS_SIGN}" ]; then |
|
173 print_log "cat ${TOPDIR}/keystore.pw | ${JAVA_HOME}/bin/jarsigner -keystore ${TOPDIR}/keystore -internalsf ${XPCLASS} jssdsa" |
|
174 cat ${TOPDIR}/keystore.pw | ${JAVA_HOME}/bin/jarsigner -keystore ${TOPDIR}/keystore -internalsf ${XPCLASS} jssdsa >> ${LOG_ALL} 2>&1 |
|
175 RET=$? |
|
176 print_result "JSS - sign JAR files - ${BITS} bits - ${OPT}" ${RET} 0 |
|
177 [ ${RET} -eq 0 ] || return ${RET} |
|
178 fi |
|
179 print_log "${JAVA_HOME}/bin/jarsigner -verify -certs ${XPCLASS}" |
|
180 ${JAVA_HOME}/bin/jarsigner -verify -certs ${XPCLASS} >> ${LOG_ALL} 2>&1 |
|
181 RET=$? |
|
182 print_result "JSS - verify JAR files - ${BITS} bits - ${OPT}" ${RET} 0 |
|
183 [ ${RET} -eq 0 ] || return ${RET} |
|
184 |
|
185 return 0 |
|
186 } |
|
187 |
|
188 test_nss() |
|
189 { |
|
190 print_log "######## NSS - tests - ${BITS} bits - ${OPT} ########" |
|
191 |
|
192 if [ "${OS_TARGET}" = "Android" ]; then |
|
193 print_log "$ cd ${HGDIR}/nss/tests/remote" |
|
194 cd ${HGDIR}/nss/tests/remote |
|
195 print_log "$ make test_android" |
|
196 make test_android 2>&1 | tee ${LOG_TMP} | grep ${GREP_BUFFER} ": #" |
|
197 OUTPUTFILE=${HGDIR}/tests_results/security/*.1/output.log |
|
198 else |
|
199 print_log "$ cd ${HGDIR}/nss/tests" |
|
200 cd ${HGDIR}/nss/tests |
|
201 print_log "$ ./all.sh" |
|
202 ./all.sh 2>&1 | tee ${LOG_TMP} | grep ${GREP_BUFFER} ": #" |
|
203 OUTPUTFILE=${LOG_TMP} |
|
204 fi |
|
205 |
|
206 cat ${LOG_TMP} >> ${LOG_ALL} |
|
207 tail -n2 ${HGDIR}/tests_results/security/*.1/results.html | grep END_OF_TEST >> ${LOG_ALL} |
|
208 RET=$? |
|
209 |
|
210 print_log "######## details of detected failures (if any) ########" |
|
211 grep -B50 FAIL ${OUTPUTFILE} |
|
212 [ $? -eq 1 ] || RET=1 |
|
213 |
|
214 print_result "NSS - tests - ${BITS} bits - ${OPT}" ${RET} 0 |
|
215 return ${RET} |
|
216 } |
|
217 |
|
218 test_jss() |
|
219 { |
|
220 print_log "######## JSS - tests - ${BITS} bits - ${OPT} ########" |
|
221 |
|
222 print_log "$ cd ${HGDIR}/jss" |
|
223 cd ${HGDIR}/jss |
|
224 |
|
225 print_log "$ ${MAKE} platform" |
|
226 PLATFORM=$(${MAKE} platform) |
|
227 print_log "PLATFORM=${PLATFORM}" |
|
228 |
|
229 print_log "$ cd ${HGDIR}/jss/org/mozilla/jss/tests" |
|
230 cd ${HGDIR}/jss/org/mozilla/jss/tests |
|
231 |
|
232 print_log "$ perl all.pl dist ${HGDIR}/dist/${PLATFORM}" |
|
233 perl all.pl dist ${HGDIR}/dist/${PLATFORM} 2>&1 | tee ${LOG_TMP} |
|
234 cat ${LOG_TMP} >> ${LOG_ALL} |
|
235 |
|
236 tail -n2 ${LOG_TMP} | grep JSSTEST_RATE > /dev/null |
|
237 RET=$? |
|
238 |
|
239 grep FAIL ${LOG_TMP} |
|
240 [ $? -eq 1 ] || RET=1 |
|
241 |
|
242 print_result "JSS - tests - ${BITS} bits - ${OPT}" ${RET} 0 |
|
243 return ${RET} |
|
244 } |
|
245 |
|
246 build_and_test() |
|
247 { |
|
248 if [ -n "${BUILD_NSS}" ]; then |
|
249 build_nss |
|
250 [ $? -eq 0 ] || return 1 |
|
251 fi |
|
252 |
|
253 if [ -n "${TEST_NSS}" ]; then |
|
254 test_nss |
|
255 [ $? -eq 0 ] || return 1 |
|
256 fi |
|
257 |
|
258 if [ -n "${BUILD_JSS}" ]; then |
|
259 build_jss |
|
260 [ $? -eq 0 ] || return 1 |
|
261 fi |
|
262 |
|
263 if [ -n "${TEST_JSS}" ]; then |
|
264 test_jss |
|
265 [ $? -eq 0 ] || return 1 |
|
266 fi |
|
267 |
|
268 return 0 |
|
269 } |
|
270 |
|
271 run_cycle() |
|
272 { |
|
273 print_env |
|
274 build_and_test |
|
275 RET=$? |
|
276 |
|
277 grep ^TinderboxPrint ${LOG_ALL} |
|
278 |
|
279 return ${RET} |
|
280 } |
|
281 |
|
282 prepare() |
|
283 { |
|
284 rm -rf ${OUTPUTDIR}.oldest >/dev/null 2>&1 |
|
285 mv ${OUTPUTDIR}.older ${OUTPUTDIR}.oldest >/dev/null 2>&1 |
|
286 mv ${OUTPUTDIR}.old ${OUTPUTDIR}.older >/dev/null 2>&1 |
|
287 mv ${OUTPUTDIR}.last ${OUTPUTDIR}.old >/dev/null 2>&1 |
|
288 mv ${OUTPUTDIR} ${OUTPUTDIR}.last >/dev/null 2>&1 |
|
289 mkdir -p ${OUTPUTDIR} |
|
290 |
|
291 if [ -z "${NSS_DISABLE_ECC}" -a -n "${NSS_ECC_MORE_THAN_SUITE_B}" ]; then |
|
292 cd ${HGDIR}/nss |
|
293 ECF="lib/freebl/ecl/ecl-curve.h" |
|
294 print_log "hg revert -r NSS_3_11_1_RTM ${ECF}" |
|
295 hg revert -r NSS_3_11_1_RTM security/nss/${ECF} |
|
296 cp -f security/nss/${ECF} ${ECF} |
|
297 fi |
|
298 |
|
299 return 0 |
|
300 } |
|
301 |
|
302 move_results() |
|
303 { |
|
304 cd ${HGDIR} |
|
305 if [ -n "${TEST_NSS}" ]; then |
|
306 mv -f tests_results ${OUTPUTDIR} |
|
307 fi |
|
308 tar -c -z --dereference -f ${OUTPUTDIR}/dist.tgz dist |
|
309 rm -rf dist |
|
310 } |
|
311 |
|
312 run_all() |
|
313 { |
|
314 set_cycle ${BITS} ${OPT} |
|
315 prepare |
|
316 run_cycle |
|
317 RESULT=$? |
|
318 print_log "### result of run_cycle is ${RESULT}" |
|
319 move_results |
|
320 return ${RESULT} |
|
321 } |
|
322 |
|
323 main() |
|
324 { |
|
325 VALID=0 |
|
326 RET=1 |
|
327 |
|
328 for BITS in 32 64; do |
|
329 echo ${RUN_BITS} | grep ${BITS} > /dev/null |
|
330 [ $? -eq 0 ] || continue |
|
331 for OPT in DBG OPT; do |
|
332 echo ${RUN_OPT} | grep ${OPT} > /dev/null |
|
333 [ $? -eq 0 ] || continue |
|
334 |
|
335 VALID=1 |
|
336 set_env |
|
337 run_all |
|
338 RET=$? |
|
339 print_log "### result of run_all is ${RET}" |
|
340 done |
|
341 done |
|
342 |
|
343 if [ ${VALID} -ne 1 ]; then |
|
344 echo "Need to set valid bits/opt values." |
|
345 return 1 |
|
346 fi |
|
347 |
|
348 return ${RET} |
|
349 } |
|
350 |
|
351 #function killallsub() |
|
352 #{ |
|
353 # FINAL_RET=$? |
|
354 # for proc in `jobs -p` |
|
355 # do |
|
356 # kill -9 $proc |
|
357 # done |
|
358 # return ${FINAL_RET} |
|
359 #} |
|
360 #trap killallsub EXIT |
|
361 |
|
362 #IS_RUNNING_FILE="./build-is-running" |
|
363 |
|
364 #if [ -a $IS_RUNNING_FILE ]; then |
|
365 # echo "exiting, because old job is still running" |
|
366 # exit 1 |
|
367 #fi |
|
368 |
|
369 #touch $IS_RUNNING_FILE |
|
370 |
|
371 echo "tinderbox args: $0 $@" |
|
372 . ${ENVVARS} |
|
373 proc_args "$@" |
|
374 main |
|
375 |
|
376 #RET=$? |
|
377 #rm $IS_RUNNING_FILE |
|
378 #exit ${RET} |