diff options
author | Tibor Frank <tifrank@cisco.com> | 2019-11-14 09:28:14 +0100 |
---|---|---|
committer | Tibor Frank <tifrank@cisco.com> | 2020-01-09 09:26:44 +0100 |
commit | 164b36d2ef70d70bd2f6ff83b6a50b8b87ef2e13 (patch) | |
tree | f659bae86959a1a95ee3300ec7040c8ef8d15230 | |
parent | 468680a7d534c1f25ad45b5bddc67c601246a909 (diff) |
DMM: Remove
Change-Id: Ibbfbed79e473c804390802ae1ecd737b50c06aa3
Signed-off-by: Tibor Frank <tifrank@cisco.com>
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. @@ -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 |