X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=jjb%2Fintegration%2Fintegration-deploy-openstack-run-test.sh;h=5e3421dcfb2774cfb1111e5403e17f9d9400f1a2;hb=5a2c1a1d8fd167ac3e96fdc5f13a44edd59536a9;hp=3bfbda130b2f62c0d0423fc86b3521a7bfd046e7;hpb=44a67f30b37523c2e86f0670e64a79067c21ff36;p=releng%2Fbuilder.git diff --git a/jjb/integration/integration-deploy-openstack-run-test.sh b/jjb/integration/integration-deploy-openstack-run-test.sh index 3bfbda130..5e3421dcf 100644 --- a/jjb/integration/integration-deploy-openstack-run-test.sh +++ b/jjb/integration/integration-deploy-openstack-run-test.sh @@ -1,4 +1,4 @@ -#@IgnoreInspection BashAddShebang +#!/bin/bash # Activate robotframework virtualenv # ${ROBOT_VENV} comes from the integration-install-robotframework.sh # script. @@ -485,22 +485,24 @@ EOF for i in `seq 1 ${NUM_ODL_SYSTEM}`; do CONTROLLERIP=ODL_SYSTEM_${i}_IP NODE_FOLDER="odl_${i}" - ${SSH} "${!CONTROLLERIP}" "journalctl > /tmp/journalctl.log" - scp "${!CONTROLLERIP}:/tmp/journalctl.log" ${NODE_FOLDER} - ${SSH} "${!CONTROLLERIP}" "dmesg -T > /tmp/dmesg.log" - scp "${!CONTROLLERIP}:/tmp/dmesg.log" ${NODE_FOLDER} - ${SSH} "${!CONTROLLERIP}" "cp -r /tmp/${BUNDLEFOLDER}/data/log /tmp/odl_log" - ${SSH} "${!CONTROLLERIP}" "tar -cf /tmp/odl${i}_karaf.log.tar /tmp/odl_log/*" - scp "${!CONTROLLERIP}:/tmp/odl${i}_karaf.log.tar" "${NODE_FOLDER}/odl${i}_karaf.log.tar" - ${SSH} "${!CONTROLLERIP}" "tar -cf /tmp/odl${i}_zrpcd.log.tar /tmp/zrpcd.init.log" - scp "${!CONTROLLERIP}:/tmp/odl${i}_zrpcd.log.tar" "${NODE_FOLDER}/odl${i}_zrpcd.log.tar" - tar -xvf ${WORKSPACE}/odl${i}_karaf.log.tar -C . --strip-components 2 --transform s/karaf/odl${i}_karaf/g - grep "ROBOT MESSAGE\| ERROR " odl${i}_karaf.log > ${NODE_FOLDER}/odl${i}_err.log - # Print ROBOT lines, Print Caused by...Exception: lines, - # Print Exception{ lines as well as the previous line that has the timestamp for context - sed -n -e '/ROBOT MESSAGE/P' -e '/Caused by.*Exception:/P' -e '$!N;/Exception:/P;D' -e '$!N;/Exception{/P;D' odl${i}_karaf.log > ${NODE_FOLDER}/odl${i}_exception.log - grep "ROBOT MESSAGE\| ERROR \| WARN \|Exception" odl${i}_karaf.log > ${NODE_FOLDER}/odl${i}_err_warn_exception.log - rm ${WORKSPACE}/odl${i}_karaf.log.tar + mkdir -p ${NODE_FOLDER} + ${SSH} ${!CONTROLLERIP} "journalctl > /tmp/journalctl.log" + scp ${!CONTROLLERIP}:/tmp/journalctl.log ${NODE_FOLDER} + ${SSH} ${!CONTROLLERIP} "dmesg -T > /tmp/dmesg.log" + scp ${!CONTROLLERIP}:/tmp/dmesg.log ${NODE_FOLDER} + ${SSH} ${!CONTROLLERIP} "cp -r /tmp/${BUNDLEFOLDER}/data/log /tmp/odl_log" + ${SSH} ${!CONTROLLERIP} "tar -cf /tmp/odl${i}_karaf.log.tar /tmp/odl_log/*" + scp ${!CONTROLLERIP}:/tmp/odl${i}_karaf.log.tar ${NODE_FOLDER} + ${SSH} ${!CONTROLLERIP} "tar -cf /tmp/odl${i}_zrpcd.log.tar /tmp/zrpcd.init.log" + scp ${!CONTROLLERIP}:/tmp/odl${i}_zrpcd.log.tar ${NODE_FOLDER} + tar -xvf ${NODE_FOLDER}/odl${i}_karaf.log.tar -C ${NODE_FOLDER} --strip-components 2 --transform s/karaf/odl${i}_karaf/g + grep "ROBOT MESSAGE\| ERROR " ${NODE_FOLDER}/odl${i}_karaf.log > ${NODE_FOLDER}/odl${i}_err.log + grep "ROBOT MESSAGE\| ERROR \| WARN \|Exception" \ + ${NODE_FOLDER}/odl${i}_karaf.log > ${NODE_FOLDER}/odl${i}_err_warn_exception.log + # Print ROBOT lines and print Exception lines. For exception lines also print the previous line for context + sed -n -e '/ROBOT MESSAGE/P' -e '$!N;/Exception/P;D' ${NODE_FOLDER}/odl${i}_karaf.log > ${NODE_FOLDER}/odl${i}_exception.log + rm ${NODE_FOLDER}/odl${i}_karaf.log.tar + mv karaf_${i}_threads* ${NODE_FOLDER} mv ${NODE_FOLDER} ${WORKSPACE}/archives/ done @@ -673,6 +675,43 @@ function get_service () { set -e } +# Check if rabbitmq is ready by looking for a pid in it's status. +# The function returns the status of the grep command which callers can check. +function is_rabbitmq_ready() { + local -r ip=$1 + rm -f rabbit.txt + ${SSH} ${ip} "sudo rabbitmqctl status" > rabbit.txt + grep pid rabbit.txt +} + +# retry the given command ($3) until success for a number of iterations ($1) +# sleeping ($2) between tries. +function retry() { + set +e + local -r -i max_tries=${1} + local -r -i sleep_time=${2} + local -r cmd=${3} + local -i retries=1 + local -i rc=1 + while true; do + echo "retry ${cmd}: attempt: ${retries}" + ${cmd} + rc=$? + if ((${rc} == 0)); then + break; + else + if ((${retries} == ${max_tries})); then + break + else + ((retries++)) + sleep ${sleep_time} + fi + fi + done + set -e + return ${rc} +} + # if we are using the new netvirt impl, as determined by the feature name # odl-netvirt-openstack (note: old impl is odl-ovsdb-openstack) then we # want PROVIDER_MAPPINGS to be used -- this should be fixed if we want to support @@ -830,9 +869,17 @@ done # AccessRefused: (0, 0): (403) ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN. For details see the broker logfile. # Compare that timestamp to this log in the control stack.log: sudo rabbitmqctl set_permissions -p nova_cell1 stackrabbit # If the n-cpu.log is earlier than the control stack.log timestamp then the failure condition is likely hit. -# TODO: modify devstack to wait for rabbitmq to be available on the controller before starting nova-compute. -echo "Sleeping for 360s to allow controller to create nova_cell1 before the computes need it" -sleep 360 +WAIT_FOR_RABBITMQ_MINUTES=60 +echo "Wait a maximum of ${WAIT_FOR_RABBITMQ_MINUTES}m until rabbitmq is ready to allow the controller to create nova_cell1 before the computes need it" +retry ${WAIT_FOR_RABBITMQ_MINUTES} 60 "is_rabbitmq_ready ${OPENSTACK_CONTROL_NODE_1_IP}" +rc=$? +if ((${rc} == 0)); then + echo "rabbitmq is ready, starting ${NUM_OPENSTACK_COMPUTE_NODES} compute(s)" +else + echo "rabbitmq was not ready in ${WAIT_FOR_RABBITMQ_MINUTES}m" + collect_logs + exit 1 +fi for i in `seq 1 ${NUM_OPENSTACK_COMPUTE_NODES}`; do NUM_COMPUTES_PER_SITE=$((NUM_OPENSTACK_COMPUTE_NODES / NUM_OPENSTACK_SITES)) @@ -1034,6 +1081,10 @@ for i in `seq 1 ${NUM_OPENSTACK_SITES}`; do sudo ip netns exec pnf_ns ifconfig pnf_veth1 up ${EXTNET_PNF_IP}/24; sudo ovs-vsctl add-port ${PUBLIC_BRIDGE} pnf_veth0; " + # Control Node - set VXLAN TEP IP for Genius Auto TZ + ${SSH} ${!CONTROLIP} " + sudo ovs-vsctl set O . external_ids:tep-ip=${!CONTROLIP}; + " # Control Node - external net internet address simulation ${SSH} ${!CONTROLIP} " @@ -1054,6 +1105,10 @@ for i in `seq 1 ${NUM_OPENSTACK_SITES}`; do ${SSH} $compute_ip " sudo ovs-vsctl add-port $PUBLIC_BRIDGE $CONTROLPORT -- set interface $CONTROLPORT type=vxlan options:local_ip=$compute_ip options:remote_ip=${!CONTROLIP} options:dst_port=9876 options:key=flow " + #Compute Node - set VXLAN TEP IP for Genius Auto TZ + ${SSH} $compute_ip " + sudo ovs-vsctl set O . external_ids:tep-ip=${compute_ip}; + " done done @@ -1085,6 +1140,18 @@ cat testplan.txt # Use the testplan if specific SUITES are not defined. if [ -z "${SUITES}" ]; then SUITES=`egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' testplan.txt | tr '\012' ' '` +else + newsuites="" + workpath="${WORKSPACE}/test/csit/suites" + for suite in ${SUITES}; do + fullsuite="${workpath}/${suite}" + if [ -z ${newsuites} ]; then + newsuites+=${fullsuite} + else + newsuites+=" "${fullsuite} + fi + done + SUITES=${newsuites} fi # TODO: run openrc on control node and then scrape the vars from it @@ -1106,10 +1173,16 @@ source /tmp/os_netvirt_client_rc echo "Starting Robot test suites ${SUITES} ..." # please add pybot -v arguments on a single line and alphabetized +suite_num=0 for suite in ${SUITES}; do - log_name_ext=$(basename ${suite} | cut -d. -f1) - pybot -N ${TESTPLAN} --removekeywords wuks -c critical -e exclude -e skip_if_${DISTROSTREAM} \ - --log log_${log_name_ext}.html --report None --output output_${log_name_ext}.xml \ + # prepend a incrmental counter to the suite name so that the full robot log combining all the suites as is done + # in the rebot step below will list all the suites in chronological order as rebot seems to alphabatize them + let "suite_num = suite_num + 1" + suite_index="$(printf %02d ${suite_num})" + suite_name="$(basename ${suite} | cut -d. -f1)" + log_name="${suite_index}_${suite_name}" + pybot -N ${log_name} --removekeywords wuks -c critical -e exclude -e skip_if_${DISTROSTREAM} \ + --log log_${log_name}.html --report None --output output_${log_name}.xml \ -v BUNDLEFOLDER:${BUNDLEFOLDER} \ -v BUNDLE_URL:${ACTUAL_BUNDLE_URL} \ -v CONTROLLER_USER:${USER} \ @@ -1158,7 +1231,7 @@ for suite in ${SUITES}; do ${TESTOPTIONS} ${suite} || true done #rebot exit codes seem to be different -rebot --output ${WORKSPACE}/output.xml --log None --report None --merge output_*.xml || true +rebot --output ${WORKSPACE}/output.xml --log log_full.html --report None -N openstack output_*.xml || true echo "Examining the files in data/log and checking file size" ssh ${ODL_SYSTEM_IP} "ls -altr /tmp/${BUNDLEFOLDER}/data/log/"