security/nss/tests/header

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:593ee99da790
1 #! /bin/sh
2
3 ########################################################################
4 #
5 # /u/sonmi/bin/header - /u/svbld/bin/init/nss/header
6 #
7 # variables, utilities and shellfunctions global to NSS QA
8 # needs to work on all Unix platforms
9 #
10 # included from (don't expect this to be up to date)
11 # --------------------------------------------------
12 # qa_stat
13 # mksymlinks
14 # nssqa
15 #
16 # parameters
17 # ----------
18 # nssversion (supported: 30b, 31, 332, tip 32)
19 # builddate (default - today)
20 #
21 # options
22 # -------
23 # -y answer all questions with y - use at your own risk... ignores warnings
24 # -s silent (only usefull with -y)
25 # -h, -? - you guessed right - displays this text
26 # -d debug
27 # -f <filename> - write the (error)output to filename
28 # -fcronfile produces the resultfiles in the same locations
29 # as would have been produced with -cron
30 # -m <mailinglist> - send filename to mailinglist (csl) only useful
31 # with -f
32 # -ml <mailinglist> - send link to filename to mailinglist (csl)
33 # only useful with -f
34 # -cron equivalient to -y -s -d -f $RESULTDIR/$HOST.<scriptname>
35 # -t run on a tinderbox build that means: local, from the startlocation
36 # -l <mozroot directory> run on a local build mozroot
37 # -ln <mozroot> copy a networkbuild to a local directory mozroot,
38 # used for networkindipendend QA
39 # -lt try to copy a networkbuild to a local directory, if not possible
40 # run on the network
41 # used for networkindipendend QA
42 #
43 # special strings
44 # ---------------
45 # FIXME ... known problems, search for this string
46 # NOTE .... unexpected behavior
47 #
48 # moduls (not yet)
49 # ----------------
50 # --# INIT
51 # --# USERCOM
52 # --# UTILS
53 #
54 # FIXME - split in init / usercom / utils
55 #
56 ########################################################################
57
58 #------------------------------# INIT #------------------------------
59
60 # below the option flags get initialized
61
62 if [ -z "$QASCRIPT_DIR" ]
63 then
64 QASCRIPT_DIR=`dirname $0`
65 if [ "$QASCRIPT_DIR" = '.' ]
66 then
67 QASCRIPT_DIR=`pwd`
68 fi
69 fi
70 export QASCRIPT_DIR
71
72 O_HWACC=OFF
73 if [ -z "$O_ALWAYS_YES" ] ; then
74 O_ALWAYS_YES=OFF # turned on by -y answer all questions with y
75 fi
76
77 if [ -z "$O_INIT" ] # header is global, some including scripts may not
78 then # want the init to run, the others don't need to bother
79 O_INIT=ON
80 fi
81 if [ -z "$O_PARAM" ] # header is global, some including scripts may not
82 then # require parameters, the others don't need to bother
83 O_PARAM=ON
84 fi
85 if [ -z "$O_OPTIONS" ] # header is global, some including scripts may not
86 then # permit options, they don't need to bother
87 O_OPTIONS=OFF
88 fi
89 O_SILENT=OFF # turned on by -s silent (only usefull with -y)
90 if [ -z "$O_DEBUG" ] ; then
91 O_DEBUG=OFF # turned on by -d - calls to Debug produce output when ON
92 fi
93 O_FILE=OFF # turned on by -f echo all output to a file $FILENAME
94 O_CRON=OFF # turned on by -cron cron use only
95 O_CRONFILE=OFF # turned on by -cron cron and -fcron
96 O_LOCAL=OFF # turned on by -l* run on a local build in $LOCAL_MOZROOT
97 O_LN=OFF # turned on by -ln and -lt, test a networkbuild locally
98 O_MAIL=OFF # turned on by -m - sends email
99 O_MAIL_LINK=OFF # turned on by -ml - sends email
100 O_TBX=OFF # turned on by -t run on a tinderbox build
101 # that means: local, from the startlocation
102
103 if [ -z "$DOMSUF" ]
104 then
105
106 DOMSUF=red.iplanet.com
107 DS_WAS_SET=FALSE
108 else
109 DS_WAS_SET=TRUE
110 fi
111
112 TMPFILES=""
113
114 WAIT_FOR=600 # if waiting for an event sleep n seconds before rechecking
115 # recomended value 10 minutes 600
116 WAIT_TIMES=30 # recheck n times before giving up - recomended 30 - total of 5h
117
118 if [ -z "$QAYEAR" ] # may I introduce - the y2k+1 bug? QA for last year
119 then # might not work
120 QAYEAR=`date +%Y`
121 fi
122
123 if [ -z "$TMP" ]
124 then
125 if [ -z "$TEMP" ]
126 then
127 TMP="/tmp"
128 else
129 TMP=$TEMP
130 fi
131 fi
132 if [ ! -w "$TMP" ]
133 then
134 echo "Can't write to tmp directory $TMP - exiting"
135 echo "Can't write to tmp directory $TMP - exiting" >&2
136 exit 1
137 fi
138
139 KILLPIDS="$TMP/killpids.$$"
140 export KILLERPIDS
141 TMPFILES="$TMPFILES $KILLPIDS"
142
143 KILL_SELFSERV=OFF # if sourcing script sets this to on cleanup will also
144 # kill the running selfserv processes
145
146 # Set the masterbuilds
147 if [ -z "$UX_MASTERBUILD" ]
148 then
149 UX_MASTERBUILD=booboo_Solaris8
150 #if [ ! -d $UX_MASTERBUILD ] ; then
151 #UX_MASTERBUILD=booboo_Solaris8_forte6
152 #fi
153 UX_MB_WAS_SET=FALSE
154 else
155 UX_MB_WAS_SET=TRUE
156 fi
157 if [ -z "$NT_MASTERBUILD" ]
158 then
159 NT_MASTERBUILD=blowfish_NT4.0_Win95
160 NT_MB_WAS_SET=FALSE # in this case later functions can override if
161 # they find a different build that looks like NT
162 else
163 NT_MB_WAS_SET=TRUE
164 fi
165 if [ -z "$MASTERBUILD" ]
166 then
167 MASTERBUILD=$UX_MASTERBUILD
168 fi
169
170 # Set the default build
171 if [ -z "$BUILDNUMBER" ]
172 then
173 BUILDNUMBER=1
174 fi
175 export BUILDNUMBER
176 O_LDIR=OFF #local QA dir for NT, temporary
177
178 if [ -z "$WIN_WAIT_FOREVER" ] # header is global, some including scripts
179 then # want the init to wait forever for directories to
180 # appear (windows only) if OFF exit, if ON wait forever
181 WIN_WAIT_FOREVER=OFF
182 fi
183
184 # NOTE: following variables have to change
185 # from release to release
186 if [ -z "$BC_MASTER" ] # master directory for backwardscompatibility testing
187 then
188 RH="NO"
189 grep 7.1 /etc/redhat-release > /dev/null 2>/dev/null && RH="YES"
190 grep 7.2 /etc/redhat-release > /dev/null 2>/dev/null && RH="YES"
191
192 if [ "$RH" = "YES" ]
193 then # NSS-3-3-1RTM
194 BC_UX_MASTER=nss331/builds/20010928.2.331-RTM/booboo_Solaris8
195 BC_NT_MASTER=nss331/builds/20010928.2.331-RTM/blowfish_NT4.0_Win95
196 else # NSS-3-2-2RTM
197 BC_UX_MASTER=nss322/builds/20010820.1/y2sun2_Solaris8
198 BC_NT_MASTER=nss322/builds/20010820.1/blowfish_NT4.0_Win95
199 fi
200 BC_MASTER=$BC_UX_MASTER
201 BC_MASTER_WAS_SET=FALSE
202 else
203 BC_MASTER_WAS_SET=TRUE
204 fi
205 BC_RELEASE=3.2
206 export BC_RELEASE
207
208 EARLY_EXIT=TRUE #before the report file has been created, causes Exit to
209 #create it
210
211 UX_D0=/share/builds/mccrel3/nss
212
213 ################################### glob_init ##########################
214 # global shell function, main initialisation function
215 ########################################################################
216 glob_init()
217 {
218 if [ $O_PARAM = "ON" ] ; then
219 eval_opts $* # parse parameters and options - set flags
220 fi
221 # if running from cron HOST needs to be known early,
222 init_host # so the output file name can be constructed.
223 Debug "Setting up environment...( $QASCRIPT_DIR/set_environment) "
224 . $QASCRIPT_DIR/set_environment #finds out if we are running on Windows
225 Debug "OPerating system: $os_name $os_full"
226 umask 0
227 init_dirs
228 init_files
229 init_vars
230 }
231
232 ################################### init_vars ###########################
233 # global shell function, sets the environment variables, part of init
234 ########################################################################
235 init_vars()
236 {
237 if [ -z "$LOGNAME" ]
238 then
239 if [ $O_WIN = "ON" ]
240 then
241 LOGNAME=$USERNAME
242 else
243 LOGNAME=$USER
244 fi
245 if [ -z "$LOGNAME" ]
246 then
247 LOGNAME=$UNAME
248 if [ -z "$LOGNAME" ]
249 then
250 LOGNAME=`basename $HOME`
251 fi
252 fi
253 fi
254 if [ -z "$LOGNAME" ]
255 then
256 Exit "Can't determine current user"
257 fi
258 case $HOST in
259 iws-perf)
260 O_HWACC=ON
261 HWACC_LIST="rainbow ncipher"
262 #MODUTIL="-add rainbow -libfile /usr/lib/libcryptoki22.so"
263 export HWACC_LIST
264 ;;
265 *)
266 O_HWACC=OFF
267 ;;
268 esac
269 export O_HWACC
270 }
271
272 ########################################################################
273 # functions below deal with setting up the directories and PATHs for
274 # all different flavors of OS (Unix, Linux, NT MKS, NT Cygnus) and QA
275 # (Standard, local tinderbox)
276 ########################################################################
277
278 ########################## find_nt_masterbuild #########################
279 # global shell function, sets the nt masterbuild directories, part of init
280 ########################################################################
281 find_nt_masterbuild()
282 {
283 NT_MASTERDIR=${DAILY_BUILD}/${NT_MASTERBUILD}
284 if [ "${NT_MB_WAS_SET}" = "FALSE" -a ! -d $NT_MASTERDIR ] ; then
285 if [ -d ${DAILY_BUILD}/*NT4* ] ; then
286 NT_MASTERBUILD=` cd ${DAILY_BUILD}; ls -d *NT4* `
287 Debug "NT_MASTERBUILD $NT_MASTERBUILD"
288 NT_MASTERDIR=${DAILY_BUILD}/${NT_MASTERBUILD}
289 fi
290 fi
291 Debug "NT_MASTERDIR $NT_MASTERDIR"
292 }
293
294 ################################### set_daily_build_dirs ###########################
295 # global shell function, sets directories
296 ########################################################################
297 set_daily_build_dirs()
298 {
299 if [ "$O_LOCAL" = "ON" -a "$O_LN" = "OFF" ] ; then
300 DAILY_BUILD=${LOCAL_MOZROOT} # on local builds NSS_VER_DIR and DAILY_BUILD are
301 # set to the LOCAL_MOZROOT, since it is not sure
302 # if ../.. (DAILY_BUILD) even exists
303 LOCALDIST=${LOCAL_MOZROOT}/dist
304 elif [ "$O_TBX" = "ON" ] ; then
305 DAILY_BUILD="$TBX_DAILY_BUILD"
306 LOCALDIST=${UXDIST}
307 else
308 DAILY_BUILD=${NSS_VER_DIR}/builds/${QAYEAR}${BUILDDATE}.${BUILDNUMBER}
309 LOCALDIST=${DAILY_BUILD}/${MASTERBUILD}/mozilla/dist
310 fi
311 }
312
313 map_os64()
314 {
315 IS_64=""
316 case `uname -s` in
317 #OSF1) has been done already - always 64 bit
318 SunOS)
319 MAPPED_OS=Solaris*8
320 IS_64=`(isainfo -v | grep 64)>/dev/null 2>/dev/null && echo 64 bit`
321 if [ "$O_TBX" = "OFF" ] ; then
322 set_osdir
323 if [ -n "$IS_64" ]
324 then #Wait for the 64 bit build to finish...
325 Debug Testing build for $MAPPED_OS in $OSDIR
326 Wait ${OSDIR}/SVbuild.InProgress.1 0
327 fi
328 fi
329 ;;
330 AIX)
331 IS_64=`lslpp -l | grep "bos.64bit"> /dev/null && echo 64 bit`
332 ;;
333 HP-UX)
334 IS_64=`getconf KERNEL_BITS | grep 64 >/dev/null && echo 64 bit`
335 ;;
336 esac
337 Debug "Mapped OS to $MAPPED_OS"
338 }
339
340
341
342 ################################### copy_to_local ########################
343 # global shell function, copies the necessary directories from the
344 # daily build aerea to the local disk
345 ########################################################################
346 copy_to_local()
347 {
348 Debug "Copy network directories to local directories"
349 C2L_ERROR=0
350 if [ ! -d ${LOCAL_MOZROOT}/dist ] ; then
351 mkdir -p ${LOCAL_MOZROOT}/dist || C2L_ERROR=1
352 fi
353 if [ ! -d ${LOCAL_MOZROOT}/security/nss ] ; then
354 mkdir -p ${LOCAL_MOZROOT}/security/nss || C2L_ERROR=2
355 fi
356 if [ $C2L_ERROR != 0 ] ; then
357 Exit "copy_to_local: Can t make necesssary directories ($C2L_ERROR ) "
358 fi
359 if [ ! -d ${LOCAL_MOZROOT}/security/nss/tests ] ; then
360 cp -r ${TESTSCRIPTDIR} ${LOCAL_MOZROOT}/security/nss || C2L_ERROR=1
361 fi
362 if [ ! -d ${LOCAL_MOZROOT}/security/coreconf ] ; then
363 cp -r ${MOZILLA_ROOT}/security/coreconf ${LOCAL_MOZROOT}/security || C2L_ERROR=2
364 fi
365
366 NO_DIRS=0;
367 if [ "$O_WIN" = "ON" ] ; then
368 OS_TARGET=WINNT;export OS_TARGET
369 fi
370 unset BUILD_OPT;export BUILD_OPT;
371 unset USE_64;export USE_64;
372 #FIXME only tested on 64 bit Solaris and only got 32 bit builds
373 while [ $NO_DIRS -lt 4 ] ; do
374 # first time thru: Debug 32 bit NT
375 set_objdir
376 Debug "Copying ${OBJDIR}..."
377 if [ ! -d ${LOCAL_MOZROOT}/dist/${OBJDIR} ] ; then
378 cp -r ${LOCALDIST}/${OBJDIR} ${LOCAL_MOZROOT}/dist || C2L_ERROR=3
379 fi
380 NO_DIRS=`expr $NO_DIRS + 1`
381 if [ $NO_DIRS = 1 ] ; then # 2nd time: OPT 32 bit NT
382 BUILD_OPT=1; export BUILD_OPT;
383 elif [ $NO_DIRS = 2 ] ; then # 3rd time: OPT, either 64 bit or Win95 or force exit
384 if [ "$O_WIN" = "ON" ] ; then
385 OS_TARGET=WIN95;export OS_TARGET
386 else
387 map_os64
388 if [ -z "$IS_64" ] ; then #32 bit platform
389 NO_DIRS=4
390 else
391 USE_64=1; export USE_64
392 fi
393 fi
394 elif [ $NO_DIRS = 3 ] ; then # 4th time: Debug either 64 bit or Win95
395 unset BUILD_OPT;export BUILD_OPT;
396 fi
397
398
399 done
400 if [ $C2L_ERROR != 0 ] ; then
401 Exit "copy_to_local: Can t copy necesssary directories ($C2L_ERROR ) "
402 fi
403 unset TESTSCRIPTDIR
404 unset TESTDIR
405 unset RESULTDIR
406 O_LN=OFF #from here on pretend it is regular -l local QA FIXME, might cause
407 #problems with the backwardcompatibility tests
408 Debug "Successfully copied network directories to local directories"
409 }
410
411 ################################### local_dirs ###########################
412 # global shell function, sets the directories for local QA
413 ########################################################################
414 local_dirs()
415 {
416 Debug "Set directories for local QA"
417 #if [ "$O_WIN" = "ON" ] ; then
418 #win_set_tmp
419 #fi
420 NSS_VER_DIR=${LOCAL_MOZROOT} # on local builds NSS_VER_DIR and DAILY_BUILD are
421 # set to the LOCAL_MOZROOT, since it is not sure
422 # if ../../../.. (NSS_VER_DIR) even exists
423 if [ -z "${RESULTDIR}" ] ; then # needs to be local as well
424 Debug "Setting RESULTDIR for local QA"
425 RESULTDIR="${LOCAL_MOZROOT}/tests_results/security/${HOST}-`date +%Y%m%d-%H.%M`"
426 fi
427 set_daily_build_dirs
428 UX_MASTERDIR=`dirname ${LOCAL_MOZROOT}`
429 NT_MASTERDIR=$UX_MASTERDIR
430 MOZILLA_ROOT=${LOCAL_MOZROOT}
431
432 UXDIST=${MOZILLA_ROOT}/dist
433 NTDIST=${UXDIST}
434
435 if [ -z "${TESTDIR}" ] ; then
436 Debug "Setting TESTDIR for local QA"
437 TESTDIR=${RESULTDIR}
438 fi
439 if [ -n "$TESTDIR" ] ; then
440 if [ ! -d $TESTDIR ] ; then
441 Debug "Making TESTDIR for local QA"
442 mkdir -p $TESTDIR
443 fi
444 fi
445 export TESTDIR
446 Debug "RESULTDIR $RESULTDIR TESTDIR $TESTDIR"
447
448 TESTSCRIPTDIR=${LOCAL_MOZROOT}/security/nss/tests
449 COMMON=${TESTSCRIPTDIR}/common
450
451 set_objdir
452 debug_dirs
453 export_dirs
454 }
455
456
457 ################################### tbx_dirs ###########################
458 # global shell function, sets the directories for tinderbox QA
459 ########################################################################
460 tbx_dirs()
461 {
462 Debug "Set directories for tinderbox"
463 if [ "$O_WIN" = "ON" ] ; then
464 win_set_d1 # we need the NSS_VER_DIR later
465 else
466 NSS_VER_DIR="$UX_D0"/nss$NSSVER
467 fi
468 if [ -z "${RESULTDIR}" ] ; then # needs to be different for tinderbox
469 Debug "Setting RESULTDIR for tinderbox"
470 TBX_NOBITS=""
471 echo $QASCRIPT_DIR | grep 64 >/dev/null && TBX_NOBITS=64
472 TRD="${HOST}${TBX_NOBITS}-`date +%Y%m%d-%H.%M`"
473 RESULTDIR="${NSS_VER_DIR}/tinderbox/tests_results/security/${TRD}"
474 if [ ${DOMSUF} = "mcom.com" -o ${DOMSUF} = "netscape.com" -o ${DOMSUF} = "nscp.aoltw.net" ] ; then
475 URL="sbs-rel.nscp.aoltw.net"
476 else
477 URL="cindercone.red.iplanet.com"
478 fi
479 if [ "$O_WIN" = "ON" ] ; then
480 RESULTDIRURL="<a title=\"QA Results\" href=\"http://${URL}${UX_D0}/nsstip/tinderbox/tests_results/security/${TRD}\">QA</a>"
481 else
482 RESULTDIRURL="<a title=\"QA Results\" href=\"http://${URL}${RESULTDIR}\">QA</a>"
483 fi
484 Debug "RESULTDIRURL TinderboxPrint:$RESULTDIRURL"
485 fi
486 TBX_DAILY_BUILD=`cd ../../../../..;pwd`
487 NSS_VER_DIR="${TBX_DAILY_BUILD}/../.."
488 TBX_LOGFILE_DIR=`ls ${NSS_VER_DIR}/logs/tinderbox | sed -e 's/ .*//g'`
489 if [ -z "$TBX_LOGFILE_DIR" ] ; then
490 TBX_LOGFILE_DIR=`ls ${NSS_VER_DIR}/logs/tbx | sed -e 's/ .*//g'`
491 TBX_LOGFILE_DIR="${NSS_VER_DIR}/logs/tbx/${TBX_LOGFILE_DIR}"
492 else
493 TBX_LOGFILE_DIR="${NSS_VER_DIR}/logs/tinderbox/${TBX_LOGFILE_DIR}"
494 fi
495 Debug "Set TBX_LOGFILE_DIR ${TBX_LOGFILE_DIR}"
496
497 set_daily_build_dirs
498 UX_MASTERDIR=`cd ../../../..;pwd`
499 NT_MASTERDIR=$UX_MASTERDIR
500 MOZILLA_ROOT=$UX_MASTERDIR/mozilla
501
502 UXDIST=${MOZILLA_ROOT}/dist
503 NTDIST=${UXDIST}
504
505 if [ -z "${TESTDIR}" ] ; then
506 Debug "Setting TESTDIR for tinderbox"
507 TESTDIR=${RESULTDIR}
508 fi
509 if [ -n "$TESTDIR" ] ; then
510 if [ ! -d $TESTDIR ] ; then
511 Debug "Making TESTDIR for tinderbox"
512 mkdir -p $TESTDIR
513 fi
514 fi
515 Debug "Making QAstatus file"
516 echo "QA running" >${TESTDIR}/QAstatus
517 export TESTDIR
518 Debug "RESULTDIR $RESULTDIR TESTDIR $TESTDIR"
519
520 TESTSCRIPTDIR=`pwd`
521 COMMON=${TESTSCRIPTDIR}/common
522
523 set_objdir
524 debug_dirs
525 export_dirs
526 }
527
528 ################################### init_mcom ###########################
529 # global shell function, sets domain specific variables for AOL's
530 # domains according to Bishakha's instructions
531 ########################################################################
532 init_mcom()
533 {
534 Debug "Running in mcom or netscape domain - changing directories..."
535 if [ "${UX_MB_WAS_SET}" = "FALSE" ] ; then #in case it was set
536 # before script was called use these values
537 UX_MASTERBUILD=spd04_Solaris8
538 fi
539 if [ "${NT_MB_WAS_SET}" = "FALSE" ] ; then
540 NT_MASTERBUILD=spd06_NT4
541 fi
542
543 MASTERBUILD=$UX_MASTERBUILD
544 if [ "${BC_MASTER_WAS_SET}" = "FALSE" ] ; then
545 BC_UX_MASTER=nss322/builds/20010820.1/y2sun2_Solaris8
546 BC_NT_MASTER=nss322/builds/20010820.1/blowfish_NT4.0_Win95
547 BC_MASTER=$BC_UX_MASTER
548 fi
549 UX_D0=/share/builds/sbsrel2/nss
550 URL="sbs-rel.nscp.aoltw.net"
551 }
552 ################################### init_dirs ###########################
553 # global shell function, sets the directories for standard QA
554 # calls special functions for tinderbox, windows or local QA, part of init
555 ########################################################################
556 init_dirs()
557 {
558 if [ ${DOMSUF} = "mcom.com" -o ${DOMSUF} = "netscape.com" -o ${DOMSUF} = "nscp.aoltw.net" ] ; then
559 init_mcom
560 fi
561 if [ $O_WIN = "ON" ] ; then
562 win_set_tmp
563 write_to_tmpfile
564 MASTERBUILD=$NT_MASTERBUILD
565 BC_MASTER=$BC_NT_MASTER
566 fi
567 if [ "$O_LOCAL" = "ON" -a $O_LN = "OFF" ] ; then # if it is a LN we need to know
568 # all the directories off the network first to copy them
569 local_dirs # O_LOCAL alone assumes that all the directories are already there
570 return
571 elif [ "$O_TBX" = "ON" ] ; then
572 tbx_dirs
573 return
574 elif [ "$O_WIN" = "ON" ] ; then
575 win_set_d1
576 else
577 NSS_VER_DIR="$UX_D0"/nss$NSSVER
578 fi
579 #set -x
580
581 set_daily_build_dirs
582
583 if [ -z "${BCDIST}" ] ; then
584 #BCDIST=/share/builds/mccrel3/nss/${BC_MASTER}/mozilla/dist
585 BCDIST=${NSS_VER_DIR}/../${BC_MASTER}/mozilla/dist
586 if [ ! -d $BCDIST -a `basename $0` != jssqa ] ; then
587 ask "Backward compatibility directory $BCDIST does not exist, continue" "y" "n" || Exit
588 fi
589 fi
590
591 UX_MASTERDIR=${DAILY_BUILD}/${UX_MASTERBUILD}
592 find_nt_masterbuild
593
594 if [ "$O_WIN" = "ON" ]
595 then
596 MOZILLA_ROOT=${NT_MASTERDIR}/mozilla
597 else
598 MOZILLA_ROOT=${UX_MASTERDIR}/mozilla
599 fi
600
601 UXDIST=${UX_MASTERDIR}/mozilla/dist
602 NTDIST=${NT_MASTERDIR}/mozilla/dist
603
604 if [ -z "${RESULTDIR}" ] ; then
605 RESULTDIR=${UX_MASTERDIR}/mozilla/tests_results/security
606 fi
607
608 if [ -n "$PRODUCT_TO_TEST" -a "$PRODUCT_TO_TEST" = "JSS" ] ; then
609
610 if [ "$O_WIN" = "ON" ] ; then
611 JSS_NSS_SRC_DIR=$JSS_NSS_NT_SRC_DIR
612 fi
613 TESTSCRIPTDIR=${NSS_VER_DIR}/../${JSS_NSS_SRC_DIR}/mozilla/security/nss/tests
614 else
615 TESTSCRIPTDIR=${MOZILLA_ROOT}/security/nss/tests
616 fi
617
618 if [ ! -d $TESTSCRIPTDIR -a `basename $0` != jssqa ] ; then
619 if [ "$O_WIN" = "ON" -a "$WIN_WAIT_FOREVER" = "ON" ]
620 then
621 WaitForever $TESTSCRIPTDIR/all.sh 1
622 else
623 Exit "Test directory $TESTSCRIPTDIR does not exist"
624 fi
625 fi
626
627 COMMON=${TESTSCRIPTDIR}/common
628 if [ "$O_LOCAL" = "ON" -a $O_LN = "ON" ] ; then # if it is a LN we need to know
629 # all the directories off the network first to copy them
630 copy_to_local
631 local_dirs
632 fi
633 #set +x
634
635
636 set_objdir
637 debug_dirs
638 export_dirs
639 }
640
641 debug_dirs()
642 {
643 Debug "NTDIST $NTDIST"
644 Debug "UXDIST $UXDIST"
645 Debug "TESTSCRIPTDIR $TESTSCRIPTDIR"
646 Debug "RESULTDIR $RESULTDIR"
647 Debug "TMP $TMP"
648 Debug "LOCALDIST_BIN $LOCALDIST_BIN"
649 Debug "COMMON $COMMON"
650 Debug "MOZILLA_ROOT $MOZILLA_ROOT"
651 Debug "BCDIST $BCDIST"
652 }
653
654 export_dirs()
655 {
656 export NSS_VER_DIR DAILY_BUILD NTDIST UXDIST RESULTDIR TESTSCRIPTDIR BCDIST
657 export UX_MASTERDIR NT_MASTERDIR COMMON MOZILLA_ROOT
658 }
659
660 set_osdir()
661 {
662 OSDIR=${DAILY_BUILD}/*${MAPPED_OS}*
663 }
664
665 ################################### init_files ###########################
666 # global shell function, sets filenames, initializes files, part of init
667 ########################################################################
668 init_files()
669 {
670 if [ $O_CRONFILE = "ON" ]
671 then
672 Debug "attempting to create resultfiles"
673 if [ "$O_TBX" = "ON" ] ; then
674 NEWFILENAME=${TBX_LOGFILE_DIR}/qa.log
675 if [ ! -w ${TBX_LOGFILE_DIR} ] ; then
676 Exit "can't touch $NEWFILENAME"
677 fi
678 else
679 NEWFILENAME=$RESULTDIR/$HOST.`basename $0`
680 fi
681 if [ ! -d $RESULTDIR ]
682 then
683 mkdir -p $RESULTDIR || Exit "Error: can't make $RESULTDIR"
684 fi
685 if [ ! -w $RESULTDIR ] ; then
686 Exit "can't touch $NEWFILENAME"
687 fi
688 Debug "About to touch $NEWFILENAME "
689 touch $NEWFILENAME || Exit "Error: can't touch $NEWFILENAME"
690 if [ "$O_TBX" = "ON" ] ; then
691 echo "QA results in $RESULTDIR" >>$NEWFILENAME || Exit "Error: can't write to $NEWFILENAME"
692 fi
693 Debug "About to cat $FILENAME >>$NEWFILENAME "
694 cat $FILENAME >>$NEWFILENAME || Exit "Error: can't append $FILENAME to $NEWFILENAME"
695 TMPFILES="$TMPFILES $FILENAME"
696 FILENAME=$NEWFILENAME
697 Debug "Writing output to $FILENAME"
698 fi
699
700 }
701
702 ################################### write_to_tmpfile ##########################
703 # global shell function, for NT and cron operation, first a tmpfile
704 # needs to be created
705 ########################################################################
706 write_to_tmpfile()
707 {
708 O_CRONFILE=ON
709 O_FILE=ON
710 FILENAME=${TMP}/nsstmp.$$ # for now write to the temporary file
711 # since we don't know the hostname yet
712 # will be inserted to the real file later
713 TMPFILES="$TMPFILES nsstmp.$$"
714 touch $FILENAME || Exit "Error: can't touch $FILENAME"
715 Debug "Writing output to $FILENAME"
716 }
717
718 ############################# turn_on_cronoptions ######################
719 # global shell function, turns on options needed for cron and tinderbox
720 ########################################################################
721 turn_on_cronoptions()
722 {
723 O_CRON=ON
724 O_SILENT=ON
725 O_DEBUG=ON # FIXME take out!
726 O_ALWAYS_YES=ON
727 write_to_tmpfile
728 }
729
730 ########################## test_mozroot ##########################
731 # global shell function, determines if the variable LOCAL_MOZROOT is set,
732 # and is usable as mozilla root diretory for a local QA
733 ###################################################################
734 test_mozroot()
735 {
736 PWD=`pwd`
737 Debug "LOCAL_MOZROOT = $LOCAL_MOZROOT"
738 case "$LOCAL_MOZROOT" in
739 [0-9-]*|tip)
740 glob_usage "Error: -"$1" requires a directoryname to follow (start with a letter) "
741 ;;
742 \.\.)
743 LOCAL_MOZROOT=`dirname $PWD`
744 ;;
745 \.)
746 LOCAL_MOZROOT=$PWD
747 ;;
748 \.\/*)
749 LOCAL_MOZROOT=`echo $LOCAL_MOZROOT | sed -e "s/^\.//"`
750 LOCAL_MOZROOT="${PWD}${LOCAL_MOZROOT}"
751 ;;
752 \.\.\/*)
753 LOCAL_MOZROOT="${PWD}/${LOCAL_MOZROOT}"
754 ;;
755 \/*|[a-zA-Z]:\/*)
756 ;;
757 ?*)
758 LOCAL_MOZROOT="${PWD}/${LOCAL_MOZROOT}"
759 ;;
760 *)
761 glob_usage "Error: -"$1" requires a directoryname to follow"
762 ;;
763 esac
764 Debug "Reformated MOZROOT to $LOCAL_MOZROOT"
765 if [ "$1" = "ln" ] ; then
766 LOCAL_MOZROOT_PARENT=`dirname $LOCAL_MOZROOT`
767 if [ ! -d $LOCAL_MOZROOT_PARENT -o ! -w $LOCAL_MOZROOT_PARENT -o \
768 ! -x $LOCAL_MOZROOT_PARENT ] ; then
769 Exit "Error: Can't create $LOCAL_MOZROOT (permissions)"
770 fi
771 if [ ! -d "$LOCAL_MOZROOT" ] ; then
772 mkdir $LOCAL_MOZROOT ||
773 Exit "Error: Can't create mozroot $LOCAL_MOZROOT (mkdir failed)"
774 else
775 ask "mozroot $LOCAL_MOZROOT exists - continue (y will remove dir) ?" \
776 "y" "n" || Exit
777 rm -rf $LOCAL_MOZROOT/dist $LOCAL_MOZROOT/security $LOCAL_MOZROOT/tests_results ||
778 Exit "Error: Can't clean mozroot $LOCAL_MOZROOT"
779 fi
780 fi
781 if [ ! -d "$LOCAL_MOZROOT" ] ; then
782 glob_usage "Error: mozilla root $LOCAL_MOZROOT not a valid directory"
783 fi
784 }
785
786 ################################### eval_opts ##########################
787 # global shell function, evapuates options and parameters, sets flags
788 # variables and defaults
789 ########################################################################
790 eval_opts()
791 {
792 while [ -n "$1" ]
793 do
794 case $1 in
795 -cron)
796 turn_on_cronoptions
797 ;;
798 -T*|-t*)
799 O_TBX=ON
800 turn_on_cronoptions
801 O_SILENT=OFF #FIXME debug only
802 ;;
803 -S*|-s*)
804 O_SILENT=ON
805 ;;
806 -Y*|-y)
807 Debug "Option -y dedectet"
808 O_ALWAYS_YES=ON
809 ;;
810 -d*|-D)
811 O_DEBUG=ON
812 #set -x
813 ;;
814 -ml|-ML)
815 O_MAIL_LINK=ON
816 shift
817 MAILINGLIST=$1
818 if [ -z "$MAILINGLIST" ]
819 then
820 glob_usage "Error: -m requires a mailinglist to follow, for example sonmi,wtc,nelsonb "
821 fi
822 Debug "Sending link to result to $MAILINGLIST"
823 ;;
824 -m|-M)
825 O_MAIL=ON
826 shift
827 MAILINGLIST=$1
828 if [ -z "$MAILINGLIST" ]
829 then
830 glob_usage "Error: -m requires a mailinglist to follow, for example sonmi,wtc,nelsonb "
831 fi
832 Debug "Sending result to $MAILINGLIST"
833 ;;
834 -fcron*|-F[Cc][Rr][Oo][Nn]*)
835 write_to_tmpfile
836 ;;
837 -f|-F)
838 O_FILE=ON
839 shift
840 FILENAME=$1
841 if [ -z "$FILENAME" ]
842 then
843 glob_usage "Error: -f requires a filename to follow"
844 fi
845 #rm -f $FILENAME 2>/dev/null
846 touch $FILENAME || Exit "Error: can't touch $FILENAME"
847 #NOTE we append rather that creating
848 Debug "Writing output to $FILENAME"
849 ;;
850 -h|-help|"-?")
851 glob_usage
852 ;;
853 -ln)
854 if [ `basename $0` != nssqa ] ; then
855 glob_usage "Error: Can't handle option $1"
856 fi
857 O_LOCAL=ON
858 O_LN=ON
859 shift
860 LOCAL_MOZROOT=$1
861 test_mozroot ln
862 ;;
863 -lt)
864 if [ `basename $0` != nssqa ] ; then
865 glob_usage "Error: Can't handle option $1"
866 fi
867 O_LN=ON
868 O_LOCAL=ON
869 ;;
870 -l)
871 if [ `basename $0` != nssqa ] ; then
872 glob_usage "Error: Can't handle option $1"
873 fi
874 O_LOCAL=ON
875 shift
876 LOCAL_MOZROOT=$1
877 test_mozroot l
878 ;;
879 -p)
880 shift
881 PORT=$1
882 export PORT
883 ;;
884 -*)
885 glob_usage "Error: Can't handle option $1"
886 ;;
887 tip|3.|3..)
888 NSSVER=$1
889 if [ -z "$NSSVER" ] ; then
890 glob_usage "Error: illegal parameter"
891 fi
892 ;;
893 [01][0-9][0123][0-9])
894 BUILDDATE=$1
895 if [ -z "$BUILDDATE" ] ; then
896 glob_usage "Error: illegal parameter"
897 fi
898 ;;
899 ?*)
900 glob_usage "Error: Can't handle parameter $1"
901 ;;
902 esac
903 shift
904 done
905
906 if [ -z "$PORT" -a "$O_TBX" = "ON" ] ; then
907 PORT=8444
908 export PORT
909 if [ -z "$NSSVER" ] ; then
910 NSSVER="tip"
911 Debug "NSS Version: Parameters missing - defaulting to tip!"
912 fi
913 elif [ -z "$NSSVER" ] ; then
914 NSSVER="tip"
915 Debug "NSS Version: Parameters missing - defaulting to tip!"
916 fi
917 if [ -z "$BUILDDATE" ] ; then
918 BUILDDATE=`date +%m%d`
919 Debug "Builddate: Parameters missing - defaulting to today!"
920 fi
921
922 Debug "Builddate $BUILDDATE NssVersion $NSSVER"
923 export BUILDDATE NSSVER
924 export O_CRON O_SILENT O_DEBUG O_ALWAYS_YES O_TBX
925 }
926
927 win_set_tmp()
928 {
929 TMP=`echo "$TMP" | sed -e 's/ /\/t/g' -e 's//\/b/' -e 's/\\\/\//g'`
930 Debug "TMP reformated to $TMP"
931 }
932
933 ######################### win_set_d1 ################################
934 # global shell function, interactively finds the directories in case
935 # windows can't get to the default
936 ########################################################################
937 win_set_d1()
938 {
939 Debug "set Windows Directories..."
940 #win_set_tmp
941 if [ "$O_CYGNUS" = ON ]
942 then
943 NSS_VER_DIR=/cygdrive/w/nss/nss$NSSVER
944 else
945 NSS_VER_DIR=w:/nss/nss$NSSVER
946 fi
947 if [ ! -w $NSS_VER_DIR ]
948 then
949 Echo "Windows special... can't write in $NSS_VER_DIR"
950 if [ "$O_CYGNUS" = ON ]
951 then
952 NSS_VER_DIR=/cygdrive/u/nss/nss$NSSVER
953 else
954 NSS_VER_DIR="u:/nss/nss$NSSVER"
955 fi
956 else
957 Debug "NSS_VER_DIR set to $NSS_VER_DIR"
958 return
959 fi
960
961 while [ ! -w $NSS_VER_DIR ]
962 do
963 if [ "$O_CRONFILE" = "ON" ]
964 then
965 Exit "cant write in $NSS_VER_DIR"
966 fi
967 Warning "cant write in $NSS_VER_DIR"
968 Echo "input start directory (u:/nss, d:/src/nss, f:/shared/nss) "
969 read D
970 if [ -n "$D" ]
971 then
972 NSS_VER_DIR=$D/nss$NSSVER
973 fi
974 done
975 Debug "NSS_VER_DIR set to $NSS_VER_DIR"
976 }
977
978 ########################### init_host ##################################
979 # global shell function, sets required variables HOST and DOMSUF, and asks
980 # the user if it has been set right
981 ########################################################################
982 set_host()
983 {
984 init_host
985 }
986 init_host()
987 {
988 if [ `basename $0` != nssqa ] ; then
989 return
990 fi
991
992 init_host_done=0
993
994 if [ $DS_WAS_SET = FALSE ] #give chance to overwrite, espec. for NT
995 then
996 Debug "Domainname was not set..."
997 DOMSUF=`domainname 2>/dev/null`
998 if [ -z "$DOMSUF" ]
999 then
1000 Debug "domainname command did not work ..."
1001 DOMSUF=`echo $HOST | grep '\.' | sed -e "s/[^\.]*\.//"`
1002
1003 if [ -z "$DOMSUF" ]
1004 then
1005 Debug "Domainname not part of the hostname"
1006 DOMSUF=`cat /etc/defaultdomain 2>/dev/null`
1007 if [ -z "$DOMSUF" ]
1008 then
1009 Debug "Domainname needs to be hardcoded to red.iplanet.com"
1010 DOMSUF="red.iplanet.com"
1011 fi
1012 fi
1013 fi
1014 fi
1015 case $HOST in
1016 *\.*)
1017 Debug "HOSTNAME $HOST contains Dot"
1018 HOST=`echo $HOST | sed -e "s/\..*//"`
1019 ;;
1020 esac
1021 if [ -z "$HOST" ]
1022 then
1023 HOST=`uname -n`
1024 case $HOST in
1025 *\.*)
1026 Debug "HOSTNAME $HOST contains Dot"
1027 HOST=`echo $HOST | sed -e "s/\..*//"`
1028 ;;
1029 esac
1030 fi
1031 if [ $O_DEBUG = "ON" ]
1032 then
1033 while [ $init_host_done -eq 0 ]
1034 do
1035 Echo
1036 ask "DOMSUF=$DOMSUF, HOST=$HOST - OK", "y" "n" &&
1037 init_host_done=1
1038 if [ $init_host_done -eq 0 ]
1039 then
1040 Echo "input DOMSUF: "
1041 read D
1042 if [ -n "$D" ]
1043 then
1044 DOMSUF=$D
1045 fi
1046 Echo "input HOST: "
1047 read H
1048 if [ -n "$H" ]
1049 then
1050 HOST=$H
1051 fi
1052 fi
1053 done
1054 fi
1055 export HOST DOMSUF
1056 Debug "HOST: $HOST, DOMSUF: $DOMSUF"
1057 }
1058
1059 #-----------------------------# UTILS #----------------------------------
1060
1061 ########################### qa_stat_get_sysinfo ########################
1062 # local shell function, tries to determine the QA operating system
1063 ########################################################################
1064 qa_stat_get_sysinfo()
1065 {
1066 case $1 in
1067 ?*) REM_SYS=$1
1068 GET_SYSINFO="rsh $1"
1069 ;;
1070 *) REM_SYS=""
1071 GET_SYSINFO=""
1072 ;;
1073 esac
1074 QA_SYS=`$GET_SYSINFO uname -sr`
1075 echo $QA_SYS | grep Linux >/dev/null &&
1076 QA_RHVER=`$GET_SYSINFO cat /etc/redhat-release`
1077 if [ -n "$QA_RHVER" ]
1078 then
1079 QA_OS=`echo $REM_SYS $QA_RHVER | sed -e "s/Red Hat /RH /" \
1080 -e "s/ release//"`
1081 else
1082 case $QA_SYS in
1083 *SunOS*5.[89]*)
1084 ISAINFO=`$GET_SYSINFO isainfo -v`
1085 IS_64=`echo $ISAINFO | grep 64 >/dev/null && \
1086 echo 64 bit`
1087 IS_I386=`echo $ISAINFO | grep i386 >/dev/null && \
1088 echo i86pc`
1089 if [ -n "$IS_I386" ] ; then IS_64="$IS_I386"; fi;
1090 if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
1091 ;;
1092 *HP*)
1093 IS_64=`$GET_SYSINFO getconf KERNEL_BITS |
1094 grep 64 >/dev/null && echo 64 bit`
1095 if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
1096 ;;
1097 *AIX*)
1098 IS_64=`$GET_SYSINFO lslpp -l |
1099 grep "bos.64bit"> /dev/null && echo 64 bit`
1100 if [ -z "$IS_64" ] ; then IS_64="32 bit"; fi;
1101 ;;
1102 esac
1103 QA_OS=`echo "$REM_SYS $QA_SYS $IS_64"`
1104 fi
1105 if [ "$O_SILENT" != ON ] ; then
1106 echo $QA_OS
1107 fi
1108 QA_OS_STRING=`echo $QA_OS | sed -e "s/^[_ ]//" -e "s/ /_/g"`
1109 }
1110
1111 ################################### set_objdir #########################
1112 # global shell function, sets the object directories and DIST
1113 ########################################################################
1114 set_objdir()
1115 {
1116 Debug "set object dir"
1117 OBJDIR=`cd ${TESTSCRIPTDIR}/common; gmake objdir_name`
1118 OS_ARCH=`cd ${TESTSCRIPTDIR}/common; gmake os_arch`
1119
1120 #at this point $MASTERBUILD needs to be either NT or unix
1121
1122 set_daily_build_dirs
1123 LOCALDIST_BIN=${LOCALDIST}/${OBJDIR}/bin
1124 DIST=$LOCALDIST
1125
1126 if [ -z "${TEST_LEVEL}" ] ; then
1127 TEST_LEVEL=0
1128 fi
1129 bc ${TEST_LEVEL} #set the path for the backward compatibility test
1130
1131 PATH_CONTAINS_BIN="TRUE"
1132 export PATH_CONTAINS_BIN
1133
1134 export OBJDIR OS_ARCH LOCALDIST LOCALDIST_BIN DIST PATH
1135 }
1136
1137 ########################### bc #########################################
1138 # global shell function , sets paths for the backward compatibility test
1139 ########################################################################
1140 bc()
1141 {
1142 if [ -n "$PRODUCT_TO_TEST" -a "$PRODUCT_TO_TEST" = "JSS" ] ; then
1143 TESTDIR=${RESULTDIR}
1144 BC_ACTION=""
1145 DON_T_SET_PATHS="FALSE" #let init.sh override - FIXME - check if necessary
1146 return
1147 fi
1148 DON_T_SET_PATHS="TRUE"
1149 case $1 in
1150 0)
1151 #unset TESTDIR
1152 TESTDIR=${RESULTDIR}
1153 if [ "$O_WIN" = "ON" -a "$O_CYGNUS" != ON ] ; then
1154 PATH="$TESTSCRIPTDIR;$LOCALDIST_BIN;$BASEPATH"
1155 else
1156 PATH=$TESTSCRIPTDIR:$LOCALDIST_BIN:$BASEPATH
1157 fi
1158 BC_ACTION=""
1159 DON_T_SET_PATHS="FALSE" #let init.sh override - FIXME - check if necessary
1160 ;;
1161 *)
1162 if [ "$O_LOCAL" = "ON" ] ; then
1163 Exit "FIXME Can't run backwardcompatibility tests locally yet"
1164 fi
1165 TESTSCRIPTDIR=${BCDIST}/../security/nss/tests
1166 COMMON=${TESTSCRIPTDIR}/common
1167 TESTDIR=${RESULTDIR}/bct
1168 BC_ACTION="backward compatibility of binaries in $BC_MASTER to new libs"
1169 BCDIST_BIN=${BCDIST}/${OBJDIR}/bin
1170 LD_LIBRARY_PATH=${LOCALDIST}/${OBJDIR}/lib
1171 if [ "$O_WIN" = "ON" ] ; then
1172 if [ "$O_CYGNUS" = ON ] ; then
1173 PATH=$TESTSCRIPTDIR:$BCDIST_BIN:$BASEPATH:$LD_LIBRARY_PATH
1174 else
1175 PATH="$TESTSCRIPTDIR;$BCDIST_BIN;$BASEPATH;$LD_LIBRARY_PATH"
1176 fi
1177 else
1178 PATH=$TESTSCRIPTDIR:$BCDIST_BIN:$BASEPATH
1179 fi
1180 Debug "1st stage of backward compatibility test"
1181 ;;
1182 esac
1183 if [ -n "$TESTDIR" ] ; then
1184 if [ ! -d $TESTDIR ] ; then
1185 mkdir -p $TESTDIR
1186 fi
1187 export TESTDIR
1188 fi
1189 SHLIB_PATH=${LD_LIBRARY_PATH}
1190 LIBPATH=${LD_LIBRARY_PATH}
1191 Debug "PATH $PATH"
1192 Debug "LD_LIBRARY_PATH $LD_LIBRARY_PATH"
1193 export PATH LD_LIBRARY_PATH SHLIB_PATH LIBPATH
1194 export DON_T_SET_PATHS BC_ACTION
1195 export TESTSCRIPTDIR COMMON
1196 }
1197
1198 ########################### Ps #########################################
1199 # global shell function , attempts a platform specific ps
1200 ########################################################################
1201 Ps()
1202 {
1203 #AIX, OSF ps -ef, solaris /usr/5bin/ps -ef, win ps -ef but no user id
1204 #linux ps -ef, HP
1205
1206 if [ $os_name = "SunOS" ]
1207 then
1208 /usr/5bin/ps -ef
1209 else
1210 ps -ef
1211 fi
1212 }
1213
1214 ########################### kill_by_name ################################
1215 # global shell function , kills the process whose name is given as
1216 # parameter
1217 ########################################################################
1218 kill_by_name()
1219 {
1220 for PID in `Ps | grep "$1" | grep -v grep | \
1221 sed -e "s/^ *//g" -e "s/^[^ ]* //" -e "s/^ *//g" -e "s/ .*//g"`
1222 do
1223 if [ $O_WIN = "ON" -a $O_CYGNUS = "ON" ]
1224 then
1225 ask "Do you want to kill Process $PID (`Ps | grep $PID | \
1226 grep -v grep | awk '{ print $1, $2, $6, $7, $8, $9 }' | \
1227 sed -e "s/[0-9]:[0-6][0-9]//g" | grep $PID `)" \
1228 "y" "n" && {
1229 kill $PID
1230 sleep 1
1231 kill -9 $PID 2>/dev/null
1232 }
1233 else
1234 ask "Do you want to kill Process $PID (`Ps | grep $PID | \
1235 grep -v grep | awk '{ print $1, $2, $8, $9, $10, $11 }' | \
1236 sed -e "s/[0-9]:[0-6][0-9]//g" | grep $PID `)" \
1237 "y" "n" && {
1238 kill $PID
1239 sleep 1
1240 kill -9 $PID 2>/dev/null
1241 }
1242 fi
1243 done
1244 }
1245
1246 ############################### early_exit ###################################
1247 # global shell function , attempts a little more usefull user notification
1248 # of a complete failure
1249 ########################################################################
1250
1251 early_exit()
1252 {
1253 if [ -z "$DOCDIR" ]
1254 then
1255 DOCDIR=`dirname $0`/../doc
1256 fi
1257 if [ -f $DOCDIR/QAerror.html ]
1258 then
1259 Debug "Found QA errorheader"
1260 rm ${FILENAME}.err 2>/dev/null
1261 cp $DOCDIR/QAerror.html ${FILENAME}.err
1262 echo "$1" >>${FILENAME}.err
1263 echo '</font></b></h1>' >>${FILENAME}.err
1264 if [ -n "$FILENAME" -a -f "$FILENAME" ]
1265 then
1266 cat $FILENAME | sed -e "s/^/<br>/" >>${FILENAME}.err
1267 fi
1268 echo '</body></html>' >>${FILENAME}.err
1269 cat ${FILENAME}.err | $RMAIL $MAILINGLIST
1270
1271 rm ${FILENAME}.err 2>/dev/null
1272 #echo "cat ${FILENAME}.err | $RMAIL $MAILINGLIST "
1273 fi
1274 }
1275
1276 ############################### Exit ###################################
1277 # global shell function , central exiting point
1278 # cleanup: temporary files, kill the remaining selfservers if sourcing
1279 # script sets KILL_SELFSERV
1280 ########################################################################
1281 Exit()
1282 {
1283 Echo $1
1284 if [ "$O_CRON" = "OFF" ]
1285 then
1286 echo $1 >&2
1287 fi
1288 if [ -f "${KILLPIDS}" ]
1289 then
1290 Debug "Attempting to kill background processes...`cat ${KILLPIDS}`"
1291 kill `cat "${KILLPIDS}"`
1292 sleep 1
1293 kill -9 `cat "${KILLPIDS}"`
1294 fi
1295 if [ -n "${TMPFILES}" ]
1296 then
1297 Debug "rm -f ${TMPFILES}"
1298 rm -f $TMPFILES 2>/dev/null
1299 fi
1300 O_ALWAYS_YES=ON # set to non-interactive - don't ask anymore questions here
1301 if [ $KILL_SELFSERV = "ON" ]
1302 then
1303 kill_by_name selfserv
1304 fi
1305 if [ $O_MAIL_LINK = "ON" -a $O_FILE = "ON" ]
1306 then
1307 if [ $EARLY_EXIT = TRUE ] #before the report file has been created
1308 then
1309 early_exit "$1"
1310 else
1311 head -3 $FILENAME >$ML_FILE
1312 echo "Content-Type: text/plain; charset=us-ascii; format=flowed
1313 Content-Transfer-Encoding: 7bit
1314
1315 " >>$ML_FILE
1316 echo $HREF_TMP_HTML_FILE >>$ML_FILE
1317 cat $ML_FILE | $RMAIL $MAILINGLIST
1318 fi
1319
1320 #FIXME - early exit etc
1321 elif [ $O_MAIL = "ON" -a $O_FILE = "ON" ]
1322 then
1323 if [ $EARLY_EXIT = TRUE ] #before the report file has been created
1324 then
1325 early_exit "$1"
1326 elif [ -n "$FILENAME" -a -f "$FILENAME" ]
1327 then
1328 cat $FILENAME | $RMAIL $MAILINGLIST
1329 fi
1330 #rm $FILENAME 2>/dev/null
1331 elif [ $O_MAIL = "ON" -a $EARLY_EXIT = TRUE ]
1332 then
1333 early_exit "$1"
1334 rm $FILENAME 2>/dev/null
1335 fi
1336 #chmod a+rw ${RESULTDIR} ${RESULTDIR}/* ${RESULTDIR}/*/* &
1337 if [ -n "$O_TBX" -a "$O_TBX" = "ON" ] ; then
1338 rm ${TESTDIR}/QAstatus
1339
1340 if [ "$1" = "killed... cleaning up..." ] ; then
1341 echo "QA killed" >${TESTDIR}/QAstatus
1342 elif [ "$TBX_EXIT" = 0 ] ; then
1343 echo "QA passed" >${TESTDIR}/QAstatus
1344 else
1345 echo "QA failed" >${TESTDIR}/QAstatus
1346 fi
1347
1348 exit $TBX_EXIT
1349
1350 else
1351 exit
1352 fi
1353 }
1354
1355 trap "rm -f ${TMPFILES} 2>/dev/null; Exit 'killed... cleaning up...'" 2 3 15
1356
1357 ################################ Wait ##################################
1358 # global shell function to wait for an event to happen, 1st parameter
1359 # filename to watch, 2nd parameter 0 - wait for it to disappear, 1 wait
1360 # for it to be created.
1361 # uses the variables WAIT_FOR and WAIT_TIMES
1362 # WAIT_FOR: if waiting for an event sleep n seconds before rechecking
1363 # recomended value 10 minutes 600
1364 # WAIT_TIMES: recheck n times before giving up to prevent endless loop
1365 # recomended 30 - total of 5h
1366 ########################################################################
1367
1368 Wait()
1369 {
1370 i=0
1371 Debug "Waiting for $1"
1372 while [ $i -lt $WAIT_TIMES ]
1373 do
1374 i=`expr $i + 1`
1375 if [ -f "$1" -a $2 -eq 1 ] # if file exists and is supposed to
1376 then
1377 return
1378 fi
1379 if [ ! -f "$1" -a $2 -eq 0 ] # not exists and not supposed to exist
1380 then
1381 return
1382 fi
1383 Debug "Waiting for $1, loop #$i, about to sleep $WAIT_FOR seconds zzzz..."
1384 sleep $WAIT_FOR
1385 done
1386 TOTAL=`expr $WAIT_TIMES \* $WAIT_FOR / 60`
1387 Exit "I HAVE WAITED LONG ENOUGH FOR $1 NOW, I'M GONE! (THAT WAS A TOTAL OF $TOTAL MINUTES) I have better things to do... "
1388 }
1389
1390 ################################ WaitForever ##################################
1391 # global shell function to wait for an event to happen, 1st parameter
1392 # filename to watch, 2nd parameter 0 - wait for it to disappear, 1 wait
1393 # for it to be created.
1394 # because we daon't have any relyable cron on NT...
1395 ########################################################################
1396
1397 WaitForever()
1398 {
1399 i=0
1400 Debug "Waiting for $1"
1401 TOTAL=0
1402 while [ 1 ]
1403 do
1404 i=`expr $i + 1`
1405 if [ -f "$1" -a $2 -eq 1 ] # if file exists and is supposed to
1406 then
1407 return
1408 fi
1409 if [ ! -f "$1" -a $2 -eq 0 ] # not exists and not supposed to exist
1410 then
1411 return
1412 fi
1413 Debug "Waiting for $1, loop #$i, about to sleep $WAIT_FOR seconds Total $TOTAL"
1414 sleep $WAIT_FOR
1415 TOTAL=`expr $i \* $WAIT_FOR / 60`
1416 if [ -n "$MAX_FOREVER" ] # we are cheating. Forever can be very short...
1417 then
1418 if [ "$TOTAL" -gt "$MAX_FOREVER" ]
1419 then
1420 Exit "I HAVE WAITED LONG ENOUGH FOR $1 NOW, I'M GONE! (THAT WAS A TOTAL OF $TOTAL MINUTES) I have better things to do... "
1421 fi
1422 fi
1423 done
1424 }
1425 ################################### is_running #########################
1426 # global shell function , implements primitive locking mechanism
1427 # filename is passed as a parameter, if filename.* exists we assume calling
1428 # script is running already and exit, otherwise filename.processid is
1429 # created
1430 ########################################################################
1431 is_running()
1432 {
1433 Debug "Testing if $0 is already running... file ${1} - ${1}.$$"
1434 if [ -f ${1}.* ]
1435 then
1436 Exit "$0 seems to be running already ($1 exists) - Exiting"
1437 fi
1438 TMPFILES="$TMPFILES ${1}.$$"
1439 echo "running $0 on `date` PID $$" >${1}.$$
1440 Debug "wrote \"running $0 on `date` PID $$\" to ${1}.$$"
1441
1442 }
1443
1444 #---------------------------# USERCOM #---------------------------------
1445 ############################## Echo #####################################
1446 # global shell function , depending on the options the output gets written
1447 # to a file, or is being discarded
1448 # FIXME \n and \c are mistreates by differnet shells, and linux has /bin/echo
1449 # instead of /usr/bin/echo
1450 ########################################################################
1451 Echo ()
1452 {
1453 if [ $O_SILENT = OFF ]
1454 then
1455 echo "$*"
1456 #/usr/bin/echo "$*"
1457 fi
1458 if [ $O_FILE = ON ]
1459 then
1460 echo "$*" >>$FILENAME
1461 fi
1462 }
1463
1464 ################################### ask ################################
1465 # global shell function, Asks the a question, and gives the returns 0
1466 # on the 1st choice, 1 on the 2nd choice
1467 #
1468 # PARAMETERS:
1469 # $1 question text
1470 # $2 1st choice
1471 # $3 2nd choice
1472 #
1473 # MODIFIERS:
1474 # -y O_ALWAYS_YES will assume a first choice always (not neccessaryly "y")
1475 #
1476 # RETURN:
1477 # 0 - User picked 1st choice
1478 # 1 - User picked 2nd choice
1479 #
1480 # EXAMPLE
1481 # ask "Would you like to continue" "y" "n" || Exit
1482 # will produce the string "Would you like to continue (y/n) ?",
1483 # read input from keyboard (or assume a yes with option -y)
1484 # - on a yes it will return 0, on a no it will return 1, the
1485 # shell interprets it as error and the || Exit will be executed
1486 #
1487 # NOTE: NEVER use "n" as the second parameter - it will mess up -y
1488 # don't ask "Continue" "n" "y" || Exit # it will Exit on a "y"
1489 #
1490 ########################################################################
1491 Ask()
1492 {
1493 ask $*
1494 }
1495
1496 ask()
1497 {
1498 if [ $O_ALWAYS_YES = ON ]
1499 then
1500 Echo "$1 ($2/$3) ?"
1501 Echo "YES!"
1502 return 0
1503 fi
1504 A=""
1505 while [ 1 ]
1506 do
1507
1508 Echo "$1 ($2/$3) ?"
1509 read A
1510 if [ -n "$A" ]
1511 then
1512 if [ $A = $2 ]
1513 then
1514 return 0
1515 elif [ $A = $3 ]
1516 then
1517 return 1
1518 fi
1519 fi
1520 done
1521 return 0
1522 }
1523
1524 ################################### Warning ############################
1525 # global shell function, Asks the user a "... continue? (y/n)" question,
1526 # and exits when the user answers with no
1527 # NOTE -y will answer the warnings always with yes
1528 ########################################################################
1529 Warning ()
1530 {
1531 ask "WARNING: $0: \n $* continue " "y" "n" || Exit
1532 }
1533
1534 ################################### Debug ############################
1535 # global shell function, when option -d Debugging output is written
1536 ########################################################################
1537 Debug()
1538 {
1539 if [ $O_DEBUG = ON ]
1540 then
1541 Echo "DEBUG: (`date +%H:%M`) $0: $*"
1542 fi
1543 }
1544
1545 ################################### line ###############################
1546 # global shell function, supposed to make output more readable...
1547 ########################################################################
1548 line()
1549 {
1550 Echo
1551 #Echo "======================================================================="
1552 #Echo
1553 }
1554
1555 ################################### opt_usage ##########################
1556 # global shell function, tells user about available options
1557 ########################################################################
1558 opt_usage()
1559 {
1560 if [ $O_OPTIONS = "ON" ]
1561 then
1562 Echo
1563 line
1564 Echo
1565 Echo " -y answer all questions with y - use at your own risk..."
1566 Echo " -s silent (only usefull with -y)"
1567 Echo " -h, -? - you guessed right - displays this text"
1568 Echo " -d debug"
1569 Echo " -f <filename> - write the (error)output to filename"
1570 Echo " -fcronfile produces the resultfiles in the same locations"
1571 Echo " as would have been produced with -cron"
1572 Echo " -m <mailinglist> - send filename to mailinglist (csl "
1573 Echo " example sonmi,nelsonb,wtc) only useful with -f"
1574 Echo " -ml <mailinglist> - send link to filename to mailinglist "
1575 Echo " (csl example sonmi,nelsonb,wtc) only useful with -f"
1576 Echo " -cron equivalient to -y -s -d -f \$RESULTDIR/\$HOST.nssqa"
1577 Echo " -t run on a tinderbox build (included -cron)"
1578 if [ `basename $0` = nssqa ] ; then
1579 Echo " -l <mozroot> run on a local build"
1580 Echo " -ln <mozroot> copy a networkbuild to a local directory "
1581 Echo " mozroot, used for networkindipendend QA "
1582 Echo " -lt try to copy a networkbuild to a local directory, if"
1583 Echo " not possible run on the network
1584 Echo " used for networkindipendend QA
1585 fi
1586 #
1587 # special strings
1588 fi
1589
1590 }
1591
1592 ################################### glob_usage #########################
1593 # global shell function, how to use the calling script (parameters, options)
1594 ########################################################################
1595 glob_usage()
1596 {
1597 line
1598 Echo $1
1599 Echo
1600 if [ $O_OPTIONS = "ON" ]
1601 then
1602 Echo "usage $0 [options] nssversion builddate"
1603 else
1604 Echo "usage $0 nssversion builddate"
1605 fi
1606
1607 Echo " for example: $0 30b 0926"
1608 Echo " $0 31 1002"
1609 opt_usage
1610 Echo
1611 Exit "$1"
1612 }
1613
1614 tell()
1615 {
1616 if [ $O_SILENT = OFF ]
1617 then
1618 line
1619 pwd
1620 ls -CF
1621 line
1622 fi
1623 if [ $O_FILE = ON ]
1624 then
1625 line
1626 pwd >>$FILENAME
1627 ls -CF >>$FILENAME
1628 line
1629 fi
1630 }
1631
1632 if [ $O_INIT = "ON" ]
1633 then
1634 glob_init $*
1635 fi
1636 EARLY_EXIT=FALSE

mercurial