summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiajun Xu <jiajun.xu@intel.com>2010-10-30 01:03:22 +0800
committerRichard Purdie <rpurdie@linux.intel.com>2010-11-10 21:09:22 +0800
commit12a861359a3413ded52174c814e8653c56caee17 (patch)
tree305a53f25d58def6e2793e7f6fcdd1a7387f0287
parent53b775b49645ce6bcac48def8671bf5f751c730b (diff)
downloadpoky-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.bbclass6
-rw-r--r--scripts/qemuimage-testlib122
-rwxr-xr-xscripts/qemuimage-tests/sanity/boot3
-rwxr-xr-xscripts/qemuimage-tests/sanity/dmesg52
-rwxr-xr-xscripts/qemuimage-tests/sanity/ssh5
-rw-r--r--scripts/qemuimage-tests/scenario/qemuarm/poky-image-sato1
-rw-r--r--scripts/qemuimage-tests/scenario/qemuarm/poky-image-sdk1
-rw-r--r--scripts/qemuimage-tests/scenario/qemumips/poky-image-sato1
-rw-r--r--scripts/qemuimage-tests/scenario/qemumips/poky-image-sdk1
-rw-r--r--scripts/qemuimage-tests/scenario/qemuppc/poky-image-sato1
-rw-r--r--scripts/qemuimage-tests/scenario/qemuppc/poky-image-sdk1
-rw-r--r--scripts/qemuimage-tests/scenario/qemux86/poky-image-sato1
-rw-r--r--scripts/qemuimage-tests/scenario/qemux86/poky-image-sdk1
-rw-r--r--scripts/qemuimage-tests/tools/dmesg.sh26
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
17TYPE="ext3" 17TYPE="ext3"
18 18
19# The folder to hold all scripts running on targets
20TOOLS="$POKYBASE/scripts/qemuimage-tests/tools"
21
22# Test Directory on target for testing
23TARGET_TEST_DIR="/opt/test"
24
19# Global variable for process id 25# Global variable for process id
20PID=0 26PID=0
21 27
28# Global variable for target ip address
29TARGET_IPADDR=0
30
22# common function for information print 31# common function for information print
23Test_Error() 32Test_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
46Test_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
57eval spawn scp -o UserKnownHostsFile=$tmpfile "$src" root@$ip_addr:"$des"
58set timeout $time_out
59expect {
60 "*assword:" { send "\r"; exp_continue}
61 "*(yes/no)?" { send "yes\r"; exp_continue }
62 eof { exit [ lindex [wait] 3 ] }
63}
64EOF`
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
34Test_SSH() 72Test_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
122Test_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
82Test_Print_Result() 141Test_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
296Test_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
236Test_Create_Qemu() 346Test_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
14TIMEOUT=120 14TIMEOUT=120
15QEMU_IPADDR="192.168.7.2"
16 15
17# Start qemu and check its network 16# Start qemu and check its network
18Test_Create_Qemu ${QEMU_IPADDR} ${TIMEOUT} 17Test_Create_Qemu ${TIMEOUT}
19 18
20if [ $? -eq 0 ]; then 19if [ $? -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
14TIMEOUT=360
15RET=1
16
17# Start qemu and check its network
18Test_Create_Qemu ${TIMEOUT}
19
20# If qemu network is up, check ssh service in qemu
21if [ $? -eq 0 ]; then
22 Test_Info "Begin to Test SSH Service in Qemu"
23 Test_SSH_UP ${TARGET_IPADDR} ${TIMEOUT}
24 RET=$?
25else
26 RET=1
27fi
28
29# Check if there is any error log in dmesg
30if [ $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
40fi
41
42if [ ${RET} -eq 0 ]; then
43 Test_Info "Dmesg Test PASS"
44 Test_Kill_Qemu
45 Test_Print_Result "dmesg" 0
46 exit 0
47else
48 Test_Info "Dmesg Test FAIL, Pls. check above error log"
49 Test_Kill_Qemu
50 Test_Print_Result "dmesg" 1
51 exit 1
52fi
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
14TIMEOUT=360 14TIMEOUT=360
15QEMU_IPADDR="192.168.7.2"
16RET=1 15RET=1
17 16
18# Start qemu and check its network 17# Start qemu and check its network
19Test_Create_Qemu ${QEMU_IPADDR} ${TIMEOUT} 18Test_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
22if [ $? -eq 0 ]; then 21if [ $? -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=$?
26else 25else
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 @@
1sanity boot 1sanity boot
2sanity ssh 2sanity ssh
3sanity 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 @@
1sanity boot 1sanity boot
2sanity ssh 2sanity ssh
3sanity 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 @@
1sanity boot 1sanity boot
2sanity ssh 2sanity ssh
3sanity 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 @@
1sanity boot 1sanity boot
2sanity ssh 2sanity ssh
3sanity 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 @@
1sanity boot 1sanity boot
2sanity ssh 2sanity ssh
3sanity 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 @@
1sanity boot 1sanity boot
2sanity ssh 2sanity ssh
3sanity 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 @@
1sanity boot 1sanity boot
2sanity ssh 2sanity ssh
3sanity 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 @@
1sanity boot 1sanity boot
2sanity ssh 2sanity ssh
3sanity 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
10which dmesg
11if [ $? -ne 0 ]; then
12 echo "QEMU: No dmesg command found"
13 exit 1
14fi
15
16dmesg | grep -iq "error"
17if [ $? -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
23else
24 echo "QEMU: No error log in dmesg"
25 exit 0
26fi