Home | History | Annotate | Download | only in ltp
      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.$$ 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.
    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