#!/bin/sh
#
#
# Copyright (c) 2010 Apple Inc. All rights reserved.
#
# @APPLE_LICENSE_HEADER_START@
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
# 2.  Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
# 3.  Neither the name of Apple Inc. ("Apple") nor the names of its
#     contributors may be used to endorse or promote products derived from
#     this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Portions of this software have been released under the following terms:
#
# (c) Copyright 1989-1993 OPEN SOFTWARE FOUNDATION, INC.
# (c) Copyright 1989-1993 HEWLETT-PACKARD COMPANY
# (c) Copyright 1989-1993 DIGITAL EQUIPMENT CORPORATION
#
# To anyone who acknowledges that this file is provided "AS IS"
# without any express or implied warranty:
# permission to use, copy, modify, and distribute this file for any
# purpose is hereby granted without fee, provided that the above
# copyright notices and this notice appears in all source code copies,
# and that none of the names of Open Software Foundation, Inc., Hewlett-
# Packard Company or Digital Equipment Corporation be used
# in advertising or publicity pertaining to distribution of the software
# without specific, written prior permission.  Neither Open Software
# Foundation, Inc., Hewlett-Packard Company nor Digital
# Equipment Corporation makes any representations about the suitability
# of this software for any purpose.
#
# Copyright (c) 2007, Novell, Inc. All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
# 2.  Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
# 3.  Neither the name of Novell Inc. nor the names of its contributors
#     may be used to endorse or promote products derived from this
#     this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# @APPLE_LICENSE_HEADER_END@
#
#

case $# in
2) ;;
*) echo 'Usage: perf_tcp.sh server_host_name client_program_directory' 1>&2 ; exit 1;;
esac

cd $2
##IP=`host $1 | awk '{print $3}'`
# Use the dce getip program, and if that doesn't work, try the
# basic approach of greping /etc/hosts.  This combination
# should cover most any platform.
if [ -x /opt/dcelocal/bin/getip ]; then
        IP=`getip $1`
else
        IP=`cat /etc/hosts | sed "-es/#.*//" | grep $1 | awk '{print $1}'`
fi

FAILED=""

echo "client 0a"
./client 0 "ncacn_ip_tcp:${IP}[2001]" 3 40 y y || FAILED="$FAILED 0a"
echo "client 0b"
./client 0 "ncacn_ip_tcp:${IP}[2001]" 3 40 y n || FAILED="$FAILED 0b"
echo "client 0c"
./client 0 "ncacn_ip_tcp:${IP}[2001]" 3 40 n y || FAILED="$FAILED 0c"
echo "client 0d"
./client 0 "ncacn_ip_tcp:${IP}[2001]" 3 40 n n || FAILED="$FAILED 0d"
echo "client 1a"
./client 1 "ncacn_ip_tcp:${IP}[2001]" 3 40 y y 400 || FAILED="$FAILED 1a"
echo "client 1b"
./client 1 "ncacn_ip_tcp:${IP}[2001]" 3 40 y n 400 || FAILED="$FAILED 1b"
echo "client 1c"
./client 1 "ncacn_ip_tcp:${IP}[2001]" 3 10 y y 4000 || FAILED="$FAILED 1c"
echo "client 1d"
./client 1 "ncacn_ip_tcp:${IP}[2001]" 3 10 y n 4000 || FAILED="$FAILED 1d"
#echo "client 1e"
#client 1 "ncacn_ip_tcp:${IP}[2001]" 3 2 y y 100000 || FAILED="$FAILED 1e"
#echo "client 1f"
#client 1 "ncacn_ip_tcp:${IP}[2001]" 3 2 y n 100000 || FAILED="$FAILED 1f"
echo "client 2a"
./client 2 "ncacn_ip_tcp:${IP}[2001]" 3 100 y y 400 || FAILED="$FAILED 2a"
echo "client 2b"
./client 2 "ncacn_ip_tcp:${IP}[2001]" 3 100 y n 400 || FAILED="$FAILED 2b"
echo "client 2c"
./client 2 "ncacn_ip_tcp:${IP}[2001]" 3 10 y y 4000 || FAILED="$FAILED 2c"
echo "client 2d"
./client 2 "ncacn_ip_tcp:${IP}[2001]" 3 10 y n 4000 || FAILED="$FAILED 2d"
#echo "client 2e"
#client 2 "ncacn_ip_tcp:${IP}[2001]" 3 2 y y 100000 || FAILED="$FAILED 2e"
#echo "client 2f"
#client 2 "ncacn_ip_tcp:${IP}[2001]" 3 2 y n 100000 || FAILED="$FAILED 2f"
#echo "client 3"
#client 3 "ncacn_ip_tcp" || FAILED="$FAILED 3"
echo "client 4"
./client 4 "ncacn_ip_tcp:${IP}[2001]" 3 2 || FAILED="$FAILED 4"
#echo "client 5"
#client 5 "ncacn_ip_tcp" || FAILED="$FAILED 5"
echo "client 6a"
./client 6 "ncacn_ip_tcp:${IP}[2001]" 3 100 y y || FAILED="$FAILED 6a"
echo "client 6b"
./client 6 "ncacn_ip_tcp:${IP}[2001]" 3 100 y n || FAILED="$FAILED 6b"
echo "client 8"
./client 8 "ncacn_ip_tcp:${IP}[2001]" y || FAILED="$FAILED 8"
echo "client 7"
./client 7 "ncacn_ip_tcp:${IP}[2001]" || FAILED="$FAILED 7"
echo "client 9"
./client 9 "ncacn_ip_tcp:${IP}[2001]" || FAILED="$FAILED 9"
echo "client 10a"
./client 10 "ncacn_ip_tcp:${IP}[2001]" 4 3 y y 2 || FAILED="$FAILED 10a"
echo "client 10b"
./client 10 "ncacn_ip_tcp:${IP}[2001]" 2 3 y n 2 || FAILED="$FAILED 10b"
echo "client 10c"
./client 10 "ncacn_ip_tcp:${IP}[2001]" 4 3 y y 2 1 || FAILED="$FAILED 10c"
echo "client 10d"
./client 10 "ncacn_ip_tcp:${IP}[2001]" 2 3 y n 2 1 || FAILED="$FAILED 10d"
echo "client 10e"
./client 10 "ncacn_ip_tcp:${IP}[2001]" 4 3 y y 2 2 || FAILED="$FAILED 10e"
echo "client 10f"
./client 10 "ncacn_ip_tcp:${IP}[2001]" 2 3 y n 2 2 || FAILED="$FAILED 10f"
# These test are unsupported and will fail
#echo "client 12a"
#client 12 "ncacn_ip_tcp:${IP}[2001]" 2 10 y
#echo "client 12b"
#client 12 "ncacn_ip_tcp:${IP}[2001]" 2 10 n
echo "client 13"
./client 13 "ncacn_ip_tcp:${IP}[2001]" || FAILED="$FAILED 13"
echo "client 14a"
./client 14 "ncacn_ip_tcp:${IP}[2001]" 4 n 1 || FAILED="$FAILED 14a"
echo "client 14b"
./client 14 "ncacn_ip_tcp:${IP}[2001]" 4 y 1 || FAILED="$FAILED 14b"
echo "client 15a"
./client 15 "ncacn_ip_tcp:${IP}[2001]" 2 y 1 || FAILED="$FAILED 15a"
echo "client 15b"
./client 15 "ncacn_ip_tcp:${IP}[2001]" 2 n 1 || FAILED="$FAILED 15b"
echo "client 15c"
./client 15 "ncacn_ip_tcp:${IP}[2001]" 2 y 1 5 || FAILED="$FAILED 15c"
echo "client 15d"
./client 15 "ncacn_ip_tcp:${IP}[2001]" 2 n 1 5 || FAILED="$FAILED 15d"

if [ -n "$FAILED" ] ; then
	echo "The failed tests were"
	echo "$FAILED"
	exit 1
else
	echo "All tests OK"
	exit 0
fi
