From 12a861359a3413ded52174c814e8653c56caee17 Mon Sep 17 00:00:00 2001 From: Jiajun Xu Date: Sat, 30 Oct 2010 01:03:22 +0800 Subject: imagetest-qemu: Add test case for dmesg check in target Add a test case for error log check with command dmesg in target. The case introduces a new folder in target, "/opt/test", which holds test scripts running in target. Signed-off-by Jiajun Xu --- scripts/qemuimage-testlib | 122 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 118 insertions(+), 4 deletions(-) (limited to 'scripts/qemuimage-testlib') diff --git a/scripts/qemuimage-testlib b/scripts/qemuimage-testlib index 733cd12c05..3ebf5ffd2a 100644 --- a/scripts/qemuimage-testlib +++ b/scripts/qemuimage-testlib @@ -16,9 +16,18 @@ TYPE="ext3" +# The folder to hold all scripts running on targets +TOOLS="$POKYBASE/scripts/qemuimage-tests/tools" + +# Test Directory on target for testing +TARGET_TEST_DIR="/opt/test" + # Global variable for process id PID=0 +# Global variable for target ip address +TARGET_IPADDR=0 + # common function for information print Test_Error() { @@ -30,6 +39,35 @@ Test_Info() echo -e "\tTest_Info: $*" } +# function to copy files from host into target +# $1 is the ip address of target +# $2 is the files, which need to be copied into target +# $3 is the path on target, where files are copied into +Test_SCP() +{ + local ip_addr=$1 + local src=$2 + local des=$3 + local tmpfile=`mktemp` + local timeout=60 + local ret=0 + + # We use expect to interactive with target by ssh + local exp_cmd=`cat << EOF +eval spawn scp -o UserKnownHostsFile=$tmpfile "$src" root@$ip_addr:"$des" +set timeout $time_out +expect { + "*assword:" { send "\r"; exp_continue} + "*(yes/no)?" { send "yes\r"; exp_continue } + eof { exit [ lindex [wait] 3 ] } +} +EOF` + expect -c "$exp_cmd" + ret=$? + rm -rf $tmpfile + return $ret +} + # function to run command in $ip_addr via ssh Test_SSH() { @@ -78,6 +116,27 @@ Test_SSH_UP() return 1 } +# function to prepare target test environment +# $1 is the ip address of target system +# $2 is the files, which needs to be copied into target +Test_Target_Pre() +{ + local ip_addr=$1 + local testscript=$2 + + # Create a pre-defined folder for test scripts + Test_SSH $ip_addr "mkdir -p $TARGET_TEST_DIR" + if [ $? -eq 0 ]; then + # Copy test scripts into target + Test_SCP $ip_addr $testscript $TARGET_TEST_DIR && return 0 + else + Test_Error "Fail to create $TARGET_TEST_DIR on target" + return 1 + fi + + return 1 +} + # function to record test result in $TEST_RESULT/testresult.log Test_Print_Result() { @@ -232,13 +291,63 @@ Test_Find_Image() return 1 } +# function to parse IP address of target +# $1 is the pid of qemu startup process +Test_Fetch_Target_IP() +{ + local opid=$1 + local ppid=0 + local ip_addr=0 + local i=0 + declare local pid + + # Check if $1 pid exists and contains ipaddr of target + ps -fp $opid | grep -oq "192\.168\.7\.[0-9]*::" + + # Find all children pid of the pid $1 + # and check if they contain ipaddr of target + if [ $? -ne 0 ]; then + # Check if there is any child pid of the pid $1 + ppid=$opid + ps -f --ppid $ppid > /dev/zero + ret=$? + + while [ $ret -eq 0 ] + do + # If yes, get the child pid and check if the child pid has other child pid + # Continue the while loop until there is no child pid found + pid[$i]=`ps -f --ppid $ppid | awk '{if ($2 != "PID") print $2}'` + ppid=${pid[$i]} + i=$((i+1)) + ps -f --ppid $ppid > /dev/zero + ret=$? + done + + # Check these children pids, if they have ipaddr included in command line + while [ $i -ne 0 ] + do + i=$((i-1)) + ps -fp ${pid[$i]} | grep -oq "192\.168\.7\.[0-9]*::" + if [ $? -eq 0 ]; then + ip_addr=`ps -fp ${pid[$i]} | grep -o "192\.168\.7\.[0-9]*::" | awk -F":" '{print $1}'` + fi + sleep 1 + done + else + ip_addr=`ps -fp $opid | grep -o "192\.168\.7\.[0-9]*::" | awk -F":" '{print $1}'` + fi + + echo $ip_addr + + return +} + # function to check if qemu and its network Test_Create_Qemu() { + local timeout=$1 local ret=1 local up_time=0 - local ip_addr=$1 - local timeout=$2 which poky-qemu if [ $? -eq 0 ]; then @@ -288,11 +397,16 @@ Test_Create_Qemu() fi done + # Parse IP address of target from the qemu command line + if [ ${up_time} -lt ${timeout} ]; then + TARGET_IPADDR=`Test_Fetch_Target_IP $PID` + fi + while [ ${up_time} -lt ${timeout} ] do - Test_Check_IP_UP ${ip_addr} + Test_Check_IP_UP ${TARGET_IPADDR} if [ $? -eq 0 ]; then - Test_Info "Qemu Network is up, ping with ${ip_addr} is OK" + Test_Info "Qemu Network is up, ping with ${TARGET_IPADDR} is OK" ret=0 break else -- cgit v1.2.3-54-g00ecf