-
-VPP_DEBS=(*.deb)
-echo ${VPP_DEBS[@]}
-VIRL_DIR_LOC="/tmp"
-VPP_DEBS_FULL=(${VPP_DEBS[@]})
-
-# Prepend directory location at remote host to deb file list
-for index in "${!VPP_DEBS_FULL[@]}"; do
- VPP_DEBS_FULL[${index}]=${VIRL_DIR_LOC}/${VPP_DEBS_FULL[${index}]}
-done
-
-echo "Updated file names: " ${VPP_DEBS_FULL[@]}
-
-cat ${VIRL_PKEY}
-
-# Copy the files to VIRL hosts
-DONE=""
-for index in "${!VIRL_SERVER[@]}"; do
- # Do not copy files in case they have already been copied to the VIRL host
- [[ "${DONE[@]}" =~ "${VIRL_SERVER[${index}]}" ]] && copy=0 || copy=1
-
- if [ "${copy}" -eq "0" ]; then
- echo "VPP deb files have already been copied to the VIRL host ${VIRL_SERVER[${index}]}"
- else
- scp ${SSH_OPTIONS} *.deb \
- ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}:${VIRL_DIR_LOC}/
-
- result=$?
- if [ "${result}" -ne "0" ]; then
- echo "Failed to copy VPP deb files to VIRL host ${VIRL_SERVER[${index}]}"
- echo ${result}
- exit ${result}
- else
- echo "VPP deb files successfully copied to the VIRL host ${VIRL_SERVER[${index}]}"
- fi
- DONE+=(${VIRL_SERVER[${index}]})
- fi
-done
-
-# Start a simulation on VIRL server
-
-function stop_virl_simulation {
- for index in "${!VIRL_SERVER[@]}"; do
- ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}\
- "stop-testcase ${VIRL_SID[${index}]}"
- done
-}
-
-# Upon script exit, cleanup the simulation execution
-trap stop_virl_simulation EXIT
-
-for index in "${!VIRL_SERVER[@]}"; do
- echo "Starting simulation nr. ${index} on VIRL server ${VIRL_SERVER[${index}]}"
- VIRL_SID[${index}]=$(ssh ${SSH_OPTIONS} \
- ${VIRL_USERNAME}@${VIRL_SERVER[${index}]} \
- "start-testcase -c double-ring-nested ${VPP_DEBS_FULL[@]}")
- retval=$?
- if [ "$?" -ne "0" ]; then
- echo "VIRL simulation start failed on ${VIRL_SERVER[${index}]}"
- exit ${retval}
- fi
- if [[ ! "${VIRL_SID[${index}]}" =~ session-[a-zA-Z0-9_]{6} ]]; then
- echo "No VIRL session ID reported."
- exit 127
- fi
- echo "VIRL simulation started on ${VIRL_SERVER[${index}]}"
-
- ssh_do ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}\
- cat /scratch/${VIRL_SID[${index}]}/topology.yaml
-
- # Download the topology file from VIRL session and rename it
- scp ${SSH_OPTIONS} \
- ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}:/scratch/${VIRL_SID[${index}]}/topology.yaml \
- topologies/enabled/topology${index}.yaml
-
- retval=$?
- if [ "$?" -ne "0" ]; then
- echo "Failed to copy topology file from VIRL simulation nr. ${index} on VIRL server ${VIRL_SERVER[${index}]}"
- exit ${retval}
- fi
-done
-
-echo ${VIRL_SID[@]}
-
-virtualenv --system-site-packages env
-. env/bin/activate
-
-echo pip install
-pip install -r ${SCRIPT_DIR}/requirements.txt
-
-for index in "${!VIRL_SERVER[@]}"; do
- pykwalify -s ${SCRIPT_DIR}/resources/topology_schemas/3_node_topology.sch.yaml \
- -s ${SCRIPT_DIR}/resources/topology_schemas/topology.sch.yaml \
- -d ${SCRIPT_DIR}/topologies/enabled/topology${index}.yaml \
- -vvv
- if [ "$?" -ne "0" ]; then
- echo "Topology${index} schema validation failed."
- echo "However, the tests will start."
- fi
-done
-
-function run_test_set() {
- set +x
- OLDIFS=$IFS
- IFS=","
- nr=$(echo $1)
- rm -f ${LOG_PATH}/test_run${nr}.log
- exec &> >(while read line; do echo "$(date +'%H:%M:%S') $line" \
- >> ${LOG_PATH}/test_run${nr}.log; done;)
- suite_str=""
- for suite in ${TEST_GROUPS[${nr}]}; do
- suite_str="${suite_str} --suite ${SUITE_PATH}.${suite}"
- done
- IFS=$OLDIFS
-
- echo "PYTHONPATH=`pwd` pybot -L TRACE -W 136\
- -v TOPOLOGY_PATH:${SCRIPT_DIR}/topologies/enabled/topology${nr}.yaml \
- ${suite_str} \
- --include vm_envAND3_node_single_link_topo \
- --include vm_envAND3_node_double_link_topo \
- --exclude PERFTEST \
- --exclude SKIP_PATCH \
- --noncritical EXPECTED_FAILING \
- --output ${LOG_PATH}/log_test_set_run${nr} \
- tests/"
-
- PYTHONPATH=`pwd` pybot -L TRACE -W 136\
- -v TOPOLOGY_PATH:${SCRIPT_DIR}/topologies/enabled/topology${nr}.yaml \
- ${suite_str} \
- --include vm_envAND3_node_single_link_topo \
- --include vm_envAND3_node_double_link_topo \
- --exclude PERFTEST \
- --exclude SKIP_PATCH \
- --noncritical EXPECTED_FAILING \
- --output ${LOG_PATH}/log_test_set_run${nr} \
- tests/
-
- local_run_rc=$?
- echo ${local_run_rc} > ${SHARED_MEMORY_PATH}/rc_test_run${nr}
- set -x
-}
-
-set +x
-# Send to background an instance of the run_test_set() function for each number,
-# record the pid.
-for index in "${!VIRL_SERVER[@]}"; do
- run_test_set ${index} &
- pid=$!
- echo "Sent to background: Test_set${index} (pid=$pid)"
- pids[$pid]=$index
-done
-
-echo
-echo -n "Waiting..."
-
-# Watch the stable of background processes.
-# If a pid goes away, remove it from the array.
-while [ -n "${pids[*]}" ]; do
- for i in $(seq 0 9); do
- sleep 1
- echo -n "."
- done
- for pid in "${!pids[@]}"; do
- if ! ps "$pid" >/dev/null; then
- echo -e "\n"
- echo "Test_set${pids[$pid]} with PID $pid finished."
- unset pids[$pid]
- fi
- done
- if [ -z "${!pids[*]}" ]; then
- break
- fi
- echo -n -e "\nStill waiting for test set(s): ${pids[*]} ..."
-done
-
-echo
-echo "All test set runs finished."
-echo
-
-set -x
-
-RC=0
-for index in "${!VIRL_SERVER[@]}"; do
- echo "Test_set${index} log:"
- cat ${LOG_PATH}/test_run${index}.log
- RC_PARTIAL_RUN=$(cat ${SHARED_MEMORY_PATH}/rc_test_run${index})
- RC=$((RC+RC_PARTIAL_RUN))
- rm -f ${SHARED_MEMORY_PATH}/rc_test_run${index}
- rm -f ${LOG_PATH}/test_run${index}.log
- echo
-done
-
-# Log the final result
-if [ "${RC}" -eq "0" ]; then
- set +x
- echo
- echo "========================================================================================================================================"
- echo "Final result of all test loops: | PASS |"
- echo "All critical tests have passed."
- echo "========================================================================================================================================"
- echo
- set -x
-else
- if [ "${RC}" -eq "1" ]; then
- HLP_STR="test has"
- else
- HLP_STR="tests have"
- fi
- set +x
- echo
- echo "========================================================================================================================================"
- echo "Final result of all test loops: | FAIL |"
- echo "${RC} critical ${HLP_STR} failed."
- echo "========================================================================================================================================"
- echo
- set -x
-fi
-
-echo Post-processing test data...
-
-partial_logs=""
-for index in "${!VIRL_SERVER[@]}"; do
- partial_logs="${partial_logs} ${LOG_PATH}/log_test_set_run${index}.xml"
-done
-
-# Rebot output post-processing
-rebot --noncritical EXPECTED_FAILING \
- --output output.xml ${partial_logs}
-
-# Remove unnecessary log files
-rm -f ${partial_logs}
-
-echo Post-processing finished.
-
-if [ ${RC} -eq 0 ]; then
- RETURN_STATUS=0
-else
- RETURN_STATUS=1
-fi
-
-exit ${RETURN_STATUS}