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