1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/security/nss/automation/buildbot-slave/build.sh Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,378 @@ 1.4 +#! /bin/bash 1.5 + 1.6 +# Ensure a failure of the first command inside a pipe 1.7 +# won't be hidden by commands later in the pipe. 1.8 +# (e.g. as in ./dosomething | grep) 1.9 + 1.10 +set -o pipefail 1.11 + 1.12 +proc_args() 1.13 +{ 1.14 + while [ -n "$1" ]; do 1.15 + OPT=$(echo $1 | cut -d= -f1) 1.16 + VAL=$(echo $1 | cut -d= -f2) 1.17 + 1.18 + case $OPT in 1.19 + "--build-nss") 1.20 + BUILD_NSS=1 1.21 + ;; 1.22 + "--test-nss") 1.23 + TEST_NSS=1 1.24 + ;; 1.25 + "--build-jss") 1.26 + BUILD_JSS=1 1.27 + ;; 1.28 + "--test-jss") 1.29 + TEST_JSS=1 1.30 + ;; 1.31 + "--memtest") 1.32 + NSS_TESTS="memleak" 1.33 + export NSS_TESTS 1.34 + ;; 1.35 + "--nojsssign") 1.36 + NO_JSS_SIGN=1 1.37 + ;; 1.38 + *) 1.39 + echo "Usage: $0 ..." 1.40 + echo " --memtest - run the memory leak tests" 1.41 + echo " --nojsssign - try to sign jss" 1.42 + echo " --build-nss" 1.43 + echo " --build-jss" 1.44 + echo " --test-nss" 1.45 + echo " --test-jss" 1.46 + exit 1 1.47 + ;; 1.48 + esac 1.49 + 1.50 + shift 1.51 + done 1.52 +} 1.53 + 1.54 +set_env() 1.55 +{ 1.56 + TOPDIR=$(pwd) 1.57 + HGDIR=$(pwd)$(echo "/hg") 1.58 + OUTPUTDIR=$(pwd)$(echo "/output") 1.59 + LOG_ALL="${OUTPUTDIR}/all.log" 1.60 + LOG_TMP="${OUTPUTDIR}/tmp.log" 1.61 + 1.62 + echo "hello" |grep --line-buffered hello >/dev/null 2>&1 1.63 + [ $? -eq 0 ] && GREP_BUFFER="--line-buffered" 1.64 +} 1.65 + 1.66 +print_log() 1.67 +{ 1.68 + DATE=$(date "+TB [%Y-%m-%d %H:%M:%S]") 1.69 + echo "${DATE} $*" 1.70 + echo "${DATE} $*" >> ${LOG_ALL} 1.71 +} 1.72 + 1.73 +print_result() 1.74 +{ 1.75 + TESTNAME=$1 1.76 + RET=$2 1.77 + EXP=$3 1.78 + 1.79 + if [ ${RET} -eq ${EXP} ]; then 1.80 + print_log "${TESTNAME} PASSED" 1.81 + else 1.82 + print_log "${TESTNAME} FAILED" 1.83 + fi 1.84 +} 1.85 + 1.86 +print_env() 1.87 +{ 1.88 + print_log "######## Environment variables ########" 1.89 + 1.90 + uname -a | tee -a ${LOG_ALL} 1.91 + if [ -e "/etc/redhat-release" ]; then 1.92 + cat "/etc/redhat-release" | tee -a ${LOG_ALL} 1.93 + fi 1.94 + # don't print the MAIL command, it might contain a password 1.95 + env | grep -v "^MAIL=" | tee -a ${LOG_ALL} 1.96 +} 1.97 + 1.98 +set_cycle() 1.99 +{ 1.100 + BITS=$1 1.101 + OPT=$2 1.102 + 1.103 + if [ "${BITS}" = "64" ]; then 1.104 + USE_64=1 1.105 + JAVA_HOME=${JAVA_HOME_64} 1.106 + PORT_DBG=${PORT_64_DBG} 1.107 + PORT_OPT=${PORT_64_OPT} 1.108 + else 1.109 + USE_64= 1.110 + JAVA_HOME=${JAVA_HOME_32} 1.111 + PORT_DBG=${PORT_32_DBG} 1.112 + PORT_OPT=${PORT_32_OPT} 1.113 + fi 1.114 + export USE_64 1.115 + export JAVA_HOME 1.116 + 1.117 + BUILD_OPT= 1.118 + if [ "${OPT}" = "OPT" ]; then 1.119 + BUILD_OPT=1 1.120 + XPCLASS=xpclass.jar 1.121 + PORT=${PORT_OPT} 1.122 + else 1.123 + BUILD_OPT= 1.124 + XPCLASS=xpclass_dbg.jar 1.125 + PORT=${PORT_DBG} 1.126 + fi 1.127 + export BUILD_OPT 1.128 + 1.129 + PORT_JSS_SERVER=$(expr ${PORT} + 20) 1.130 + PORT_JSSE_SERVER=$(expr ${PORT} + 40) 1.131 + 1.132 + export PORT 1.133 + export PORT_JSS_SERVER 1.134 + export PORT_JSSE_SERVER 1.135 +} 1.136 + 1.137 +build_nss() 1.138 +{ 1.139 + print_log "######## NSS - build - ${BITS} bits - ${OPT} ########" 1.140 + 1.141 + print_log "$ cd ${HGDIR}/nss" 1.142 + cd ${HGDIR}/nss 1.143 + 1.144 + print_log "$ ${MAKE} ${NSS_BUILD_TARGET}" 1.145 + #${MAKE} ${NSS_BUILD_TARGET} 2>&1 | tee -a ${LOG_ALL} | grep ${GREP_BUFFER} "^${MAKE}" 1.146 + ${MAKE} ${NSS_BUILD_TARGET} 2>&1 | tee -a ${LOG_ALL} 1.147 + RET=$? 1.148 + print_result "NSS - build - ${BITS} bits - ${OPT}" ${RET} 0 1.149 + 1.150 + if [ ${RET} -eq 0 ]; then 1.151 + return 0 1.152 + else 1.153 + tail -100 ${LOG_ALL} 1.154 + return ${RET} 1.155 + fi 1.156 +} 1.157 + 1.158 +build_jss() 1.159 +{ 1.160 + print_log "######## JSS - build - ${BITS} bits - ${OPT} ########" 1.161 + 1.162 + print_log "$ cd ${HGDIR}/jss" 1.163 + cd ${HGDIR}/jss 1.164 + 1.165 + print_log "$ ${MAKE} ${JSS_BUILD_TARGET}" 1.166 + #${MAKE} ${JSS_BUILD_TARGET} 2>&1 | tee -a ${LOG_ALL} | grep ${GREP_BUFFER} "^${MAKE}" 1.167 + ${MAKE} ${JSS_BUILD_TARGET} 2>&1 | tee -a ${LOG_ALL} 1.168 + RET=$? 1.169 + print_result "JSS build - ${BITS} bits - ${OPT}" ${RET} 0 1.170 + [ ${RET} -eq 0 ] || return ${RET} 1.171 + 1.172 + print_log "$ cd ${HGDIR}/dist" 1.173 + cd ${HGDIR}/dist 1.174 + 1.175 + if [ -z "${NO_JSS_SIGN}" ]; then 1.176 + print_log "cat ${TOPDIR}/keystore.pw | ${JAVA_HOME}/bin/jarsigner -keystore ${TOPDIR}/keystore -internalsf ${XPCLASS} jssdsa" 1.177 + cat ${TOPDIR}/keystore.pw | ${JAVA_HOME}/bin/jarsigner -keystore ${TOPDIR}/keystore -internalsf ${XPCLASS} jssdsa >> ${LOG_ALL} 2>&1 1.178 + RET=$? 1.179 + print_result "JSS - sign JAR files - ${BITS} bits - ${OPT}" ${RET} 0 1.180 + [ ${RET} -eq 0 ] || return ${RET} 1.181 + fi 1.182 + print_log "${JAVA_HOME}/bin/jarsigner -verify -certs ${XPCLASS}" 1.183 + ${JAVA_HOME}/bin/jarsigner -verify -certs ${XPCLASS} >> ${LOG_ALL} 2>&1 1.184 + RET=$? 1.185 + print_result "JSS - verify JAR files - ${BITS} bits - ${OPT}" ${RET} 0 1.186 + [ ${RET} -eq 0 ] || return ${RET} 1.187 + 1.188 + return 0 1.189 +} 1.190 + 1.191 +test_nss() 1.192 +{ 1.193 + print_log "######## NSS - tests - ${BITS} bits - ${OPT} ########" 1.194 + 1.195 + if [ "${OS_TARGET}" = "Android" ]; then 1.196 + print_log "$ cd ${HGDIR}/nss/tests/remote" 1.197 + cd ${HGDIR}/nss/tests/remote 1.198 + print_log "$ make test_android" 1.199 + make test_android 2>&1 | tee ${LOG_TMP} | grep ${GREP_BUFFER} ": #" 1.200 + OUTPUTFILE=${HGDIR}/tests_results/security/*.1/output.log 1.201 + else 1.202 + print_log "$ cd ${HGDIR}/nss/tests" 1.203 + cd ${HGDIR}/nss/tests 1.204 + print_log "$ ./all.sh" 1.205 + ./all.sh 2>&1 | tee ${LOG_TMP} | grep ${GREP_BUFFER} ": #" 1.206 + OUTPUTFILE=${LOG_TMP} 1.207 + fi 1.208 + 1.209 + cat ${LOG_TMP} >> ${LOG_ALL} 1.210 + tail -n2 ${HGDIR}/tests_results/security/*.1/results.html | grep END_OF_TEST >> ${LOG_ALL} 1.211 + RET=$? 1.212 + 1.213 + print_log "######## details of detected failures (if any) ########" 1.214 + grep -B50 FAIL ${OUTPUTFILE} 1.215 + [ $? -eq 1 ] || RET=1 1.216 + 1.217 + print_result "NSS - tests - ${BITS} bits - ${OPT}" ${RET} 0 1.218 + return ${RET} 1.219 +} 1.220 + 1.221 +test_jss() 1.222 +{ 1.223 + print_log "######## JSS - tests - ${BITS} bits - ${OPT} ########" 1.224 + 1.225 + print_log "$ cd ${HGDIR}/jss" 1.226 + cd ${HGDIR}/jss 1.227 + 1.228 + print_log "$ ${MAKE} platform" 1.229 + PLATFORM=$(${MAKE} platform) 1.230 + print_log "PLATFORM=${PLATFORM}" 1.231 + 1.232 + print_log "$ cd ${HGDIR}/jss/org/mozilla/jss/tests" 1.233 + cd ${HGDIR}/jss/org/mozilla/jss/tests 1.234 + 1.235 + print_log "$ perl all.pl dist ${HGDIR}/dist/${PLATFORM}" 1.236 + perl all.pl dist ${HGDIR}/dist/${PLATFORM} 2>&1 | tee ${LOG_TMP} 1.237 + cat ${LOG_TMP} >> ${LOG_ALL} 1.238 + 1.239 + tail -n2 ${LOG_TMP} | grep JSSTEST_RATE > /dev/null 1.240 + RET=$? 1.241 + 1.242 + grep FAIL ${LOG_TMP} 1.243 + [ $? -eq 1 ] || RET=1 1.244 + 1.245 + print_result "JSS - tests - ${BITS} bits - ${OPT}" ${RET} 0 1.246 + return ${RET} 1.247 +} 1.248 + 1.249 +build_and_test() 1.250 +{ 1.251 + if [ -n "${BUILD_NSS}" ]; then 1.252 + build_nss 1.253 + [ $? -eq 0 ] || return 1 1.254 + fi 1.255 + 1.256 + if [ -n "${TEST_NSS}" ]; then 1.257 + test_nss 1.258 + [ $? -eq 0 ] || return 1 1.259 + fi 1.260 + 1.261 + if [ -n "${BUILD_JSS}" ]; then 1.262 + build_jss 1.263 + [ $? -eq 0 ] || return 1 1.264 + fi 1.265 + 1.266 + if [ -n "${TEST_JSS}" ]; then 1.267 + test_jss 1.268 + [ $? -eq 0 ] || return 1 1.269 + fi 1.270 + 1.271 + return 0 1.272 +} 1.273 + 1.274 +run_cycle() 1.275 +{ 1.276 + print_env 1.277 + build_and_test 1.278 + RET=$? 1.279 + 1.280 + grep ^TinderboxPrint ${LOG_ALL} 1.281 + 1.282 + return ${RET} 1.283 +} 1.284 + 1.285 +prepare() 1.286 +{ 1.287 + rm -rf ${OUTPUTDIR}.oldest >/dev/null 2>&1 1.288 + mv ${OUTPUTDIR}.older ${OUTPUTDIR}.oldest >/dev/null 2>&1 1.289 + mv ${OUTPUTDIR}.old ${OUTPUTDIR}.older >/dev/null 2>&1 1.290 + mv ${OUTPUTDIR}.last ${OUTPUTDIR}.old >/dev/null 2>&1 1.291 + mv ${OUTPUTDIR} ${OUTPUTDIR}.last >/dev/null 2>&1 1.292 + mkdir -p ${OUTPUTDIR} 1.293 + 1.294 + if [ -z "${NSS_DISABLE_ECC}" -a -n "${NSS_ECC_MORE_THAN_SUITE_B}" ]; then 1.295 + cd ${HGDIR}/nss 1.296 + ECF="lib/freebl/ecl/ecl-curve.h" 1.297 + print_log "hg revert -r NSS_3_11_1_RTM ${ECF}" 1.298 + hg revert -r NSS_3_11_1_RTM security/nss/${ECF} 1.299 + cp -f security/nss/${ECF} ${ECF} 1.300 + fi 1.301 + 1.302 + return 0 1.303 +} 1.304 + 1.305 +move_results() 1.306 +{ 1.307 + cd ${HGDIR} 1.308 + if [ -n "${TEST_NSS}" ]; then 1.309 + mv -f tests_results ${OUTPUTDIR} 1.310 + fi 1.311 + tar -c -z --dereference -f ${OUTPUTDIR}/dist.tgz dist 1.312 + rm -rf dist 1.313 +} 1.314 + 1.315 +run_all() 1.316 +{ 1.317 + set_cycle ${BITS} ${OPT} 1.318 + prepare 1.319 + run_cycle 1.320 + RESULT=$? 1.321 + print_log "### result of run_cycle is ${RESULT}" 1.322 + move_results 1.323 + return ${RESULT} 1.324 +} 1.325 + 1.326 +main() 1.327 +{ 1.328 + VALID=0 1.329 + RET=1 1.330 + 1.331 + for BITS in 32 64; do 1.332 + echo ${RUN_BITS} | grep ${BITS} > /dev/null 1.333 + [ $? -eq 0 ] || continue 1.334 + for OPT in DBG OPT; do 1.335 + echo ${RUN_OPT} | grep ${OPT} > /dev/null 1.336 + [ $? -eq 0 ] || continue 1.337 + 1.338 + VALID=1 1.339 + set_env 1.340 + run_all 1.341 + RET=$? 1.342 + print_log "### result of run_all is ${RET}" 1.343 + done 1.344 + done 1.345 + 1.346 + if [ ${VALID} -ne 1 ]; then 1.347 + echo "Need to set valid bits/opt values." 1.348 + return 1 1.349 + fi 1.350 + 1.351 + return ${RET} 1.352 +} 1.353 + 1.354 +#function killallsub() 1.355 +#{ 1.356 +# FINAL_RET=$? 1.357 +# for proc in `jobs -p` 1.358 +# do 1.359 +# kill -9 $proc 1.360 +# done 1.361 +# return ${FINAL_RET} 1.362 +#} 1.363 +#trap killallsub EXIT 1.364 + 1.365 +#IS_RUNNING_FILE="./build-is-running" 1.366 + 1.367 +#if [ -a $IS_RUNNING_FILE ]; then 1.368 +# echo "exiting, because old job is still running" 1.369 +# exit 1 1.370 +#fi 1.371 + 1.372 +#touch $IS_RUNNING_FILE 1.373 + 1.374 +echo "tinderbox args: $0 $@" 1.375 +. ${ENVVARS} 1.376 +proc_args "$@" 1.377 +main 1.378 + 1.379 +#RET=$? 1.380 +#rm $IS_RUNNING_FILE 1.381 +#exit ${RET}