mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
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>
This commit is contained in:
committed by
Richard Purdie
parent
53b775b496
commit
12a861359a
@@ -133,9 +133,11 @@ python do_qemuimagetest() {
|
||||
ret = 1
|
||||
elif m.group('noresult') == "1":
|
||||
ret = 2
|
||||
print line,
|
||||
line = line.strip('\n')
|
||||
bb.note(line)
|
||||
else:
|
||||
print line,
|
||||
line = line.strip('\n')
|
||||
bb.note(line)
|
||||
f.close()
|
||||
|
||||
if ret != 0:
|
||||
|
||||
@@ -16,9 +16,18 @@
|
||||
|
||||
TYPE="ext3"
|
||||
|
||||
# The folder to hold all scripts running on targets
|
||||
TOOLS="$POKYBASE/scripts/qemuimage-tests/tools"
|
||||
|
||||
# Test Directory on target for testing
|
||||
TARGET_TEST_DIR="/opt/test"
|
||||
|
||||
# Global variable for process id
|
||||
PID=0
|
||||
|
||||
# Global variable for target ip address
|
||||
TARGET_IPADDR=0
|
||||
|
||||
# common function for information print
|
||||
Test_Error()
|
||||
{
|
||||
@@ -30,6 +39,35 @@ Test_Info()
|
||||
echo -e "\tTest_Info: $*"
|
||||
}
|
||||
|
||||
# function to copy files from host into target
|
||||
# $1 is the ip address of target
|
||||
# $2 is the files, which need to be copied into target
|
||||
# $3 is the path on target, where files are copied into
|
||||
Test_SCP()
|
||||
{
|
||||
local ip_addr=$1
|
||||
local src=$2
|
||||
local des=$3
|
||||
local tmpfile=`mktemp`
|
||||
local timeout=60
|
||||
local ret=0
|
||||
|
||||
# We use expect to interactive with target by ssh
|
||||
local exp_cmd=`cat << EOF
|
||||
eval spawn scp -o UserKnownHostsFile=$tmpfile "$src" root@$ip_addr:"$des"
|
||||
set timeout $time_out
|
||||
expect {
|
||||
"*assword:" { send "\r"; exp_continue}
|
||||
"*(yes/no)?" { send "yes\r"; exp_continue }
|
||||
eof { exit [ lindex [wait] 3 ] }
|
||||
}
|
||||
EOF`
|
||||
expect -c "$exp_cmd"
|
||||
ret=$?
|
||||
rm -rf $tmpfile
|
||||
return $ret
|
||||
}
|
||||
|
||||
# function to run command in $ip_addr via ssh
|
||||
Test_SSH()
|
||||
{
|
||||
@@ -78,6 +116,27 @@ Test_SSH_UP()
|
||||
return 1
|
||||
}
|
||||
|
||||
# function to prepare target test environment
|
||||
# $1 is the ip address of target system
|
||||
# $2 is the files, which needs to be copied into target
|
||||
Test_Target_Pre()
|
||||
{
|
||||
local ip_addr=$1
|
||||
local testscript=$2
|
||||
|
||||
# Create a pre-defined folder for test scripts
|
||||
Test_SSH $ip_addr "mkdir -p $TARGET_TEST_DIR"
|
||||
if [ $? -eq 0 ]; then
|
||||
# Copy test scripts into target
|
||||
Test_SCP $ip_addr $testscript $TARGET_TEST_DIR && return 0
|
||||
else
|
||||
Test_Error "Fail to create $TARGET_TEST_DIR on target"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# function to record test result in $TEST_RESULT/testresult.log
|
||||
Test_Print_Result()
|
||||
{
|
||||
@@ -232,13 +291,63 @@ Test_Find_Image()
|
||||
return 1
|
||||
}
|
||||
|
||||
# function to parse IP address of target
|
||||
# $1 is the pid of qemu startup process
|
||||
Test_Fetch_Target_IP()
|
||||
{
|
||||
local opid=$1
|
||||
local ppid=0
|
||||
local ip_addr=0
|
||||
local i=0
|
||||
declare local pid
|
||||
|
||||
# Check if $1 pid exists and contains ipaddr of target
|
||||
ps -fp $opid | grep -oq "192\.168\.7\.[0-9]*::"
|
||||
|
||||
# Find all children pid of the pid $1
|
||||
# and check if they contain ipaddr of target
|
||||
if [ $? -ne 0 ]; then
|
||||
# Check if there is any child pid of the pid $1
|
||||
ppid=$opid
|
||||
ps -f --ppid $ppid > /dev/zero
|
||||
ret=$?
|
||||
|
||||
while [ $ret -eq 0 ]
|
||||
do
|
||||
# If yes, get the child pid and check if the child pid has other child pid
|
||||
# Continue the while loop until there is no child pid found
|
||||
pid[$i]=`ps -f --ppid $ppid | awk '{if ($2 != "PID") print $2}'`
|
||||
ppid=${pid[$i]}
|
||||
i=$((i+1))
|
||||
ps -f --ppid $ppid > /dev/zero
|
||||
ret=$?
|
||||
done
|
||||
|
||||
# Check these children pids, if they have ipaddr included in command line
|
||||
while [ $i -ne 0 ]
|
||||
do
|
||||
i=$((i-1))
|
||||
ps -fp ${pid[$i]} | grep -oq "192\.168\.7\.[0-9]*::"
|
||||
if [ $? -eq 0 ]; then
|
||||
ip_addr=`ps -fp ${pid[$i]} | grep -o "192\.168\.7\.[0-9]*::" | awk -F":" '{print $1}'`
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
else
|
||||
ip_addr=`ps -fp $opid | grep -o "192\.168\.7\.[0-9]*::" | awk -F":" '{print $1}'`
|
||||
fi
|
||||
|
||||
echo $ip_addr
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
# function to check if qemu and its network
|
||||
Test_Create_Qemu()
|
||||
{
|
||||
local timeout=$1
|
||||
local ret=1
|
||||
local up_time=0
|
||||
local ip_addr=$1
|
||||
local timeout=$2
|
||||
|
||||
which poky-qemu
|
||||
if [ $? -eq 0 ]; then
|
||||
@@ -288,11 +397,16 @@ Test_Create_Qemu()
|
||||
fi
|
||||
done
|
||||
|
||||
# Parse IP address of target from the qemu command line
|
||||
if [ ${up_time} -lt ${timeout} ]; then
|
||||
TARGET_IPADDR=`Test_Fetch_Target_IP $PID`
|
||||
fi
|
||||
|
||||
while [ ${up_time} -lt ${timeout} ]
|
||||
do
|
||||
Test_Check_IP_UP ${ip_addr}
|
||||
Test_Check_IP_UP ${TARGET_IPADDR}
|
||||
if [ $? -eq 0 ]; then
|
||||
Test_Info "Qemu Network is up, ping with ${ip_addr} is OK"
|
||||
Test_Info "Qemu Network is up, ping with ${TARGET_IPADDR} is OK"
|
||||
ret=0
|
||||
break
|
||||
else
|
||||
|
||||
@@ -12,10 +12,9 @@
|
||||
. $POKYBASE/scripts/qemuimage-testlib
|
||||
|
||||
TIMEOUT=120
|
||||
QEMU_IPADDR="192.168.7.2"
|
||||
|
||||
# Start qemu and check its network
|
||||
Test_Create_Qemu ${QEMU_IPADDR} ${TIMEOUT}
|
||||
Test_Create_Qemu ${TIMEOUT}
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
Test_Info "Boot Test PASS"
|
||||
|
||||
52
scripts/qemuimage-tests/sanity/dmesg
Executable file
52
scripts/qemuimage-tests/sanity/dmesg
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
# Dmesg Check Test Case for Sanity Test
|
||||
# The case boot up the Qemu target with `runqemu qemux86`.
|
||||
# Then check if there is any error log in dmesg.
|
||||
#
|
||||
# Author: Jiajun Xu <jiajun.xu@intel.com>
|
||||
#
|
||||
# This file is licensed under the GNU General Public License,
|
||||
# Version 2.
|
||||
#
|
||||
|
||||
. $POKYBASE/scripts/qemuimage-testlib
|
||||
|
||||
TIMEOUT=360
|
||||
RET=1
|
||||
|
||||
# Start qemu and check its network
|
||||
Test_Create_Qemu ${TIMEOUT}
|
||||
|
||||
# If qemu network is up, check ssh service in qemu
|
||||
if [ $? -eq 0 ]; then
|
||||
Test_Info "Begin to Test SSH Service in Qemu"
|
||||
Test_SSH_UP ${TARGET_IPADDR} ${TIMEOUT}
|
||||
RET=$?
|
||||
else
|
||||
RET=1
|
||||
fi
|
||||
|
||||
# Check if there is any error log in dmesg
|
||||
if [ $RET -eq 0 -a -f $TOOLS/dmesg.sh ]; then
|
||||
# Copy dmesg.sh into target
|
||||
Test_Target_Pre ${TARGET_IPADDR} $TOOLS/dmesg.sh
|
||||
if [ $? -eq 0 ]; then
|
||||
# Run dmesg.sh to check if there is any error message with command dmesg
|
||||
Test_SSH ${TARGET_IPADDR} "sh $TARGET_TEST_DIR/dmesg.sh"
|
||||
RET=$?
|
||||
else
|
||||
RET=1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ${RET} -eq 0 ]; then
|
||||
Test_Info "Dmesg Test PASS"
|
||||
Test_Kill_Qemu
|
||||
Test_Print_Result "dmesg" 0
|
||||
exit 0
|
||||
else
|
||||
Test_Info "Dmesg Test FAIL, Pls. check above error log"
|
||||
Test_Kill_Qemu
|
||||
Test_Print_Result "dmesg" 1
|
||||
exit 1
|
||||
fi
|
||||
@@ -12,16 +12,15 @@
|
||||
. $POKYBASE/scripts/qemuimage-testlib
|
||||
|
||||
TIMEOUT=360
|
||||
QEMU_IPADDR="192.168.7.2"
|
||||
RET=1
|
||||
|
||||
# Start qemu and check its network
|
||||
Test_Create_Qemu ${QEMU_IPADDR} ${TIMEOUT}
|
||||
Test_Create_Qemu ${TIMEOUT}
|
||||
|
||||
# If qemu network is up, check ssh service in qemu
|
||||
if [ $? -eq 0 ]; then
|
||||
Test_Info "Begin to Test SSH Service in Qemu"
|
||||
Test_SSH_UP ${QEMU_IPADDR} ${TIMEOUT}
|
||||
Test_SSH_UP ${TARGET_IPADDR} ${TIMEOUT}
|
||||
RET=$?
|
||||
else
|
||||
RET=1
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
sanity boot
|
||||
sanity ssh
|
||||
sanity dmesg
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
sanity boot
|
||||
sanity ssh
|
||||
sanity dmesg
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
sanity boot
|
||||
sanity ssh
|
||||
sanity dmesg
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
sanity boot
|
||||
sanity ssh
|
||||
sanity dmesg
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
sanity boot
|
||||
sanity ssh
|
||||
sanity dmesg
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
sanity boot
|
||||
sanity ssh
|
||||
sanity dmesg
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
sanity boot
|
||||
sanity ssh
|
||||
sanity dmesg
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
sanity boot
|
||||
sanity ssh
|
||||
sanity dmesg
|
||||
|
||||
26
scripts/qemuimage-tests/tools/dmesg.sh
Normal file
26
scripts/qemuimage-tests/tools/dmesg.sh
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
# Dmesg test script running in QEMU
|
||||
#
|
||||
# Author: Jiajun Xu <jiajun.xu@intel.com>
|
||||
#
|
||||
# This file is licensed under the GNU General Public License,
|
||||
# Version 2.
|
||||
#
|
||||
|
||||
which dmesg
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "QEMU: No dmesg command found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dmesg | grep -iq "error"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "QEMU: There is some error log in dmesg:"
|
||||
echo "QEMU: ##### Error Log ######"
|
||||
dmesg | grep -i "error"
|
||||
echo "QEMU: ##### End ######"
|
||||
exit 1
|
||||
else
|
||||
echo "QEMU: No error log in dmesg"
|
||||
exit 0
|
||||
fi
|
||||
Reference in New Issue
Block a user