From 53bf71ea043426dd23319bd3bd011fd9a8ce0446 Mon Sep 17 00:00:00 2001 From: kalyanreddy Date: Tue, 7 Mar 2017 16:46:59 +0530 Subject: [PATCH] This patch includes updated scripts for modifying function names and to optimize the code for executing all the test cases and performing necessary host cleaning operations after executing all the test cases. Change-Id: Ia1a4f6743631ff07c27afa949b6820fcc862a3ce Co-Authored-By: Y Rajitha Signed-off-by: Gundarapu Kalyan Reddy --- ci/cyclicTestTrigger.sh | 75 ++++++++++++++++++++++++++++--------------------- ci/envs/host-config | 4 +-- ci/test_kvmfornfv.sh | 33 +++++++++++++++------- 3 files changed, 68 insertions(+), 44 deletions(-) diff --git a/ci/cyclicTestTrigger.sh b/ci/cyclicTestTrigger.sh index 14aafbe98..56bf342ef 100755 --- a/ci/cyclicTestTrigger.sh +++ b/ci/cyclicTestTrigger.sh @@ -65,29 +65,35 @@ function updateYaml { 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}/" kvmfornfv_cyclictest_hostenv_guestenv.yaml sed -ri "0,/interval: [0-9]*/s//interval: 1000/" kvmfornfv_cyclictest_hostenv_guestenv.yaml - sed -ri "s/tc: \"kvmfornfv_cyclictest-node-context\"/tc: \"kvmfornfv_cyclictest_${testName}\"/" kvmfornfv_cyclictest_hostenv_guestenv.yaml cp kvmfornfv_cyclictest_hostenv_guestenv.yaml kvmfornfv_cyclictest_${testName}.yaml + sed -ri "s/tc: \"kvmfornfv_cyclictest-node-context\"/tc: \"kvmfornfv_cyclictest_${testName}\"/" kvmfornfv_cyclictest_${testName}.yaml case $testName in idle_idle) ;; cpustress_idle) sed -i '/host-run-qemu.sh/a\ \- \"stress_daily.sh cpu\"' kvmfornfv_cyclictest_${testName}.yaml + sed -i '/host-setup0.sh/,/host-setup1.sh/ d' kvmfornfv_cyclictest_${testName}.yaml ;; memorystress_idle) sed -i '/host-run-qemu.sh/a\ \- \"stress_daily.sh memory\"' kvmfornfv_cyclictest_${testName}.yaml + sed -i '/host-setup0.sh/,/host-setup1.sh/ d' kvmfornfv_cyclictest_${testName}.yaml ;; iostress_idle) sed -i '/host-run-qemu.sh/a\ \- \"stress_daily.sh io\"' kvmfornfv_cyclictest_${testName}.yaml + sed -i '/host-setup0.sh/,/host-setup1.sh/ d' kvmfornfv_cyclictest_${testName}.yaml ;; idle_cpustress) sed -i '/guest-setup1.sh/a\ \- \"stress_daily.sh cpu\"' kvmfornfv_cyclictest_${testName}.yaml + sed -i '/host-setup0.sh/,/host-setup1.sh/ d' kvmfornfv_cyclictest_${testName}.yaml ;; idle_memorystress) sed -i '/guest-setup1.sh/a\ \- \"stress_daily.sh memory\"' kvmfornfv_cyclictest_${testName}.yaml + sed -i '/host-setup0.sh/,/host-setup1.sh/ d' kvmfornfv_cyclictest_${testName}.yaml ;; idle_iostress) - sed -i '/guest-setup1.sh/a\ \- \"stress_daily.sh memory\"' kvmfornfv_cyclictest_${testName}.yaml + sed -i '/guest-setup1.sh/a\ \- \"stress_daily.sh io\"' kvmfornfv_cyclictest_${testName}.yaml + sed -i '/host-setup0.sh/,/host-setup1.sh/ d' kvmfornfv_cyclictest_${testName}.yaml ;; *) echo "Incorrect test environment: $testName" @@ -98,7 +104,7 @@ function updateYaml { #cleaning the environment after executing the test through yardstick. function env_clean { - container_id=`sudo docker ps -a | grep kvmfornfv_${testType}_${testName} |awk '{print \$1}'|sed -e 's/\r//g'` + container_id=`sudo docker ps -a | grep kvmfornfv_${testType} |awk '{print \$1}'|sed -e 's/\r//g'` sudo docker stop ${container_id} sudo docker rm ${container_id} sudo ssh root@${HOST_IP} "rm -rf /root/workspace/*" @@ -129,50 +135,55 @@ function cleanup { #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 - err_exit 1 + container_id=`sudo docker ps -a | grep kvmfornfv_${testType} |awk '{print \$1}'|sed -e 's/\r//g'` + echo "$container_id" + if [ -z "$container_id" ]; then + 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 + cp $WORKSPACE/build_output/kernel-${KERNELRPM_VERSION}*.rpm ${volume}/rpm + cp $WORKSPACE/build_output/qemu-${QEMURPM_VERSION}*.rpm ${volume}/rpm + cp -r $WORKSPACE/ci/envs/* ${volume}/scripts + cp -r $WORKSPACE/tests/kvmfornfv_cyclictest_${testName}.yaml ${volume} + cp -r $WORKSPACE/tests/pod.yaml ${volume}/scripts + #Launching ubuntu docker container to run yardstick + container_id=`sudo docker run -i -d -v ${volume}:/opt --net=host --name kvmfornfv_${testType} \ + kvmfornfv:latest` + sudo docker exec -i $container_id /bin/bash -c "cd /opt/scripts && ls; ./cyclictest.sh $testType $testName" + cyclictest_output=$? + else + cp -r $WORKSPACE/tests/kvmfornfv_cyclictest_${testName}.yaml ${volume} + sudo docker exec -i $container_id /bin/bash -c "cd /opt/scripts && ls; ./cyclictest.sh $testType $testName" + cyclictest_output=$? 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 - cp $WORKSPACE/build_output/kernel-${KERNELRPM_VERSION}*.rpm ${volume}/rpm - cp $WORKSPACE/build_output/qemu-${QEMURPM_VERSION}*.rpm ${volume}/rpm - cp -r $WORKSPACE/ci/envs/* ${volume}/scripts - cp -r $WORKSPACE/tests/kvmfornfv_cyclictest_${testName}.yaml ${volume} - cp -r $WORKSPACE/tests/pod.yaml ${volume}/scripts - - #Launching ubuntu docker container to run yardstick - sudo docker run -i -v ${volume}:/opt --net=host --name kvmfornfv_${testType}_${testName} \ - kvmfornfv:latest /bin/bash -c "cd /opt/scripts && ls; ./cyclictest.sh $testType $testName" - cyclictest_output=$? + if [ "$testName" == "iostress_idle" ];then copyLogs fi + #Verifying the results of cyclictest if [ "$testType" == "verify" ];then result=`grep -o '"errors":[^,]*' ${volume}/yardstick.out | awk -F '"' '{print $4}'` - if [ -z "${result}" ]; then + if [ -z "${result}" ] && [ "${cyclictest_output}" == 0 ]; then echo "####################################################" - echo "" + echo " " echo `grep -o '"data":[^}]*' ${volume}/yardstick.out | awk -F '{' '{print $2}'` echo "" echo "####################################################" - cleanup $cyclictest_output + return 0 else echo "Testcase failed" echo `grep -o '"errors":[^,]*' ${volume}/yardstick.out | awk -F '"' '{print $4}'` - env_clean - host_clean return 1 fi - else - cleanup $cyclictest_output fi -} +} \ No newline at end of file diff --git a/ci/envs/host-config b/ci/envs/host-config index 99cbb3773..727ba1574 100755 --- a/ci/envs/host-config +++ b/ci/envs/host-config @@ -35,8 +35,8 @@ done stress_isolcpus=${first}-${last} echo "Stress tool runs on $stress_isolcpus" -#Tar the log files generated during testcase execution. -function err_exit { +#Tar the log files generated during testcase execution and exit. +function test_exit { exitCode=$1 cd $WORKSPACE/build_output/ if [ -d log ];then diff --git a/ci/test_kvmfornfv.sh b/ci/test_kvmfornfv.sh index 20bdaeefb..adf0aa3ce 100755 --- a/ci/test_kvmfornfv.sh +++ b/ci/test_kvmfornfv.sh @@ -29,7 +29,6 @@ function packetForward { else echo "Packet Forwarding test case executed SUCCESSFULLY" fi - host_clean } function cyclictest { @@ -38,17 +37,24 @@ function cyclictest { #Verifying whether the test node is up and running connect_host #Waiting for ssh to be available for the host machine. - sleep 10 + sleep 20 #calculating and verifying sha512sum of the guestimage. if ! verifyGuestImage;then exit 1 fi #Update kvmfornfv_cyclictest_${testName}.yaml with test_time and pod.yaml with IP updateYaml - #Cleaning up the test environment before running cyclictest through yardstick. - env_clean #Running PCM utility collect_MBWInfo $test_type + #Checking which test cases will be executed first and last from the list to perform cleaning operations. + first_test_case=cyclictest_env_$test_type[0] + last_test_case=cyclictest_env_$test_type[-1] + #Cleaning the environment before running cyclictest through yardstick + if [ ${test_case} == "${!first_test_case}" ];then + env_clean + else + sudo ssh root@${HOST_IP} "pid=\$(ps aux | grep 'qemu' | awk '{print \$2}' | head -1); echo \$pid |xargs kill" + fi #Creating a docker image with yardstick installed and launching ubuntu docker to run yardstick cyclic testcase if runCyclicTest;then cyclictest_result=`expr ${cyclictest_result} + 0` @@ -58,6 +64,9 @@ function cyclictest { fi echo "Terminating PCM Process" sudo ssh root@${HOST_IP} "pid=\$(ps aux | grep 'pcm' | awk '{print \$2}' | head -1); echo \$pid |xargs kill -SIGTERM" + if [ ${test_case} != "${!last_test_case}" ];then + sudo ssh root@${HOST_IP} "reboot" + fi } function collect_MBWInfo { #Collecting the Memory Bandwidth Information using pcm-memory utility @@ -124,14 +133,16 @@ if [ ${test_type} == "verify" ];then cyclictest ${env} sleep 10 done + env_clean + host_clean #Execution of packet forwarding test cases. packetForward fi if [ ${cyclictest_result} -ne 0 ] || [ ${packetforward_result} -ne 0 ];then echo "Test case FAILED" - err_exit 1 + test_exit 1 else - err_exit 0 + test_exit 0 fi elif [ ${test_type} == "daily" ];then HOST_IP="10.10.100.22" @@ -140,9 +151,9 @@ elif [ ${test_type} == "daily" ];then if [ ${test_name} == "packet_forward" ];then packetForward if [ ${packetforward_result} -ne 0 ] ; then - err_exit 1 + test_exit 1 else - err_exit 0 + test_exit 0 fi elif [ ${test_name} == "cyclictest" ];then if [ ${ftrace_enable} -eq '1' ]; then @@ -163,13 +174,15 @@ elif [ ${test_type} == "daily" ];then cyclictest ${env} sleep 5 done + env_clean + host_clean fi if [ ${cyclictest_result} -ne 0 ] ; then echo "Cyclictest case execution FAILED" - err_exit 1 + test_exit 1 else echo "Cyclictest case executed SUCCESSFULLY" - err_exit 0 + test_exit 0 fi fi elif [ ${test_type} == "merge" ];then -- 2.16.6