From b8f6485d5a5c66f0fce566e59b8b5891c6a7f571 Mon Sep 17 00:00:00 2001 From: shravani Date: Tue, 13 Sep 2016 15:23:09 +0530 Subject: [PATCH] Execution of kvm4nfv cyclictest based on job type. This patch contains the updated test scripts which will select the node and test run time for performing cyclictest case based on the job type. Change-Id: Ia54e98faac2f5da956688f1ca57664cea1151d84 Signed-off-by: Shravani --- ci/cyclicTestTrigger.sh | 90 +++++++++++++++++++++++++++++++++++++++++++++++ ci/envs/cyclictest.sh | 4 ++- ci/envs/host-run-qemu.sh | 5 ++- ci/test_kvmfornfv.sh | 91 ++++++++++++------------------------------------ 4 files changed, 119 insertions(+), 71 deletions(-) create mode 100755 ci/cyclicTestTrigger.sh diff --git a/ci/cyclicTestTrigger.sh b/ci/cyclicTestTrigger.sh new file mode 100755 index 000000000..bd6e29038 --- /dev/null +++ b/ci/cyclicTestTrigger.sh @@ -0,0 +1,90 @@ +#!/bin/bash + +############################################################# +## This script defines the functions present in +## test_kvmfornfv.sh interface.These will launch ubuntu +## docker container runs cyclictest through yardstick +## and verifies the test results. +############################################################ + +HOST_IP=$1 +testTime=$2 +testType=$3 + +source $WORKSPACE/ci/envs/utils.sh +KERNELRPM_VERSION=$( getKernelVersion ) + +if [ -z ${KERNELRPM_VERSION} ];then + echo "Kernel RPM not found in build_output Directory" + exit 1 +fi + +#Updating the pod.yaml file with HOST_IP,cyclictest-node-context.yaml with loops and interval +function updateYaml { + cd $WORKSPACE/tests/ + sed -ri "s/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/${HOST_IP}/" pod.yaml + sed -ri "s/loops: [0-9]*/loops: ${testTime}/" cyclictest-node-context.yaml + sed -ri "s/interval: [0-9]*/interval: 1000/" cyclictest-node-context.yaml +} + +#cleaning the environment after executing the test through yardstick. +function env_clean { + container_id=`sudo docker ps -a | grep kvmfornfv_${testType} |awk '{print \$1}'|sed -e 's/\r//g'` + sudo docker rm ${container_id} + sudo ssh root@${HOST_IP} "rm -rf /root/workspace/*" + sudo ssh root@${HOST_IP} "pid=\$(ps aux | grep 'qemu' | awk '{print \$2}' | head -1); echo \$pid |xargs kill" + sudo rm -rf /tmp/kvmtest-${testType}* +} + +#Cleaning the latest kernel changes on host after executing the test. +function host_clean { + sudo ssh root@${HOST_IP} "rpm=\$(rpm -qa | grep 'kernel-${KERNELRPM_VERSION}' | awk '{print \$1}'); rpm -ev \$rpm" + sudo ssh root@${HOST_IP} "rm -rf /boot/initramfs-${KERNELRPM_VERSION}*.img" + sudo ssh root@${HOST_IP} "grub2-mkconfig -o /boot/grub2/grub.cfg" + sudo ssh root@${HOST_IP} "reboot" +} + + +#Creating a docker image with yardstick installed and Verify the results of cyclictest +function runCyclicTest { + docker_image_dir=$WORKSPACE/docker_image_build + ( cd ${docker_image_dir}; sudo docker build -t kvmfornfv:latest --no-cache=true . ) + if [ ${?} -ne 0 ] ; then + echo "Docker image build failed" + id=$(sudo docker ps -a | head -2 | tail -1 | awk '{print $1}'); sudo docker rm -f $id + exit 1 + fi + time_stamp=$(date +%Y%m%d%H%M%S) + volume=/tmp/kvmtest-${testType}-${time_stamp} + mkdir -p $volume/{image,rpm,scripts} + + #copying required files to run yardstick cyclic testcase + mv $WORKSPACE/build_output/kernel-${KERNELRPM_VERSION}*.rpm ${volume}/rpm + cp -r $WORKSPACE/ci/envs/* ${volume}/scripts + cp -r $WORKSPACE/tests/cyclictest-node-context.yaml ${volume} + cp -r $WORKSPACE/tests/pod.yaml ${volume} + + #Launching ubuntu docker container to run yardstick + sudo docker run -i -v ${volume}:/opt --net=host --name kvmfornfv_${testType} \ + kvmfornfv:latest /bin/bash -c "cd /opt/scripts && ls; ./cyclictest.sh" + + #Verifying the results of cyclictest + result=`grep -o '"errors":[^,]*' ${volume}/yardstick.out | awk -F '"' '{print $4}'` + + if [ -z "${result}" ]; then + echo "####################################################" + echo "" + echo `grep -o '"data":[^}]*' ${volume}/yardstick.out | awk -F '{' '{print $2}'` + echo "" + echo "####################################################" + env_clean + host_clean + exit 0 + else + echo "Testcase failed" + echo `grep -o '"errors":[^,]*' ${volume}/yardstick.out | awk -F '"' '{print $4}'` + env_clean + host_clean + exit 1 + fi +} diff --git a/ci/envs/cyclictest.sh b/ci/envs/cyclictest.sh index c261fe05d..747f34758 100755 --- a/ci/envs/cyclictest.sh +++ b/ci/envs/cyclictest.sh @@ -4,7 +4,9 @@ ## Invoking this script from ubuntu docker container runs ## cyclictest through yardstick ########################################################### +source utils.sh +HOST_IP=$( getHostIP ) pod_config='/opt/pod.yaml' cyclictest_context_file='/opt/cyclictest-node-context.yaml' @@ -19,7 +21,7 @@ if [ ! -f ${cyclictest_context_file} ] ; then fi #setting up of image for launching guest vm. -sudo ssh root@10.2.117.23 "cp /root/images/guest1.qcow2 /root/" +sudo ssh root@$HOST_IP "cp /root/images/guest1.qcow2 /root/" #Running cyclictest through yardstick yardstick -d task start ${cyclictest_context_file} diff --git a/ci/envs/host-run-qemu.sh b/ci/envs/host-run-qemu.sh index 487aebe66..400e9e306 100755 --- a/ci/envs/host-run-qemu.sh +++ b/ci/envs/host-run-qemu.sh @@ -9,8 +9,11 @@ ## http://www.apache.org/licenses/LICENSE-2.0 ############################################################################### +source utils.sh source host-config +HOST_IP=$( getHostIP ) + cpumask () { m=$((1<<${1})) printf 0x%x ${m} @@ -28,7 +31,7 @@ qmp_sock="/tmp/qmp-sock-$$" # -nographic -serial /dev/null -parallel /dev/null ${qemu} -smp ${guest_cpus} -drive file=/root/guest1.qcow2 -daemonize \ - -netdev user,id=net0,hostfwd=tcp:10.2.117.23:5555-:22 \ + -netdev user,id=net0,hostfwd=tcp:$HOST_IP:5555-:22 \ -realtime mlock=on -mem-prealloc -enable-kvm -m 1G \ -mem-path /mnt/hugetlbfs-1g \ -device virtio-net-pci,netdev=net0 \ diff --git a/ci/test_kvmfornfv.sh b/ci/test_kvmfornfv.sh index fd29f6d43..858aaf394 100755 --- a/ci/test_kvmfornfv.sh +++ b/ci/test_kvmfornfv.sh @@ -1,80 +1,33 @@ #!/bin/bash -############################################################# -## This script will launch ubuntu docker container -## runs cyclictest through yardstick -## and verifies the test results. +############################################################ +## This script is an interface to trigger the +## cyclicTestTrigger.sh for test type like patch verification, +## daily testing. +## Releng will trigger this script by passing test type like +## verify/daily as an argument ############################################################ -source $WORKSPACE/ci/envs/utils.sh -HOST_IP=$( getHostIP ) -KERNEL_VERSION=$( getKernelVersion ) -if [ -z $KERNEL_VERSION ];then - echo "Kernel RPM not found in $WORKSPACE/build_output Directory" - exit 1 +test_type=$1 + +if [ ${test_type} == "verify" ];then + HOST_IP="10.2.117.23" + test_time=600000 # 10m +elif [ ${test_type} == "daily" ];then + HOST_IP="10.2.117.25" + test_time=7200000 #2h +elif [ ${test_type} == "merge" ];then + echo "Test is not enabled for ${test_type}" + exit 0 fi -docker_image_dir=$WORKSPACE/docker_image_build -function env_clean { - container_id=`sudo docker ps -a | grep kvmfornfv |awk '{print $1}'|sed -e 's/\r//g'` - sudo docker rm $container_id - sudo ssh root@$HOST_IP "rm -rf /root/workspace/*" - sudo ssh root@$HOST_IP "pid=\$(ps aux | grep 'qemu' | awk '{print \$2}' | head -1); echo \$pid |xargs kill" - sudo rm -rf /tmp/kvmtest-* -} +source $WORKSPACE/ci/cyclicTestTrigger.sh $HOST_IP $test_time $test_type -function host_clean { - sudo ssh root@$HOST_IP "rpm=\$(rpm -qa | grep 'kernel-${KERNEL_VERSION}' | awk '{print \$1}'); rpm -ev \$rpm" - sudo ssh root@$HOST_IP "rm -rf /boot/initramfs-${KERNEL_VERSION}*.img" - sudo ssh root@$HOST_IP "grub2-mkconfig -o /boot/grub2/grub.cfg" - sudo ssh root@$HOST_IP "reboot" -} +#Update cyclictest-node-context.yaml with test_time and pod.yaml with IP +updateYaml #Cleaning up the test environment before running cyclictest through yardstick. env_clean -#Creating a docker image with yardstick installed. -( cd ${docker_image_dir}; sudo docker build -t kvmfornfv:latest --no-cache=true . ) -if [ ${?} -ne 0 ] ; then - echo "Docker image build failed" - id=$(sudo docker ps -a | head -2 | tail -1 | awk '{print $1}'); sudo docker rm -f $id - exit 1 -fi - -time_stamp=$(date +%Y%m%d%H%M%S) -volume=/tmp/kvmtest-${time_stamp} -mkdir -p $volume/{image,rpm,scripts} - -#copying required files to run yardstick cyclic testcase -mv $WORKSPACE/build_output/kernel-${KERNEL_VERSION}*.rpm $volume/rpm -cp -r $WORKSPACE/ci/envs/* $volume/scripts -cp -r $WORKSPACE/tests/cyclictest-node-context.yaml $volume -cp -r $WORKSPACE/tests/pod.yaml $volume - -#Launching ubuntu docker container to run yardstick -sudo docker run -i -v $volume:/opt --net=host --name kvmfornfv \ -kvmfornfv:latest /bin/bash -c "cd /opt/scripts && ls; ./cyclictest.sh" - -#Verifying the results of cyclictest -result=`grep -o '"errors":[^,]*' $volume/yardstick.out | awk -F '"' '{print $4}'` - -if [ -z "$result" ]; then - echo "####################################################" - echo "" - echo `grep -o '"data":[^}]*' $volume/yardstick.out | awk -F '{' '{print $2}'` - echo "" - echo "####################################################" - #cleaning the environment after executing the test through yardstick. - env_clean - #Cleaning the latest kernel changes on host after executing the test. - host_clean - exit 0 -else - echo "Testcase failed" - echo `grep -o '"errors":[^,]*' ${volume}/yardstick.out | awk -F '"' '{print $4}'` - #cleaning the environment after executing the test through yardstick. - env_clean - #Cleaning the latest kernel changes on host after executing the test. - host_clean - exit 1 -fi +#Creating a docker image with yardstick installed and launching ubuntu docker to run yardstick cyclic testcase +runCyclicTest -- 2.16.6