diff options
| author | Jiajun Xu <jiajun.xu@intel.com> | 2010-10-30 01:03:22 +0800 |
|---|---|---|
| committer | Richard Purdie <rpurdie@linux.intel.com> | 2010-11-10 21:09:22 +0800 |
| commit | 12a861359a3413ded52174c814e8653c56caee17 (patch) | |
| tree | 305a53f25d58def6e2793e7f6fcdd1a7387f0287 | |
| parent | 53b775b49645ce6bcac48def8671bf5f751c730b (diff) | |
| download | poky-12a861359a3413ded52174c814e8653c56caee17.tar.gz | |
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 <jiajun.xu@intel.com>
| -rw-r--r-- | meta/classes/imagetest-qemu.bbclass | 6 | ||||
| -rw-r--r-- | scripts/qemuimage-testlib | 122 | ||||
| -rwxr-xr-x | scripts/qemuimage-tests/sanity/boot | 3 | ||||
| -rwxr-xr-x | scripts/qemuimage-tests/sanity/dmesg | 52 | ||||
| -rwxr-xr-x | scripts/qemuimage-tests/sanity/ssh | 5 | ||||
| -rw-r--r-- | scripts/qemuimage-tests/scenario/qemuarm/poky-image-sato | 1 | ||||
| -rw-r--r-- | scripts/qemuimage-tests/scenario/qemuarm/poky-image-sdk | 1 | ||||
| -rw-r--r-- | scripts/qemuimage-tests/scenario/qemumips/poky-image-sato | 1 | ||||
| -rw-r--r-- | scripts/qemuimage-tests/scenario/qemumips/poky-image-sdk | 1 | ||||
| -rw-r--r-- | scripts/qemuimage-tests/scenario/qemuppc/poky-image-sato | 1 | ||||
| -rw-r--r-- | scripts/qemuimage-tests/scenario/qemuppc/poky-image-sdk | 1 | ||||
| -rw-r--r-- | scripts/qemuimage-tests/scenario/qemux86/poky-image-sato | 1 | ||||
| -rw-r--r-- | scripts/qemuimage-tests/scenario/qemux86/poky-image-sdk | 1 | ||||
| -rw-r--r-- | scripts/qemuimage-tests/tools/dmesg.sh | 26 |
14 files changed, 211 insertions, 11 deletions
diff --git a/meta/classes/imagetest-qemu.bbclass b/meta/classes/imagetest-qemu.bbclass index 5742644e02..bd4dc9c0bf 100644 --- a/meta/classes/imagetest-qemu.bbclass +++ b/meta/classes/imagetest-qemu.bbclass | |||
| @@ -133,9 +133,11 @@ python do_qemuimagetest() { | |||
| 133 | ret = 1 | 133 | ret = 1 |
| 134 | elif m.group('noresult') == "1": | 134 | elif m.group('noresult') == "1": |
| 135 | ret = 2 | 135 | ret = 2 |
| 136 | print line, | 136 | line = line.strip('\n') |
| 137 | bb.note(line) | ||
| 137 | else: | 138 | else: |
| 138 | print line, | 139 | line = line.strip('\n') |
| 140 | bb.note(line) | ||
| 139 | f.close() | 141 | f.close() |
| 140 | 142 | ||
| 141 | if ret != 0: | 143 | if ret != 0: |
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 @@ | |||
| 16 | 16 | ||
| 17 | TYPE="ext3" | 17 | TYPE="ext3" |
| 18 | 18 | ||
| 19 | # The folder to hold all scripts running on targets | ||
| 20 | TOOLS="$POKYBASE/scripts/qemuimage-tests/tools" | ||
| 21 | |||
| 22 | # Test Directory on target for testing | ||
| 23 | TARGET_TEST_DIR="/opt/test" | ||
| 24 | |||
| 19 | # Global variable for process id | 25 | # Global variable for process id |
| 20 | PID=0 | 26 | PID=0 |
| 21 | 27 | ||
| 28 | # Global variable for target ip address | ||
| 29 | TARGET_IPADDR=0 | ||
| 30 | |||
| 22 | # common function for information print | 31 | # common function for information print |
| 23 | Test_Error() | 32 | Test_Error() |
| 24 | { | 33 | { |
| @@ -30,6 +39,35 @@ Test_Info() | |||
| 30 | echo -e "\tTest_Info: $*" | 39 | echo -e "\tTest_Info: $*" |
| 31 | } | 40 | } |
| 32 | 41 | ||
| 42 | # function to copy files from host into target | ||
| 43 | # $1 is the ip address of target | ||
| 44 | # $2 is the files, which need to be copied into target | ||
| 45 | # $3 is the path on target, where files are copied into | ||
| 46 | Test_SCP() | ||
| 47 | { | ||
| 48 | local ip_addr=$1 | ||
| 49 | local src=$2 | ||
| 50 | local des=$3 | ||
| 51 | local tmpfile=`mktemp` | ||
| 52 | local timeout=60 | ||
| 53 | local ret=0 | ||
| 54 | |||
| 55 | # We use expect to interactive with target by ssh | ||
| 56 | local exp_cmd=`cat << EOF | ||
| 57 | eval spawn scp -o UserKnownHostsFile=$tmpfile "$src" root@$ip_addr:"$des" | ||
| 58 | set timeout $time_out | ||
| 59 | expect { | ||
| 60 | "*assword:" { send "\r"; exp_continue} | ||
| 61 | "*(yes/no)?" { send "yes\r"; exp_continue } | ||
| 62 | eof { exit [ lindex [wait] 3 ] } | ||
| 63 | } | ||
| 64 | EOF` | ||
| 65 | expect -c "$exp_cmd" | ||
| 66 | ret=$? | ||
| 67 | rm -rf $tmpfile | ||
| 68 | return $ret | ||
| 69 | } | ||
| 70 | |||
| 33 | # function to run command in $ip_addr via ssh | 71 | # function to run command in $ip_addr via ssh |
| 34 | Test_SSH() | 72 | Test_SSH() |
| 35 | { | 73 | { |
| @@ -78,6 +116,27 @@ Test_SSH_UP() | |||
| 78 | return 1 | 116 | return 1 |
| 79 | } | 117 | } |
| 80 | 118 | ||
| 119 | # function to prepare target test environment | ||
| 120 | # $1 is the ip address of target system | ||
| 121 | # $2 is the files, which needs to be copied into target | ||
| 122 | Test_Target_Pre() | ||
| 123 | { | ||
| 124 | local ip_addr=$1 | ||
| 125 | local testscript=$2 | ||
| 126 | |||
| 127 | # Create a pre-defined folder for test scripts | ||
| 128 | Test_SSH $ip_addr "mkdir -p $TARGET_TEST_DIR" | ||
| 129 | if [ $? -eq 0 ]; then | ||
| 130 | # Copy test scripts into target | ||
| 131 | Test_SCP $ip_addr $testscript $TARGET_TEST_DIR && return 0 | ||
| 132 | else | ||
| 133 | Test_Error "Fail to create $TARGET_TEST_DIR on target" | ||
| 134 | return 1 | ||
| 135 | fi | ||
| 136 | |||
| 137 | return 1 | ||
| 138 | } | ||
| 139 | |||
| 81 | # function to record test result in $TEST_RESULT/testresult.log | 140 | # function to record test result in $TEST_RESULT/testresult.log |
| 82 | Test_Print_Result() | 141 | Test_Print_Result() |
| 83 | { | 142 | { |
| @@ -232,13 +291,63 @@ Test_Find_Image() | |||
| 232 | return 1 | 291 | return 1 |
| 233 | } | 292 | } |
| 234 | 293 | ||
| 294 | # function to parse IP address of target | ||
| 295 | # $1 is the pid of qemu startup process | ||
| 296 | Test_Fetch_Target_IP() | ||
| 297 | { | ||
| 298 | local opid=$1 | ||
| 299 | local ppid=0 | ||
| 300 | local ip_addr=0 | ||
| 301 | local i=0 | ||
| 302 | declare local pid | ||
| 303 | |||
| 304 | # Check if $1 pid exists and contains ipaddr of target | ||
| 305 | ps -fp $opid | grep -oq "192\.168\.7\.[0-9]*::" | ||
| 306 | |||
| 307 | # Find all children pid of the pid $1 | ||
| 308 | # and check if they contain ipaddr of target | ||
| 309 | if [ $? -ne 0 ]; then | ||
| 310 | # Check if there is any child pid of the pid $1 | ||
| 311 | ppid=$opid | ||
| 312 | ps -f --ppid $ppid > /dev/zero | ||
| 313 | ret=$? | ||
| 314 | |||
| 315 | while [ $ret -eq 0 ] | ||
| 316 | do | ||
| 317 | # If yes, get the child pid and check if the child pid has other child pid | ||
| 318 | # Continue the while loop until there is no child pid found | ||
| 319 | pid[$i]=`ps -f --ppid $ppid | awk '{if ($2 != "PID") print $2}'` | ||
| 320 | ppid=${pid[$i]} | ||
| 321 | i=$((i+1)) | ||
| 322 | ps -f --ppid $ppid > /dev/zero | ||
| 323 | ret=$? | ||
| 324 | done | ||
| 325 | |||
| 326 | # Check these children pids, if they have ipaddr included in command line | ||
| 327 | while [ $i -ne 0 ] | ||
| 328 | do | ||
| 329 | i=$((i-1)) | ||
| 330 | ps -fp ${pid[$i]} | grep -oq "192\.168\.7\.[0-9]*::" | ||
| 331 | if [ $? -eq 0 ]; then | ||
| 332 | ip_addr=`ps -fp ${pid[$i]} | grep -o "192\.168\.7\.[0-9]*::" | awk -F":" '{print $1}'` | ||
| 333 | fi | ||
| 334 | sleep 1 | ||
| 335 | done | ||
| 336 | else | ||
| 337 | ip_addr=`ps -fp $opid | grep -o "192\.168\.7\.[0-9]*::" | awk -F":" '{print $1}'` | ||
| 338 | fi | ||
| 339 | |||
| 340 | echo $ip_addr | ||
| 341 | |||
| 342 | return | ||
| 343 | } | ||
| 344 | |||
| 235 | # function to check if qemu and its network | 345 | # function to check if qemu and its network |
| 236 | Test_Create_Qemu() | 346 | Test_Create_Qemu() |
| 237 | { | 347 | { |
| 348 | local timeout=$1 | ||
| 238 | local ret=1 | 349 | local ret=1 |
| 239 | local up_time=0 | 350 | local up_time=0 |
| 240 | local ip_addr=$1 | ||
| 241 | local timeout=$2 | ||
| 242 | 351 | ||
| 243 | which poky-qemu | 352 | which poky-qemu |
| 244 | if [ $? -eq 0 ]; then | 353 | if [ $? -eq 0 ]; then |
| @@ -288,11 +397,16 @@ Test_Create_Qemu() | |||
| 288 | fi | 397 | fi |
| 289 | done | 398 | done |
| 290 | 399 | ||
| 400 | # Parse IP address of target from the qemu command line | ||
| 401 | if [ ${up_time} -lt ${timeout} ]; then | ||
| 402 | TARGET_IPADDR=`Test_Fetch_Target_IP $PID` | ||
| 403 | fi | ||
| 404 | |||
| 291 | while [ ${up_time} -lt ${timeout} ] | 405 | while [ ${up_time} -lt ${timeout} ] |
| 292 | do | 406 | do |
| 293 | Test_Check_IP_UP ${ip_addr} | 407 | Test_Check_IP_UP ${TARGET_IPADDR} |
| 294 | if [ $? -eq 0 ]; then | 408 | if [ $? -eq 0 ]; then |
| 295 | Test_Info "Qemu Network is up, ping with ${ip_addr} is OK" | 409 | Test_Info "Qemu Network is up, ping with ${TARGET_IPADDR} is OK" |
| 296 | ret=0 | 410 | ret=0 |
| 297 | break | 411 | break |
| 298 | else | 412 | else |
diff --git a/scripts/qemuimage-tests/sanity/boot b/scripts/qemuimage-tests/sanity/boot index 57b204b170..5014e8a5ac 100755 --- a/scripts/qemuimage-tests/sanity/boot +++ b/scripts/qemuimage-tests/sanity/boot | |||
| @@ -12,10 +12,9 @@ | |||
| 12 | . $POKYBASE/scripts/qemuimage-testlib | 12 | . $POKYBASE/scripts/qemuimage-testlib |
| 13 | 13 | ||
| 14 | TIMEOUT=120 | 14 | TIMEOUT=120 |
| 15 | QEMU_IPADDR="192.168.7.2" | ||
| 16 | 15 | ||
| 17 | # Start qemu and check its network | 16 | # Start qemu and check its network |
| 18 | Test_Create_Qemu ${QEMU_IPADDR} ${TIMEOUT} | 17 | Test_Create_Qemu ${TIMEOUT} |
| 19 | 18 | ||
| 20 | if [ $? -eq 0 ]; then | 19 | if [ $? -eq 0 ]; then |
| 21 | Test_Info "Boot Test PASS" | 20 | Test_Info "Boot Test PASS" |
diff --git a/scripts/qemuimage-tests/sanity/dmesg b/scripts/qemuimage-tests/sanity/dmesg new file mode 100755 index 0000000000..c384659b6c --- /dev/null +++ b/scripts/qemuimage-tests/sanity/dmesg | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | #!/bin/bash | ||
| 2 | # Dmesg Check Test Case for Sanity Test | ||
| 3 | # The case boot up the Qemu target with `runqemu qemux86`. | ||
| 4 | # Then check if there is any error log in dmesg. | ||
| 5 | # | ||
| 6 | # Author: Jiajun Xu <jiajun.xu@intel.com> | ||
| 7 | # | ||
| 8 | # This file is licensed under the GNU General Public License, | ||
| 9 | # Version 2. | ||
| 10 | # | ||
| 11 | |||
| 12 | . $POKYBASE/scripts/qemuimage-testlib | ||
| 13 | |||
| 14 | TIMEOUT=360 | ||
| 15 | RET=1 | ||
| 16 | |||
| 17 | # Start qemu and check its network | ||
| 18 | Test_Create_Qemu ${TIMEOUT} | ||
| 19 | |||
| 20 | # If qemu network is up, check ssh service in qemu | ||
| 21 | if [ $? -eq 0 ]; then | ||
| 22 | Test_Info "Begin to Test SSH Service in Qemu" | ||
| 23 | Test_SSH_UP ${TARGET_IPADDR} ${TIMEOUT} | ||
| 24 | RET=$? | ||
| 25 | else | ||
| 26 | RET=1 | ||
| 27 | fi | ||
| 28 | |||
| 29 | # Check if there is any error log in dmesg | ||
| 30 | if [ $RET -eq 0 -a -f $TOOLS/dmesg.sh ]; then | ||
| 31 | # Copy dmesg.sh into target | ||
| 32 | Test_Target_Pre ${TARGET_IPADDR} $TOOLS/dmesg.sh | ||
| 33 | if [ $? -eq 0 ]; then | ||
| 34 | # Run dmesg.sh to check if there is any error message with command dmesg | ||
| 35 | Test_SSH ${TARGET_IPADDR} "sh $TARGET_TEST_DIR/dmesg.sh" | ||
| 36 | RET=$? | ||
| 37 | else | ||
| 38 | RET=1 | ||
| 39 | fi | ||
| 40 | fi | ||
| 41 | |||
| 42 | if [ ${RET} -eq 0 ]; then | ||
| 43 | Test_Info "Dmesg Test PASS" | ||
| 44 | Test_Kill_Qemu | ||
| 45 | Test_Print_Result "dmesg" 0 | ||
| 46 | exit 0 | ||
| 47 | else | ||
| 48 | Test_Info "Dmesg Test FAIL, Pls. check above error log" | ||
| 49 | Test_Kill_Qemu | ||
| 50 | Test_Print_Result "dmesg" 1 | ||
| 51 | exit 1 | ||
| 52 | fi | ||
diff --git a/scripts/qemuimage-tests/sanity/ssh b/scripts/qemuimage-tests/sanity/ssh index 3c7638cc2e..f9143d0558 100755 --- a/scripts/qemuimage-tests/sanity/ssh +++ b/scripts/qemuimage-tests/sanity/ssh | |||
| @@ -12,16 +12,15 @@ | |||
| 12 | . $POKYBASE/scripts/qemuimage-testlib | 12 | . $POKYBASE/scripts/qemuimage-testlib |
| 13 | 13 | ||
| 14 | TIMEOUT=360 | 14 | TIMEOUT=360 |
| 15 | QEMU_IPADDR="192.168.7.2" | ||
| 16 | RET=1 | 15 | RET=1 |
| 17 | 16 | ||
| 18 | # Start qemu and check its network | 17 | # Start qemu and check its network |
| 19 | Test_Create_Qemu ${QEMU_IPADDR} ${TIMEOUT} | 18 | Test_Create_Qemu ${TIMEOUT} |
| 20 | 19 | ||
| 21 | # If qemu network is up, check ssh service in qemu | 20 | # If qemu network is up, check ssh service in qemu |
| 22 | if [ $? -eq 0 ]; then | 21 | if [ $? -eq 0 ]; then |
| 23 | Test_Info "Begin to Test SSH Service in Qemu" | 22 | Test_Info "Begin to Test SSH Service in Qemu" |
| 24 | Test_SSH_UP ${QEMU_IPADDR} ${TIMEOUT} | 23 | Test_SSH_UP ${TARGET_IPADDR} ${TIMEOUT} |
| 25 | RET=$? | 24 | RET=$? |
| 26 | else | 25 | else |
| 27 | RET=1 | 26 | RET=1 |
diff --git a/scripts/qemuimage-tests/scenario/qemuarm/poky-image-sato b/scripts/qemuimage-tests/scenario/qemuarm/poky-image-sato index 95a091b741..f6e7cb1604 100644 --- a/scripts/qemuimage-tests/scenario/qemuarm/poky-image-sato +++ b/scripts/qemuimage-tests/scenario/qemuarm/poky-image-sato | |||
| @@ -1,2 +1,3 @@ | |||
| 1 | sanity boot | 1 | sanity boot |
| 2 | sanity ssh | 2 | sanity ssh |
| 3 | sanity dmesg | ||
diff --git a/scripts/qemuimage-tests/scenario/qemuarm/poky-image-sdk b/scripts/qemuimage-tests/scenario/qemuarm/poky-image-sdk index 95a091b741..f6e7cb1604 100644 --- a/scripts/qemuimage-tests/scenario/qemuarm/poky-image-sdk +++ b/scripts/qemuimage-tests/scenario/qemuarm/poky-image-sdk | |||
| @@ -1,2 +1,3 @@ | |||
| 1 | sanity boot | 1 | sanity boot |
| 2 | sanity ssh | 2 | sanity ssh |
| 3 | sanity dmesg | ||
diff --git a/scripts/qemuimage-tests/scenario/qemumips/poky-image-sato b/scripts/qemuimage-tests/scenario/qemumips/poky-image-sato index 95a091b741..f6e7cb1604 100644 --- a/scripts/qemuimage-tests/scenario/qemumips/poky-image-sato +++ b/scripts/qemuimage-tests/scenario/qemumips/poky-image-sato | |||
| @@ -1,2 +1,3 @@ | |||
| 1 | sanity boot | 1 | sanity boot |
| 2 | sanity ssh | 2 | sanity ssh |
| 3 | sanity dmesg | ||
diff --git a/scripts/qemuimage-tests/scenario/qemumips/poky-image-sdk b/scripts/qemuimage-tests/scenario/qemumips/poky-image-sdk index 95a091b741..f6e7cb1604 100644 --- a/scripts/qemuimage-tests/scenario/qemumips/poky-image-sdk +++ b/scripts/qemuimage-tests/scenario/qemumips/poky-image-sdk | |||
| @@ -1,2 +1,3 @@ | |||
| 1 | sanity boot | 1 | sanity boot |
| 2 | sanity ssh | 2 | sanity ssh |
| 3 | sanity dmesg | ||
diff --git a/scripts/qemuimage-tests/scenario/qemuppc/poky-image-sato b/scripts/qemuimage-tests/scenario/qemuppc/poky-image-sato index 95a091b741..f6e7cb1604 100644 --- a/scripts/qemuimage-tests/scenario/qemuppc/poky-image-sato +++ b/scripts/qemuimage-tests/scenario/qemuppc/poky-image-sato | |||
| @@ -1,2 +1,3 @@ | |||
| 1 | sanity boot | 1 | sanity boot |
| 2 | sanity ssh | 2 | sanity ssh |
| 3 | sanity dmesg | ||
diff --git a/scripts/qemuimage-tests/scenario/qemuppc/poky-image-sdk b/scripts/qemuimage-tests/scenario/qemuppc/poky-image-sdk index 95a091b741..f6e7cb1604 100644 --- a/scripts/qemuimage-tests/scenario/qemuppc/poky-image-sdk +++ b/scripts/qemuimage-tests/scenario/qemuppc/poky-image-sdk | |||
| @@ -1,2 +1,3 @@ | |||
| 1 | sanity boot | 1 | sanity boot |
| 2 | sanity ssh | 2 | sanity ssh |
| 3 | sanity dmesg | ||
diff --git a/scripts/qemuimage-tests/scenario/qemux86/poky-image-sato b/scripts/qemuimage-tests/scenario/qemux86/poky-image-sato index 95a091b741..f6e7cb1604 100644 --- a/scripts/qemuimage-tests/scenario/qemux86/poky-image-sato +++ b/scripts/qemuimage-tests/scenario/qemux86/poky-image-sato | |||
| @@ -1,2 +1,3 @@ | |||
| 1 | sanity boot | 1 | sanity boot |
| 2 | sanity ssh | 2 | sanity ssh |
| 3 | sanity dmesg | ||
diff --git a/scripts/qemuimage-tests/scenario/qemux86/poky-image-sdk b/scripts/qemuimage-tests/scenario/qemux86/poky-image-sdk index 95a091b741..f6e7cb1604 100644 --- a/scripts/qemuimage-tests/scenario/qemux86/poky-image-sdk +++ b/scripts/qemuimage-tests/scenario/qemux86/poky-image-sdk | |||
| @@ -1,2 +1,3 @@ | |||
| 1 | sanity boot | 1 | sanity boot |
| 2 | sanity ssh | 2 | sanity ssh |
| 3 | sanity dmesg | ||
diff --git a/scripts/qemuimage-tests/tools/dmesg.sh b/scripts/qemuimage-tests/tools/dmesg.sh new file mode 100644 index 0000000000..66c022343b --- /dev/null +++ b/scripts/qemuimage-tests/tools/dmesg.sh | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | #!/bin/bash | ||
| 2 | # Dmesg test script running in QEMU | ||
| 3 | # | ||
| 4 | # Author: Jiajun Xu <jiajun.xu@intel.com> | ||
| 5 | # | ||
| 6 | # This file is licensed under the GNU General Public License, | ||
| 7 | # Version 2. | ||
| 8 | # | ||
| 9 | |||
| 10 | which dmesg | ||
| 11 | if [ $? -ne 0 ]; then | ||
| 12 | echo "QEMU: No dmesg command found" | ||
| 13 | exit 1 | ||
| 14 | fi | ||
| 15 | |||
| 16 | dmesg | grep -iq "error" | ||
| 17 | if [ $? -eq 0 ]; then | ||
| 18 | echo "QEMU: There is some error log in dmesg:" | ||
| 19 | echo "QEMU: ##### Error Log ######" | ||
| 20 | dmesg | grep -i "error" | ||
| 21 | echo "QEMU: ##### End ######" | ||
| 22 | exit 1 | ||
| 23 | else | ||
| 24 | echo "QEMU: No error log in dmesg" | ||
| 25 | exit 0 | ||
| 26 | fi | ||
