You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
549 lines
19 KiB
549 lines
19 KiB
4 months ago
|
#!/bin/bash
|
||
|
################################################################################
|
||
|
## ##
|
||
|
## Copyright (c) International Business Machines Corp., 2001 ##
|
||
|
## ##
|
||
|
## This program is free software; you can redistribute it and#or modify ##
|
||
|
## it under the terms of the GNU General Public License as published by ##
|
||
|
## the Free Software Foundation; either version 2 of the License, or ##
|
||
|
## (at your option) any later version. ##
|
||
|
## ##
|
||
|
## This program is distributed in the hope that it will be useful, but ##
|
||
|
## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
|
||
|
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ##
|
||
|
## for more details. ##
|
||
|
## ##
|
||
|
## You should have received a copy of the GNU General Public License ##
|
||
|
## along with this program; if not, write to the Free Software ##
|
||
|
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ##
|
||
|
## ##
|
||
|
################################################################################
|
||
|
#
|
||
|
# File: runltp
|
||
|
#
|
||
|
# Description: This program is a Graphical User Interface (GUI)
|
||
|
# Control Centre for LTP. The Control Centre provides
|
||
|
# functionality to Compile, Execute and View Results of
|
||
|
# LTP test cases.
|
||
|
#
|
||
|
# Author: Manoj Iyer - manjo@mail.utexas.edu
|
||
|
#
|
||
|
# Thanks: Jim Choate - For suggesting the use of dialog command.
|
||
|
#
|
||
|
# History: March 26 2003 - Created.
|
||
|
#
|
||
|
# March 28 2003 - Removed gauges and put make commands in foreground.
|
||
|
# Robbie Williamson - robbiew@us.ibm.com
|
||
|
#
|
||
|
# March 31 2003 - Made scenario menu creation dynamic and code
|
||
|
# to pull the test descriptions from the scenario files.
|
||
|
# Robbie Williamson - robbiew@us.ibm.com
|
||
|
#
|
||
|
# April 17 2003 - Added menu selection to list contents of selected
|
||
|
# scenario file.
|
||
|
# Robbie Williamson - robbiew@us.ibm.com
|
||
|
#
|
||
|
# April 23 2003 - Added PID to results filename.
|
||
|
# - Added code to allow users to redirect output and
|
||
|
# specify test execution duration.
|
||
|
# Robbie Williamson - robbiew@us.ibm.com
|
||
|
#
|
||
|
# April 30, 2003 - Recoded results display to allow selection
|
||
|
# of results file.
|
||
|
# - Created variable to hold results filename
|
||
|
# - Added time to results filename.
|
||
|
# Function: cleanup
|
||
|
#
|
||
|
# Description: Remove all temporary files created by this program. Cleanup
|
||
|
# always called on program exit.
|
||
|
#
|
||
|
# Input: NONE
|
||
|
#
|
||
|
# Output: NONE
|
||
|
cleanup()
|
||
|
{
|
||
|
rm -f /tmp/runltp.*
|
||
|
}
|
||
|
|
||
|
|
||
|
# Function: display_info_msg
|
||
|
#
|
||
|
# Description: Displays informational messages window. This window may
|
||
|
# may be used to display information like errors, instructions
|
||
|
# etc to the user. The window is dismissed when the user hits
|
||
|
# the [ENTER] key.
|
||
|
#
|
||
|
# Input: $1 - Title the needs to be displayed on the window.
|
||
|
# eg: ERROR: Compiling LTP
|
||
|
# $2 - Message text.
|
||
|
#
|
||
|
# Output: Information message window.
|
||
|
display_info_msg()
|
||
|
{
|
||
|
dialog --backtitle "Linux Test Project Control Centre" \
|
||
|
--title " $1 " \
|
||
|
--msgbox " $2 " 10 70
|
||
|
return $?
|
||
|
}
|
||
|
|
||
|
|
||
|
# Function: compile_ltp
|
||
|
#
|
||
|
# Description: Checks for commands that are pre-reqs for compiling and
|
||
|
# installing LTP. It displays a confirmation window inorder to
|
||
|
# confirm the choice made by the user.
|
||
|
#
|
||
|
# Calls: do_make_clean()
|
||
|
# do_make()
|
||
|
# do_make_install()
|
||
|
#
|
||
|
# Input: NONE
|
||
|
#
|
||
|
# Output: Confirmation window.
|
||
|
compile_ltp()
|
||
|
{
|
||
|
dialog --backtitle "Linux Test Project Control Centre" \
|
||
|
--title "Compiling LTP testsuite"\
|
||
|
--yesno "This will compile all the test cases in\
|
||
|
LTP test suite and place the executables\
|
||
|
in testcases/bin directory. Do\
|
||
|
you wish to continue ??" 7 70 || RC=$?
|
||
|
case $RC in
|
||
|
0) \
|
||
|
for cmd in cc make lex ;
|
||
|
do \
|
||
|
which $cmd >/tmp/runltp.err.$$ 2>&1 ;
|
||
|
if [ $? -ne 0 ] ;
|
||
|
then \
|
||
|
display_info_msg "Compiling LTP testsuite" \
|
||
|
"ERROR: command $cmd not found, $cmd is\
|
||
|
required to compile LTP test cases. Please\
|
||
|
install $cmd or export PATH correctly before\
|
||
|
running this program" ;
|
||
|
return ;
|
||
|
fi ;
|
||
|
done ;
|
||
|
make clean;
|
||
|
if [ $? -ne 0 ];then
|
||
|
echo "ERROR in \'make clean\' - exiting."
|
||
|
exit
|
||
|
fi
|
||
|
make ;
|
||
|
if [ $? -ne 0 ];then
|
||
|
echo "ERROR in \'make all\' - exiting."
|
||
|
exit
|
||
|
fi
|
||
|
make install ;
|
||
|
if [ $? -ne 0 ];then
|
||
|
echo "ERROR in \'make install\' - exiting."
|
||
|
exit
|
||
|
fi
|
||
|
return ;;
|
||
|
|
||
|
1) return ;;
|
||
|
|
||
|
255) return ;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
|
||
|
# Function: disp_ltpres
|
||
|
#
|
||
|
# Description: The results generated after the ltp execution located under
|
||
|
# ltp-mmddyy/results/ directory in a text (ASCII) file called
|
||
|
# results.todaysdate. This function displays this file in a
|
||
|
# window. If the results file does not exit it displays an
|
||
|
# info message window notifing the user that LTP test cases
|
||
|
# need to be executed inorder to view results.
|
||
|
#
|
||
|
# Input: ltp-mmddyy/results/results.todaysdate.time
|
||
|
#
|
||
|
# Output: Window displaying results of testcases that were executed.
|
||
|
disp_ltpres()
|
||
|
{
|
||
|
RC=0
|
||
|
|
||
|
RESULTS_LIST=$(for i in `ls -1 -A -I "CVS" results`;do echo -n "$i [more...] "; done)
|
||
|
if ! [ -z $RESULTS_LIST ] ;then
|
||
|
while [ $RC -ne "1" ]
|
||
|
do
|
||
|
dialog --clear
|
||
|
dialog --backtitle "Linux Test Project Control Centre" \
|
||
|
--title "LTP Test Results" \
|
||
|
--menu "Move using[UP] [DOWN], Select using [ENTER]" 15 70 8 \
|
||
|
$RESULTS_LIST \
|
||
|
2>/tmp/runltp.results.$$ || RC=$?
|
||
|
results_item=$(cat /tmp/runltp.results.$$)
|
||
|
if ! [ -z $results_item ];then
|
||
|
dialog --clear
|
||
|
dialog --backtitle "Linux Test Project Control Centre" \
|
||
|
--title "LTP Test Results" \
|
||
|
--textbox results/$results_item 17 70
|
||
|
|
||
|
dialog --backtitle "Linux Test Project Control Centre" \
|
||
|
--title "LTP Test Results." \
|
||
|
--yesno "Would you like to share these results with the LTP \
|
||
|
community by posting it to the LTP results mailing list?" \
|
||
|
7 70 || RESPONSE=$?
|
||
|
case $RESPONSE in
|
||
|
0) \
|
||
|
mail ltp-results@lists.sourceforge.net < \
|
||
|
./results/$results_item ;
|
||
|
;;
|
||
|
|
||
|
1) ;;
|
||
|
|
||
|
255) ;;
|
||
|
esac
|
||
|
fi
|
||
|
done
|
||
|
else
|
||
|
dialog --clear
|
||
|
dialog --backtitle "Linux Test Project Control Centre" \
|
||
|
--title "LTP Test Results" \
|
||
|
--msgbox "ERROR: No files to view in /results directory." 5 53
|
||
|
fi
|
||
|
return
|
||
|
}
|
||
|
|
||
|
|
||
|
# Function: flags_prompt
|
||
|
#
|
||
|
# Description: Prompt for and record user options for run duration and
|
||
|
# test output direction
|
||
|
#
|
||
|
# Input: none
|
||
|
#
|
||
|
# Output: none
|
||
|
flags_prompt()
|
||
|
{
|
||
|
dialog --backtitle "Linux Test Project Control Centre"\
|
||
|
--title "Output Direction" --clear\
|
||
|
--yesno "Would you like test output recorded to a file, instead of STDOUT?" 7 80
|
||
|
RC=$?
|
||
|
if [ $RC -eq "0" ]
|
||
|
then
|
||
|
dialog --backtitle "Linux Test Project Control Centre"\
|
||
|
--title "Output Direction" --clear\
|
||
|
--inputbox " Please enter the full path and \
|
||
|
name of the file where you wish \
|
||
|
to redirect output to" 17 80 \
|
||
|
2>/tmp/runltp.outdir.$$ ;
|
||
|
flags_outfile=$(cat /tmp/runltp.outdir.$$ | awk '{print $1}')
|
||
|
./ver_linux > $flags_outfile 2>&1
|
||
|
RUNALL_FLAGS=" -o $flags_outfile"
|
||
|
fi
|
||
|
|
||
|
dialog --backtitle "Linux Test Project Control Centre"\
|
||
|
--title "Test Duration" --clear\
|
||
|
--yesno "Would you like to specify test duration? \
|
||
|
Default is the length of one loop." 7 80
|
||
|
RC=$?
|
||
|
if [ $RC -eq "0" ]
|
||
|
then
|
||
|
dialog --backtitle "Linux Test Project Control Centre"\
|
||
|
--title "Test Duration - Interval Selection" --clear\
|
||
|
--menu "Move using[UP] [DOWN], Select using [ENTER]" 15 70 4 \
|
||
|
s "Seconds" \
|
||
|
m "Minutes" \
|
||
|
h "Hours" \
|
||
|
d "Days" \
|
||
|
2>/tmp/runltp.interval.$$ ;
|
||
|
flags_interval=$(cat /tmp/runltp.interval.$$ | awk '{print $1}')
|
||
|
case $flags_interval in
|
||
|
s) INTERVAL="seconds" ;;
|
||
|
m) INTERVAL="minutes" ;;
|
||
|
h) INTERVAL="hours" ;;
|
||
|
d) INTERVAL="days" ;;
|
||
|
esac
|
||
|
|
||
|
echo $INTERVAL
|
||
|
WINDOW_MSG="Please enter the number of $INTERVAL to run"
|
||
|
dialog --backtitle "Linux Test Project Control Centre"\
|
||
|
--title "Test Duration - Length Specification" --clear\
|
||
|
--inputbox "$WINDOW_MSG" 7 80 \
|
||
|
2>/tmp/runltp.length.$$ ;
|
||
|
flags_length=$(cat /tmp/runltp.length.$$ | awk '{print $1}')
|
||
|
flags_duration="$flags_length$flags_interval"
|
||
|
RUNALL_FLAGS=" $RUNALL_FLAGS -t $flags_duration"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Function: exectest_screenout
|
||
|
#
|
||
|
# Description: Execute tests by calling runltp, display test status
|
||
|
# in a window.
|
||
|
#
|
||
|
# Input: none
|
||
|
#
|
||
|
# Output: messages printed by testcases.
|
||
|
exectest_screenout()
|
||
|
{
|
||
|
RC=0 # setting return code to 0, to loop in while
|
||
|
|
||
|
RESULTS_FILE=$(date +%Y-%m-%d.%H.%M.%S).$$
|
||
|
|
||
|
# execute runltp with user defined command file.
|
||
|
./runltp -q -p $RUNALL_FLAGS -l results.$RESULTS_FILE \
|
||
|
-f /tmp/runltp.test.list.$$
|
||
|
|
||
|
sleep 2
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
|
||
|
# Function: execute_ltp
|
||
|
#
|
||
|
# Description: This function provides a menu of testcases that can be
|
||
|
# selected for execution. If networking tests are selected,
|
||
|
# they require a remote machine and remote machines root
|
||
|
# users password. The user will be prompted to enter this
|
||
|
# information in a text box.
|
||
|
# The function checks to see if the ltp-mmddyy/testcases/bin
|
||
|
# directory was created, this directory is created when the
|
||
|
# testcases are compiled and installed, if it is not found
|
||
|
# an info message window will notify the user that LTP needs to
|
||
|
# be compiled before tests can be executed.
|
||
|
# This function creates the senatrio file based on the users
|
||
|
# choice of testcases and uses the runltp script to
|
||
|
# execute these tests.
|
||
|
# The messages printed by the testcases are displayed on this
|
||
|
# terminal.
|
||
|
#
|
||
|
# Input: Users selection of testcases; scenario file.
|
||
|
#
|
||
|
# Output: Test selection window, Message window,
|
||
|
# information message window
|
||
|
execute_ltp()
|
||
|
{
|
||
|
RC=0
|
||
|
host_name=" "
|
||
|
rhost_passwd=" "
|
||
|
run_net_test=" "
|
||
|
|
||
|
if ! [ -d ./testcases/bin ]
|
||
|
then
|
||
|
display_info_msg "Executing LTP testcases" \
|
||
|
"The testcases must to be compiled inorder\
|
||
|
to execute them. Returning to main menu. \
|
||
|
Please select the Compile option."
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
LIST=$(for i in `ls -1 -A -I "CVS" runtest`; do echo -n "$i "; j=$(head -n1 runtest/$i | cut -d: -f2|sed s/" "/_/g); echo -n "$j off "; done)
|
||
|
dialog --backtitle "Linux Test Project Control Centre"\
|
||
|
--title "Execute LTP" --clear\
|
||
|
--checklist "Select [SPACEBAR] tests to run" 20 80 5 \
|
||
|
$LIST \
|
||
|
2>/tmp/runltp.choice.$$ || RC=$?
|
||
|
size=`wc -m /tmp/runltp.choice.$$|awk '{print $1}'`
|
||
|
if [ $size -eq 0 ];then
|
||
|
tst_choice=$(echo "NULL")
|
||
|
else
|
||
|
tst_choice=$(cat /tmp/runltp.choice.$$)
|
||
|
fi
|
||
|
if [[ $tst_choice == NULL ]];then
|
||
|
RC=1
|
||
|
fi
|
||
|
case $RC in
|
||
|
0) \
|
||
|
for i in $tst_choice ;
|
||
|
do \
|
||
|
cat ./runtest/$(echo $i | sed -e 's/"//g') \
|
||
|
>> /tmp/runltp.test.list.$$ ;
|
||
|
if [[ $(echo $i | sed -e 's/"//g') == "tcp_cmds" || \
|
||
|
$(echo $i | sed -e 's/"//g') == "tcp_cmds_noexpect" || \
|
||
|
$(echo $i | sed -e 's/"//g') == "multicast" || \
|
||
|
$(echo $i | sed -e 's/"//g') == "ipv6" || \
|
||
|
$(echo $i | sed -e 's/"//g') == "ipv6_noexpect" || \
|
||
|
$(echo $i | sed -e 's/"//g') == "nfs" || \
|
||
|
$(echo $i | sed -e 's/"//g') == "multicast" ]] ;
|
||
|
then \
|
||
|
run_net_test="Y" ;
|
||
|
fi ;
|
||
|
|
||
|
done ;
|
||
|
if ! [ -z $run_net_test ] ;
|
||
|
then \
|
||
|
dialog --backtitle "Linux Test Project Control Centre"\
|
||
|
--title "Execute LTP test cases" \
|
||
|
--clear \
|
||
|
--inputbox "You have chosen to execute testcases \
|
||
|
that require a Remote Machine. \
|
||
|
Please enter the fully qualified host \
|
||
|
name" 17 80 $(hostname --long) \
|
||
|
2>/tmp/runltp.out.$$ ;
|
||
|
host_name=$(cat /tmp/runltp.out.$$ | awk '{print $1}') ;
|
||
|
unset $RHOST ;
|
||
|
RHOST=$host_name ;
|
||
|
export RHOST;
|
||
|
|
||
|
dialog --backtitle "Linux Test Project Control Centre"\
|
||
|
--title "Execute LTP test cases" \
|
||
|
--clear \
|
||
|
--inputbox " Please enter the root password \
|
||
|
of this remote machine" 17 80 \
|
||
|
2>/tmp/runltp.out.$$ ;
|
||
|
rhost_passwd=$(cat /tmp/runltp.out.$$ | awk '{print $1}') ;
|
||
|
|
||
|
PASSWD=$rhost_passwd ;
|
||
|
export PASSWD;
|
||
|
fi ;
|
||
|
|
||
|
if ! [ -d ./testcases/bin ] ;
|
||
|
then \
|
||
|
display_info_msg "Executing LTP testcases" \
|
||
|
"The testcases must to be compiled inorder\
|
||
|
to execute them. Returning to main menu. \
|
||
|
Please select the Compile option." ;
|
||
|
return ;
|
||
|
fi ;
|
||
|
|
||
|
dialog --clear ;
|
||
|
|
||
|
flags_prompt ;
|
||
|
|
||
|
exectest_screenout ;
|
||
|
|
||
|
return ;;
|
||
|
1) \
|
||
|
# echo "Cancel pressed" ;
|
||
|
return ;;
|
||
|
255) \
|
||
|
# echo "ESC pressed" ;
|
||
|
return ;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
|
||
|
# Function: about_ltpcc
|
||
|
#
|
||
|
# Description: This function displays a window containing a brief message
|
||
|
# describing this programs functionality, and credits the author.
|
||
|
#
|
||
|
# Input: NONE
|
||
|
#
|
||
|
# Output: Message window, description of LTP Control Center.
|
||
|
about_ltpcc()
|
||
|
{
|
||
|
display_info_msg "About LTP Control Centre" \
|
||
|
"The LTP Control Centre can be used to\
|
||
|
to compile, install and execute\
|
||
|
The Linux Test Project test suite. Written by\
|
||
|
Manoj Iyer <manjo@mail.utexas.edu>"
|
||
|
return
|
||
|
}
|
||
|
|
||
|
|
||
|
# Function: ltp_scenarios
|
||
|
#
|
||
|
# Description: This function displays a list of scenario files located
|
||
|
# in /runtest. Users can list the contents of each file.
|
||
|
#
|
||
|
# Input: Files from /runtest
|
||
|
#
|
||
|
# Output: 1) Menu selection containing each file as an option to list.
|
||
|
# 2) Contents of selected scenario.
|
||
|
ltp_scenarios()
|
||
|
{
|
||
|
|
||
|
RC=0
|
||
|
SCENARIOS=$(for i in `ls -1 -A -I "CVS" runtest`;do echo -n "$i [more...] "; done)
|
||
|
|
||
|
while [ $RC -ne "1" ]
|
||
|
do
|
||
|
dialog --clear
|
||
|
dialog --backtitle "Linux Test Project Control Centre" \
|
||
|
--title "LTP Scenario Files" \
|
||
|
--menu "Move using[UP] [DOWN], Select using [ENTER]" 15 70 8 \
|
||
|
$SCENARIOS \
|
||
|
2>/tmp/runltp.scenario.$$ || RC=$?
|
||
|
scenario_item=$(cat /tmp/runltp.scenario.$$)
|
||
|
if ! [ -z $scenario_item ];then
|
||
|
dialog --clear
|
||
|
dialog --backtitle "Linux Test Project Control Centre" \
|
||
|
--title "LTP Scenario Files" \
|
||
|
--textbox runtest/$scenario_item 17 70
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
# Function: main
|
||
|
#
|
||
|
# Description: Displays the main menu to the LTP Control Centre. The menu
|
||
|
# provides options to Compile, Execute, and View test execution
|
||
|
# results.
|
||
|
#
|
||
|
# Calls: about_ltpcc()
|
||
|
# compile_ltp()
|
||
|
# execute_ltp()
|
||
|
# disp_ltpres()
|
||
|
#
|
||
|
# Input: NONE
|
||
|
#
|
||
|
# Output: Menu selection of actions to perform.
|
||
|
|
||
|
# Global variables.
|
||
|
RC=0 # return code from commands and local functions
|
||
|
mmenu_item=" "
|
||
|
RHOST=" "
|
||
|
PASSWD=" "
|
||
|
RUNALL_FLAGS=" "
|
||
|
RESULTS_FILE=" "
|
||
|
|
||
|
# test for dialog program exist
|
||
|
if [ ! -x /usr/bin/dialog ]; then
|
||
|
echo "Sorry, ltpmenu GUI not available, can't find dialog. Exiting...";
|
||
|
exit 1;
|
||
|
fi
|
||
|
|
||
|
# call cleanup function on program exit.
|
||
|
trap "cleanup" 0
|
||
|
|
||
|
|
||
|
# wait in a loop until user hits [Cancel] button on the main menu.
|
||
|
while :
|
||
|
do
|
||
|
RC=0
|
||
|
dialog --clear
|
||
|
dialog --backtitle "Linux Test Project Control Centre" \
|
||
|
--title "Main Menu" \
|
||
|
--menu "Move using[UP] [DOWN], Select using [ENTER]" 15 70 5 \
|
||
|
About "About LTP Control Centre" \
|
||
|
Compile "Compile LTP testsuite" \
|
||
|
Details "Details of scenario files" \
|
||
|
Execute "Execute LTP testsuite" \
|
||
|
Results "Display a summary of test results" \
|
||
|
2>/tmp/runltp.mainmenu.$$ || RC=$?
|
||
|
|
||
|
case $RC in
|
||
|
0) mmenu_item=`cat /tmp/runltp.mainmenu.$$` ;
|
||
|
# echo "return code = $RC" ;
|
||
|
# echo "MENU ITEM = $mmenu_item" ;
|
||
|
case $mmenu_item in
|
||
|
About) about_ltpcc ;;
|
||
|
Compile) compile_ltp ;;
|
||
|
Details) ltp_scenarios ;;
|
||
|
Execute) execute_ltp ;;
|
||
|
Results) disp_ltpres ;;
|
||
|
esac ;;
|
||
|
|
||
|
1) display_info_msg "Good Bye!" \
|
||
|
"Thank you for using Linux Test Project test suite.\
|
||
|
Please visit our project website \
|
||
|
http://ltp.sourceforge.net \
|
||
|
for latest news on The Linux Test Project. "
|
||
|
exit ;;
|
||
|
|
||
|
255) display_info_msg "Good Bye!" \
|
||
|
"Thank you for using Linux Test Project test suite.\
|
||
|
Please visit our project website\
|
||
|
http://ltp.sourceforge.net for latest news\
|
||
|
on The Linux Test Project. "
|
||
|
exit;;
|
||
|
esac
|
||
|
done
|