1#!/bin/sh 2# 3# 4# Copyright (c) International Business Machines Corp., 2000 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, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 14# the GNU General Public License 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 : rdist 23# 24# PURPOSE: To test the basic functionality of the `rdist` command. 25# 26# SETUP: The home directory of root on the machine exported as "RHOST" 27# MUST have a ".rhosts" file with the hostname of the machine 28# where the test is executed. 29# 30# HISTORY: 31# 06/06/03 Manoj Iyer manjo@mail.utexas.edu 32# - Modified testcases to use test harness APIs and fixed defects 33# 03/01 Robbie Williamson (robbiew@us.ibm.com) 34# -Ported 35# 36# 37#*********************************************************************** 38 39#----------------------------------------------------------------------- 40# 41# FUNCTION: do_setup 42# 43#----------------------------------------------------------------------- 44 45do_setup() 46{ 47 48 USER_LIST=${USER_LIST:-'root'} 49 TCdat=${TCdat:-$LTPROOT/testcases/bin/datafiles} 50 TCtmp=${TCtmp:-$LTPROOT/testcases/bin/$TC${EXEC_SUFFIX}$$} 51 FILES=${FILES:-'bin.sm bin.med bin.lg bin.jmb file.dir/bin.sm file.dir/bin.med file.dir/bin.jmb'} 52 SLEEPTIME=${SLEEPTIME:-10} 53 54 tst_setup 55 56 exists awk hostname rdist 57 58 RHOST=${RHOST:-`hostname`} 59 60 # start with a clean LHOST 61 for i in $FILES; do 62 rm -rf $i 63 done 64 65 for i in $FILES; do 66 BASE=$(basename "$i") 67 DIR=$(dirname "$i") 68 test -d "$DIR" || mkdir -p "$DIR" 69 if [ $? -ne 0 ] ; then 70 end_testcase "failed to create $DIR" 71 fi 72 if ! cp $TCdat/$BASE $DIR; then 73 end_testcase "failed to copy $TCdat/$BASE to $DIR" 74 fi 75 chmod 764 $i 76 done 77 78 # get the sum of all the files to rdist on the local machine 79 LSUM=0 80 SUM=`sum -s $FILES | awk '{ print $1 }'` 81 for i in $SUM; do 82 LSUM=$(( $LSUM + $i )) 83 done 84} 85 86#----------------------------------------------------------------------- 87# 88# FUNCTION: create_distfile 89# create file $TCtmp/distfile 90# 91#----------------------------------------------------------------------- 92 93create_distfile() 94{ 95 T_FILES="FILES = ( " 96 for i in $FILES; do 97 if [ $(dirname "$i") == "." ]; then 98 T_FILES="$T_FILES $i" 99 else 100 T_FILES="$T_FILES $DIR" 101 fi 102 done 103 T_FILES="$T_FILES )" 104 105 T_HOST="HOSTS = (" 106 for c_ruser in $RUSERS; do 107 for c_rhost in $HOSTS; do 108 T_HOST=$T_HOST" $c_ruser@$c_rhost" 109 done 110 done 111 112 T_HOST="$T_HOST)" 113 cat <<EOF > "$TCtmp/distfile" 114$T_HOST 115$T_FILES 116\${FILES} -> \${HOSTS} 117EOF 118} 119 120#----------------------------------------------------------------------- 121# 122# FUNCTION: check_result 123# 124# check the sum of all files rdisted from local machine to remote machine 125# 126#----------------------------------------------------------------------- 127 128check_result() 129{ 130 cd $TCtmp 131 for c_rhost in $HOSTS; do 132 for c_ruser in $RUSERS; do 133 TOTAL_SUM=0 134 for i in $(rsh -n -l $c_ruser $c_rhost sum -s $FILES | awk '{ print $1 }'); do 135 TOTAL_SUM=$(( $TOTAL_SUM + $i )) 136 done 137 if [ $TOTAL_SUM -eq $LSUM ]; then 138 tst_resm TINFO "Success rdist in $c_ruser@$c_rhost " 139 rsh -n -l $c_ruser $c_rhost "rm -rf $FILES" 140 else 141 end_testcase "Wrong sum doing rdist in $curr_ruser@$curr_rhost" 142 fi 143 done 144 done 145} 146 147#---------------------------------------------------------------------- 148# FUNCTION: do_test 149# PURPOSE: Perform the necessary steps to complete the test. 150# INPUT: None. 151# OUPUT: Error messages are logged if any of the tests fail. 152# EXIT VAR: 0 Success 153#---------------------------------------------------------------------- 154 155do_test() 156{ 157 HOSTS="" 158 RUSERS="" 159 160 for cur_host in $RHOST; do 161 HOSTS=$HOSTS" $cur_host" 162 for cur_user in $USER_LIST; do 163 RUSERS=$RUSERS" $cur_user" 164 create_distfile 165 if ! rdist -f $TCtmp/distfile; then 166 end_testcase "error doing rdist -f $TCtmp/distfile" 167 fi 168 check_result 169 sleep $SLEEPTIME 170 done 171 done 172} 173 174#---------------------------------------------------------------------- 175# FUNCTION: MAIN 176# PURPOSE: To invoke the functions to perform the tasks described in 177# the prologue. 178# INPUT: None. 179# OUTPUT: A testcase run log with the results of the execution of this 180# test. 181#---------------------------------------------------------------------- 182. net_cmdlib.sh 183 184read_opts $* 185do_setup 186do_test 187end_testcase 188