blob: ec0477fde5a2e9e5851f2cf1cb6b8dd7fb0cec22 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
#!/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
testName=$4
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
#calculating and verifying sha512sum of the guestimage.
function verifyGuestImage {
scp $WORKSPACE/build_output/guest1.sha512 root@${HOST_IP}:/root/images
checksum=$(sudo ssh root@${HOST_IP} "cd /root/images/ && sha512sum -c guest1.sha512 | awk '{print \$2}'")
if [ "$checksum" != "OK" ]; then
echo "Something wrong with the image, please verify"
return 1
fi
}
#Updating the pod.yaml file with HOST_IP,kvmfornfv_cyclictest_idle_idle.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}/" 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
case $testName in
idle_idle)
;;
cpustress_idle)
sed -i '/host-run-qemu.sh/a\ \- \"stress_daily.sh cpu\"' kvmfornfv_cyclictest_${testName}.yaml
;;
memorystress_idle)
sed -i '/host-run-qemu.sh/a\ \- \"stress_daily.sh memory\"' kvmfornfv_cyclictest_${testName}.yaml
;;
iostress_idle)
sed -i '/host-run-qemu.sh/a\ \- \"stress_daily.sh io\"' kvmfornfv_cyclictest_${testName}.yaml
;;
idle_cpustress)
sed -i '/guest-setup1.sh/a\ \- \"stress_daily.sh cpu\"' kvmfornfv_cyclictest_${testName}.yaml
;;
idle_memorystress)
sed -i '/guest-setup1.sh/a\ \- \"stress_daily.sh memory\"' kvmfornfv_cyclictest_${testName}.yaml
;;
idle_iostress)
sed -i '/guest-setup1.sh/a\ \- \"stress_daily.sh memory\"' kvmfornfv_cyclictest_${testName}.yaml
;;
*)
echo "Incorrect test environment: $testName"
exit 1
;;
esac
}
#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'`
sudo docker stop ${container_id}
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"
}
function cleanup {
output=$1
env_clean
host_clean
if [ $output != 0 ];then
echo "Yardstick Failed.Please check cyclictest.sh"
return 1
else
return 0
fi
}
#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
cp $WORKSPACE/build_output/kernel-${KERNELRPM_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=$?
#Verifying the results of cyclictest
if [ "$testType" == "verify" ];then
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 "####################################################"
cleanup $cyclictest_output
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
}
|