diff options
Diffstat (limited to 'scripts/qemuimage-testlib')
-rwxr-xr-x | scripts/qemuimage-testlib | 212 |
1 files changed, 55 insertions, 157 deletions
diff --git a/scripts/qemuimage-testlib b/scripts/qemuimage-testlib index f8a5299a25..2c22bf2fa6 100755 --- a/scripts/qemuimage-testlib +++ b/scripts/qemuimage-testlib | |||
@@ -25,8 +25,9 @@ TOOLCHAIN_PROJECTS="$COREBASE/scripts/qemuimage-tests/toolchain_projects" | |||
25 | # Test Directory on target for testing | 25 | # Test Directory on target for testing |
26 | TARGET_TEST_DIR="/opt/test" | 26 | TARGET_TEST_DIR="/opt/test" |
27 | 27 | ||
28 | # Global variable for process id | 28 | # Global variables for process id |
29 | PID=0 | 29 | XTERMPID=0 |
30 | QEMUPID=0 | ||
30 | 31 | ||
31 | # Global variable for target ip address | 32 | # Global variable for target ip address |
32 | TARGET_IPADDR=0 | 33 | TARGET_IPADDR=0 |
@@ -212,90 +213,33 @@ Test_Print_Result() | |||
212 | # $1 is qemu process id, which needs to be killed | 213 | # $1 is qemu process id, which needs to be killed |
213 | Test_Kill_Qemu() | 214 | Test_Kill_Qemu() |
214 | { | 215 | { |
215 | local ret=0 | ||
216 | local ppid=0 | ||
217 | local i=0 | ||
218 | local index=0 | 216 | local index=0 |
219 | local total=0 | 217 | local total=0 |
220 | declare local pid | ||
221 | |||
222 | # Check if $1 pid exists and is a qemu process | ||
223 | ps -wwfp $PID | grep -iq "qemu" | ||
224 | |||
225 | # Find all children pid of the pid $1 | ||
226 | if [ $? -eq 0 ]; then | ||
227 | |||
228 | # Check if there is any child pid of the pid $PID | ||
229 | ppid=$PID | ||
230 | ps -f --ppid $ppid | ||
231 | ret=$? | ||
232 | |||
233 | while [ $ret -eq 0 ] | ||
234 | do | ||
235 | # If yes, get the child pid and check if the child pid has other child pid | ||
236 | # Continue the while loop until there is no child pid found | ||
237 | pid[$i]=`ps -f --ppid $ppid | awk '{if ($2 != "PID") print $2}'` | ||
238 | ppid=${pid[$i]} | ||
239 | i=$((i+1)) | ||
240 | ps -f --ppid $ppid | ||
241 | ret=$? | ||
242 | done | ||
243 | |||
244 | # When TEST_SERIALIZE is set, qemu process will not be | ||
245 | # killed until all the cases are finished | ||
246 | if [ ${TEST_SERIALIZE} -eq 1 -a -e ${TEST_STATUS} ]; then | ||
247 | index=`sed -n 2p ${TEST_STATUS} | awk '{print $3}'` | ||
248 | total=`sed -n 2p ${TEST_STATUS} | awk '{print $4}'` | ||
249 | if [ ${index} != ${total} ]; then | ||
250 | Test_Info "Do not kill the qemu process and use it for later testing" | ||
251 | Test_Update_IPSAVE $PID $TARGET_IPADDR | ||
252 | else | ||
253 | # If it is the last case, let's kill it | ||
254 | while [ $i -ne 0 ] | ||
255 | do | ||
256 | i=$((i-1)) | ||
257 | kill ${pid[$i]} | ||
258 | sleep 2 | ||
259 | done | ||
260 | |||
261 | # Kill the parent id | ||
262 | kill $PID | ||
263 | fi | ||
264 | 218 | ||
219 | # When TEST_SERIALIZE is set, qemu process will not be | ||
220 | # killed until all the cases are finished | ||
221 | if [ ${TEST_SERIALIZE} -eq 1 -a -e ${TEST_STATUS} ]; then | ||
222 | index=`sed -n 2p ${TEST_STATUS} | awk '{print $3}'` | ||
223 | total=`sed -n 2p ${TEST_STATUS} | awk '{print $4}'` | ||
224 | if [ ${index} != ${total} ]; then | ||
225 | Test_Info "Do not kill the qemu process and use it for later testing" | ||
226 | Test_Update_IPSAVE $XTERMPID $TARGET_IPADDR | ||
265 | else | 227 | else |
266 | # Kill these children pids from the last one | 228 | kill -$QEMUPID |
267 | while [ $i -ne 0 ] | 229 | kill -$XTERMPID |
268 | do | ||
269 | i=$((i-1)) | ||
270 | kill ${pid[$i]} | ||
271 | sleep 2 | ||
272 | done | ||
273 | |||
274 | # Kill the parent id | ||
275 | kill $PID | ||
276 | fi | 230 | fi |
231 | else | ||
232 | kill -$QEMUPID | ||
233 | kill -$XTERMPID | ||
277 | fi | 234 | fi |
278 | 235 | ||
279 | return | 236 | return |
280 | } | 237 | } |
281 | 238 | ||
282 | # function to check if there is any qemu process | ||
283 | Test_Check_Qemu_UP() | ||
284 | { | ||
285 | local count=`ps -eo command | cut -d " " -f 1 | grep -c "\(^qemu\|.*/qemu\)"` | ||
286 | if [ ${count} -lt 1 ]; then | ||
287 | Test_Info "There is no Qemu process" | ||
288 | return 1 | ||
289 | else | ||
290 | Test_Info "There is at least one Qemu process running" | ||
291 | return 0 | ||
292 | fi | ||
293 | } | ||
294 | |||
295 | # function to check if network is up | 239 | # function to check if network is up |
296 | Test_Check_IP_UP() | 240 | Test_Check_IP_UP() |
297 | { | 241 | { |
298 | ping -c1 $1 | 242 | ping -c1 $1 1> /dev/null |
299 | if [ $? -ne 0 ]; then | 243 | if [ $? -ne 0 ]; then |
300 | Test_Info "IP $1 is not up" | 244 | Test_Info "IP $1 is not up" |
301 | return 1 | 245 | return 1 |
@@ -377,46 +321,12 @@ Test_Find_Image() | |||
377 | Test_Fetch_Target_IP() | 321 | Test_Fetch_Target_IP() |
378 | { | 322 | { |
379 | local opid=$1 | 323 | local opid=$1 |
380 | local ppid=0 | ||
381 | local ip_addr=0 | 324 | local ip_addr=0 |
382 | local i=0 | ||
383 | declare local pid | ||
384 | 325 | ||
385 | # Check if $1 pid exists and contains ipaddr of target | 326 | # Check if $1 pid exists and contains ipaddr of target |
386 | ps -wwfp $opid | grep -oq "192\.168\.7\.[0-9]*::" | 327 | ps -wwfp $opid | grep -oq "192\.168\.7\.[0-9]*::" |
387 | 328 | ||
388 | # Find all children pid of the pid $1 | 329 | ip_addr=`ps -wwfp $opid | grep -o "192\.168\.7\.[0-9]*::" | awk -F":" '{print $1}'` |
389 | # and check if they contain ipaddr of target | ||
390 | if [ $? -ne 0 ]; then | ||
391 | # Check if there is any child pid of the pid $1 | ||
392 | ppid=$opid | ||
393 | ps -f --ppid $ppid > /dev/zero | ||
394 | ret=$? | ||
395 | |||
396 | while [ $ret -eq 0 ] | ||
397 | do | ||
398 | # If yes, get the child pid and check if the child pid has other child pid | ||
399 | # Continue the while loop until there is no child pid found | ||
400 | pid[$i]=`ps -f --ppid $ppid | awk '{if ($2 != "PID") print $2}'` | ||
401 | ppid=${pid[$i]} | ||
402 | i=$((i+1)) | ||
403 | ps -f --ppid $ppid > /dev/zero | ||
404 | ret=$? | ||
405 | done | ||
406 | |||
407 | # Check these children pids, if they have ipaddr included in command line | ||
408 | while [ $i -ne 0 ] | ||
409 | do | ||
410 | i=$((i-1)) | ||
411 | ps -wwfp ${pid[$i]} | grep -oq "192\.168\.7\.[0-9]*::" | ||
412 | if [ $? -eq 0 ]; then | ||
413 | ip_addr=`ps -wwfp ${pid[$i]} | grep -o "192\.168\.7\.[0-9]*::" | awk -F":" '{print $1}'` | ||
414 | fi | ||
415 | sleep 1 | ||
416 | done | ||
417 | else | ||
418 | ip_addr=`ps -wwfp $opid | grep -o "192\.168\.7\.[0-9]*::" | awk -F":" '{print $1}'` | ||
419 | fi | ||
420 | 330 | ||
421 | echo $ip_addr | 331 | echo $ip_addr |
422 | 332 | ||
@@ -427,13 +337,10 @@ Test_Fetch_Target_IP() | |||
427 | Test_Create_Qemu() | 337 | Test_Create_Qemu() |
428 | { | 338 | { |
429 | local timeout=$1 | 339 | local timeout=$1 |
430 | local ret=1 | ||
431 | local up_time=0 | 340 | local up_time=0 |
432 | 341 | ||
433 | which runqemu | 342 | RUNQEMU=`which runqemu` |
434 | if [ $? -eq 0 ]; then | 343 | if [ $? -ne 0 ]; then |
435 | RUNQEMU=`which runqemu` | ||
436 | else | ||
437 | Test_Error "Can not find runqemu in \$PATH, return fail" | 344 | Test_Error "Can not find runqemu in \$PATH, return fail" |
438 | return 1 | 345 | return 1 |
439 | fi | 346 | fi |
@@ -449,7 +356,7 @@ Test_Create_Qemu() | |||
449 | # If there is no kernel image found, return failed directly | 356 | # If there is no kernel image found, return failed directly |
450 | if [ $? -eq 1 ]; then | 357 | if [ $? -eq 1 ]; then |
451 | Test_Info "No kernel image file found under ${DEPLOY_DIR}/images for ${QEMUARCH}, pls. have a check" | 358 | Test_Info "No kernel image file found under ${DEPLOY_DIR}/images for ${QEMUARCH}, pls. have a check" |
452 | return $ret | 359 | return 1 |
453 | fi | 360 | fi |
454 | 361 | ||
455 | ROOTFS_IMAGE=$(Test_Find_Image -l ${DEPLOY_DIR}/images -t ${QEMUTARGET} -a ${QEMUARCH}) | 362 | ROOTFS_IMAGE=$(Test_Find_Image -l ${DEPLOY_DIR}/images -t ${QEMUTARGET} -a ${QEMUARCH}) |
@@ -457,7 +364,7 @@ Test_Create_Qemu() | |||
457 | # If there is no rootfs image found, return failed directly | 364 | # If there is no rootfs image found, return failed directly |
458 | if [ $? -eq 1 ]; then | 365 | if [ $? -eq 1 ]; then |
459 | Test_Info "No ${QEMUTARGET} rootfs image file found under ${DEPLOY_DIR}/images for ${QEMUARCH}, pls. have a check" | 366 | Test_Info "No ${QEMUTARGET} rootfs image file found under ${DEPLOY_DIR}/images for ${QEMUARCH}, pls. have a check" |
460 | return $ret | 367 | return 1 |
461 | fi | 368 | fi |
462 | 369 | ||
463 | TEST_ROOTFS_IMAGE="${TEST_TMP}/${QEMUTARGET}-${QEMUARCH}-test.ext3" | 370 | TEST_ROOTFS_IMAGE="${TEST_TMP}/${QEMUTARGET}-${QEMUARCH}-test.ext3" |
@@ -467,7 +374,7 @@ Test_Create_Qemu() | |||
467 | # When TEST_SERIALIZE is set, we use the existing image under tmp folder | 374 | # When TEST_SERIALIZE is set, we use the existing image under tmp folder |
468 | if [ ${TEST_SERIALIZE} -eq 1 -a -e "$TARGET_IPSAVE" ]; then | 375 | if [ ${TEST_SERIALIZE} -eq 1 -a -e "$TARGET_IPSAVE" ]; then |
469 | # If TARGET_IPSAVE exists, check PID of the qemu process from it | 376 | # If TARGET_IPSAVE exists, check PID of the qemu process from it |
470 | PID=`awk '{print $1}' $TARGET_IPSAVE` | 377 | XTERMPID=`awk '{print $1}' $TARGET_IPSAVE` |
471 | timeout=50 | 378 | timeout=50 |
472 | else | 379 | else |
473 | rm -rf $TEST_ROOTFS_IMAGE | 380 | rm -rf $TEST_ROOTFS_IMAGE |
@@ -475,22 +382,22 @@ Test_Create_Qemu() | |||
475 | $CP $ROOTFS_IMAGE $TEST_ROOTFS_IMAGE | 382 | $CP $ROOTFS_IMAGE $TEST_ROOTFS_IMAGE |
476 | if [ $? -ne 0 ]; then | 383 | if [ $? -ne 0 ]; then |
477 | Test_Info "Image ${ROOTFS_IMAGE} copy to ${TEST_ROOTFS_IMAGE} failed, return fail" | 384 | Test_Info "Image ${ROOTFS_IMAGE} copy to ${TEST_ROOTFS_IMAGE} failed, return fail" |
478 | return $ret | 385 | return 1 |
479 | fi | 386 | fi |
480 | 387 | ||
481 | export MACHINE=$QEMUARCH | 388 | export MACHINE=$QEMUARCH |
482 | 389 | ||
483 | # Create Qemu in localhost VNC Port 1 | 390 | # Create Qemu in localhost VNC Port 1 |
484 | echo "Running xterm -display ${DISPLAY} -e 'OE_TMPDIR=${OE_TMPDIR} ${RUNQEMU} ${KERNEL} ${TEST_ROOTFS_IMAGE} && /bin/sleep 60' &" | 391 | echo "Running xterm -display ${DISPLAY} -e 'OE_TMPDIR=${OE_TMPDIR} ${RUNQEMU} ${KERNEL} ${TEST_ROOTFS_IMAGE} || /bin/sleep 60' &" |
485 | xterm -display ${DISPLAY} -e "OE_TMPDIR=${OE_TMPDIR} ${RUNQEMU} ${KERNEL} ${TEST_ROOTFS_IMAGE} && /bin/sleep 60" & | 392 | xterm -display ${DISPLAY} -e "OE_TMPDIR=${OE_TMPDIR} ${RUNQEMU} ${KERNEL} ${TEST_ROOTFS_IMAGE} || /bin/sleep 60" & |
486 | 393 | ||
487 | # Get the pid of the xterm processor, which will be used in Test_Kill_Qemu | 394 | # Get the pid of the xterm processor, which will be used in Test_Kill_Qemu |
488 | PID=$! | 395 | XTERMPID=$! |
489 | fi | 396 | fi |
490 | 397 | ||
491 | while [ ${up_time} -lt 10 ] | 398 | while [ ${up_time} -lt 10 ] |
492 | do | 399 | do |
493 | Test_Check_Qemu_UP | 400 | QEMUPID=`qemuimage-testlib-pythonhelper --findqemu $XTERMPID` |
494 | if [ $? -ne 0 ]; then | 401 | if [ $? -ne 0 ]; then |
495 | Test_Info "Wait for qemu up..." | 402 | Test_Info "Wait for qemu up..." |
496 | up_time=`expr $up_time + 5` | 403 | up_time=`expr $up_time + 5` |
@@ -501,15 +408,17 @@ Test_Create_Qemu() | |||
501 | fi | 408 | fi |
502 | done | 409 | done |
503 | 410 | ||
411 | if [ ${up_time} == 10 ]; then | ||
412 | Test_Info "No qemu process appeared to start, exiting" | ||
413 | return 1 | ||
414 | fi | ||
415 | |||
504 | # Parse IP address of target from the qemu command line | 416 | # Parse IP address of target from the qemu command line |
505 | if [ ${up_time} -lt ${timeout} ]; then | 417 | TARGET_IPADDR=`Test_Fetch_Target_IP $QEMUPID` |
506 | sleep 5 | 418 | # If IP address is 0, means there is no qemu process found |
507 | TARGET_IPADDR=`Test_Fetch_Target_IP $PID` | 419 | if [ ${TARGET_IPADDR} == "0" ]; then |
508 | # If IP address is 0, means there is no qemu process found | 420 | Test_Info "There is no qemu process or qemu ip address found, return failed" |
509 | if [ ${TARGET_IPADDR} == "0" ]; then | 421 | return 1 |
510 | Test_Info "There is no qemu process or qemu ip address found, return failed" | ||
511 | return $ret | ||
512 | fi | ||
513 | fi | 422 | fi |
514 | 423 | ||
515 | while [ ${up_time} -lt ${timeout} ] | 424 | while [ ${up_time} -lt ${timeout} ] |
@@ -517,8 +426,7 @@ Test_Create_Qemu() | |||
517 | Test_Check_IP_UP ${TARGET_IPADDR} | 426 | Test_Check_IP_UP ${TARGET_IPADDR} |
518 | if [ $? -eq 0 ]; then | 427 | if [ $? -eq 0 ]; then |
519 | Test_Info "Qemu Network is up, ping with ${TARGET_IPADDR} is OK within ${up_time} seconds" | 428 | Test_Info "Qemu Network is up, ping with ${TARGET_IPADDR} is OK within ${up_time} seconds" |
520 | ret=0 | 429 | return 0 |
521 | break | ||
522 | else | 430 | else |
523 | Test_Info "Wait for Qemu Network up" | 431 | Test_Info "Wait for Qemu Network up" |
524 | up_time=`expr $up_time + 5` | 432 | up_time=`expr $up_time + 5` |
@@ -526,14 +434,9 @@ Test_Create_Qemu() | |||
526 | fi | 434 | fi |
527 | done | 435 | done |
528 | 436 | ||
529 | if [ $ret -eq 0 ]; then | 437 | Test_Info "Qemu or its network is not up in ${timeout} seconds" |
530 | Test_Info "Qemu and its network is up" | 438 | Test_Update_IPSAVE $XTERMPID $TARGET_IPADDR |
531 | return $ret | 439 | return 1 |
532 | else | ||
533 | Test_Info "Qemu or its network is not up in ${timeout} seconds" | ||
534 | Test_Update_IPSAVE $PID $TARGET_IPADDR | ||
535 | return $ret | ||
536 | fi | ||
537 | } | 440 | } |
538 | 441 | ||
539 | # Function to prepare test project for toolchain test | 442 | # Function to prepare test project for toolchain test |
@@ -542,41 +445,36 @@ Test_Create_Qemu() | |||
542 | Test_Project_Prepare() | 445 | Test_Project_Prepare() |
543 | { | 446 | { |
544 | local toolchain_dir=$1 | 447 | local toolchain_dir=$1 |
545 | local ret=1 | ||
546 | 448 | ||
547 | if [ ! -d ${toolchain_dir} ]; then | 449 | if [ ! -d ${toolchain_dir} ]; then |
548 | mkdir -p ${toolchain_dir} | 450 | mkdir -p ${toolchain_dir} |
549 | ret=$? | 451 | if [ $? -ne 0 ]; then |
550 | 452 | ret=$? | |
551 | if [ $ret -ne 0 ]; then | ||
552 | Test_Info "Create ${toolchain_dir} fail, return" | 453 | Test_Info "Create ${toolchain_dir} fail, return" |
553 | return $ret | 454 | return $ret |
554 | fi | 455 | fi |
555 | fi | 456 | fi |
556 | 457 | ||
557 | ret=0 | ||
558 | # Download test project tarball if it does not exist | 458 | # Download test project tarball if it does not exist |
559 | if [ ! -f ${toolchain_dir}/${2}-${PROJECT_PV}.${suffix} ]; then | 459 | if [ ! -f ${toolchain_dir}/${2}-${PROJECT_PV}.${suffix} ]; then |
560 | wget -c -t 5 $PROJECT_DOWNLOAD_URL -O ${toolchain_dir}/${2}-${PROJECT_PV}.${suffix} | 460 | wget -c -t 5 $PROJECT_DOWNLOAD_URL -O ${toolchain_dir}/${2}-${PROJECT_PV}.${suffix} |
561 | ret=$? | 461 | if [ $? -ne 0 ]; then |
462 | ret=$? | ||
463 | Test_Info "Fail to download ${2}-${PROJECT_PV}.${suffix} from $PROJECT_DOWNLOAD_URL" | ||
464 | rm -rf ${toolchain_dir}/${2}-${PROJECT_PV}.${suffix} | ||
465 | return $ret | ||
466 | fi | ||
562 | fi | 467 | fi |
563 | 468 | ||
564 | # Extract the test project into ${TEST_TMP} | 469 | # Extract the test project into ${TEST_TMP} |
565 | if [ $ret -eq 0 ]; then | 470 | tar jxf ${toolchain_dir}/${2}-${PROJECT_PV}.${suffix} -C ${TEST_TMP} |
566 | tar jxf ${toolchain_dir}/${2}-${PROJECT_PV}.${suffix} -C ${TEST_TMP} | 471 | if [ $? -ne 0 ]; then |
567 | ret=$? | 472 | ret=$? |
568 | if [ $ret -eq 0 ]; then | 473 | Test_Info "Fail to extract ${2}-${PROJECT_PV}.${suffix} into ${TEST_TMP}" |
569 | Test_Info "Extract ${2}-${PROJECT_PV}.${suffix} into ${TEST_TMP} successfully" | ||
570 | return $ret | ||
571 | else | ||
572 | Test_Info "Fail to extract ${2}-${PROJECT_PV}.${suffix} into ${TEST_TMP}" | ||
573 | return $ret | ||
574 | fi | ||
575 | else | ||
576 | Test_Info "Fail to download ${2}-${PROJECT_PV}.${suffix} from $PROJECT_DOWNLOAD_URL" | ||
577 | rm -rf ${toolchain_dir}/${2}-${PROJECT_PV}.${suffix} | ||
578 | return $ret | 474 | return $ret |
579 | fi | 475 | fi |
476 | Test_Info "Extract ${2}-${PROJECT_PV}.${suffix} into ${TEST_TMP} successfully" | ||
477 | return 0 | ||
580 | } | 478 | } |
581 | 479 | ||
582 | # Function to prepare toolchain environment | 480 | # Function to prepare toolchain environment |