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@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@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@us.ibm.com 41# 42# April 17 2003 - Added menu selection to list contents of selected 43# scenario file. 44# Robbie Williamson - robbiew@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@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 63cleanup() 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. 81display_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. 103compile_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.$$ 2>&1 ; 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. 162disp_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 218flags_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. 280exectest_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 318execute_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. 428about_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@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. 448ltp_scenarios() 449{ 450 451RC=0 452SCENARIOS=$(for i in `ls -1 -A -I "CVS" runtest`;do echo -n "$i [more...] "; done) 453 454while [ $RC -ne "1" ] 455do 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 469done 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. 490RC=0 # return code from commands and local functions 491mmenu_item=" " 492RHOST=" " 493PASSWD=" " 494RUNALL_FLAGS=" " 495RESULTS_FILE=" " 496 497# test for dialog program exist 498if [ ! -x /usr/bin/dialog ]; then 499 echo "Sorry, ltpmenu GUI not available, can't find dialog. Exiting..."; 500 exit 1; 501fi 502 503# call cleanup function on program exit. 504trap "cleanup" 0 505 506 507# wait in a loop until user hits [Cancel] button on the main menu. 508while : 509do 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 548done 549