]> code.ossystems Code Review - openembedded-core.git/commitdiff
imagetest-qemu: Add test case for dmesg check in target
authorJiajun Xu <jiajun.xu@intel.com>
Fri, 29 Oct 2010 17:03:22 +0000 (01:03 +0800)
committerRichard Purdie <rpurdie@linux.intel.com>
Wed, 10 Nov 2010 13:09:22 +0000 (21:09 +0800)
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 <jiajun.xu@intel.com>

14 files changed:
meta/classes/imagetest-qemu.bbclass
scripts/qemuimage-testlib
scripts/qemuimage-tests/sanity/boot
scripts/qemuimage-tests/sanity/dmesg [new file with mode: 0755]
scripts/qemuimage-tests/sanity/ssh
scripts/qemuimage-tests/scenario/qemuarm/poky-image-sato
scripts/qemuimage-tests/scenario/qemuarm/poky-image-sdk
scripts/qemuimage-tests/scenario/qemumips/poky-image-sato
scripts/qemuimage-tests/scenario/qemumips/poky-image-sdk
scripts/qemuimage-tests/scenario/qemuppc/poky-image-sato
scripts/qemuimage-tests/scenario/qemuppc/poky-image-sdk
scripts/qemuimage-tests/scenario/qemux86/poky-image-sato
scripts/qemuimage-tests/scenario/qemux86/poky-image-sdk
scripts/qemuimage-tests/tools/dmesg.sh [new file with mode: 0644]

index 5742644e0204439a00b60d2bda1a3e35a1a39252..bd4dc9c0bf2ae33169e075f51a0b87922f31febb 100644 (file)
@@ -133,9 +133,11 @@ python do_qemuimagetest() {
                 ret = 1
             elif m.group('noresult') == "1":
                 ret = 2
-            print line,
+            line = line.strip('\n')
+            bb.note(line)
         else:
-            print line,
+            line = line.strip('\n')
+            bb.note(line)
     f.close()
 
     if ret != 0:
index 733cd12c057addc4487f142e99a51e728a903a4f..3ebf5ffd2adc1924ee835c5c0182152bc0c23c66 100644 (file)
 
 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
index 57b204b1704e6d6c9d3ee8ff47e8c395d4b05903..5014e8a5acbda03b1a77dbabbe9e433cdf2bef5f 100755 (executable)
 . $POKYBASE/scripts/qemuimage-testlib
 
 TIMEOUT=120
-QEMU_IPADDR="192.168.7.2"
 
 # Start qemu and check its network
-Test_Create_Qemu ${QEMU_IPADDR} ${TIMEOUT}
+Test_Create_Qemu ${TIMEOUT}
 
 if [ $? -eq 0 ]; then
        Test_Info "Boot Test PASS"
diff --git a/scripts/qemuimage-tests/sanity/dmesg b/scripts/qemuimage-tests/sanity/dmesg
new file mode 100755 (executable)
index 0000000..c384659
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/bash
+# Dmesg Check Test Case for Sanity Test
+# The case boot up the Qemu target with `runqemu qemux86`.
+# Then check if there is any error log in dmesg.
+#
+# Author: Jiajun Xu <jiajun.xu@intel.com>
+#
+# This file is licensed under the GNU General Public License,
+# Version 2.
+#
+
+. $POKYBASE/scripts/qemuimage-testlib
+
+TIMEOUT=360
+RET=1
+
+# Start qemu and check its network
+Test_Create_Qemu ${TIMEOUT}
+
+# If qemu network is up, check ssh service in qemu
+if [ $? -eq 0 ]; then
+       Test_Info "Begin to Test SSH Service in Qemu"
+       Test_SSH_UP ${TARGET_IPADDR} ${TIMEOUT}
+       RET=$?
+else
+       RET=1
+fi
+
+# Check if there is any error log in dmesg
+if [ $RET -eq 0 -a -f $TOOLS/dmesg.sh ]; then
+       # Copy dmesg.sh into target
+       Test_Target_Pre ${TARGET_IPADDR} $TOOLS/dmesg.sh
+       if [ $? -eq 0 ]; then
+               # Run dmesg.sh to check if there is any error message with command dmesg
+               Test_SSH ${TARGET_IPADDR} "sh $TARGET_TEST_DIR/dmesg.sh"
+               RET=$?
+       else
+               RET=1
+       fi
+fi
+
+if [ ${RET} -eq 0 ]; then
+       Test_Info "Dmesg Test PASS"
+       Test_Kill_Qemu
+       Test_Print_Result "dmesg" 0
+       exit 0
+else
+       Test_Info "Dmesg Test FAIL, Pls. check above error log"
+       Test_Kill_Qemu
+       Test_Print_Result "dmesg" 1
+       exit 1
+fi
index 3c7638cc2e91142f1dc8cb75bdcea1294de23c07..f9143d055858be5b9f903302c66c82c36081a802 100755 (executable)
 . $POKYBASE/scripts/qemuimage-testlib
 
 TIMEOUT=360
-QEMU_IPADDR="192.168.7.2"
 RET=1
 
 # Start qemu and check its network
-Test_Create_Qemu ${QEMU_IPADDR} ${TIMEOUT}
+Test_Create_Qemu ${TIMEOUT}
 
 # If qemu network is up, check ssh service in qemu
 if [ $? -eq 0 ]; then
        Test_Info "Begin to Test SSH Service in Qemu"
-       Test_SSH_UP ${QEMU_IPADDR} ${TIMEOUT}
+       Test_SSH_UP ${TARGET_IPADDR} ${TIMEOUT}
        RET=$?
 else
        RET=1
index 95a091b74173b989950fe755209018db606ecab3..f6e7cb1604d9aa714e5df38b4a67b5f62c1c4641 100644 (file)
@@ -1,2 +1,3 @@
 sanity boot
 sanity ssh
+sanity dmesg
index 95a091b74173b989950fe755209018db606ecab3..f6e7cb1604d9aa714e5df38b4a67b5f62c1c4641 100644 (file)
@@ -1,2 +1,3 @@
 sanity boot
 sanity ssh
+sanity dmesg
index 95a091b74173b989950fe755209018db606ecab3..f6e7cb1604d9aa714e5df38b4a67b5f62c1c4641 100644 (file)
@@ -1,2 +1,3 @@
 sanity boot
 sanity ssh
+sanity dmesg
index 95a091b74173b989950fe755209018db606ecab3..f6e7cb1604d9aa714e5df38b4a67b5f62c1c4641 100644 (file)
@@ -1,2 +1,3 @@
 sanity boot
 sanity ssh
+sanity dmesg
index 95a091b74173b989950fe755209018db606ecab3..f6e7cb1604d9aa714e5df38b4a67b5f62c1c4641 100644 (file)
@@ -1,2 +1,3 @@
 sanity boot
 sanity ssh
+sanity dmesg
index 95a091b74173b989950fe755209018db606ecab3..f6e7cb1604d9aa714e5df38b4a67b5f62c1c4641 100644 (file)
@@ -1,2 +1,3 @@
 sanity boot
 sanity ssh
+sanity dmesg
index 95a091b74173b989950fe755209018db606ecab3..f6e7cb1604d9aa714e5df38b4a67b5f62c1c4641 100644 (file)
@@ -1,2 +1,3 @@
 sanity boot
 sanity ssh
+sanity dmesg
index 95a091b74173b989950fe755209018db606ecab3..f6e7cb1604d9aa714e5df38b4a67b5f62c1c4641 100644 (file)
@@ -1,2 +1,3 @@
 sanity boot
 sanity ssh
+sanity dmesg
diff --git a/scripts/qemuimage-tests/tools/dmesg.sh b/scripts/qemuimage-tests/tools/dmesg.sh
new file mode 100644 (file)
index 0000000..66c0223
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/bash
+# Dmesg test script running in QEMU
+#
+# Author: Jiajun Xu <jiajun.xu@intel.com>
+#
+# This file is licensed under the GNU General Public License,
+# Version 2.
+#
+
+which dmesg
+if [ $? -ne 0 ]; then
+       echo "QEMU: No dmesg command found"
+       exit 1
+fi
+
+dmesg | grep -iq "error"
+if [ $? -eq 0 ]; then
+       echo "QEMU: There is some error log in dmesg:"
+       echo "QEMU: ##### Error Log ######"
+       dmesg | grep -i "error"
+       echo "QEMU: #####    End     ######"
+       exit 1
+else
+       echo "QEMU: No error log in dmesg"
+       exit 0
+fi