From 374b35938abf48e742fb3438ae8ed1e9b47d84ce Mon Sep 17 00:00:00 2001 From: sharath reddy Date: Thu, 22 Mar 2018 12:42:51 +0530 Subject: initial CSIT-DMM test scripts Change-Id: I77a965751010b85d21335932baa5345a095dc4f3 Signed-off-by: sharath reddy Signed-off-by: sharath --- tests/dmm/dmm_scripts/install_dmm.sh | 128 +++++++++++++++++++++++++++++++++ tests/dmm/dmm_scripts/run_dmm.sh | 122 +++++++++++++++++++++++++++++++ tests/dmm/func/SingleCliSer-func.robot | 37 ++++++++++ tests/dmm/func/__init__.robot | 18 +++++ 4 files changed, 305 insertions(+) create mode 100755 tests/dmm/dmm_scripts/install_dmm.sh create mode 100755 tests/dmm/dmm_scripts/run_dmm.sh create mode 100644 tests/dmm/func/SingleCliSer-func.robot create mode 100644 tests/dmm/func/__init__.robot (limited to 'tests/dmm') diff --git a/tests/dmm/dmm_scripts/install_dmm.sh b/tests/dmm/dmm_scripts/install_dmm.sh new file mode 100755 index 0000000000..d6b7a862eb --- /dev/null +++ b/tests/dmm/dmm_scripts/install_dmm.sh @@ -0,0 +1,128 @@ +#!/bin/bash + +set -x + +TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S) +OS_ID=$(grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g') +ROOTDIR=/tmp/DMM-testing + +DMM_DIR=${ROOTDIR}/dmm/ + +#DPDK download path +DPDK_DOWNLOAD_PATH=/tmp/dpdk + +#dpdk installation path +DPDK_INSTALL_PATH=/usr + +# compile and install the DPDK +echo "DPDK build started....." +cd ${ROOTDIR} +chmod +x *.deb +sudo dpkg -i libnuma1_2.0.11-1ubuntu1.1_amd64.deb +sudo dpkg -i libnuma-dev_2.0.11-1ubuntu1.1_amd64.deb + +#DPDK will be having dependancy on linux headers +if [ "$OS_ID" == "ubuntu" ]; then + sudo apt-get -y install git build-essential linux-headers-`uname -r` + sudo apt-get install libnuma-dev +elif [ "$OS_ID" == "debian" ]; then + sudo apt-get -y install git build-essential linux-headers-`uname -r` +elif [ "$OS_ID" == "centos" ]; then + sudo yum groupinstall -y "Development Tools" + sudo yum install -y kernel-headers +elif [ "$OS_ID" == "opensuse" ]; then + sudo yum groupinstall -y "Development Tools" + sudo yum install -y kernel-headers +fi + +#===========build DPDK================ +mkdir -p $DPDK_DOWNLOAD_PATH + +DPDK_FOLDER=$DPDK_DOWNLOAD_PATH/dpdk-18.02-$TIMESTAMP +cd $DPDK_DOWNLOAD_PATH +mkdir $DPDK_FOLDER +tar xvf /tmp/DMM-testing/dpdk-18.02.tar.xz -C $DPDK_FOLDER +cd $DPDK_FOLDER/dpdk-18.02 + +sed -i 's!CONFIG_RTE_EXEC_ENV=.*!CONFIG_RTE_EXEC_ENV=y!1' config/common_base +sed -i 's!CONFIG_RTE_BUILD_SHARED_LIB=.*!CONFIG_RTE_BUILD_SHARED_LIB=y!1' config/common_base +sed -i 's!CONFIG_RTE_LIBRTE_EAL=.*!CONFIG_RTE_LIBRTE_EAL=y!1' config/common_base +sed -i 's!CONFIG_RTE_EAL_PMD_PATH=.*!CONFIG_RTE_EAL_PMD_PATH="/tmp/dpdk/drivers/"!1' config/common_base + +sudo make install T=x86_64-native-linuxapp-gcc DESTDIR=${DPDK_INSTALL_PATH} -j 4 +if [ $? -eq 0 ] +then + echo "DPDK build is SUCCESS" +else + echo "DPDK build has FAILED" + exit 1 +fi + +mkdir -p /tmp/dpdk/drivers/ +cp -f /usr/lib/librte_mempool_ring.so /tmp/dpdk/drivers/ + +export NSTACK_LOG_ON=DBG + +# Try to kill the vs_epoll +sudo killall vs_epoll + +sudo pgrep vs_epoll +if [ $? -eq "0" ]; then + success=false + sudo pkill vs_epoll + echo "RC = $?" + for attempt in {1..5}; do + echo "Checking if vs_epoll is still alive, attempt nr ${attempt}" + sudo pgrep vs_epoll + if [ $? -eq "1" ]; then + echo "vs_epoll is dead" + success=true + break + fi + echo "vs_epoll is still alive, waiting 1 second" + sleep 1 + done + if [ "$success" = false ]; then + echo "The command sudo pkill vs_epoll failed" + sudo pkill -9 vs_epoll + echo "RC = $?" + exit 1 + fi +else + echo "vs_epoll is not running" +fi + +# check and setup the hugepages +SYS_HUGEPAGE=$(cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages) +hugepageFree=$(cat /sys/kernel/mm/hugepages/hugepages-2048kB/free_hugepages) + +if [ ${SYS_HUGEPAGE} -lt 1024 ] || [ $hugepageFree -eq 0 ]; then + MOUNT=$(mount | grep /mnt/nstackhuge) + count=$(mount | grep /mnt/nstackhuge | wc -l) + + while [ "${MOUNT}" != "" ] || [ "${count}" -ne 0 ] + do + sudo umount /mnt/nstackhuge + sleep 1 + MOUNT=$(mount | grep /mnt/nstackhuge) + count=$[$count -1] + done + + sock_count=$(lscpu | grep 'Socket(s):' | head -1 | awk '{print $2}') + ls -l /sys/devices/system/node/ + + while [ "${sock_count}" -ne 0 ] + do + sock_count=$[$sock_count - 1] + echo 1024 | sudo tee /sys/devices/system/node/node"$sock_count"/hugepages/hugepages-2048kB/nr_hugepages + done + + sudo mkdir -p /mnt/nstackhuge + sudo mount -t hugetlbfs -o pagesize=2M none /mnt/nstackhuge/ + test $? -eq 0 || exit 1 +else + sudo mkdir -p /mnt/nstackhuge + sudo mount -t hugetlbfs -o pagesize=2M none /mnt/nstackhuge/ +fi + +sudo mkdir -p /var/run/ip_module/ diff --git a/tests/dmm/dmm_scripts/run_dmm.sh b/tests/dmm/dmm_scripts/run_dmm.sh new file mode 100755 index 0000000000..f6fa3587e3 --- /dev/null +++ b/tests/dmm/dmm_scripts/run_dmm.sh @@ -0,0 +1,122 @@ +#!/bin/bash + +set -x + +OS_ID=$(grep '^ID=' /etc/os-release | cut -f2- -d= | sed -e 's/\"//g') +ROOTDIR=/tmp/DMM-testing +PWDDIR=$(pwd) +APP_DIR=${ROOTDIR}/dmm/release/bin/ +LIB_PATH=${APP_DIR}/../lib64 +dut1_ip=$1 +dut2_ip=$2 +proc_name=$3 +#proc_name => 0 = server, 1= client + +# Try to kill the vs_epoll +sudo killall vs_epoll + +sudo pgrep vs_epoll +if [ $? -eq "0" ]; then + success=false + sudo pkill vs_epoll + echo "RC = $?" + for attempt in {1..5}; do + echo "Checking if vs_epoll is still alive, attempt nr ${attempt}" + sudo pgrep vs_epoll + if [ $? -eq "1" ]; then + echo "vs_epoll is dead" + success=true + break + fi + echo "vs_epoll is still alive, waiting 1 second" + sleep 1 + done + if [ "$success" = false ]; then + echo "The command sudo pkill vs_epoll failed" + sudo pkill -9 vs_epoll + echo "RC = $?" + exit 1 + fi +else + echo "vs_epoll is not running" +fi + +sleep 2 + +cat /proc/meminfo + +cd ${LIB_PATH} +chmod 777 * +ls -l + +cd ${APP_DIR} +cp -r ${LIB_PATH}/libnStackAPI.so . +cp -r ../configure/* . +chmod 777 * + +if [ "$OS_ID" == "ubuntu" ]; then + ifaddress1=$(ifconfig eth1 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}') + echo $ifaddress1 + ifaddress2=$(ifconfig eth2 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}') + echo $ifaddress2 +elif [ "$OS_ID" == "centos" ]; then + ifaddress1=$(ifconfig enp0s8 | grep 'inet' | cut -d: -f2 | awk '{print $2}') + echo $ifaddress1 + ifaddress2=$(ifconfig enp0s9 | grep 'inet' | cut -d: -f2 | awk '{print $2}') + echo $ifaddress2 +fi + +echo '{ + "default_stack_name": "kernel", + "module_list": [ + { + "stack_name": "kernel", + "function_name": "kernel_stack_register", + "libname": "./", + "loadtype": "static", + "deploytype": "1", + "maxfd": "1024", + "minfd": "0", + "priorty": "1", + "stackid": "0", + }, + ] +}' | tee module_config.json + +echo '{ + "ip_route": [ + { + "subnet": "'$ifaddress1'/24", + "type": "nstack-kernel", + }, + { + "subnet": "'$ifaddress2'/24", + "type": "nstack-kernel", + }, + ], + "prot_route": [ + { + "proto_type": "1", + "type": "nstack-kernel", + }, + { + "proto_type": "2", + "type": "nstack-kernel", + } + ], +}' | tee rd_config.json + +ls -l + +#only for kernal stack +if [ ${proc_name} -eq 0 ]; then +sudo LD_PRELOAD=${LIB_PATH}/libnStackAPI.so ./vs_epoll -p 20000 -d ${dut2_ip} -a 10000 -s ${dut1_ip} -l 200 -t 50000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1 +else +sudo LD_PRELOAD=${LIB_PATH}/libnStackAPI.so ./vc_common -p 20000 -d ${dut1_ip} -a 10000 -s ${dut2_ip} -l 200 -t 50000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1 +fi + +cd ${PWDDIR} + +ps -elf | grep vs_epoll + +sleep 10 diff --git a/tests/dmm/func/SingleCliSer-func.robot b/tests/dmm/func/SingleCliSer-func.robot new file mode 100644 index 0000000000..fbe651dbfa --- /dev/null +++ b/tests/dmm/func/SingleCliSer-func.robot @@ -0,0 +1,37 @@ +# 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 + +*** Test Cases *** +| TC01: DMM base vs epoll test case +| | Given Path for 2-node testing is set | ${nodes['DUT1']} | ${nodes['DUT2']} +| | And Pick out the port used to execute test +| | When Exec the base vs epoll test | ${dut1_node} | ${dut2_node} +| | Echo DMM logs | ${dut2_node} +| | ${no_packet_loss} = | Get the test result | ${dut2_node} +| | Then Should Not Be Equal As Integers | ${no_packet_loss} | 0 \ No newline at end of file diff --git a/tests/dmm/func/__init__.robot b/tests/dmm/func/__init__.robot new file mode 100644 index 0000000000..3215dc87f9 --- /dev/null +++ b/tests/dmm/func/__init__.robot @@ -0,0 +1,18 @@ +# 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 +| Suite Setup | Setup DMM Test | ${nodes} -- cgit 1.2.3-korg