diff options
Diffstat (limited to 'scripts/qemuimage-testlib')
-rw-r--r-- | scripts/qemuimage-testlib | 110 |
1 files changed, 76 insertions, 34 deletions
diff --git a/scripts/qemuimage-testlib b/scripts/qemuimage-testlib index b9afcf5bb6..823cbfa18b 100644 --- a/scripts/qemuimage-testlib +++ b/scripts/qemuimage-testlib | |||
@@ -39,6 +39,19 @@ Test_Info() | |||
39 | echo -e "\tTest_Info: $*" | 39 | echo -e "\tTest_Info: $*" |
40 | } | 40 | } |
41 | 41 | ||
42 | # function to update target ip address | ||
43 | # $1 is the process id of the process, which starts the qemu target | ||
44 | # $2 is the ip address of the target | ||
45 | Test_Update_IPSAVE() | ||
46 | { | ||
47 | local pid=$1 | ||
48 | local ip_addr=$2 | ||
49 | |||
50 | if [ "$TEST_SERIALIZE" -eq 1 ]; then | ||
51 | echo "$pid $ip_addr" > $TARGET_IPSAVE | ||
52 | fi | ||
53 | } | ||
54 | |||
42 | # function to copy files from host into target | 55 | # function to copy files from host into target |
43 | # $1 is the ip address of target | 56 | # $1 is the ip address of target |
44 | # $2 is the files, which need to be copied into target | 57 | # $2 is the files, which need to be copied into target |
@@ -99,6 +112,11 @@ Test_SSH_UP() | |||
99 | local timeout=$2 | 112 | local timeout=$2 |
100 | local interval=0 | 113 | local interval=0 |
101 | 114 | ||
115 | # If TEST_SERIALIZE is set, use existing running qemu for testing | ||
116 | if [ ${TEST_SERIALIZE} -eq 1 -a -e ${TARGET_IPSAVE} ]; then | ||
117 | timeout=50 | ||
118 | fi | ||
119 | |||
102 | while [ ${interval} -lt ${timeout} ] | 120 | while [ ${interval} -lt ${timeout} ] |
103 | do | 121 | do |
104 | Test_SSH ${ip_addr} "hostname" | 122 | Test_SSH ${ip_addr} "hostname" |
@@ -106,13 +124,13 @@ Test_SSH_UP() | |||
106 | interval=`expr $interval + 10` | 124 | interval=`expr $interval + 10` |
107 | sleep 10 | 125 | sleep 10 |
108 | else | 126 | else |
109 | Test_Info "We can ssh on ${ip_addr} now" | 127 | Test_Info "We can ssh on ${ip_addr} within ${interval} seconds" |
110 | return 0 | 128 | return 0 |
111 | fi | 129 | fi |
112 | 130 | ||
113 | done | 131 | done |
114 | 132 | ||
115 | Test_Info "We can not ssh on ${ip_addr} in ${timeout}" | 133 | Test_Info "We can not ssh on ${ip_addr} in ${timeout} seconds" |
116 | return 1 | 134 | return 1 |
117 | } | 135 | } |
118 | 136 | ||
@@ -162,6 +180,8 @@ Test_Kill_Qemu() | |||
162 | local ret=0 | 180 | local ret=0 |
163 | local ppid=0 | 181 | local ppid=0 |
164 | local i=0 | 182 | local i=0 |
183 | local index=0 | ||
184 | local total=0 | ||
165 | declare local pid | 185 | declare local pid |
166 | 186 | ||
167 | # Check if $1 pid exists and is a qemu process | 187 | # Check if $1 pid exists and is a qemu process |
@@ -186,16 +206,39 @@ Test_Kill_Qemu() | |||
186 | ret=$? | 206 | ret=$? |
187 | done | 207 | done |
188 | 208 | ||
189 | # Kill these children pids from the last one | 209 | # When TEST_SERIALIZE is set, qemu process will not be |
190 | while [ $i -ne 0 ] | 210 | # killed until all the cases are finished |
191 | do | 211 | if [ ${TEST_SERIALIZE} -eq 1 -a -e ${TEST_STATUS} ]; then |
192 | i=$((i-1)) | 212 | index=`sed -n 2p ${TEST_STATUS} | awk '{print $3}'` |
193 | kill ${pid[$i]} | 213 | total=`sed -n 2p ${TEST_STATUS} | awk '{print $4}'` |
194 | sleep 2 | 214 | if [ ${index} != ${total} ]; then |
195 | done | 215 | Test_Info "Do not kill the qemu process and use it for later testing" |
216 | Test_Update_IPSAVE $PID $TARGET_IPADDR | ||
217 | else | ||
218 | # If it is the last case, let's kill it | ||
219 | while [ $i -ne 0 ] | ||
220 | do | ||
221 | i=$((i-1)) | ||
222 | kill ${pid[$i]} | ||
223 | sleep 2 | ||
224 | done | ||
225 | |||
226 | # Kill the parent id | ||
227 | kill $PID | ||
228 | fi | ||
196 | 229 | ||
197 | # Kill the parent id | 230 | else |
198 | kill $PID | 231 | # Kill these children pids from the last one |
232 | while [ $i -ne 0 ] | ||
233 | do | ||
234 | i=$((i-1)) | ||
235 | kill ${pid[$i]} | ||
236 | sleep 2 | ||
237 | done | ||
238 | |||
239 | # Kill the parent id | ||
240 | kill $PID | ||
241 | fi | ||
199 | fi | 242 | fi |
200 | 243 | ||
201 | return | 244 | return |
@@ -209,7 +252,7 @@ Test_Check_Qemu_UP() | |||
209 | Test_Info "There is no Qemu process" | 252 | Test_Info "There is no Qemu process" |
210 | return 1 | 253 | return 1 |
211 | else | 254 | else |
212 | Test_Info "There is at least Qemu process running" | 255 | Test_Info "There is at least one Qemu process running" |
213 | return 0 | 256 | return 0 |
214 | fi | 257 | fi |
215 | } | 258 | } |
@@ -384,31 +427,29 @@ Test_Create_Qemu() | |||
384 | 427 | ||
385 | CP=`which cp` | 428 | CP=`which cp` |
386 | 429 | ||
387 | # When SHARE_IMAGE is set, we use the existing image under tmp folder | 430 | # When TEST_SERIALIZE is set, we use the existing image under tmp folder |
388 | if [ -e "$TEST_ROOTFS_IMAGE" ]; then | 431 | if [ ${TEST_SERIALIZE} -eq 1 -a -e "$TARGET_IPSAVE" ]; then |
389 | if [ ${SHARE_IMAGE} -eq 1 ]; then | 432 | # If TARGET_IPSAVE exists, check PID of the qemu process from it |
390 | ROOTFS_IMAGE="$TEST_ROOTFS_IMAGE" | 433 | PID=`awk '{print $1}' $TARGET_IPSAVE` |
391 | TEST_ROOTFS_IMAGE="${TEST_TMP}/${QEMUTARGET}-${QEMUARCH}-shared-test.ext3" | 434 | timeout=50 |
392 | fi | 435 | else |
393 | rm -rf $TEST_ROOTFS_IMAGE | 436 | rm -rf $TEST_ROOTFS_IMAGE |
394 | fi | 437 | $CP $ROOTFS_IMAGE $TEST_ROOTFS_IMAGE |
438 | if [ $? -ne 0 ]; then | ||
439 | Test_Info "Image ${ROOTFS_IMAGE} copy to ${TEST_ROOTFS_IMAGE} failed, return fail" | ||
440 | return $ret | ||
441 | fi | ||
395 | 442 | ||
396 | $CP $ROOTFS_IMAGE $TEST_ROOTFS_IMAGE | 443 | export MACHINE=$QEMUARCH |
397 | 444 | ||
398 | if [ $? -ne 0 ]; then | 445 | # Create Qemu in localhost VNC Port 1 |
399 | Test_Info "Image ${ROOTFS_IMAGE} copy to ${TEST_ROOTFS_IMAGE} failed, return fail" | 446 | echo "Running xterm -display ${DISPLAY} -e 'BUILDDIR=${TOPDIR} ${RUNQEMU} ${KERNEL} ${TEST_ROOTFS_IMAGE}' &" |
400 | return $ret | 447 | xterm -display ${DISPLAY} -e "BUILDDIR=${TOPDIR} ${RUNQEMU} ${KERNEL} ${TEST_ROOTFS_IMAGE}" & |
448 | |||
449 | # Get the pid of the xterm processor, which will be used in Test_Kill_Qemu | ||
450 | PID=$! | ||
401 | fi | 451 | fi |
402 | 452 | ||
403 | export MACHINE=$QEMUARCH | ||
404 | |||
405 | # Create Qemu in localhost VNC Port 1 | ||
406 | echo "Running xterm -display ${DISPLAY} -e 'BUILDDIR=${TOPDIR} ${RUNQEMU} ${KERNEL} ${TEST_ROOTFS_IMAGE}' &" | ||
407 | xterm -display ${DISPLAY} -e "BUILDDIR=${TOPDIR} ${RUNQEMU} ${KERNEL} ${TEST_ROOTFS_IMAGE}" & | ||
408 | |||
409 | # Get the pid of the xterm processor, which will be used in Test_Kill_Qemu | ||
410 | PID=$! | ||
411 | |||
412 | while [ ${up_time} -lt 10 ] | 453 | while [ ${up_time} -lt 10 ] |
413 | do | 454 | do |
414 | Test_Check_Qemu_UP | 455 | Test_Check_Qemu_UP |
@@ -437,7 +478,7 @@ Test_Create_Qemu() | |||
437 | do | 478 | do |
438 | Test_Check_IP_UP ${TARGET_IPADDR} | 479 | Test_Check_IP_UP ${TARGET_IPADDR} |
439 | if [ $? -eq 0 ]; then | 480 | if [ $? -eq 0 ]; then |
440 | Test_Info "Qemu Network is up, ping with ${TARGET_IPADDR} is OK" | 481 | Test_Info "Qemu Network is up, ping with ${TARGET_IPADDR} is OK within ${up_time} seconds" |
441 | ret=0 | 482 | ret=0 |
442 | break | 483 | break |
443 | else | 484 | else |
@@ -451,7 +492,8 @@ Test_Create_Qemu() | |||
451 | Test_Info "Qemu and its network is up" | 492 | Test_Info "Qemu and its network is up" |
452 | return $ret | 493 | return $ret |
453 | else | 494 | else |
454 | Test_Info "Qemu or its network is not up in ${timeout}" | 495 | Test_Info "Qemu or its network is not up in ${timeout} seconds" |
496 | Test_Update_IPSAVE $PID $TARGET_IPADDR | ||
455 | return $ret | 497 | return $ret |
456 | fi | 498 | fi |
457 | } | 499 | } |