integration of DMM+lwip testscripts 75/14375/82
authorsharath <sharathkumarboyanapally@gmail.com>
Tue, 21 Aug 2018 05:31:26 +0000 (11:01 +0530)
committerPeter Mikus <pmikus@cisco.com>
Thu, 27 Sep 2018 08:18:41 +0000 (08:18 +0000)
Change-Id: Ifb1a0702353e71c61a694dea5164df41f4e23389
Signed-off-by: sharath <sharathkumarboyanapally@gmail.com>
12 files changed:
.gitignore
bootstrap-DMM.sh
resources/libraries/python/DMM/SetupDMMTest.py
resources/libraries/python/DMM/SingleCliSer.py
resources/libraries/robot/dmm/dmm_utils.robot
tests/dmm/dmm_scripts/install_dmm.sh [deleted file]
tests/dmm/dmm_scripts/install_prereq.sh [new file with mode: 0755]
tests/dmm/dmm_scripts/kill_given_proc.sh [new file with mode: 0755]
tests/dmm/dmm_scripts/run_dmm.sh
tests/dmm/dmm_scripts/run_dmm_with_lwip.sh [new file with mode: 0755]
tests/dmm/dmm_scripts/setup_hugepage.sh [new file with mode: 0755]
tests/dmm/func/SingleCliSer-func.robot

index 41ac50a..e12f651 100644 (file)
@@ -9,3 +9,4 @@ report.html
 *~
 *.log
 .idea
+dmm/**
index fd212c5..4828868 100755 (executable)
@@ -180,13 +180,16 @@ echo "Selected VIRL servers: ${VIRL_SERVER[@]}"
 DMM_TAR_FILE="dmm_depends.tar.gz"
 
 cd dmm/scripts/
-./build.sh
+./build.sh all
 cd -
 
-mv /tmp/dpdk/dpdk-18.02.tar.xz .
+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
 
index 7d219fc..7bb5965 100644 (file)
@@ -100,14 +100,15 @@ def install_dmm_test(node):
     ssh = SSH()
     ssh.connect(node)
     (ret_code, _, stderr) = ssh.exec_command(
-        'cd {0}/{1} && ./install_dmm.sh {2} 2>&1 | tee log_install_dmm.txt'
+        '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 the DMM error: {0}'.format(stderr))
-        raise RuntimeError('Install the DMM failed')
+        raise RuntimeError('Install prereq failed')
     else:
-        logger.console('Install the DMM on {0} success!'.format(node['host']))
+        logger.console('Install prereq on {0} success!'.format(node['host']))
 
 def setup_node(args):
     """Run all set-up methods for a node.
index 9bf18bb..e96843a 100644 (file)
@@ -17,98 +17,191 @@ This module exists to provide the vs_epoll ping test for DMM on topology nodes.
 """
 import time
 
-from resources.libraries.python.ssh import SSH
+from resources.libraries.python.ssh import exec_cmd_no_error
 from resources.libraries.python.DMM.DMMConstants import DMMConstants as con
 from resources.libraries.python.topology import Topology
-from robot.api import logger
 
 class SingleCliSer(object):
     """Test the DMM vs_epoll ping function."""
 
     @staticmethod
-    def exec_the_base_vs_epoll_test(dut1_node, dut2_node):
-        """Execute the vs_epoll on the dut1_node.
-
-        :param dut1_node: Will execute the vs_epoll on this node.
-        :param dut2_node: Will execute the vc_epoll on this node.
+    def exec_the_base_vs_epoll_test(dut1_node, dut2_node,
+                                    dut1_if_name, dut2_if_name,
+                                    dut1_if_ip, dut2_if_ip):
+        """
+        Perform base vs_epoll test on DUT's.
+
+        :param dut1_node: Node to execute vs_epoll on.
+        :param dut2_node: Node to execute vc_common on.
+        :param dut1_if_name: DUT1 to DUT2 interface name.
+        :param dut2_if_name: DUT2 to DUT1 interface name.
+        :param dut1_if_ip: DUT1 to DUT2 interface ip.
+        :param dut2_if_ip: DUT2 to DUT1 interface ip.
         :type dut1_node: dict
         :type dut2_node: dict
-        :returns: positive value if packets are sent and received
-        :raises RuntimeError:If failed to execute vs_epoll test on  dut1_node.
+        :type dut1_if_name: str
+        :type dut2_if_name: str
+        :type dut1_if_ip: str
+        :type dut2_if_ip: str
         """
-        dut1_ip = Topology.get_node_hostname(dut1_node)
-        dut2_ip = Topology.get_node_hostname(dut2_node)
-
-        ssh = SSH()
-        ssh.connect(dut1_node)
-
-        cmd = 'cd {0}/{1} && ./run_dmm.sh {2} {3} {4} ' \
-        .format(con.REMOTE_FW_DIR, con.DMM_SCRIPTS, dut1_ip, dut2_ip, 0)
+        cmd = 'cd {0}/{1} && ./run_dmm.sh {2} {3} {4} {5} ' \
+        .format(con.REMOTE_FW_DIR, con.DMM_SCRIPTS, 0, dut1_if_name,
+                dut1_if_ip, dut2_if_ip)
 
         cmd += '2>&1 | tee log_run_dmm.txt &'
-
-        (ret_code, _, _) = ssh.exec_command(cmd, timeout=6000)
-        if ret_code != 0:
-            raise RuntimeError('Failed to execute vs_epoll test at node {0}'
-                               .format(dut1_node['host']))
-
+        exec_cmd_no_error(dut1_node, cmd)
         time.sleep(10)
 
-        ssh = SSH()
-        ssh.connect(dut2_node)
-
-        cmd = 'cd {0}/{1} && ./run_dmm.sh {2} {3} {4} ' \
-        .format(con.REMOTE_FW_DIR, con.DMM_SCRIPTS, dut1_ip, dut2_ip, 1)
+        cmd = 'cd {0}/{1} && ./run_dmm.sh {2} {3} {4} {5} ' \
+        .format(con.REMOTE_FW_DIR, con.DMM_SCRIPTS, 1, dut2_if_name,
+                dut1_if_ip, dut2_if_ip)
 
         cmd += '2>&1 | tee log_run_dmm.txt'
-
-        (ret_code, stdout_cli, _) = ssh.exec_command(cmd, timeout=6000)
-        if ret_code != 0:
-            raise RuntimeError('Failed to execute vs_epoll test at node {0}'
-                               .format(dut1_node['host']))
-
-        return stdout_cli.find("send 50000")
+        exec_cmd_no_error(dut2_node, cmd)
 
     @staticmethod
     def get_the_test_result(dut_node):
         """
         After executing exec_the_base_vs_epoll_test, use this
-        to get the test result
+        to get the test result.
 
-        :param dut_node: will get the test result in this dut node
+        :param dut_node: Node to get the test result on.
         :type dut_node: dict
-        :returns: str.
-        :rtype: str.
-        :raises RuntimeError: If failed to get the test result.
+        :returns: Word count of "send 50000" in the log.
+        :rtype: str
         """
-        ssh = SSH()
-        ssh.connect(dut_node)
         cmd = 'cat {0}/{1}/log_run_dmm.txt | grep "send 50000" | wc -l' \
         .format(con.REMOTE_FW_DIR, con.DMM_SCRIPTS)
-
-        (ret_code, stdout, _) = ssh.exec_command(cmd, timeout=100)
-        if ret_code != 0:
-            raise RuntimeError('Failed to get test result at node {0}'
-                               .format(dut_node['host']))
-
+        (stdout, _) = exec_cmd_no_error(dut_node, cmd)
         return stdout
 
     @staticmethod
     def echo_dmm_logs(dut_node):
         """
-        :param dut_node:
-        :return:
+        Get the prerequisites installation log from DUT.
+
+        :param dut_node: Node to get the installation log on.
+        :type dut_node: dict
         """
-        ssh = SSH()
-        ssh.connect(dut_node)
-        cmd = 'cat {0}/{1}/log_install_dmm.txt' \
+        cmd = 'cat {0}/{1}/log_install_prereq.txt' \
         .format(con.REMOTE_FW_DIR, con.DMM_SCRIPTS)
+        exec_cmd_no_error(dut_node, cmd)
+
+    @staticmethod
+    def exec_the_base_lwip_test(dut1_node, dut2_node,
+                                dut1_if_name, dut2_if_name,
+                                dut1_if_ip, dut2_if_ip):
+        """Test DMM with LWIP.
+
+        :param dut1_node: Node to execute vs_epoll on.
+        :param dut2_node: Node to execute vc_common on.
+        :param dut1_if_name: DUT1 to DUT2 interface name.
+        :param dut2_if_name: DUT2 to DUT1 interface name.
+        :param dut1_if_ip: DUT1 to DUT2 interface ip.
+        :param dut2_if_ip: DUT2 to DUT1 interface ip.
+        :type dut1_node: dict
+        :type dut2_node: dict
+        :type dut1_if_name: str
+        :type dut2_if_name: str
+        :type dut1_if_ip: str
+        :type dut2_if_ip: str
+        """
+        cmd = 'cd {0}/{1} && ./run_dmm_with_lwip.sh {2} {3} {4} {5} ' \
+            .format(con.REMOTE_FW_DIR, con.DMM_SCRIPTS, 0, dut1_if_name,
+                    dut1_if_ip, dut2_if_ip)
+
+        cmd += '2>&1 | tee log_run_dmm_with_lwip.txt &'
+        exec_cmd_no_error(dut1_node, cmd)
+        time.sleep(10)
+
+        cmd = 'cd {0}/{1} && ./run_dmm_with_lwip.sh {2} {3} {4} {5} ' \
+            .format(con.REMOTE_FW_DIR, con.DMM_SCRIPTS, 1, dut2_if_name,
+                    dut1_if_ip, dut2_if_ip)
 
-        (ret_code, stdout, _) = ssh.exec_command(cmd, timeout=100)
-        if ret_code != 0:
-            raise RuntimeError('Failed to get log_install_dmm at node {0}'
-                               .format(dut_node['host']))
-        else:
-            logger.console('....log_install_dmm on node {1}.... {0}'
-                           .format(stdout, dut_node['host']))
+        cmd += '2>&1 | tee log_run_dmm_with_lwip.txt'
+        exec_cmd_no_error(dut2_node, cmd)
+
+    @staticmethod
+    def get_lwip_test_result(dut_node):
+        """
+        After executing exec_the_base_lwip_test, use this
+        to get the test result.
+
+        :param dut_node: Node to get the test result on.
+        :type dut_node: dict
+        :returns: Word count of "send 50" in the log.
+        :rtype: str
+        """
+        cmd = 'cat {0}/{1}/log_run_dmm_with_lwip.txt | grep "send 50" | wc -l' \
+        .format(con.REMOTE_FW_DIR, con.DMM_SCRIPTS)
 
+        (stdout, _) = exec_cmd_no_error(dut_node, cmd)
+        return stdout
+
+    @staticmethod
+    def echo_running_log(dut1_node, dut2_node):
+        """
+        Get the running log.
+
+        :param dut1_node: Node to get the running log on.
+        :param dut2_node: Node to get the running log on.
+        :type dut1_node: dict
+        :type dut2_node: dict
+        """
+        cmd = 'cat /var/log/nStack/running.log'
+        exec_cmd_no_error(dut1_node, cmd)
+        exec_cmd_no_error(dut2_node, cmd)
+
+    @staticmethod
+    def echo_dpdk_log(dut1_node, dut2_node):
+        """
+        Get the dpdk log.
+
+        :param dut1_node: Node to get the DPDK log on.
+        :param dut2_node: Node to get the DPDK log on.
+        :type dut1_node: dict
+        :type dut2_node: dict
+        """
+        cmd = 'cat /var/log/nstack-dpdk/nstack_dpdk.log'
+        exec_cmd_no_error(dut1_node, cmd)
+        exec_cmd_no_error(dut2_node, cmd)
+
+    @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 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)
index 2493176..231c92a 100644 (file)
 | | ...
 | | ... | \| Pick out the port used to execute test \|
 | | ...
-| | ${tg_port} | ${tg_node}= | First Interface
-| | ${dut1_port} | ${dut1_node}= | Next Interface
-| | ${dut2_port} | ${dut2_node}= | Last Interface
-| | Set Suite Variable | ${tg_node}
+| | ${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 | ${tg_port}
-| | Set Suite Variable | ${dut1_port}
-| | Set Suite Variable | ${dut2_port}
-
+| | 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/tests/dmm/dmm_scripts/install_dmm.sh b/tests/dmm/dmm_scripts/install_dmm.sh
deleted file mode 100755 (executable)
index d6b7a86..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/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/install_prereq.sh b/tests/dmm/dmm_scripts/install_prereq.sh
new file mode 100755 (executable)
index 0000000..b03769b
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+set -x
+SCRIPT_DIR=`dirname $(readlink -f $0)`
+ROOTDIR=$SCRIPT_DIR/../../../
+
+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
+sudo dpkg -i ethtool_4.5-1_amd64.deb
+sudo dpkg -i lsof_4.89+dfsg-0.1_amd64.deb
+
+DPDK_DOWNLOAD_PATH=$(cat $ROOTDIR/dmm/scripts/build_dpdk.sh | grep DPDK_DOWNLOAD_PATH= | cut -d "=" -f2)
+sudo rm /tmp/dpdk
+mkdir -p $DPDK_DOWNLOAD_PATH
+mv $ROOTDIR/dpdk-18.02.tar.xz $DPDK_DOWNLOAD_PATH
+# install DPDK
+cp -f $ROOTDIR/dmm/scripts/build_dpdk.sh $ROOTDIR/dmm/scripts/build_dpdk_csit.sh
+sed -i 's!wget.*!#comment wget!1' $ROOTDIR/dmm/scripts/build_dpdk_csit.sh
+bash -x $ROOTDIR/dmm/scripts/build_dpdk_csit.sh
+
+sudo modprobe uio
+sudo modprobe uio_pci_generic
+sudo insmod $DPDK_DOWNLOAD_PATH/dpdk-18.02/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
+
+bash $SCRIPT_DIR/kill_given_proc.sh vs_epoll
+bash $SCRIPT_DIR/setup_hugepage.sh
diff --git a/tests/dmm/dmm_scripts/kill_given_proc.sh b/tests/dmm/dmm_scripts/kill_given_proc.sh
new file mode 100755 (executable)
index 0000000..772643a
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+proc_name=$1
+sudo pgrep $proc_name
+if [ $? -eq "0" ]; then
+    success=false
+    sudo pkill $proc_name
+    echo "RC = $?"
+    for attempt in {1..5}; do
+        echo "Checking if '$proc_name' is still alive, attempt nr ${attempt}"
+        sudo pgrep $proc_name
+        if [ $? -eq "1" ]; then
+            echo "'$proc_name' is dead"
+            success=true
+            break
+        fi
+        echo "'$proc_name' is still alive, waiting 1 second"
+        sleep 1
+    done
+    if [ "$success" = false ]; then
+        echo "The command sudo pkill '$proc_name' failed"
+        sudo pkill -9 $proc_name
+        echo "RC = $?"
+        exit 1
+    fi
+else
+    echo "'$proc_name' is not running"
+fi
+
+sleep 2
+exit 0
\ No newline at end of file
index 456be1f..fd61fe8 100755 (executable)
 
 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}/* .
-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
+CUR_DIR=`dirname $(readlink -f $0)`
+ROOTDIR=$CUR_DIR/../../../
+APP_DIR=${ROOTDIR}/dmm/config/app_test
+LIB_PATH=${ROOTDIR}/dmm/release/lib64
+DMM_SCRIPT_DIR=$ROOTDIR/dmm/scripts
 
+#proc_name => 0 = server, 1= client
+proc_name=$1
+ifname=$2
+dut1_if_ip=$3
+dut2_if_ip=$4
+
+ip addr
+lspci -nn
+lsmod | grep uio
+bash kill_given_proc.sh vs_epoll
+
+cp -f $DMM_SCRIPT_DIR/prep_app_test.sh $DMM_SCRIPT_DIR/prep_app_test_csit.sh
+sed -i 's!.*check_hugepage.sh!#skip hugepage check!1' $DMM_SCRIPT_DIR/prep_app_test_csit.sh
+sed -i 's!enp0s8!'$ifname'!1' $DMM_SCRIPT_DIR/prep_app_test_csit.sh
+bash -x $DMM_SCRIPT_DIR/prep_app_test_csit.sh
+
+cd $APP_DIR
 ls -l
-
 #only for kernal stack
 if [ ${proc_name} -eq 0 ]; then
-sudo LD_LIBRARY_PATH=${LIB_PATH} ./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
+sudo LD_LIBRARY_PATH=${LIB_PATH} ./vs_epoll -p 20000 -d ${dut2_if_ip} -a 10000 -s ${dut1_if_ip} -l 200 -t 50000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1
 else
-sudo LD_LIBRARY_PATH=${LIB_PATH} ./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
+sudo LD_LIBRARY_PATH=${LIB_PATH} ./vc_common -p 20000 -d ${dut1_if_ip} -a 10000 -s ${dut2_if_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
+exit 0
\ No newline at end of file
diff --git a/tests/dmm/dmm_scripts/run_dmm_with_lwip.sh b/tests/dmm/dmm_scripts/run_dmm_with_lwip.sh
new file mode 100755 (executable)
index 0000000..38b4c20
--- /dev/null
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+set -x
+CUR_DIR=`dirname $(readlink -f $0)`
+ROOTDIR=$CUR_DIR/../../../
+APP_DIR=${ROOTDIR}/dmm/stacks/lwip_stack/app_test/
+LIB_PATH=${APP_DIR}/../release/lib64/
+VAG_DIR=${ROOTDIR}/dmm/stacks/lwip_stack/vagrant
+#proc_name => 0 = server, 1= client
+proc_name=$1
+ifname=$2
+dut1_if_ip=$3
+dut2_if_ip=$4
+
+# Try to kill the vs_epoll
+bash $CUR_DIR/kill_given_proc.sh vs_epoll
+cat /proc/meminfo
+
+cp -f $VAG_DIR/start_nstackMain.sh $VAG_DIR/start_nstackMain_csit.sh
+sed -i 's!.*check_hugepage.sh!#skip hugepage check!1' $VAG_DIR/start_nstackMain_csit.sh
+sed -i 's!ifname=.*!ifname='$ifname'!1' $VAG_DIR/start_nstackMain_csit.sh
+sudo  LD_LIBRARY_PATH=${LIB_PATH} bash $VAG_DIR/start_nstackMain_csit.sh  || exit 1
+
+sleep 5
+
+#after nstackmain
+echo "after nstackmain"
+ip addr
+lspci -nn
+lsmod | grep uio
+cat /proc/meminfo | grep Huge
+/tmp/dpdk/dpdk-18.02/usertools/dpdk-devbind.py --status
+
+cd ${APP_DIR}
+
+if [ ${proc_name} -eq 0 ]; then
+sudo NSTACK_LOG_ON=DBG LD_LIBRARY_PATH=${LIB_PATH} ./vs_epoll -p 20000 -d ${dut2_if_ip} -a 10000 -s ${dut1_if_ip} -l 200 -t 50000 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1
+else
+sudo NSTACK_LOG_ON=DBG LD_LIBRARY_PATH=${LIB_PATH} ./vc_common -p 20000 -d ${dut1_if_ip} -a 10000 -s ${dut2_if_ip} -l 200 -t 50 -i 0 -f 1 -r 20000 -n 1 -w 10 -u 10000 -e 10 -x 1
+fi
+
+cd $APP_DIR/../release/
+sudo ./stop_nstack.sh
+exit 0
diff --git a/tests/dmm/dmm_scripts/setup_hugepage.sh b/tests/dmm/dmm_scripts/setup_hugepage.sh
new file mode 100755 (executable)
index 0000000..be25709
--- /dev/null
@@ -0,0 +1,37 @@
+#!/bin/bash -x
+
+# 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 1536 ] || [ $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 1536 | 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
+
+cat /proc/meminfo
+exit 0
index fbe651d..4cfa6a0 100644 (file)
 | ... | 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 ***
+| ${ip4_net1_1}= | 172.28.128.3
+| ${ip4_net2_1}= | 172.28.128.4
+| ${ip4_prefix}= | 24
+
 *** 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
+| | Given DMM Basic Test Setup
 | | When Exec the base vs epoll test | ${dut1_node} | ${dut2_node}
+| | ... | ${dut1_to_dut2_if_name} | ${dut2_to_dut1_if_name}
+| | ... | ${ip4_net1_1} | ${ip4_net2_1}
 | | 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
+| | Then Should Not Be Equal As Integers | ${no_packet_loss} | 0
+
+| TC02: DMM LWIP integration test case
+| | Given DMM Basic Test Setup
+| | When Exec the base lwip test | ${dut1_node} | ${dut2_node}
+| | ... | ${dut1_to_dut2_if_name} | ${dut2_to_dut1_if_name}
+| | ... | ${ip4_net1_1} | ${ip4_net2_1}
+| | Echo running log | ${dut1_node} | ${dut2_node}
+| | Echo dpdk log | ${dut1_node} | ${dut2_node}
+| | ${no_packet_loss_lwip} = | Get lwip test result | ${dut2_node}
+| | Then Should Not Be Equal As Integers | ${no_packet_loss_lwip} | 0
+
+*** Keywords ***
+| DMM Basic Test Setup
+| | Path for 2-node testing is set | ${nodes['DUT1']} | ${nodes['DUT2']}
+| | Pick out the port used to execute test
+| | Set DMM Interface Address | ${dut1_node} |
+| | ... | ${dut1_to_dut2_if_name} | ${ip4_net1_1} | ${ip4_prefix}
+| | Set DMM Interface Address | ${dut2_node}
+| | ... | ${dut2_to_dut1_if_name} | ${ip4_net2_1} | ${ip4_prefix}