aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--README.md10
-rwxr-xr-xbootstrap-DMM.sh453
-rw-r--r--docs/report/detailed_test_results/dmm_functional_results/index.rst12
-rw-r--r--docs/report/dmm_functional_tests/csit_release_notes.rst20
-rw-r--r--docs/report/dmm_functional_tests/documentation.rst6
-rw-r--r--docs/report/dmm_functional_tests/index.rst9
-rw-r--r--docs/report/dmm_functional_tests/overview.rst54
-rw-r--r--docs/report/dmm_functional_tests/test_environment.rst7
-rw-r--r--docs/report/index.html.template13
-rw-r--r--docs/report/introduction/introduction.rst11
-rw-r--r--docs/report/introduction/test_scenarios_overview.rst10
-rw-r--r--docs/report/test_configuration/cot_performance_configuration/index.rst12
-rw-r--r--docs/report/vpp_performance_tests/documentation/containers.rst1
-rw-r--r--docs/report/vpp_performance_tests/overview.rst4
-rw-r--r--docs/tag_documentation.rst4
-rw-r--r--resources/libraries/python/DMM/DMMConstants.py32
-rw-r--r--resources/libraries/python/DMM/SetupDMMTest.py184
-rw-r--r--resources/libraries/python/DMM/SingleCliSer.py298
-rw-r--r--resources/libraries/python/DMM/__init__.py16
-rw-r--r--resources/libraries/robot/dmm/dmm_utils.robot65
-rw-r--r--resources/tools/doc_gen/src/index.rst1
-rw-r--r--resources/tools/doc_gen/src/tests.dmm.func.rst3
-rw-r--r--resources/tools/presentation/conf.py8
-rw-r--r--resources/tools/presentation/conf_cpta/conf.py9
-rw-r--r--tests/dmm/func/SingleCliSer-func.robot46
-rw-r--r--tests/dmm/func/__init__.robot20
27 files changed, 7 insertions, 1302 deletions
diff --git a/.gitignore b/.gitignore
index f6e4d5a3fa..bd08ccda77 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,6 @@
/.tox
/archive_dir
-/dmm
/download_dir
/env
# "generated" is a place for autogenerated data, not to pollute git.
diff --git a/README.md b/README.md
index 86d0968410..02ec25a0f9 100644
--- a/README.md
+++ b/README.md
@@ -70,10 +70,6 @@ A brief bottom-up description is provided here:
- Test setup, test teardown;
1. Tests - Robot
- Test suites with test cases;
- - Functional tests using VIRL environment:
- - VPP;
- - DMM;
- - TLDK;
- Performance tests using physical testbed environment:
- VPP;
- DPDK-Testpmd;
@@ -92,13 +88,9 @@ A brief bottom-up description is provided here:
```
.
└── tests
-    ├── dmm
-    │   └── func # DMM functional VIRL tests
   ├── dpdk
   │   ├── dpdk_scripts # DPDK helper scripts
   │   └── perf # DPDK performance tests
-    ├── kubernetes
-    │   └── perf # VPP K8S orchestration performance tests
   ├── tldk
   │   ├── func # TLDK functional VIRL tests
   │   ├── tldk_scripts # TLDK helper scripts
@@ -119,7 +111,6 @@ resources
  │   ├── config
   │   ├── entry # Main bootstrap entry directory
   │   ├── function # Bootstrap function library
-    │   ├── qemu_patches # Custom QEMU patches (see KVM methodology)
   │   └── shell # Various functions
   ├── python # Python L1 KWs
   └── robot # Robot Framework L2 KWs
@@ -146,7 +137,6 @@ resources
│   │   ├── topology # Helper scripts for topology manipulation
│   │   ├── trex # TRex driver
│   │   ├── vagrant # VPP device vagrant environment
-│   │   ├── virl # VIRL helper scripts
│   │   └── wrk # WRK driver
│   ├── topology_schemas
│   ├── traffic_profiles # Performance tests traffic profiles
diff --git a/bootstrap-DMM.sh b/bootstrap-DMM.sh
deleted file mode 100755
index 2f72b25a92..0000000000
--- a/bootstrap-DMM.sh
+++ /dev/null
@@ -1,453 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2018 Huawei Technologies Co.,Ltd.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set -x
-
-cat /etc/hostname
-cat /etc/hosts
-
-JOB_ARCHIVE_ARTIFACTS=(log.html output.xml report.html *.log)
-LOG_ARCHIVE_ARTIFACTS=(log.html output.xml report.html *.log)
-JOB_ARCHIVE_DIR="archive"
-LOG_ARCHIVE_DIR="$WORKSPACE/archives"
-mkdir -p ${JOB_ARCHIVE_DIR}
-mkdir -p ${LOG_ARCHIVE_DIR}
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-export PYTHONPATH=${SCRIPT_DIR}
-
-if [ -f "/etc/redhat-release" ]; then
- DISTRO="CENTOS"
- sudo yum install -y python-devel python-virtualenv openssh-clients sshpass
- DPDK_ARTIFACTS=""
- VIRL_TOPOLOGY=$(cat ${SCRIPT_DIR}/VIRL_TOPOLOGY_CENTOS)
- VIRL_RELEASE=$(cat ${SCRIPT_DIR}/VIRL_RELEASE_CENTOS)
-else
- DISTRO="UBUNTU"
- export DEBIAN_FRONTEND=noninteractive
- sudo apt-get -y update
- sudo apt-get -y install libpython2.7-dev python-virtualenv
- DPDK_ARTIFACTS=""
- VIRL_TOPOLOGY=$(cat ${SCRIPT_DIR}/VIRL_TOPOLOGY_UBUNTU)
- VIRL_RELEASE=$(cat ${SCRIPT_DIR}/VIRL_RELEASE_UBUNTU)
-fi
-
-VIRL_SERVERS=("10.30.51.28" "10.30.51.29" "10.30.51.30")
-IPS_PER_VIRL=( "10.30.51.28:252"
- "10.30.51.29:252"
- "10.30.51.30:252" )
-SIMS_PER_VIRL=( "10.30.51.28:13"
- "10.30.51.29:13"
- "10.30.51.30:13" )
-IPS_PER_SIMULATION=5
-
-function get_max_ip_nr() {
- virl_server=$1
- IP_VALUE="0"
- for item in "${IPS_PER_VIRL[@]}" ; do
- if [ "${item%%:*}" == "${virl_server}" ]
- then
- IP_VALUE=${item#*:}
- break
- fi
- done
- echo "$IP_VALUE"
-}
-
-function get_max_sim_nr() {
- virl_server=$1
- SIM_VALUE="0"
- for item in "${SIMS_PER_VIRL[@]}" ; do
- if [ "${item%%:*}" == "${virl_server}" ]
- then
- SIM_VALUE=${item#*:}
- break
- fi
- done
- echo "$SIM_VALUE"
-}
-
-VIRL_USERNAME=jenkins-in
-VIRL_PKEY=priv_key
-VIRL_SERVER_STATUS_FILE="status"
-VIRL_SERVER_EXPECTED_STATUS="PRODUCTION"
-
-SSH_OPTIONS="-i ${VIRL_PKEY} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes -o LogLevel=error"
-
-TEST_GROUPS=("func")
-SUITE_PATH="tests.dmm"
-SKIP_PATCH="SKIP_PATCH"
-
-# Create tmp dir
-mkdir ${SCRIPT_DIR}/tmp
-
-# Use tmp dir to store log files
-LOG_PATH="${SCRIPT_DIR}/tmp"
-
-# Use tmp dir for tarballs
-export TMPDIR="${SCRIPT_DIR}/tmp"
-
-function ssh_do() {
- echo
- echo "### " ssh $@
- ssh ${SSH_OPTIONS} $@
-}
-
-rm -f ${VIRL_PKEY}
-cat > ${VIRL_PKEY} <<EOF
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEA+IHXq87GcqMR1C47rzx6Cbip5Ghq8pKrbqKrP5Nf41HcYrT6
-GOXl9nFWKsMOzIlIn+8y7Il27eZh7csQGApbg8QLiHMtcYEmWNzKZpkqg4nuAPxX
-VXwlKgnKX902SrET9Gp9TDayiHtCRWVfrlPPPSA0UEXW6BjLN/uHJ+W/Xzrrab+9
-asBVa05vT2W6n0KJ66zfCaeDM912mQ6SttscAwFoWDmdHlegiVqrlIG2ABxOvxxz
-L3dM3iSmlmQlzv9bThjo+nI4KFYh6m5wrZmAo5r/4q9CIJc21HVnTqkGOWJIZz6J
-73lePJVSq5gYqaoGw3swFEA/MDkOx7baWKSoLQIDAQABAoIBAQCNBeolNp+JWJ76
-gQ4fwLsknyXSV6sxYyhkDW4PEwwcTU06uqce0AAzXVffxne0fMe48x47+zqBgPbb
-4huM+Pu8B9nfojUMr5TaYtl9Zbgpk3F8H7dT7LKOa6XrxvZTZrADSRc30+Z26zPN
-e9zTaf42Gvt0/l0Zs1BHwbaOXqO+XuwJ3/F9Sf3PQYWXD3EOWjpHDP/X/1vAs6lV
-SLkm6J/9KKE1m6I6LTYjIXuYt4SXybW6N2TSy54hhQtYcDUnIU2hR/PHVWKrGA0J
-kELgrtTNTdbML27O5gFWU4PLUEYTZ9fN11D6qUZKxLcPOiPPHXkiILMRCCnG5DYI
-ksBAU/YlAoGBAPxZO9VO18TYc8THV1nLKcvT2+1oSs1UcA2wNQMU55t910ZYinRa
-MRwUhMOf8Mv5wOeiZaRICQB1PnVWtDVmGECgPpK6jUxqAwn8rgJcnoafLGL5YKMY
-RVafTe6N5LXgCaOcJrk21wxs6v7ninEbUxxc575urOvZMBkymDw91dwbAoGBAPwa
-YRhKhrzFKZzdK0RadVjnxKvolUllpoqqg3XuvmeAJHAOAnaOgVWq68NAcp5FZJv0
-2D2Up7TX8pjf9MofP1SJbcraKBpK4NzfNkA0dSdEi+FhVofAJ9umB2o5LW1n7sab
-UIrjsdzSJK/9Zb9yTTHPyibYzNEgaJV1HsbxfEFXAoGAYO2RmvRm0phll18OQVJV
-IpKk9kLKAKZ/R/K32hAsikBC8SVPQTPniyaifFWx81diblalff2hX4ipTf7Yx24I
-wMIMZuW7Im/R7QMef4+94G3Bad7p7JuE/qnAEHJ2OBnu+eYfxaK35XDsrq6XMazS
-NqHE7hOq3giVfgg+C12hCKMCgYEAtu9dbYcG5owbehxzfRI2/OCRsjz/t1bv1seM
-xVMND4XI6xb/apBWAZgZpIFrqrWoIBM3ptfsKipZe91ngBPUnL9s0Dolx452RVAj
-yctHB8uRxWYgqDkjsxtzXf1HnZBBkBS8CUzYj+hdfuddoeKLaY3invXLCiV+PpXS
-U4KAK9kCgYEAtSv0m5+Fg74BbAiFB6kCh11FYkW94YI6B/E2D/uVTD5dJhyEUFgZ
-cWsudXjMki8734WSpMBqBp/J8wG3C9ZS6IpQD+U7UXA+roB7Qr+j4TqtWfM+87Rh
-maOpG56uAyR0w5Z9BhwzA3VakibVk9KwDgZ29WtKFzuATLFnOtCS46E=
------END RSA PRIVATE KEY-----
-EOF
-chmod 600 ${VIRL_PKEY}
-
-#
-# The server must be reachable and have a "status" file with
-# the content "PRODUCTION" to be selected.
-#
-# If the server is not reachable or does not have the correct
-# status remove it from the array and start again.
-#
-# Abort if there are no more servers left in the array.
-#
-VIRL_PROD_SERVERS=()
-for index in "${!VIRL_SERVERS[@]}"; do
- virl_server_status=$(ssh ${SSH_OPTIONS} ${VIRL_USERNAME}@${VIRL_SERVERS[$index]} cat $VIRL_SERVER_STATUS_FILE 2>&1)
- echo VIRL HOST ${VIRL_SERVERS[$index]} status is \"$virl_server_status\"
- if [ "$virl_server_status" == "$VIRL_SERVER_EXPECTED_STATUS" ]
- then
- # Candidate is in good status. Add to array.
- VIRL_PROD_SERVERS+=(${VIRL_SERVERS[$index]})
- fi
-done
-
-VIRL_SERVERS=("${VIRL_PROD_SERVERS[@]}")
-echo "VIRL servers in production: ${VIRL_SERVERS[@]}"
-num_hosts=${#VIRL_SERVERS[@]}
-if [ $num_hosts == 0 ]
-then
- echo "No more VIRL candidate hosts available, failing."
- 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[@]}"
-
-# Temporarily download DPDK packages
-DMM_TAR_FILE="dmm_depends.tar.gz"
-
-cd dmm/scripts/
-./build.sh all
-cd -
-
-DPDK_DOWNLOAD_PATH=$(cat dmm/scripts/build_dpdk.sh | grep DPDK_DOWNLOAD_PATH= | cut -d "=" -f2)
-mv $DPDK_DOWNLOAD_PATH/dpdk-18.02.tar.xz .
-
-wget http://security.ubuntu.com/ubuntu/pool/main/n/numactl/libnuma1_2.0.11-1ubuntu1.1_amd64.deb
-wget http://security.ubuntu.com/ubuntu/pool/main/n/numactl/libnuma-dev_2.0.11-1ubuntu1.1_amd64.deb
-wget http://security.ubuntu.com/ubuntu/pool/main/e/ethtool/ethtool_4.5-1_amd64.deb
-wget http://security.ubuntu.com/ubuntu/pool/main/l/lsof/lsof_4.89+dfsg-0.1_amd64.deb
-
-tar zcf ${DMM_TAR_FILE} dpdk-18.02.tar.xz ./dmm/ libnuma*.deb
-
-VIRL_DIR_LOC="/tmp"
-
-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 "DMM_TAR_FILE has already been copied to the VIRL host ${VIRL_SERVER[${index}]}"
- else
- scp ${SSH_OPTIONS} ${DMM_TAR_FILE} \
- ${VIRL_USERNAME}@${VIRL_SERVER[${index}]}:${VIRL_DIR_LOC}/
-
- result=$?
- if [ "${result}" -ne "0" ]; then
- echo "Failed to copy DMM_TAR_FILE to VIRL host ${VIRL_SERVER[${index}]}"
- echo ${result}
- exit ${result}
- else
- echo "DMM_TAR_FILE 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-DMM -vv --quota ${IP_QUOTA} --copy ${VIRL_TOPOLOGY} \
- --release ${VIRL_RELEASE} ${VIRL_DIR_LOC}/${DMM_TAR_FILE}")
- # TODO: remove param ${DMM_TAR_FILE} 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 ${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 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}
-
-# Archive JOB artifacts in jenkins
-for i in ${JOB_ARCHIVE_ARTIFACTS[@]}; do
- cp $( readlink -f ${i} | tr '\n' ' ' ) ${JOB_ARCHIVE_DIR}/
-done
-# Archive JOB artifacts to logs.fd.io
-for i in ${LOG_ARCHIVE_ARTIFACTS[@]}; do
- cp $( readlink -f ${i} | tr '\n' ' ' ) ${LOG_ARCHIVE_DIR}/
-done
-
-echo Post-processing finished.
-
-if [ ${RC} -eq 0 ]; then
- RETURN_STATUS=0
-else
- RETURN_STATUS=1
-fi
-
-exit ${RETURN_STATUS}
diff --git a/docs/report/detailed_test_results/dmm_functional_results/index.rst b/docs/report/detailed_test_results/dmm_functional_results/index.rst
deleted file mode 100644
index 2acd888914..0000000000
--- a/docs/report/detailed_test_results/dmm_functional_results/index.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-DMM Functional
-==============
-
-.. note::
-
- Data sources for reported test results: i) `FD.io test executor DMM
- functional jobs`_, ii) archived FD.io jobs test result `output files
- <../../_static/archive/>`_.
-
-.. toctree::
-
- dmm_functional_results
diff --git a/docs/report/dmm_functional_tests/csit_release_notes.rst b/docs/report/dmm_functional_tests/csit_release_notes.rst
deleted file mode 100644
index 32ee01ace6..0000000000
--- a/docs/report/dmm_functional_tests/csit_release_notes.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-Release Notes
-=============
-
-Changes in |csit-release|
--------------------------
-
-No changes
-
-Known Issues
-------------
-
-Here is the list of known issues in |csit-release| for DMM functional tests in
-VIRL:
-
-+---+-----------------------------------------+-------------------------------------------------------------------------------------+
-| # | JiraID | Issue Description |
-+===+=========================================+=====================================================================================+
-| 1 | `DMM-17 | DMM CentOs job disabled. |
-| | <https://jira.fd.io/browse/DMM-17>`_ | DPDK version and relative kernel version issue, CentOS job is temporarily disabled. |
-+---+-----------------------------------------+-------------------------------------------------------------------------------------+
diff --git a/docs/report/dmm_functional_tests/documentation.rst b/docs/report/dmm_functional_tests/documentation.rst
deleted file mode 100644
index 56fb357a60..0000000000
--- a/docs/report/dmm_functional_tests/documentation.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Documentation
-=============
-
-`CSIT DMM Functional Tests Documentation`_ contains detailed
-functional description and input parameters for each test case.
-
diff --git a/docs/report/dmm_functional_tests/index.rst b/docs/report/dmm_functional_tests/index.rst
deleted file mode 100644
index defb9ddbc8..0000000000
--- a/docs/report/dmm_functional_tests/index.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-DMM Functional
-==============
-
-.. toctree::
-
- overview
- csit_release_notes
- test_environment
- documentation
diff --git a/docs/report/dmm_functional_tests/overview.rst b/docs/report/dmm_functional_tests/overview.rst
deleted file mode 100644
index 480be8b0b7..0000000000
--- a/docs/report/dmm_functional_tests/overview.rst
+++ /dev/null
@@ -1,54 +0,0 @@
-Overview
-========
-
-Virtual Topologies
-------------------
-
-CSIT DMM functional tests are executed in VM-based virtual topologies
-created on demand using :abbr:`VIRL (Virtual Internet Routing Lab)`
-simulation platform contributed by Cisco. VIRL runs on physical
-baremetal servers hosted by LF FD.io project.
-
-All tests are executed in three-node virtual test topology shown in the
-figure below.
-
-.. only:: latex
-
- .. raw:: latex
-
- \begin{figure}[H]
- \centering
- \graphicspath{{../_tmp/src/vpp_functional_tests/}}
- \includegraphics[width=0.90\textwidth]{virtual-3n-nic2nic}
- \label{fig:virtual-3n-nic2nic}
- \end{figure}
-
-.. only:: html
-
- .. figure:: ../vpp_functional_tests/virtual-3n-nic2nic.svg
- :alt: virtual-3n-nic2nic
- :align: center
-
-SUT1 and SUT2 are two VMs (running Ubuntu), TG is a Traffic Generator VM
-(running Ubuntu). SUTs run
-sample server-client application using the DMM libraries in Linux user-
-mode as a Device Under Test (DUT) within the VM. Currently TG node is
-not being used in DMM-CSIT. Network connectivity between SUTs and to TG
-is provided using virtual NICs and VMs' virtio drivers.
-
-Functional Tests Coverage
--------------------------
-
-|csit-release| includes following DMM functionality tested in virtual VM
-environment:
-
-+-----------------------+----------------------------------------------+
-| Functionality | Description |
-+=======================+==============================================+
-| DMM basic operation | The test case demonstrates single |
-| | server[DUT1] and single client[DUT2] |
-| | scenario using DMM framework and kernel |
-| | tcp/ip stack. |
-+-----------------------+----------------------------------------------+
-| DMM lwip integration | |
-+-----------------------+----------------------------------------------+
diff --git a/docs/report/dmm_functional_tests/test_environment.rst b/docs/report/dmm_functional_tests/test_environment.rst
deleted file mode 100644
index 72026f13a9..0000000000
--- a/docs/report/dmm_functional_tests/test_environment.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-Test Environment
-================
-
-FD.io CSIT DMM functional tests are executed in the same FD.io VIRL
-virtual environment as used CSIT VPP functional tests. See description
-in `VPP Functional Tests Environment
-<../vpp_functional_tests/test_environment.html>`_. \ No newline at end of file
diff --git a/docs/report/index.html.template b/docs/report/index.html.template
index 272e8513a4..ce90001367 100644
--- a/docs/report/index.html.template
+++ b/docs/report/index.html.template
@@ -53,16 +53,6 @@ CSIT-1908
vpp_device_tests/test_environment
vpp_device_tests/documentation
-..
- .. toctree::
- :maxdepth: 2
- :caption: DMM Functional
-
- dmm_functional_tests/overview
- dmm_functional_tests/csit_release_notes
- dmm_functional_tests/test_environment
- dmm_functional_tests/documentation
-
.. toctree::
:maxdepth: 2
:caption: Detailed Results
@@ -72,9 +62,6 @@ CSIT-1908
detailed_test_results/dpdk_performance_results/index
detailed_test_results/vpp_device_results_ubuntu/index
-..
- detailed_test_results/dmm_functional_results/index
-
.. toctree::
:maxdepth: 2
:caption: Test Configuration
diff --git a/docs/report/introduction/introduction.rst b/docs/report/introduction/introduction.rst
index d7fc061051..a1d2885b0d 100644
--- a/docs/report/introduction/introduction.rst
+++ b/docs/report/introduction/introduction.rst
@@ -103,14 +103,3 @@ available for download.
analytics module.
- **CSIT RF Tags Descriptions**: CSIT RF Tags used for test suite and
test case grouping and selection.
-
-..
- #. DMM FUNCTIONAL: DMM functional tests executed in
- virtual FD.io testbeds.
-
- - **Overview**: Tested virtual topologies, test coverage and naming
- specifics;
- - **Release Notes**: Changes in |csit-release|, known issues.
- - **Test Environment**: Functional test environment configuration.
- - **Documentation**: Pointers to CSIT source code documentation for
- DMM functional tests.
diff --git a/docs/report/introduction/test_scenarios_overview.rst b/docs/report/introduction/test_scenarios_overview.rst
index 00af70c4cf..0d520f0296 100644
--- a/docs/report/introduction/test_scenarios_overview.rst
+++ b/docs/report/introduction/test_scenarios_overview.rst
@@ -48,16 +48,6 @@ Brief overview of test scenarios covered in this report:
cover vNIC-to-vNIC vNIC-to-nestedVM-to-vNIC forwarding topologies.
Scapy is used as a traffic generator.
-..
- #. **Honeycomb Functional**: Honeycomb functional tests are executed in
- virtual FD.io testbeds, focusing on Honeycomb management and
- programming functionality of VPP. Tests cover a range of CRUD
- operations executed against VPP.
- #. **DMM Functional**: DMM functional tests are executed in virtual
- FD.io testbeds demonstrating a single server (DUT1) and single
- client (DUT2) scenario using DMM framework and Linux kernel TCP/IP
- stack.
-
All CSIT test data included in this report is auto-
generated from :abbr:`RF (Robot Framework)` :file:`output.xml` files
produced by :abbr:`LF (Linux Foundation)` FD.io Jenkins jobs executed
diff --git a/docs/report/test_configuration/cot_performance_configuration/index.rst b/docs/report/test_configuration/cot_performance_configuration/index.rst
deleted file mode 100644
index eb651eea1a..0000000000
--- a/docs/report/test_configuration/cot_performance_configuration/index.rst
+++ /dev/null
@@ -1,12 +0,0 @@
-VPP K8s Container Memif
-=======================
-
-.. note::
-
- Data sources for reported test configurations: i) `FD.io test executor
- ligato performance jobs`_, ii) archived FD.io jobs test result `output files
- <../../_static/archive/>`_.
-
-.. note::
-
- You can find the `K8s configuration files`_ in the GitHub.
diff --git a/docs/report/vpp_performance_tests/documentation/containers.rst b/docs/report/vpp_performance_tests/documentation/containers.rst
index 2d025171db..5766e75e9f 100644
--- a/docs/report/vpp_performance_tests/documentation/containers.rst
+++ b/docs/report/vpp_performance_tests/documentation/containers.rst
@@ -418,4 +418,3 @@ References
.. [apparmor] `Ubuntu AppArmor <https://wiki.ubuntu.com/AppArmor>`_.
.. [seccomp] `SECure COMPuting with filters <https://www.kernel.org/doc/Documentation/prctl/seccomp_filter.txt>`_.
.. [docker] `Docker <https://www.docker.com/what-docker>`_.
-.. [k8sdoc] `Kubernetes documentation <https://kubernetes.io/docs/home/>`_.
diff --git a/docs/report/vpp_performance_tests/overview.rst b/docs/report/vpp_performance_tests/overview.rst
index a2ead6a0b6..ffaa3eddb2 100644
--- a/docs/report/vpp_performance_tests/overview.rst
+++ b/docs/report/vpp_performance_tests/overview.rst
@@ -302,10 +302,6 @@ performance tested across a range of NIC drivers and NIC models:
| IPSecSW | IPSec encryption with AES-GCM, CBC-SHA-256 |
| | ciphers, in combination with IPv4 routing. |
+-----------------------+----------------------------------------------+
-| K8s Containers Memif | K8s orchestrated container VPP service chain |
-| | topologies connected over the memif virtual |
-| | interface. |
-+-----------------------+----------------------------------------------+
| KVM VMs vhost-user | Virtual topologies with service |
| | chains of 1 VM using vhost-user |
| | interfaces, with different VPP forwarding |
diff --git a/docs/tag_documentation.rst b/docs/tag_documentation.rst
index 6cca914811..aadf9392b1 100644
--- a/docs/tag_documentation.rst
+++ b/docs/tag_documentation.rst
@@ -320,10 +320,6 @@ Test Type Tags
Functional test cases for TLDK.
-.. topic:: DMM
-
- Functional test cases for DMM.
-
.. topic:: TCP
Tests which use TCP.
diff --git a/resources/libraries/python/DMM/DMMConstants.py b/resources/libraries/python/DMM/DMMConstants.py
deleted file mode 100644
index c4899df84a..0000000000
--- a/resources/libraries/python/DMM/DMMConstants.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2018 Huawei Technologies Co.,Ltd.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""This file defines the constants variables for the DMM test."""
-
-class DMMConstants:
- """Define the directory path for the DMM test."""
-
- # DMM testing directory location at topology nodes
- REMOTE_FW_DIR = '/tmp/DMM-testing'
-
- # Shell scripts location
- DMM_SCRIPTS = 'dmm/scripts/csit/'
-
- # Run scripts location
- DMM_RUN_SCRIPTS = 'dmm/scripts/csit/run'
-
- # Libraries location
- DMM_DEPLIBS = 'tests/dmm/dmm_deplibs'
-
- # Config files location for the DMM test
- DMM_TESTCONFIG = 'tests/dmm/dmm_testconfig'
diff --git a/resources/libraries/python/DMM/SetupDMMTest.py b/resources/libraries/python/DMM/SetupDMMTest.py
deleted file mode 100644
index d84cbd544f..0000000000
--- a/resources/libraries/python/DMM/SetupDMMTest.py
+++ /dev/null
@@ -1,184 +0,0 @@
-# Copyright (c) 2018 Huawei Technologies Co.,Ltd.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""This module exists to provide setup utilities for the framework on topology
-nodes. All tasks required to be run before the actual tests are started is
-supposed to end up here.
-"""
-
-from shlex import split
-from subprocess import Popen, PIPE
-from multiprocessing import Pool
-from tempfile import NamedTemporaryFile
-from os.path import basename
-
-from robot.api import logger
-from robot.libraries.BuiltIn import BuiltIn
-
-from resources.libraries.python.ssh import SSH
-from resources.libraries.python.DMM.DMMConstants import DMMConstants as con
-from resources.libraries.python.topology import NodeType, Topology
-from resources.libraries.python.TLDK.SetupTLDKTest import copy_tarball_to_node,\
- delete_local_tarball
-
-__all__ = ["SetupDMMTest"]
-
-
-def pack_framework_dir():
- """Pack the testing WS into temp file, return its name.
- :returns: file_name
- :rtype: str
- :raises RuntimeError: If pack the testing framework failed.
- """
- tmpfile = NamedTemporaryFile(suffix=".tgz", prefix="DMM-testing-")
- file_name = tmpfile.name
- tmpfile.close()
-
- proc = Popen(
- split("tar --exclude-vcs --exclude=./tmp --exclude=dmm_depends.tar.gz"
- " -zcf {0} .".format(file_name)), stdout=PIPE, stderr=PIPE)
- (stdout, stderr) = proc.communicate()
-
- logger.debug(stdout)
- logger.debug(stderr)
-
- return_code = proc.wait()
- if return_code != 0:
- raise RuntimeError("Could not pack testing framework.")
-
- return file_name
-
-def extract_tarball_at_node(tarball, node):
- """Extract tarball at given node.
-
- Extracts tarball using tar on given node to specific CSIT location.
- Raise runtime errors when failed.
-
- :param tarball: Path to tarball to upload.
- :param node: Dictionary created from topology.
- :type tarball: str
- :type node: dict
- :return: nothing
- :raises RuntimeError: If extract tarball failed.
- """
- logger.console('Extracting tarball to {0} on {1}'.format(
- con.REMOTE_FW_DIR, node['host']))
- ssh = SSH()
- ssh.connect(node)
-
- cmd = 'sudo rm -rf {1}; mkdir {1} ; tar -zxf {0} -C {1}; ' \
- 'rm -f {0};'.format(tarball, con.REMOTE_FW_DIR)
- (ret_code, _, stderr) = ssh.exec_command(cmd, timeout=30)
- if ret_code != 0:
- logger.error('Unpack error: {0}'.format(stderr))
- raise RuntimeError('Failed to unpack {0} at node {1}'.format(
- tarball, node['host']))
-
-def install_dmm_test(node):
- """Prepare the DMM test envrionment.
- Raise errors when failed.
-
- :param node: Dictionary created from topology.
- :type node: dict
- :returns: nothing.
- :raises RuntimeError: If install dmm failed.
- """
-
- arch = Topology.get_node_arch(node)
- logger.console('Install DMM on {0} ({1})'.format(node['host'], arch))
-
- ssh = SSH()
- ssh.connect(node)
- (ret_code, _, stderr) = ssh.exec_command(
- 'cd {0}/{1} && ./install_prereq.sh {2} 2>&1 | tee '
- 'log_install_prereq.txt'
- .format(con.REMOTE_FW_DIR, con.DMM_SCRIPTS, arch), timeout=600)
-
- if ret_code != 0:
- logger.error('Install DMM error: {0}'.format(stderr))
- raise RuntimeError('Install prereq failed')
- else:
- logger.console('Install DMM on {0} success!'.format(node['host']))
-
-def setup_node(args):
- """Run all set-up methods for a node.
-
- This method is used as map_async parameter. It receives tuple with all
- parameters as passed to map_async function.
-
- :param args: All parameters needed to setup one node.
- :type args: tuple
- :returns: True - success, False - error
- :rtype: bool
- :raises RuntimeError: If node setup failed.
- """
- tarball, remote_tarball, node = args
-
- # if unset, arch defaults to x86_64
- Topology.get_node_arch(node)
-
- try:
- if node['type'] == NodeType.DUT:
- copy_tarball_to_node(tarball, node)
- extract_tarball_at_node(remote_tarball, node)
- install_dmm_test(node)
- except RuntimeError as exc:
- logger.error("Node setup failed, error:'{0}'".format(exc.message))
- return False
- else:
- logger.console('Setup of node {0} done'.format(node['host']))
- return True
-
-class SetupDMMTest:
- """Setup suite run on topology nodes.
-
- Many VAT/CLI based tests need the scripts at remote hosts before executing
- them. This class packs the whole testing directory and copies it over
- to all nodes in topology under /tmp/
- """
-
- @staticmethod
- def setup_dmm_test(nodes):
- """Pack the whole directory and extract in temp on each node."""
-
- tarball = pack_framework_dir()
- msg = 'Framework packed to {0}'.format(tarball)
- logger.console(msg)
- logger.trace(msg)
- remote_tarball = "/tmp/{0}".format(basename(tarball))
-
- # Turn off logging since we use multiprocessing.
- log_level = BuiltIn().set_log_level('NONE')
- params = ((tarball, remote_tarball, node) for node in nodes.values())
- pool = Pool(processes=len(nodes))
- result = pool.map_async(setup_node, params)
- pool.close()
- pool.join()
-
- # Turn on logging.
- BuiltIn().set_log_level(log_level)
-
- logger.info(
- 'Executed node setups in parallel, waiting for processes to end')
- result.wait()
-
- results = result.get()
- node_setup_success = all(results)
- logger.info('Results: {0}'.format(results))
-
- logger.trace('Test framework copied to all topology nodes')
- delete_local_tarball(tarball)
- if node_setup_success:
- logger.console('All nodes are ready')
- else:
- logger.console('Failed to setup dpdk on all the nodes')
diff --git a/resources/libraries/python/DMM/SingleCliSer.py b/resources/libraries/python/DMM/SingleCliSer.py
deleted file mode 100644
index aa77eaa445..0000000000
--- a/resources/libraries/python/DMM/SingleCliSer.py
+++ /dev/null
@@ -1,298 +0,0 @@
-# Copyright (c) 2018 Huawei Technologies Co.,Ltd.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-"""
-This module exists to provide single client-server test for DMM
-on topology nodes.
-"""
-import time
-import os
-import glob
-
-from resources.libraries.python.ssh import SSH
-from resources.libraries.python.ssh import exec_cmd, exec_cmd_no_error
-from resources.libraries.python.DMM.DMMConstants import DMMConstants as con
-from resources.libraries.python.topology import Topology
-
-class SingleCliSer:
- """Test DMM with single client-server topology."""
-
- @staticmethod
- def set_dmm_interface_address(dut_node, ifname, ip_addr, ip4_prefix):
- """
- Flush ip, set ip, set interface up.
-
- :param dut_node: Node to set the interface address on.
- :param ifname: Interface name.
- :param ip_addr: IP address to configure.
- :param ip4_prefix: Prefix length.
- :type dut_node: dict
- :type ifname: str
- :type ip_addr: str
- :type ip4_prefix: int
- """
- cmd = 'sudo ip -4 addr flush dev {}'.format(ifname)
- exec_cmd_no_error(dut_node, cmd)
- cmd = 'sudo ip addr add {}/{} dev {}'\
- .format(ip_addr, ip4_prefix, ifname)
- exec_cmd_no_error(dut_node, cmd)
- cmd = 'sudo ip link set {0} up'.format(ifname)
- exec_cmd_no_error(dut_node, cmd)
-
- @staticmethod
- def setup_dmm_dut(dut1_node, dut2_node, dut1_if_name, dut2_if_name,
- script_name, dut1_ip, dut2_ip, prefix_len):
- """
- Setup DMM on DUT nodes.
-
- :param dut1_node: Node to setup DMM on.
- :param dut2_node: Node to setup DMM on.
- :param dut1_if_name: DUT1 to DUT2 interface name.
- :param dut2_if_name: DUT2 to DUT1 interface name.
- :param script_name: Name of the script to run.
- :param dut1_ip: IP address to configure on DUT1.
- :param dut2_ip: IP address to configure on DUT2.
- :param prefix_len: Prefix length.
- :type dut1_node: dict
- :type dut2_node: dict
- :type dut1_if_name: str
- :type dut2_if_name: str
- :type script_name: str
- :type dut1_ip: str
- :type dut2_ip: str
- :type prefix_len: int
- """
- SingleCliSer.set_dmm_interface_address(dut1_node, dut1_if_name,
- dut1_ip, prefix_len)
- SingleCliSer.set_dmm_interface_address(dut2_node, dut2_if_name,
- dut2_ip, prefix_len)
- cmd = 'cd {0}/{1} && ./{2} setup 0 {3} {4} {5}'\
- .format(con.REMOTE_FW_DIR, con.DMM_RUN_SCRIPTS, script_name,
- dut1_if_name, dut1_ip, dut2_ip)
- exec_cmd(dut1_node, cmd)
-
- cmd = 'cd {0}/{1} && ./{2} setup 1 {3} {4} {5}'\
- .format(con.REMOTE_FW_DIR, con.DMM_RUN_SCRIPTS, script_name,
- dut2_if_name, dut1_ip, dut2_ip)
- exec_cmd(dut2_node, cmd)
-
- @staticmethod
- def execute_test(dut1_node, dut2_node, dut1_if_name, dut2_if_name,
- script_name, dut1_ip, dut2_ip):
- """
- Run the given test case.
-
- :param dut1_node: Node to run an app with DMM on.
- :param dut2_node: Node to run an app with DMM on.
- :param dut1_if_name: DUT1 to DUT2 interface name.
- :param dut2_if_name: DUT2 to DUT1 interface name.
- :param script_name: Name of the script to run.
- :param dut1_ip: DUT1 IP address.
- :param dut2_ip: DUT2 IP address.
- :type dut1_node: dict
- :type dut2_node: dict
- :type dut1_if_name: str
- :type dut2_if_name: str
- :type script_name: str
- :type dut1_ip: str
- :type dut2_ip: str
- """
- cmd = 'cd {0}/{1} && ./{2} run 0 {3} {4} {5} ' \
- .format(con.REMOTE_FW_DIR, con.DMM_RUN_SCRIPTS, script_name,
- dut1_if_name, dut1_ip, dut2_ip)
- cmd += '2>&1 | tee log_{0}.txt &'.format(script_name)
- exec_cmd(dut1_node, cmd)
- time.sleep(10)
-
- cmd = 'cd {0}/{1} && ./{2} run 1 {3} {4} {5} ' \
- .format(con.REMOTE_FW_DIR, con.DMM_RUN_SCRIPTS, script_name,
- dut2_if_name, dut1_ip, dut2_ip)
- cmd += '2>&1 | tee log_{0}.txt'.format(script_name)
- exec_cmd(dut2_node, cmd)
-
- @staticmethod
- def verify_test_result(dut1_node, dut2_node, script_name):
- """
- Verify the test and return result.
-
- :param dut1_node: Node to verify test result on.
- :param dut2_node: Node to verify test result on.
- :param script_name: Name of the script to run.
- :type dut1_node: dict
- :type dut2_node: dict
- :type script_name: str
- :returns: test result PASS/FAIL.
- :rtype: str
- """
- cmd = 'cd {0}/{1} && ./{2} verify 0' \
- .format(con.REMOTE_FW_DIR, con.DMM_RUN_SCRIPTS, script_name)
- (_, stdout_ser, _) = exec_cmd(dut1_node, cmd)
-
- cmd = 'cd {0}/{1} && ./{2} verify 1' \
- .format(con.REMOTE_FW_DIR, con.DMM_RUN_SCRIPTS, script_name)
- (_, stdout_cli, _) = exec_cmd(dut2_node, cmd)
-
- if stdout_ser.find('DMM_CSIT_TEST_PASSED') != -1 \
- and stdout_cli.find('DMM_CSIT_TEST_PASSED') != -1:
- return "PASS"
- else:
- return "FAIL"
-
- @staticmethod
- def print_dmm_log(dut1_node, dut2_node, script_name):
- """
- Print DMM logs.
-
- :param dut1_node: Node to print DMM logs of.
- :param dut2_node: Node to print DMM logs of.
- :param script_name: Name of the script to run.
- :type dut1_node: dict
- :type dut2_node: dict
- :type script_name: str
- """
- cmd = 'cd {0}/{1} && ./{2} log 0'\
- .format(con.REMOTE_FW_DIR, con.DMM_RUN_SCRIPTS, script_name)
- exec_cmd(dut1_node, cmd)
-
- cmd = 'cd {0}/{1} && ./{2} log 1'\
- .format(con.REMOTE_FW_DIR, con.DMM_RUN_SCRIPTS, script_name)
- exec_cmd(dut2_node, cmd)
- cmd = 'mv /var/log/nStack/running.log /var/log/nStack/{0}_ser.log'\
- .format(script_name)
- exec_cmd(dut1_node, cmd, sudo=True)
- cmd = 'mv /var/log/nStack/running.log /var/log/nStack/{0}_cli.log'\
- .format(script_name)
- exec_cmd(dut2_node, cmd, sudo=True)
-
- @staticmethod
- def cleanup_dmm_dut(dut1_node, dut2_node, script_name):
- """
- Cleanup DMM DUT node.
-
- :param dut1_node: DMM node to be cleaned up.
- :param dut2_node: DMM node to be cleaned up.
- :param script_name: Name of the script to run.
- :type dut1_node: dict
- :type dut2_node: dict
- :type script_name: str
- """
- cmd = 'cd {0}/{1} && ./{2} cleanup 0'\
- .format(con.REMOTE_FW_DIR, con.DMM_RUN_SCRIPTS, script_name)
- exec_cmd(dut1_node, cmd)
- exec_cmd(dut2_node, cmd)
- time.sleep(5)
-
- @staticmethod
- def run_dmm_func_test_cases(dut1_node, dut2_node, dut1_if_name,
- dut2_if_name, dut1_ip, dut2_ip, prefix_len):
- """
- Execute all the functional test cases and return result.
-
- :param dut1_node: Node to run an app with DMM on.
- :param dut2_node: Node to run an app with DMM on.
- :param dut1_if_name: DUT1 to DUT2 interface name.
- :param dut2_if_name: DUT2 to DUT1 interface name.
- :param dut1_ip: IP address to configure on DUT1.
- :param dut2_ip: IP address to configure on DUT2.
- :param prefix_len: Prefix length.
- :type dut1_node: dict
- :type dut2_node: dict
- :type dut1_if_name: str
- :type dut2_if_name: str
- :type dut1_ip: str
- :type dut2_ip: str
- :type prefix_len: int
- :returns: Total testcase count, Passed testcase count.
- :rtype: tuple(int, int)
- """
- passed = 0
- total = 0
- failed = 0
- path = '{0}/*'.format(con.DMM_RUN_SCRIPTS)
- files = [os.path.basename(x) for x in glob.glob(path)]
- print "list of files : {0}".format(files)
-
- for name in files:
- print("file name : {}").format(name)
- total += 1
- SingleCliSer.setup_dmm_dut(dut1_node, dut2_node, dut1_if_name,
- dut2_if_name, name, dut1_ip, dut2_ip,
- prefix_len)
- SingleCliSer.execute_test(dut1_node, dut2_node, dut1_if_name,
- dut2_if_name, name, dut1_ip, dut2_ip)
- result = SingleCliSer.verify_test_result(dut1_node, dut2_node,
- '{0}'.format(name))
- if result == "PASS":
- passed += 1
- elif result == "FAIL":
- failed += 1
-
- SingleCliSer.print_dmm_log(dut1_node, dut2_node, name)
- SingleCliSer.cleanup_dmm_dut(dut1_node, dut2_node, name)
- print("TOTAL :{} PASSED : {} FAILED: {}").format\
- (total, passed, failed)
-
- return total, passed
-
- @staticmethod
- def dmm_get_interface_name(dut_node, dut_interface):
- """
- Get the interface name.
-
- :param dut_node: Node to get the interface name on.
- :param dut_interface: Interface key.
- :type dut_node: dict
- :type dut_interface: str
- :returns: Interface name.
- :rtype: str
- """
- mac = Topology.get_interface_mac(dut_node, dut_interface)
- cmd = 'ifconfig -a | grep {0}'.format(mac)
- (stdout, _) = exec_cmd_no_error(dut_node, cmd)
- interface_name = stdout.split(' ', 1)[0]
- return interface_name
-
- @staticmethod
- def get_logs_from_node(dut_node):
- """
- Get logs from node to the test executor machine.
-
- :param dut_node: Node to artifact the logs of.
- :type dut_node: dict
- """
- ssh = SSH()
- ssh.connect(dut_node)
- ssh.scp(".", '/var/log/nStack/*.log',
- get=True, timeout=60, wildcard=True)
-
- (ret, _, _) = exec_cmd(dut_node, 'ls -l /var/log/app*.log')
- if ret == 0:
- ssh.scp(".", '/var/log/app*.log',
- get=True, timeout=60, wildcard=True)
-
- exec_cmd(dut_node, 'rm -rf /var/log/nStack/*.log', sudo=True)
- exec_cmd(dut_node, 'rm -rf /var/log/app*.log', sudo=True)
-
- @staticmethod
- def archive_dmm_logs(dut1_node, dut2_node):
- """
- Get logs from both DUT's to the test executor machine.
-
- :param dut1_node: DUT1 node.
- :param dut2_node: DUT2 node.
- :type dut1_node: dict
- :type dut2_node: dict
- """
- SingleCliSer.get_logs_from_node(dut1_node)
- SingleCliSer.get_logs_from_node(dut2_node)
diff --git a/resources/libraries/python/DMM/__init__.py b/resources/libraries/python/DMM/__init__.py
deleted file mode 100644
index d7abcb27b1..0000000000
--- a/resources/libraries/python/DMM/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2018 Huawei Technologies Co.,Ltd.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-__init__ file for directory resources/libraries/python/DMM
-"""
diff --git a/resources/libraries/robot/dmm/dmm_utils.robot b/resources/libraries/robot/dmm/dmm_utils.robot
deleted file mode 100644
index 231c92a4f1..0000000000
--- a/resources/libraries/robot/dmm/dmm_utils.robot
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (c) 2018 Huawei Technologies Co.,Ltd.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Library | resources.libraries.python.NodePath
-| Documentation | *Utilities for the path computing, pcap reading*
-| ...
-| ... | Utilities for the path computing, pcap file reading and also the port
-| ... | selection.
-
-*** Keywords ***
-| Path for 2-node testing is set
-| | [Documentation] | Compute the path for the 2 node testing.
-| | ...
-| | ... | *Arguments:*
-| | ... | - dut1_node - DUT1 node. Type: dictionary
-| | ... | - dut2_node - DUT2 node. Type: dictionary
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned.
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Path for 2-node testing is set \| ${nodes['DUT1']} \
-| | ... | \| ${nodes['DUT2'] \|
-| | ...
-| | [Arguments] | ${dut1_node} | ${dut2_node}
-| | Append Nodes | ${dut1_node} | ${dut2_node}
-| | Compute Path
-
-| Pick out the port used to execute test
-| | [Documentation] | Pick out the port used to execute the test.
-| | ...
-| | ... | *Arguments:*
-| | ... | - No arguments.
-| | ...
-| | ... | *Return:*
-| | ... | - No value returned.
-| | ...
-| | ... | *Example:*
-| | ...
-| | ... | \| Pick out the port used to execute test \|
-| | ...
-| | ${dut1_to_dut2_if} | ${dut1_node}= | Next Interface
-| | ${dut2_to_dut1_if} | ${dut2_node}= | Next Interface
-| | ${dut1_to_dut2_if_name}= | DMM Get Interface Name
-| | ... | ${dut1_node} | ${dut1_to_dut2_if}
-| | ${dut2_to_dut1_if_name}= | DMM Get Interface Name
-| | ... | ${dut2_node} | ${dut2_to_dut1_if}
-| | Set Suite Variable | ${dut1_node}
-| | Set Suite Variable | ${dut2_node}
-| | Set Suite Variable | ${dut1_to_dut2_if}
-| | Set Suite Variable | ${dut2_to_dut1_if}
-| | Set Suite Variable | ${dut1_to_dut2_if_name}
-| | Set Suite Variable | ${dut2_to_dut1_if_name}
diff --git a/resources/tools/doc_gen/src/index.rst b/resources/tools/doc_gen/src/index.rst
index fb12eb517b..fcc9f8882a 100644
--- a/resources/tools/doc_gen/src/index.rst
+++ b/resources/tools/doc_gen/src/index.rst
@@ -9,7 +9,6 @@ Contents
overview
resources.libraries.python
resources.libraries.robot
- tests.dmm.func
tests.dpdk.perf
tests.tldk.func
tests.vpp.device
diff --git a/resources/tools/doc_gen/src/tests.dmm.func.rst b/resources/tools/doc_gen/src/tests.dmm.func.rst
deleted file mode 100644
index 34079c729b..0000000000
--- a/resources/tools/doc_gen/src/tests.dmm.func.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-DMM Functional Tests
-====================
-
diff --git a/resources/tools/presentation/conf.py b/resources/tools/presentation/conf.py
index 66dc46952c..aa1fb797cd 100644
--- a/resources/tools/presentation/conf.py
+++ b/resources/tools/presentation/conf.py
@@ -48,7 +48,7 @@ master_doc = u'index'
# General information about the project.
report_week = u'38'
project = u'FD.io CSIT-1908.{week}'.format(week=report_week)
-copyright = u'2019, FD.io'
+copyright = u'2020, FD.io'
author = u'FD.io CSIT'
# The version info for the project you're documenting, acts as replacement for
@@ -83,7 +83,6 @@ rst_epilog = u"""
.. _CSIT DPDK Performance Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.dpdk.perf.html
.. _CSIT VPP Functional Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.vpp.func.html
.. _CSIT VPP Performance Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.vpp.perf.html
-.. _CSIT DMM Functional Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.dmm.func.html
.. _CSIT VPP Device Tests Documentation: https://docs.fd.io/csit/{release}/doc/tests.vpp.device.html
.. _VPP test framework documentation: https://docs.fd.io/vpp/{vpprelease}/vpp_make_test/html/
.. _FD.io CSIT Testbeds - Xeon Haswell: https://git.fd.io/csit/tree/docs/lab/testbeds_ucs_hsw_hw_bios_cfg.md?h={release}
@@ -102,12 +101,9 @@ rst_epilog = u"""
.. _FD.io test executor vpp functional jobs using Ubuntu: https://jenkins.fd.io/view/csit/job/csit-vpp-functional-{srelease}-ubuntu1604-virl
.. _FD.io test executor vpp functional jobs using CentOs: https://jenkins.fd.io/view/csit/job/csit-vpp-functional-{srelease}-centos7-virl
.. _FD.io test executor vpp device jobs using Ubuntu: https://jenkins.fd.io/view/csit/job/csit-vpp-device-{srelease}-ubuntu1804-1n-skx
-.. _FD.io test executor Honeycomb functional jobs: https://jenkins.fd.io/view/csit/job/hc2vpp-csit-integration-{srelease}-ubuntu1604
-.. _FD.io test executor DMM functional jobs: https://jenkins.fd.io/view/csit/job/csit-dmm-functional-{srelease}-ubuntu1604-virl
.. _FD.io VPP compile job: https://jenkins.fd.io/view/vpp/job/vpp-merge-{srelease}-ubuntu1604/
.. _FD.io DPDK compile job: https://jenkins.fd.io/view/deb-dpdk/job/deb_dpdk-merge-{sdpdkrelease}-ubuntu1604/
.. _CSIT Testbed Setup: https://git.fd.io/csit/tree/resources/tools/testbed-setup/README.md?h={release}
-.. _K8s configuration files: https://github.com/FDio/csit/tree/{release}/resources/templates/kubernetes
.. _VPP startup.conf: https://git.fd.io/vpp/tree/src/vpp/conf/startup.conf?h=stable/{srelease}&id={vpp_release_commit_id}
""".format(release=u'rls1908',
report_week=report_week,
@@ -178,7 +174,7 @@ html_static_path = [u'_tmp/src/_static']
html_context = {
u'css_files': [
-# overrides for wide tables in RTD theme
+ # overrides for wide tables in RTD theme
u'_static/theme_overrides.css'
]
}
diff --git a/resources/tools/presentation/conf_cpta/conf.py b/resources/tools/presentation/conf_cpta/conf.py
index c20a5e2996..97b39c2221 100644
--- a/resources/tools/presentation/conf_cpta/conf.py
+++ b/resources/tools/presentation/conf_cpta/conf.py
@@ -45,7 +45,7 @@ master_doc = u'index'
# General information about the project.
project = u'FD.io CSIT'
-copyright = u'2018, FD.io'
+copyright = u'2020, FD.io'
author = u'FD.io CSIT'
# The version info for the project you're documenting, acts as replacement for
@@ -98,9 +98,10 @@ html_static_path = [u'../_tmp/src/_static']
html_context = {
u'css_files': [
- u'_static/theme_overrides.css', # overrides for wide tables in RTD theme
- ],
- }
+ # overrides for wide tables in RTD theme
+ u'_static/theme_overrides.css',
+ ],
+}
# If false, no module index is generated.
html_domain_indices = True
diff --git a/tests/dmm/func/SingleCliSer-func.robot b/tests/dmm/func/SingleCliSer-func.robot
deleted file mode 100644
index 939c2c42ad..0000000000
--- a/tests/dmm/func/SingleCliSer-func.robot
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (c) 2018 Huawei Technologies Co.,Ltd.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Library | resources.libraries.python.NodePath
-| Library | resources.libraries.python.Trace
-| Library | resources.libraries.python.TrafficScriptExecutor
-| Library | resources.libraries.python.DMM.SingleCliSer
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/interfaces.robot
-| Resource | resources/libraries/robot/shared/counters.robot
-| Resource | resources/libraries/robot/dmm/dmm_utils.robot
-| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | FUNCTEST | DMM
-| Documentation | *DMM vs epoll test suite.*
-| ...
-| ... | Test suite uses 3-node topology TG - DUT1 - DUT2 - TG with single link
-| ... | between nodes. From this topology only DUT1 and DUT2 nodes are used.
-| ... | here we test the 1. test the vs_epool and vc_epoll
-
-*** Variables ***
-| ${dut1_ip}= | 172.28.128.3
-| ${dut2_ip}= | 172.28.128.4
-| ${prefix_len}= | 24
-
-*** Test Cases ***
-| TC01: DMM Single Client Server Test Case
-| | Given DMM Basic Test Setup
-| | ${total_count} | ${pass_count}= | When Run DMM Func Test Cases
-| | ... | ${dut1_node} | ${dut2_node} | ${dut1_to_dut2_if_name}
-| | ... | ${dut2_to_dut1_if_name} | ${dut1_ip} | ${dut2_ip} | ${prefix_len}
-| | Then Should Be Equal As Integers | ${total_count} | ${pass_count}
-
-*** Keywords ***
-| DMM Basic Test Setup
-| | Path for 2-node testing is set | ${nodes['DUT1']} | ${nodes['DUT2']}
-| | Pick out the port used to execute test
diff --git a/tests/dmm/func/__init__.robot b/tests/dmm/func/__init__.robot
deleted file mode 100644
index 65e2879d16..0000000000
--- a/tests/dmm/func/__init__.robot
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2018 Huawei Technologies Co.,Ltd.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/shared/interfaces.robot
-| Library | resources.libraries.python.DMM.SetupDMMTest
-| Library | resources.libraries.python.DMM.SingleCliSer
-| Suite Setup | Setup DMM Test | ${nodes}
-| Suite Teardown | Archive DMM logs | ${nodes['DUT1']} | ${nodes['DUT2']} \ No newline at end of file