DMM: Remove 20/23420/11
authorTibor Frank <tifrank@cisco.com>
Thu, 14 Nov 2019 08:28:14 +0000 (09:28 +0100)
committerTibor Frank <tifrank@cisco.com>
Thu, 9 Jan 2020 08:26:44 +0000 (09:26 +0100)
Change-Id: Ibbfbed79e473c804390802ae1ecd737b50c06aa3
Signed-off-by: Tibor Frank <tifrank@cisco.com>
27 files changed:
.gitignore
README.md
bootstrap-DMM.sh [deleted file]
docs/report/detailed_test_results/dmm_functional_results/index.rst [deleted file]
docs/report/dmm_functional_tests/csit_release_notes.rst [deleted file]
docs/report/dmm_functional_tests/documentation.rst [deleted file]
docs/report/dmm_functional_tests/index.rst [deleted file]
docs/report/dmm_functional_tests/overview.rst [deleted file]
docs/report/dmm_functional_tests/test_environment.rst [deleted file]
docs/report/index.html.template
docs/report/introduction/introduction.rst
docs/report/introduction/test_scenarios_overview.rst
docs/report/test_configuration/cot_performance_configuration/index.rst [deleted file]
docs/report/vpp_performance_tests/documentation/containers.rst
docs/report/vpp_performance_tests/overview.rst
docs/tag_documentation.rst
resources/libraries/python/DMM/DMMConstants.py [deleted file]
resources/libraries/python/DMM/SetupDMMTest.py [deleted file]
resources/libraries/python/DMM/SingleCliSer.py [deleted file]
resources/libraries/python/DMM/__init__.py [deleted file]
resources/libraries/robot/dmm/dmm_utils.robot [deleted file]
resources/tools/doc_gen/src/index.rst
resources/tools/doc_gen/src/tests.dmm.func.rst [deleted file]
resources/tools/presentation/conf.py
resources/tools/presentation/conf_cpta/conf.py
tests/dmm/func/SingleCliSer-func.robot [deleted file]
tests/dmm/func/__init__.robot [deleted file]

index f6e4d5a..bd08ccd 100644 (file)
@@ -13,7 +13,6 @@
 
 /.tox
 /archive_dir
 
 /.tox
 /archive_dir
-/dmm
 /download_dir
 /env
 # "generated" is a place for autogenerated data, not to pollute git.
 /download_dir
 /env
 # "generated" is a place for autogenerated data, not to pollute git.
index 86d0968..02ec25a 100644 (file)
--- 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;
      - 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;
    - Performance tests using physical testbed environment:
      - VPP;
      - DPDK-Testpmd;
@@ -92,13 +88,9 @@ A brief bottom-up description is provided here:
 ```
 .
 └── tests
 ```
 .
 └── tests
-    ├── dmm
-    │   └── func                    # DMM functional VIRL tests
     ├── dpdk
     │   ├── dpdk_scripts            # DPDK helper scripts
     │   └── perf                    # DPDK performance 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
     ├── 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
     │   ├── 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
     │   └── 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
 │   │   ├── 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
 │   │   └── 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 (executable)
index 2f72b25..0000000
+++ /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 (file)
index 2acd888..0000000
+++ /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 (file)
index 32ee01a..0000000
+++ /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 (file)
index 56fb357..0000000
+++ /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 (file)
index defb9dd..0000000
+++ /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 (file)
index 480be8b..0000000
+++ /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 (file)
index 72026f1..0000000
+++ /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
index 272e851..ce90001 100644 (file)
@@ -53,16 +53,6 @@ CSIT-1908
     vpp_device_tests/test_environment
     vpp_device_tests/documentation
 
     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
 .. 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/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
 .. toctree::
     :maxdepth: 2
     :caption: Test Configuration
index d7fc061..a1d2885 100644 (file)
@@ -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.
      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.
index 00af70c..0d520f0 100644 (file)
@@ -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.
 
    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
 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 (file)
index eb651ee..0000000
+++ /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.
index 2d02517..5766e75 100644 (file)
@@ -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>`_.
 .. [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/>`_.
index a2ead6a..ffaa3ed 100644 (file)
@@ -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.   |
 +-----------------------+----------------------------------------------+
 | 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    |
 | KVM VMs vhost-user    | Virtual topologies with service              |
 |                       | chains of 1 VM using vhost-user              |
 |                       | interfaces, with different VPP forwarding    |
index 6cca914..aadf939 100644 (file)
@@ -320,10 +320,6 @@ Test Type Tags
 
     Functional test cases for TLDK.
 
 
     Functional test cases for TLDK.
 
-.. topic:: DMM
-
-    Functional test cases for DMM.
-
 .. topic:: TCP
 
     Tests which use TCP.
 .. 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 (file)
index c4899df..0000000
+++ /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 (file)
index d84cbd5..0000000
+++ /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 (file)
index aa77eaa..0000000
+++ /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 (file)
index d7abcb2..0000000
+++ /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 (file)
index 231c92a..0000000
+++ /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}
index fb12eb5..fcc9f88 100644 (file)
@@ -9,7 +9,6 @@ Contents
     overview
     resources.libraries.python
     resources.libraries.robot
     overview
     resources.libraries.python
     resources.libraries.robot
-    tests.dmm.func
     tests.dpdk.perf
     tests.tldk.func
     tests.vpp.device
     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 (file)
index 34079c7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-DMM Functional Tests
-====================
-
index 66dc469..aa1fb79 100644 (file)
@@ -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)
 # 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
 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 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}
 .. _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 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}
 .. _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,
 .. _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': [
 
 html_context = {
     u'css_files': [
-# overrides for wide tables in RTD theme
+        # overrides for wide tables in RTD theme
         u'_static/theme_overrides.css'
     ]
 }
         u'_static/theme_overrides.css'
     ]
 }
index c20a5e2..97b39c2 100644 (file)
@@ -45,7 +45,7 @@ master_doc = u'index'
 
 # General information about the project.
 project = u'FD.io CSIT'
 
 # 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
 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': [
 
 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
 
 # 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 (file)
index 939c2c4..0000000
+++ /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 (file)
index 65e2879..0000000
+++ /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