summaryrefslogtreecommitdiffstats
path: root/scripts/qemuimage-testlib
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/qemuimage-testlib')
-rw-r--r--scripts/qemuimage-testlib122
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
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