ltpmenu revision 5cc1381d5a052ff83b1360a0cf746a94b5401b68
1################################################################################ 2## ## 3## Copyright (c) International Business Machines Corp., 2001 ## 4## ## 5## This program is free software; you can redistribute it and#or modify ## 6## it under the terms of the GNU General Public License as published by ## 7## the Free Software Foundation; either version 2 of the License, or ## 8## (at your option) any later version. ## 9## ## 10## This program is distributed in the hope that it will be useful, but ## 11## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ## 12## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## 13## for more details. ## 14## ## 15## You should have received a copy of the GNU General Public License ## 16## along with this program; if not, write to the Free Software ## 17## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ## 18## ## 19################################################################################ 20# 21# File: runltp 22# 23# Description: This program is a Graphical User Interface (GUI) 24# Control Centre for LTP. The Control Centre provides 25# functionality to Compile, Execute and View Results of 26# LTP test cases. 27# 28# Author: Manoj Iyer - manjo@mail.utexas.edu 29# 30# Thanks: Jim Choate - For suggesting the use of dialog command. 31# 32# History: March 26 2003 - Created. 33# 34# March 28 2003 - Removed gauges and put make commands in foreground. 35# Robbie Williamson - robbiew@us.ibm.com 36# 37# March 31 2003 - Made scenario menu creation dynamic and code 38# to pull the test descriptions from the scenario files. 39# Robbie Williamson - robbiew@us.ibm.com 40# 41# April 17 2003 - Added menu selection to list contents of selected 42# scenario file. 43# Robbie Williamson - robbiew@us.ibm.com 44# 45# April 23 2003 - Added PID to results filename. 46# - Added code to allow users to redirect output and 47# specify test execution duration. 48# Robbie Williamson - robbiew@us.ibm.com 49# 50#! /bin/bash 51 52# Function: cleanup 53# 54# Description: Remove all temporary files created by this program. Cleanup 55# always called on program exit. 56# 57# Input: NONE 58# 59# Output: NONE 60cleanup() 61{ 62 rm -f /tmp/runltp.* 63} 64 65 66# Function: display_info_msg 67# 68# Description: Displays informational messages window. This window may 69# may be used to display information like errors, instructions 70# etc to the user. The window is dismissed when the user hits 71# the [ENTER] key. 72# 73# Input: $1 - Title the needs to be displayed on the window. 74# eg: ERROR: Compiling LTP 75# $2 - Message text. 76# 77# Output: Information message window. 78display_info_msg() 79{ 80 dialog --backtitle "Linux Test Project Control Centre" \ 81 --title " $1 " \ 82 --msgbox " $2 " 10 70 83 return $? 84} 85 86 87# Function: compile_ltp 88# 89# Description: Checks for commands that are pre-reqs for compiling and 90# installing LTP. It displays a confirmation window inorder to 91# confirm the choice made by the user. 92# 93# Calls: do_make_clean() 94# do_make() 95# do_make_install() 96# 97# Input: NONE 98# 99# Output: Confirmation window. 100compile_ltp() 101{ 102 dialog --backtitle "Linux Test Project Control Centre" \ 103 --title "Compiling LTP testsuite"\ 104 --yesno "This will compile all the test cases in\ 105 LTP test suite and place the executables\ 106 in testcases/bin directory. Do\ 107 you wish to continue ??" 7 70 || RC=$? 108 case $RC in 109 0) \ 110 for cmd in cc make lex ; 111 do \ 112 which $cmd &>/tmp/runltp.err.$$ ; 113 if [ $? -ne 0 ] ; 114 then \ 115 display_info_msg "Compiling LTP testsuite" \ 116 "ERROR: command $cmd not found, $cmd is\ 117 required to compile LTP test cases. Please\ 118 install $cmd or export PATH correctly before\ 119 running this program" ; 120 return ; 121 fi ; 122 done ; 123 make clean; 124 if [ $? -ne 0 ];then 125 echo "ERROR in \'make clean\' - exiting." 126 exit 127 fi 128 make ; 129 if [ $? -ne 0 ];then 130 echo "ERROR in \'make all\' - exiting." 131 exit 132 fi 133 make install ; 134 if [ $? -ne 0 ];then 135 echo "ERROR in \'make install\' - exiting." 136 exit 137 fi 138 return ;; 139 140 1) return ;; 141 142 255) return ;; 143 esac 144} 145 146 147# Function: disp_ltpres 148# 149# Description: The results generated after the ltp execution located under 150# ltp-mmddyy/results/ directory in a text (ASCII) file called 151# results.todaysdate. This function displays this file in a 152# window. If the results file does not exit it displays an 153# info message window notifing the user that LTP test cases 154# need to be executed inorder to view results. 155# 156# Input: ltp-mmddyy/results/results.todaysdate 157# 158# Output: Window displaying results of testcases that were executed. 159disp_ltpres() 160{ 161 RC=0 162 if ! [ -f ./results/results.$(date -I).$$ ] 163 then 164 display_info_msg "LTP Test Results" \ 165 "Sorry cannot display test results, you have to run \ 166 the test cases first. Please choose the Execute LTP \ 167 option in the Main Menu." 168 return 169 fi 170 171 dialog --backtitle "Linux Test Project Control Centre" \ 172 --title "LTP Test Results. Scroll [UP] [DOWN]/[PGUP] [PGDN]" \ 173 --textbox ./results/results.$(date -I).$$ 17 70 174 175 dialog --backtitle "Linux Test Project Control Centre" \ 176 --title "LTP Test Results." \ 177 --yesno "Would you like to share these results with the LTP \ 178 community by posting it to the LTP results mailing list?" \ 179 7 70 || RC=$? 180 case $RC in 181 0) \ 182 mail ltp-results@lists.sourceforge.net < \ 183 ./results/results.$(date -I).$$ ; 184 return ;; 185 186 1) return ;; 187 188 255) return ;; 189 esac 190 return 191} 192 193 194# Function: flags_prompt 195# 196# Description: Prompt for and record user options for run duration and 197# test output direction 198# 199# Input: none 200# 201# Output: none 202flags_prompt() 203{ 204 dialog --backtitle "Linux Test Project Control Centre"\ 205 --title "Output Direction" --clear\ 206 --yesno "Would you like test output recorded to a file, instead of STDOUT?" 7 80 207 RC=$? 208 if [ $RC -eq "0" ] 209 then 210 dialog --backtitle "Linux Test Project Control Centre"\ 211 --title "Output Direction" --clear\ 212 --inputbox " Please enter the full path and \ 213 name of the file where you wish \ 214 to redirect output to" 17 80 \ 215 2>/tmp/runltp.outdir.$$ ; 216 flags_outfile=$(cat /tmp/runltp.outdir.$$ | awk '{print $1}') 217 RUNALL_FLAGS=" -o $flags_outfile" 218 fi 219 220 dialog --backtitle "Linux Test Project Control Centre"\ 221 --title "Test Duration" --clear\ 222 --yesno "Would you like to specify test duration? \ 223 Default is the length of one loop." 7 80 224 RC=$? 225 if [ $RC -eq "0" ] 226 then 227 dialog --backtitle "Linux Test Project Control Centre"\ 228 --title "Test Duration - Interval Selection" --clear\ 229 --menu "Move using[UP] [DOWN], Select using [ENTER]" 15 70 4 \ 230 s "Seconds" \ 231 m "Minutes" \ 232 h "Hours" \ 233 d "Days" \ 234 2>/tmp/runltp.interval.$$ ; 235 flags_interval=$(cat /tmp/runltp.interval.$$ | awk '{print $1}') 236 case $flags_interval in 237 s) INTERVAL="seconds" ;; 238 m) INTERVAL="minutes" ;; 239 h) INTERVAL="hours" ;; 240 d) INTERVAL="days" ;; 241 esac 242 243 echo $INTERVAL 244 WINDOW_MSG="Please enter the number of $INTERVAL to run" 245 dialog --backtitle "Linux Test Project Control Centre"\ 246 --title "Test Duration - Length Specification" --clear\ 247 --inputbox "$WINDOW_MSG" 7 80 \ 248 2>/tmp/runltp.length.$$ ; 249 flags_length=$(cat /tmp/runltp.length.$$ | awk '{print $1}') 250 flags_duration="$flags_length$flags_interval" 251 RUNALL_FLAGS=" $RUNALL_FLAGS -t $flags_duration" 252 fi 253} 254 255# Function: exectest_screenout 256# 257# Description: Execute tests by calling runalltests.sh, display test status 258# in a window. 259# 260# Input: none 261# 262# Output: messages printed by testcases. 263exectest_screenout() 264{ 265 RC=0 # setting return code to 0, to loop in while 266 267 # remove old results file 268 rm ./results/results.$(date -I).$$ &>/dev/null 269 270 # execute runalltests.sh with user defined command file. 271 ./runalltests.sh -q -p $RUNALL_FLAGS -l results.$(date -I).$$ \ 272 -f /tmp/runltp.test.list.$$ 273 274 sleep 2 275 276 return 277} 278 279 280# Function: execute_ltp 281# 282# Description: This function provides a menu of testcases that can be 283# selected for execution. If networking tests are selected, 284# they require a remote machine and remote machines root 285# users password. The user will be prompted to enter this 286# information in a text box. 287# The function checks to see if the ltp-mmddyy/testcases/bin 288# directory was created, this directory is created when the 289# testcases are compiled and installed, if it is not found 290# an info message window will notify the user that LTP needs to 291# be compiled before tests can be executed. 292# This function creates the senatrio file based on the users 293# choice of testcases and uses the runalltests.sh script to 294# execute these tests. 295# The messages printed by the testcases are displayed on this 296# terminal. 297# 298# Input: Users selection of testcases; scenario file. 299# 300# Output: Test selection window, Message window, 301# information message window 302execute_ltp() 303{ 304 RC=0 305 host_name=" " 306 rhost_passwd=" " 307 run_net_test=" " 308 309 if ! [ -d ./testcases/bin ] 310 then 311 display_info_msg "Executing LTP testcases" \ 312 "The testcases must to be compiled inorder\ 313 to execute them. Returning to main menu. \ 314 Please select the Compile option." 315 return 316 fi 317 318 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) 319 dialog --backtitle "Linux Test Project Control Centre"\ 320 --title "Execute LTP" --clear\ 321 --checklist "Select [SPACEBAR] tests to run" 20 80 5 \ 322 $LIST \ 323 2>/tmp/runltp.choice.$$ || RC=$? 324 size=`wc -m /tmp/runltp.choice.$$|awk '{print $1}'` 325 if [ $size -eq 0 ];then 326 tst_choice=$(echo "NULL") 327 else 328 tst_choice=$(cat /tmp/runltp.choice.$$) 329 fi 330 if [[ $tst_choice == NULL ]];then 331 RC=1 332 fi 333 case $RC in 334 0) \ 335 for i in $tst_choice ; 336 do \ 337 cat ./runtest/$(echo $i | sed -e 's/"//g') \ 338 >> /tmp/runltp.test.list.$$ ; 339 if [[ $(echo $i | sed -e 's/"//g') == "tcp_cmds" || \ 340 $(echo $i | sed -e 's/"//g') == "tcp_cmds_noexpect" || \ 341 $(echo $i | sed -e 's/"//g') == "multicast" || \ 342 $(echo $i | sed -e 's/"//g') == "ipv6" || \ 343 $(echo $i | sed -e 's/"//g') == "ipv6_noexpect" || \ 344 $(echo $i | sed -e 's/"//g') == "nfs" || \ 345 $(echo $i | sed -e 's/"//g') == "multicast" ]] ; 346 then \ 347 run_net_test="Y" ; 348 fi ; 349 350 done ; 351 if ! [ -z $run_net_test ] ; 352 then \ 353 dialog --backtitle "Linux Test Project Control Centre"\ 354 --title "Execute LTP test cases" \ 355 --clear \ 356 --inputbox "You have chosen to execute testcases \ 357 that require a Remote Machine. \ 358 Please enter the fully qualified host \ 359 name" 17 80 $(hostname --long) \ 360 2>/tmp/runltp.out.$$ ; 361 host_name=$(cat /tmp/runltp.out.$$ | awk '{print $1}') ; 362 unset $RHOST ; 363 RHOST=$host_name ; 364 export RHOST; 365 366 dialog --backtitle "Linux Test Project Control Centre"\ 367 --title "Execute LTP test cases" \ 368 --clear \ 369 --inputbox " Please enter the root password \ 370 of this remote machine" 17 80 \ 371 2>/tmp/runltp.out.$$ ; 372 rhost_passwd=$(cat /tmp/runltp.out.$$ | awk '{print $1}') ; 373 374 PASSWD=$rhost_passwd ; 375 export PASSWD; 376 fi ; 377 378 if ! [ -d ./testcases/bin ] ; 379 then \ 380 display_info_msg "Executing LTP testcases" \ 381 "The testcases must to be compiled inorder\ 382 to execute them. Returning to main menu. \ 383 Please select the Compile option." ; 384 return ; 385 fi ; 386 387 dialog --clear ; 388 389 flags_prompt ; 390 391 exectest_screenout ; 392 393 return ;; 394 1) \ 395 # echo "Cancel pressed" ; 396 return ;; 397 255) \ 398 # echo "ESC pressed" ; 399 return ;; 400 esac 401} 402 403 404# Function: about_ltpcc 405# 406# Description: This function displays a window containing a brief message 407# describing this programs functionality, and credits the author. 408# 409# Input: NONE 410# 411# Output: Message window, description of LTP Control Center. 412about_ltpcc() 413{ 414 display_info_msg "About LTP Control Centre" \ 415 "The LTP Control Centre can be used to\ 416 to compile, install and execute\ 417 The Linux Test Project test suite. Written by\ 418 Manoj Iyer <manjo@mail.utexas.edu>" 419 return 420} 421 422 423# Function: ltp_scenarios 424# 425# Description: This function displays a list of scenario files located 426# in /runtest. Users can list the contents of each file. 427# 428# Input: Files from /runtest 429# 430# Output: 1) Menu selection containing each file as an option to list. 431# 2) Contents of selected scenario. 432ltp_scenarios() 433{ 434 435RC=0 436SCENARIOS=$(for i in `ls -1 -A -I "CVS" runtest`;do echo -n "$i <- "; done) 437 438while [ $RC -ne "1" ] 439do 440 dialog --clear 441 dialog --backtitle "Linux Test Project Control Centre" \ 442 --title "LTP Scenario Files" \ 443 --menu "Move using[UP] [DOWN], Select using [ENTER]" 15 70 8 \ 444 $SCENARIOS \ 445 2>/tmp/runltp.scenario.$$ || RC=$? 446 scenario_item=$(cat /tmp/runltp.scenario.$$) 447 if ! [ -z $scenario_item ];then 448 dialog --clear 449 dialog --backtitle "Linux Test Project Control Centre" \ 450 --title "LTP Scenario Files" \ 451 --textbox runtest/$scenario_item 17 70 452 fi 453done 454} 455 456 457 458# Function: main 459# 460# Description: Displays the main menu to the LTP Control Centre. The menu 461# provides options to Compile, Execute, and View test execution 462# results. 463# 464# Calls: about_ltpcc() 465# compile_ltp() 466# execute_ltp() 467# disp_ltpres() 468# 469# Input: NONE 470# 471# Output: Menu selection of actions to perform. 472 473# Global variables. 474RC=0 # return code from commands and local functions 475mmenu_item=" " 476RHOST=" " 477PASSWD=" " 478RUNALL_FLAGS=" " 479 480# call cleanup function on program exit. 481trap "cleanup" 0 482 483 484# wait in a loop until user hits [Cancel] button on the main menu. 485while : 486do 487 RC=0 488 dialog --clear 489 dialog --backtitle "Linux Test Project Control Centre" \ 490 --title "Main Menu" \ 491 --menu "Move using[UP] [DOWN], Select using [ENTER]" 15 70 5 \ 492 About "About LTP Control Centre" \ 493 Compile "Compile LTP testsuite" \ 494 Details "Details of scenario files" \ 495 Execute "Execute LTP testsuite" \ 496 Results "Display a summary of test results" \ 497 2>/tmp/runltp.mainmenu.$$ || RC=$? 498 499 case $RC in 500 0) mmenu_item=`cat /tmp/runltp.mainmenu.$$` ; 501 # echo "return code = $RC" ; 502 # echo "MENU ITEM = $mmenu_item" ; 503 case $mmenu_item in 504 About) about_ltpcc ;; 505 Compile) compile_ltp ;; 506 Details) ltp_scenarios ;; 507 Execute) execute_ltp ;; 508 Results) disp_ltpres ;; 509 esac ;; 510 511 1) display_info_msg "Good Bye!" \ 512 "Thank you for using Linux Test Project test suite.\ 513 Please visit our project website \ 514 http://ltp.sourceforge.net \ 515 for latest news on The Linux Test Project. " 516 exit ;; 517 518 255) display_info_msg "Good Bye!" \ 519 "Thank you for using Linux Test Project test suite.\ 520 Please visit our project website\ 521 http://ltp.sourceforge.net for latest news\ 522 on The Linux Test Project. " 523 exit;; 524 esac 525done 526