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 |
