diff options
Diffstat (limited to 'scripts/qemuimage-testlib')
-rw-r--r-- | scripts/qemuimage-testlib | 122 |
1 files changed, 118 insertions, 4 deletions
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 |