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