summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2018-10-02vhost-user: add support for vlib_log APIJerome Tollet4-177/+129
Change-Id: I0af68f6b41d0024aa64b93a8b18e2d179bf939b0 Signed-off-by: Jerome Tollet <jtollet@cisco.com> Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-10-02Fix JVPP enum _host_to_net_ translation (VPP-1438)Michal Cmarada1-2/+2
- use ordinal value of enumeration instead of accessing its value directly. Change-Id: I6327a8f7668852846907a92c2713de9ff90c1c75 Signed-off-by: Michal Cmarada <mcmarada@cisco.com>
2018-10-02BFD: add get echo source API (VPP-1367)Matus Fabian4-1/+135
Change-Id: I45f540128e038ddb17ba96ce30965e8f7c732067 Signed-off-by: Matus Fabian <matfabia@cisco.com>
2018-10-02IPsec: add API for SPDs dump (VPP-1363)Matus Fabian2-1/+60
Change-Id: I36e6878712c394de629a9182d2af24c53a8f811d Signed-off-by: Matus Fabian <matfabia@cisco.com>
2018-10-02vhost-user: Interface state updatesJuraj Sloboda4-16/+29
Fix inconsistencies between admin and link interface states Admin down should imply link down: link_up = admin_up && link_ready Change-Id: I4d668d82d035b5d2ae508727f34f1722a0c3e677 Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
2018-10-02vhost_user: Fix setting MTU using uninitialized variableJuraj Sloboda1-2/+1
Change-Id: I0caa5fd584e3785f237d08f3d3be23e9bfee7605 Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
2018-10-02Update code to compute checksum for buffer chainsJuraj Sloboda3-7/+11
Compute ICMP checksum for buffer chains Fix checksum function for buffer chains Change-Id: I39b845b94a63c3ab5fc9f6f9ab36cadbc67c104f Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
2018-10-02tls: fix disconnects for sessions with pending dataFlorin Coras8-37/+93
TLS can enqueue events to itself when app session queue cannot be entirely drained. If a pending disconnect is handled before any such event, session layer may try to dequeue data on deallocated sessions. Change-Id: I5bfc4d53ce95bc16b6a01e1b0e644aafa1ca311b Signed-off-by: Florin Coras <fcoras@cisco.com>
2018-10-02tcp: fix close wait timeout with no finFlorin Coras1-0/+4
Change-Id: Icba9b0dc6dcb4b72288f966728201812d8d12144 Signed-off-by: Florin Coras <fcoras@cisco.com>
2018-10-02tcp: accept fins if in recoveryFlorin Coras1-1/+3
Change-Id: I0c9c055fcc3d681c4032228a90cc81f484e200f0 Signed-off-by: Florin Coras <fcoras@cisco.com>
2018-10-01Fix documentation about sw_interface_set_l2_bridgeYichen Wang1-1/+1
Change-Id: I53e0e7d2cf1e3c52794830b33fa93d1582b74769 Signed-off-by: Yichen Wang <yicwang@cisco.com>
2018-10-01Source VRF SelectNeale Ranns10-0/+1204
match against a packet's source address to determine the VRF for the subsequent destination address lookup. Change-Id: I48ee0ef54dcb891f0ec7f879e4d3b925a0ed0081 Signed-off-by: Neale Ranns <nranns@cisco.com>
2018-10-01Rename device class from PPPPOE to PPPoEPaul Vinciguerra2-10/+10
Change-Id: Ia20eee6cef360b1acd768101df0713f0005a7d14 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2018-10-01dpdk: updated makefile to enable QAT cryptodevRadu Nicolau1-0/+1
Change-Id: I2d70f2f29f3af10b6e43dde235fdf90a4596eb35 Signed-off-by: Radu Nicolau <radu.nicolau@intel.com>
2018-10-01Add adjacency counters to the stats segmentNeale Ranns7-9/+155
Change-Id: I6b59df939c9daf40e261d73d19f500bd90abe6ff Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
2018-10-01vat: fix coverity warning for show_threadsMohsin Kazmi1-3/+7
Change-Id: I8c226b91cc45f6f345444afd8d168e1292371582 Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
2018-10-01API / CLI event-log tracingDave Barach15-3659/+164
Add an "elog trace [api][cli][barrier]" debug CLI command. Removed the barrier elog test command. Remove unused reliable multicast code. Change-Id: Ib3ecde901b7c49fe92b313d0087cd7e776adcdce Signed-off-by: Dave Barach <dave@barachs.net>
2018-10-01Fix the path error inside vcl socket_test.shYalei Wang2-11/+13
Change-Id: I5bcfbd436839e7a6dd82dc57cdb3b7fb6200a69c Signed-off-by: Yalei Wang <william.wangyalei@huawei.com> Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
2018-10-01thread: Add show threads apiMohsin Kazmi11-63/+239
Change-Id: I3124238ab4d43bcef5590bad33a4ff0b5d8b7d15 Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
2018-10-01mroute routers in the stats segmentNeale Ranns8-38/+91
Change-Id: I798e4fb6470ae9e763f8de1c290ff0fc3c0b7f9e Signed-off-by: Neale Ranns <nranns@cisco.com>
2018-10-01IGMP: handle (*,G) report with no source addressesNeale Ranns2-8/+30
Change-Id: I363370b9d4a27b992bad55c48fc930a2fbea2165 Signed-off-by: Neale Ranns <nranns@cisco.com>
2018-10-01SCTP: fix overflow issue with timestampMarco Varlese6-24/+30
Change-Id: I03bb47a2baa4375b7bf9347d95c4cc8de37fe510 Signed-off-by: Marco Varlese <marco.varlese@suse.com>
2018-10-01Support dynamic dual/quad loop selection on aarch64Lijian Zhang4-0/+251
Currently, there are three variants available on aarch64, qdf24xx, thunderx2t99, and cortex-a72. -DCLIB_N_PREFETCHES is passed to source code to select dual/quad implementation. Besides, different compiler options are applied on these critical functions. gcc-7.3.0 reports ICE(internal compiler error) with -mtune=thunderx2t99, so -mtune=thunderx2t99 is enabled only when gcc version is greater than 7.3.0 Cavium ThunderX2, Impermenter 0x43, Part 0x0af -march=armv8-a+crc+crypto -mtune=thunderx2t99 Qualcomm Centriq 2400, Impermenter 0x51, Part 0xc00 -march=armv8.1-a+crc+crypto -mtune=qdf24xx Cortex-A72, Impermenter 0x41, Part 0xd08 -march=armv8-a+crc+crypto -mtune=cortex-a72 Change-Id: Id5649c6325c1e642d0fd42535e3908793b13e02a Signed-off-by: Lijian Zhang <Lijian.Zhang@arm.com> Reviewed-by: Sirshak Das <sirshak.das@arm.com> Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
2018-09-30vlib: barrier sync elog tracing improvementsDave Barach4-135/+114
Change-Id: I2d3b8d5a7192ff68bee443a99346ecb807b2d833 Signed-off-by: Damjan Marion <damarion@cisco.com> Signed-off-by: Dave Barach <dave@barachs.net>
2018-09-29vom: Fix the l2 port type in bridge domainMohsin Kazmi7-51/+148
Change-Id: I8aba11142daeacce892ec529c2229ec54ee427e2 Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
2018-09-29vcl: handle old events before blocking in epollFlorin Coras2-3/+14
Change-Id: I3e62c787882d93c3bfb398ed0d04ef56b3a60b2b Signed-off-by: Florin Coras <fcoras@cisco.com>
2018-09-29session: lock msg queues while generating control eventsFlorin Coras2-13/+10
Change-Id: I229ce9c306a97956c87ccb8f7a1c5c9dac94ab31 Signed-off-by: Florin Coras <fcoras@cisco.com>
2018-09-28gitignore: build/external/downloadsFlorin Coras1-1/+2
Change-Id: I041764a5546352086aa9803e4bbeb9dff5f8d69a Signed-off-by: Florin Coras <fcoras@cisco.com>
2018-09-28bond: tx performance enhancement part deuxSteven3-124/+106
- Reduce per packet cost by buffering the output packet buffer indexes in the queue and process the queue outside the packet processing loop. - Move unnecessary variable initialization outside of the while loop. - There is no need to save the old interface if tracing is not enabled. Test result for 256 bytes packet comparison. Other packet size shows similar improvement. With the patch -------------- BondEthernet0-output active 52836 13526016 0 1.71e1 256.00 BondEthernet0-tx active 52836 13526016 0 2.68e1 256.00 TenGigabitEthernet6/0/0-output active 52836 6762896 0 9.17e0 127.99 TenGigabitEthernet6/0/0-tx active 52836 6762896 0 6.97e1 127.99 TenGigabitEthernet6/0/1-output active 52836 6763120 0 9.40e0 128.00 TenGigabitEthernet6/0/1-tx active 52836 6763120 0 7.00e1 128.00 bond-input active 52836 13526016 0 1.76e1 256.00 Without the patch ----------------- BondEthernet0-output active 60858 15579648 0 1.73e1 256.00 BondEthernet0-tx active 60858 15579648 0 2.94e1 256.00 TenGigabitEthernet6/0/0-output active 60858 7789626 0 9.29e0 127.99 TenGigabitEthernet6/0/0-tx active 60858 7789626 0 7.01e1 127.99 TenGigabitEthernet6/0/1-output active 60858 7790022 0 9.31e0 128.00 TenGigabitEthernet6/0/1-tx active 60858 7790022 0 7.10e1 128.00 bond-input active 60858 15579648 0 1.77e1 256.00 Change-Id: Ib6d73a63ceeaa2f1397ceaf4c5391c57fd865b04 Signed-off-by: Steven <sluong@cisco.com>
2018-09-28MAP: Add check for well known ports.Ole Troan2-2/+155
And more unit-tests. Change-Id: I4667d82d928b7ba8d96b5a5648d464115b3ed216 Signed-off-by: Ole Troan <ot@cisco.com>
2018-09-28IP ttl check in ip4-input missing for single packet path.Ole Troan1-0/+3
Change-Id: Idc17b2f8794d37cd3242a97395ab56bd633ca575 Signed-off-by: Ole Troan <ot@cisco.com>
2018-09-28stats: Split stat_segment and stats code in preparation for deprecation.Ole Troan10-112/+148
Split the stat_segment.c code from stats.c. Rename stats.[ch] to prepare for removing (19.01?) In addition stats.api can be removed. Since the stats aggregation for the stat segment does not use the API, that part is now done on the main thread. (Old stats aggregator is also left in place). Change-Id: I9867429f4fc547b1a7ab7f88bc4f3625428d681b Signed-off-by: Ole Troan <ot@cisco.com>
2018-09-27Revert "japi: Move Java API binding to cmake"Damjan Marion7-258/+386
components: Development CMake Error at /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find JNI (missing: JAVA_AWT_INCLUDE_PATH) Call Stack (most recent call first): /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE) /usr/share/cmake-3.10/Modules/FindJNI.cmake:310 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) CMakeLists.txt:37 (find_package) -- Configuring incomplete, errors occurred! See also "/scratch/vpp-tmp/build-root/build-vpp-native/japi/CMakeFiles/CMakeOutput.log". See also "/scratch/vpp-tmp/build-root/build-vpp-native/japi/CMakeFiles/CMakeError.log". Makefile:640: recipe for target 'japi-configure' failed make[2]: *** [japi-configure] Error 1 make[2]: Leaving directory '/scratch/vpp-tmp/build-root' This reverts commit a33db2528485ac39e8987bec7b138dbdad21dc5a. Change-Id: I8a818ce70a8379656c1134432e22db418a4690fe Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-09-27MAP: Correctly print ea-bits-len in map commands.Ole Troan1-1/+1
Change-Id: I17b19875547cd6056aaf8f8fde439caa8e42d274 Signed-off-by: Ole Troan <ot@cisco.com>
2018-09-27MAP: 64-bit DMROle Troan2-17/+15
Change-Id: I261e11f1006039e4a4019fec2fd3271763ae476a Signed-off-by: Ole Troan <ot@cisco.com>
2018-09-27Trivial: Cleanup some typos.Paul Vinciguerra32-54/+54
This is a new commit for code under a different maintainer. Change-Id: I79fa403fec6a312238a9a4b18b35dbcafaa05439 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
2018-09-27Add logging to vfio codeDamjan Marion2-3/+23
Change-Id: Iacdff0a5006a0617e3c9559ce7b258f26e256abb Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-09-27dpdk_plugin: fix mlx5 build and runtime issuesSirshak Das3-3/+17
There are issues with VPP finding and linking the mlx5 shared glue library which was built by default if mlx5 was enabled. Runtime Errors this patch fixes: net_mlx5: cannot load glue library: librte_pmd_mlx5_glue.so.18.05.0: cannot open shared object file: No such file or directory net_mlx5: cannot initialize PMD due to missing run-time dependency on rdma-core libraries (libibverbs, libmlx5) This patch introduces additional config parameter to disable glue library building and instead statically link ibverbs and mlx5 libraries to the PMD and dpdk_plugin. Change-Id: I0b2f67652a57854c778e991780903fb15706ace8 Signed-off-by: Sirshak Das <sirshak.das@arm.com> Reviewed-by: Lijian Zhang <Lijian.Zhang@arm.com>
2018-09-27libmemif: external region bugfixJakub Grajciar2-2/+5
Change-Id: I7dbece80dda917ff78f53f8f4074132895aed316 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-09-27memif: Memif Test CaseJakub Grajciar4-0/+820
Change-Id: Ic0d5fc6ccbd496afcc870b908ef799af7c804c30 Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
2018-09-27"show log": print wall-clock timeDave Barach1-1/+14
Change-Id: I36f42c03f778955dd543da6c878be090d0443922 Signed-off-by: Dave Barach <dave@barachs.net>
2018-09-27tcp: use scaled window for new connectsFlorin Coras3-5/+12
Change-Id: Idf83fce8ca176e57b323e3741034e3223f1d195a Signed-off-by: Florin Coras <fcoras@cisco.com>
2018-09-27add cmake build option to build openssl asyncPing Yu1-0/+11
This code is orignally in automake, but it is missing in cmake. Thus add it to make openssl async work in cmake build system Change-Id: Ie69ee9c2099273e51ce13ccab27bdd2619db4814 Signed-off-by: Ping Yu <ping.yu@intel.com>
2018-09-27avf: may crash if failed to allocate buffers to ringSteven1-1/+1
In avf_rxq_refill, we invoke vlib_buffer_alloc_to_ring which may fill buffers from the end of the ring and continue to the beginning of the ring. If we fill some in the end and continue to fill some in the beginning, but does not have enough buffers to fill the whole request, n_alloc returns a value which is not equal to n_refill to indicate partial refill. We don't like partial refill and invoke vlib_buffer_free to get rid of the buffers that just got refilled. However, vlib_buffer_free API is to free the buffers from the slot continuously. It does not know how to free some from rxq->bufs[slot], and then continue to free the rest when it reaches the end of the ring. The fix is to use vlib_buffer_free_from_ring which is smart enough to figure that stuff out. Change-Id: I93c28e0b0d8d8f22c321d1a5912e00c27b4e2e8d Signed-off-by: Steven <sluong@cisco.com>
2018-09-27SCTP: fix advanced debug outputMarco Varlese1-2/+2
Change-Id: Ied63ebaec8e19189f8b1ab2a7f6d7474c3f2ad6e Signed-off-by: Marco Varlese <marco.varlese@suse.com>
2018-09-27Test typo fixesjuraj.linkes3-9/+9
Renamed one acl testcase class which was copy-pasted and fixed one inheritance issue. Renamed one bihash testcase class. Change-Id: I70d911ee7872d8d9ddba96c7f721dd099f0152f7 Signed-off-by: juraj.linkes <juraj.linkes@pantheon.tech>
2018-09-27fix typo in vpp-ext-deps rpm packagingDamjan Marion1-1/+1
Change-Id: Ia23a876cefbfd32d6f543a77dfec57a4aa5676ae Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-09-27IPIP and IPv6 fragmentationOle Troan17-330/+446
- Error where ICMPv6 error code doesn't reset VLIB_TX = -1 Leading to crash for ICMP generated on tunnelled packets - Missed setting VNET_BUFFER_F_LOCALLY_ORIGINATED, so IP in IPv6 packets never got fragmented. - Add support for fragmentation of buffer chains. - Remove support for inner fragmentation in frag code itself. Change-Id: If9a97301b7e35ca97ffa5c0fada2b9e7e7dbfb27 Signed-off-by: Ole Troan <ot@cisco.com>
2018-09-27vom: Add ip punt redirectMohsin Kazmi6-0/+647
Change-Id: I5c7b925b22b53f18b0c45374883a6a4bff580c75 Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
2018-09-26vnet: show interface rx-placement may display garbage charactersSteven1-1/+1
Before ------ DBGvpp# sh int rx-mode sh int rx-mode Thread 1 (vpp_wk_0^@): node vmxnet3-input: vmxnet3-0/b/0/0 queue 0 (polling) Thread 2 (vpp_wk_1^@): node vmxnet3-input: vmxnet3-0/13/0/0 queue 0 (polling) DBGvpp# After ----- DBGvpp# sh int rx-placement sh int rx-placement Thread 1 (vpp_wk_0): node vmxnet3-input: vmxnet3-0/b/0/0 queue 0 (polling) Thread 2 (vpp_wk_1): node vmxnet3-input: vmxnet3-0/13/0/0 queue 0 (polling) DBGvpp# Change-Id: I5910d502757054c3942fac9d20c5104e95fc6b56 Signed-off-by: Steven <sluong@cisco.com>
lass="nb">exit 127 fi # Get the LOAD of each server based on number of active simulations (testcases) VIRL_SERVER_LOAD=() for index in "${!VIRL_SERVERS[@]}"; do VIRL_SERVER_LOAD[${index}]=$(ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${VIRL_SERVERS[$index]} "list-testcases | grep session | wc -l") done # Pick for each TEST_GROUP least loaded server VIRL_SERVER=() for index in "${!TEST_GROUPS[@]}"; do least_load_server_idx=$(echo "${VIRL_SERVER_LOAD[*]}" | tr -s ' ' '\n' | awk '{print($0" "NR)}' | sort -g -k1,1 | head -1 | cut -f2 -d' ') least_load_server=${VIRL_SERVERS[$least_load_server_idx-1]} VIRL_SERVER+=($least_load_server) # Adjusting load as we are not going run simulation immediately VIRL_SERVER_LOAD[$least_load_server_idx-1]=$((VIRL_SERVER_LOAD[$least_load_server_idx-1]+1)) done echo "Selected VIRL servers: ${VIRL_SERVER[@]}" 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 packages have already been copied to the VIRL host ${VIRL_SERVER[${index}]}" else scp ${SSH_OPTIONS} ${VPP_PKGS[@]} \ ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}:${VIRL_DIR_LOC} result=$? if [ "${result}" -ne "0" ]; then echo "Failed to copy VPP packages to VIRL host ${VIRL_SERVER[${index}]}" echo ${result} exit ${result} else echo "VPP packages 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}]}" # Get given VIRL server limits for max. number of VMs and IPs max_ips=$(get_max_ip_nr ${VIRL_SERVER[${index}]}) max_ips_from_sims=$(($(get_max_sim_nr ${VIRL_SERVER[${index}]})*IPS_PER_SIMULATION)) # Set quota to lower value IP_QUOTA=$([ $max_ips -le $max_ips_from_sims ] && echo "$max_ips" || echo "$max_ips_from_sims") # Start the simulation VIRL_SID[${index}]=$(ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${VIRL_SERVER[${index}]} \ "start-testcase -vv \ --quota ${IP_QUOTA} \ --copy ${VIRL_TOPOLOGY} \ --expiry 180 \ --release ${VIRL_RELEASE} \ ${VPP_PKGS_FULL[@]}") # TODO: remove param ${VPP_PKGS_FULL[@]} when start-testcase script is # updated on all virl servers retval=$? if [ ${retval} -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 nr. ${index} 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 [ ${retval} -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 SOFTWIRE \ --exclude ${SKIP_PATCH} \ --exclude SKIP_TEST \ --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 SOFTWIRE \ --exclude ${SKIP_PATCH} \ --exclude SKIP_TEST \ --noncritical EXPECTED_FAILING \ --output ${LOG_PATH}/log_test_set_run${nr} \ tests/ local local_run_rc=$? set -x echo ${local_run_rc} > ${LOG_PATH}/rc_test_run${nr} } 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 ${LOG_PATH}/rc_test_run${index}) if [ -z "$RC_PARTIAL_RUN" ]; then echo "Failed to retrieve return code from test run ${index}" exit 1 fi RC=$((RC+RC_PARTIAL_RUN)) rm -f ${LOG_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}