blob: cb8b6878acb2a4ff2fdb7136ebb7bd4404b4f95a [file] [log] [blame]
#!/bin/sh
#
# Copyright (c) International Business Machines Corp., 2000
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
# the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#
#
# FILE : sendfile
#
# PURPOSE: Copy files from server to client using the sendfile()
# function.
#
#
# SETUP: The home directory of root on the machine exported as "RHOST"
# MUST have a ".rhosts" file with the hostname of the client
# machine, where the test is executed.
#
# HISTORY:
# 06/09/2003 Manoj Iyer manjo@mail.utexas.edu
# - Modified to use LTP APIs, and added check to if commands used in test
# exists.
# 03/01 Robbie Williamson (robbiew@us.ibm.com)
# -Ported
#
#
#***********************************************************************
#-----------------------------------------------------------------------
#
# FUNCTION: exists
#
# DESCRIPTION: Check if required commands exits.
#
#-----------------------------------------------------------------------
do_setup()
{
TC=sendfile01
RHOST=${RHOST:-`hostname`}
TCdat=${TCdat:-$LTPROOT/testcases/bin/datafiles}
TCtmp=${TCtmp:-$LTPROOT/testcases/bin/$TC${EXEC_SUFFIX}$$}
CLIENT="testsf_c${EXEC_SUFFIX}"
SERVER="testsf_s${EXEC_SUFFIX}"
LTPROOT=${LTPROOT:-../../../..}
FILES=${FILES:-"ascii.sm ascii.med ascii.lg ascii.jmb"}
tst_setup
exists awk diff gethost grep rsh stat
if ! IPADDR=$(gethost ${EXEC_SUFFIX:+6} $RHOST | awk 'BEGIN { ec=1 } /addresses:/ {print $2; ec=0 } END { exit ec }'); then
# XXX (garrcoop): || exit 1 is there to prevent the test from hanging in the event of an install error.
end_testcase "Failed to determine the appropriate IP address for the machine." || exit 1
fi
}
#=============================================================================
# FUNCTION NAME: do_test
#
# FUNCTION DESCRIPTION: Perform the test
#
# PARAMETERS: None.
#
# RETURNS: None.
#=============================================================================
do_test()
{
tst_resm TINFO "Doing $0."
mkdir -p $TCtmp
PORT=$$
if ! rsh -l root $IPADDR "$LTPROOT/testcases/bin/SF_Server $IPADDR $PORT $LTPROOT/testcases/bin $SERVER"; then
end_testcase "rsh failed to $IPADDR as root failed"
fi
sleep 10
PID=$(rsh -l root $IPADDR "ps -ef" | awk "\$0 !~ /awk/ && /$SERVER/ && /$PORT/ {print \$2}")
[ -n "$PID" ] || end_testcase "Could not start server"
for clnt_fname in $FILES; do
serv_fname=$TCdat/$clnt_fname
SIZE=`stat -c '%s' $serv_fname`
tst_resm TINFO "Starting $SERVER $IPADDR Client_filename Server_filename Size "
$CLIENT $IPADDR $PORT "$TCtmp/$clnt_fname" $serv_fname $SIZE
RetVal=$?
[ $RetVal -eq 0 ] || end_testcase "$CLIENT returned error $RetVal"
diff $serv_fname $TCtmp/$clnt_fname
DiffVal=$?
[ $DiffVal -gt 1 ] && end_testcase "ERROR: Cannot compare files"
[ $DiffVal -eq 1 ] && end_testcase "The file copied differs from the original"
done
}
#=============================================================================
# FUNCTION NAME: do_cleanup
#
# FUNCTION DESCRIPTION: Clean up
#
# PARAMETERS: None.
#
# RETURNS: None.
#=============================================================================
do_cleanup()
{
PID=$(rsh -n -l root $RHOST "ps -eopid,cmd" | awk "\$0 !~ /awk/ && /$SERVER/ && /$PORT/ {print \$1}")
[ -n "$PID" ] && rsh -n -l root $RHOST kill -9 $PID
tst_cleanup
}
#=============================================================================
# MAIN PROCEDURE
#=============================================================================
. net_cmdlib.sh
read_opts $*
do_setup
do_test
end_testcase