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 | ||