Home | History | Annotate | Download | only in bind
      1 #! /usr/bin/ksh
      2 #
      3 # CDDL HEADER START
      4 #
      5 # The contents of this file are subject to the terms of the
      6 # Common Development and Distribution License (the "License").
      7 # You may not use this file except in compliance with the License.
      8 #
      9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10 # or http://www.opensolaris.org/os/licensing.
     11 # See the License for the specific language governing permissions
     12 # and limitations under the License.
     13 #
     14 # When distributing Covered Code, include this CDDL HEADER in each
     15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16 # If applicable, add the following below this CDDL HEADER, with the
     17 # fields enclosed by brackets "[]" replaced with your own identifying
     18 # information: Portions Copyright [yyyy] [name of copyright owner]
     19 #
     20 # CDDL HEADER END
     21 #
     22 
     23 #
     24 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     25 # Use is subject to license terms.
     26 #
     27 
     28 #pragma ident	"@(#)testbind.ksh	1.1	09/07/12 SMI"
     29 
     30 
     31 ########################################################################
     32 # setup
     33 #
     34 # First, set up the environment and make the binaries. Then attempt to
     35 # run this shell script again as root with a 'subshell' argument, which
     36 # tells us whether or not we're in the subshell. If we are, then the 
     37 # build part is skipped and root runs the tests and will return
     38 # RC_TESTS_WERE_RUN to indicate that the tests were run.
     39 #
     40 ########################################################################
     41 
     42 export START_DIR=$PWD
     43 export RC_TESTS_WERE_RUN=100
     44 
     45 # if in subshell, skip the make
     46 if [[ $1 != 'subshell' ]]; then
     47     # user must provide source tree root
     48     if [[ -z $SFW_ROOT ]]; then
     49         echo "please define SFW_ROOT as the pathname of the workspace"
     50         echo "   e.g. export SFW_ROOT=/export/sfwnv"
     51         exit 1
     52     elif [[ ! -d  $SFW_ROOT ]]; then
     53         print -u2 "Directory defined in SFW_ROOT does not exist!"
     54         exit 1
     55     fi
     56 
     57     # user must provide a script for bldenv
     58     if [[ -z $OPENSOLARIS_SH ]] ; then
     59         echo "please define OPENSOLARIS_SH as a path to bldenv script."
     60         echo "   e.g. export OPENSOLARIS_SH=$SFW_ROOT/opensolaris.sh"
     61         exit 1
     62     elif [[ ! -f  $OPENSOLARIS_SH ]]; then
     63         print -u2 "File defined in $OPENSOLARIS_SH does not exist!"
     64         exit 1
     65     fi
     66 
     67     # check that bldenv is in the path
     68     export BLDENV=`which bldenv`
     69     if [[ -z $BLDENV ]] ; then
     70         echo "please put .../onbld/bin in your path first"
     71         exit 1
     72     fi
     73 
     74     export BIND_DIR=$SFW_ROOT/usr/src/cmd/bind
     75     export PKGDEFS=$SFW_ROOT/usr/src/pkgdefs
     76     export SUNWBIND_DIR=$PKGDEFS/SUNWbind
     77     export SUNWBINDC_DIR=$PKGDEFS/SUNWbindc
     78 
     79     # Obtain version to be tested
     80     if [[ -z $VER ]]; then
     81         cd $BIND_DIR
     82 	TAR_GZ_FILE=`ls *.tar.gz`
     83 	VER=${TAR_GZ_FILE%.tar.gz}
     84     fi
     85 
     86     # make named
     87     echo "$BLDENV $OPENSOLARIS_SH 'make -f Makefile.sfw install'"
     88     cd $BIND_DIR
     89     $BLDENV $OPENSOLARIS_SH 'make -f Makefile.sfw install'
     90     if [[ $? != 0 ]] ; then 
     91         echo "failed to build named"
     92         exit 1
     93     fi
     94 
     95     # Make the packages, note awk_pkginfo and audit_pkg are pre-req's
     96     cd $PKGDEFS
     97     $BLDENV $OPENSOLARIS_SH 'make awk_pkginfo audit_pkg'
     98 
     99     cd $PKGDEFS/SUNWbind
    100     echo "$BLDENV $OPENSOLARIS_SH 'make pkg'"
    101     $BLDENV $OPENSOLARIS_SH 'make pkg'
    102     if [[ $? != 0 ]] ; then 
    103         echo "failed to build SUNWbind"
    104         exit 1
    105     fi
    106     cd $PKGDEFS/SUNWbindc
    107     echo "$BLDENV $OPENSOLARIS_SH 'make pkg'"
    108     $BLDENV $OPENSOLARIS_SH 'make pkg'
    109     if [[ $? != 0 ]] ; then 
    110         echo "failed to build SUNWbindc"
    111         exit 1
    112     fi
    113 
    114     # Execute ourselves as root if we are not root already.
    115     if [[ $(id) != "uid=0(root)"* ]]; then
    116         export BINDDIR VER 
    117         echo '
    118         Some BIND tests require setting up network interfaces using ifconfig.
    119         This requires running as root so enter the root password below.
    120         To skip these tests, just hit enter'
    121         cd $START_DIR
    122         su root -c "$0 subshell"
    123         SU_SUCCEEDED=$?
    124     fi
    125 
    126 
    127 fi # subshell check
    128 
    129 
    130 ########################################################################
    131 # run the tests
    132 #
    133 # these will either run as root, or as the user who ran this script
    134 # initially. If root runs the tests in a subshell, this will be 
    135 # communicated back to the original shell via a return code of
    136 # RC_TESTS_WERE_RUN.
    137 #
    138 ########################################################################
    139 
    140 cd ${BIND_DIR}/$VER
    141 
    142 if [[ $SU_SUCCEEDED == $RC_TESTS_WERE_RUN ]] ; then
    143     exit 0;
    144 else
    145     export IFCONFIG_SH_DIR=${BIND_DIR}/$VER/bin/tests/system
    146     export IFCONFIG_SH=$IFCONFIG_SH_DIR/ifconfig.sh
    147 
    148     # setup interfaces if we're running as root
    149     if [[ $(id) == "uid=0(root)"* ]]; then
    150     # ROOT user, run ifconfig to set up tests
    151         ( cd $IFCONFIG_SH_DIR ; $IFCONFIG_SH up )
    152         interfaces=1
    153         echo "Please check below to make sure the interfaces are correct"
    154         ifconfig -a
    155     fi
    156 
    157 
    158     TIMESTAMP=`date +"%Y-%m-%d-%H:%M:%S"`
    159     export TEST_RESULTS=${TEST_RESULTS:-$HOME/$TIMESTAMP-bind-test-results}
    160 
    161     cd ${BIND_DIR}/$VER
    162     echo "Executing tests as `whoami` in $PWD"
    163 
    164     make test > $TEST_RESULTS 2>&1
    165 
    166     # run ifconfig to tear down tests 
    167     if [[ -n $interfaces ]]; then
    168         ( cd $IFCONFIG_SH_DIR ; $IFCONFIG_SH down )
    169         echo "Please check below to make sure the interfaces are correct"
    170         ifconfig -a
    171     fi
    172 
    173     # display test results
    174     echo "********************************************************************"
    175     echo "Test results are in the file:"
    176     ( cd `dirname $TEST_RESULTS` ; echo "   $PWD/`basename $TEST_RESULTS`" )
    177     echo "Summary: "
    178     for result in PASS FAIL UNTESTED ; do
    179         echo $result `grep -c ^R:$result $TEST_RESULTS`
    180     done
    181     # grep ^R: $TEST_RESULTS | sort | uniq
    182     echo "********************************************************************"
    183 fi
    184 
    185 exit $RC_TESTS_WERE_RUN
    186 
    187