#!/bin/sh
# **********************************************************************
#
# Copyright (c) 1997
# Object-Oriented Concepts, Inc.
# Billerica, MA, USA
#
# Copyright (c) 1997
# Object-Oriented Concepts GmbH
# Ettlingen, Germany
#
# All Rights Reserved
#
# **********************************************************************

# Use this for Sun's JDK
JAVA=java
# Use this for Microsoft's Visual J++
#JAVA=jview

#
# Remove echo incompatibilities
#
if test "`echo -e xxx`" = "xxx"
then
    echo="echo -e"
else
    echo=echo
fi

#
# Try to find top-level directory
#
if test -d include/OB
then
    top_srcdir=.
elif test -d ../include/OB
then
    top_srcdir=..
elif test -d ../../include/OB
then
    top_srcdir=../..
elif test -d ../../../include/OB
then
    top_srcdir=../../..
else
    $echo "$0: can't find top-level directory"
    exit
fi

#
# Set Java CLASSPATH
#
if test -d 'c:/' # Simple check for windows
then
    CLASSPATH="$top_srcdir/jtest/generated/classes;$CLASSPATH"
    CLASSPATH="$top_srcdir/jtest/classes;$CLASSPATH"
    CLASSPATH="$top_srcdir/jlib;$CLASSPATH"
else
    CLASSPATH="$top_srcdir/jtest/generated/classes:$CLASSPATH"
    CLASSPATH="$top_srcdir/jtest/classes:$CLASSPATH"
    CLASSPATH="$top_srcdir/jlib:$CLASSPATH"
fi

export CLASSPATH

#
# Print welcome message
#
$echo
$echo "*************************"
$echo "* OmniBroker Test-Suite *"
$echo "*************************"

#
# Ask for client
#
client=
while test -z "$client"
do
    $echo
    $echo "Select test client to use:"
    $echo
    $echo "1: C++ client"
    $echo "2: Java client"
    $echo
    $echo "---> \c"
    
    read num

    if test "$num" = "1"
    then
	client="$top_srcdir/test/client"
        clientReleaseCheck=yes
    fi

    if test "$num" = "2"
    then
	client="$JAVA test.Client"
        clientReleaseCheck=no
    fi
done

#
# Ask for server
#
server=
while test -z "$server"
do
    $echo
    $echo "Select test server to use:"
    $echo
    $echo "1: C++ server"
    $echo "2: Java server"
    $echo
    $echo "---> \c"
    
    read num

    if test "$num" = "1"
    then
	server="$top_srcdir/test/server -OAhost localhost"
        serverReleaseCheck=yes
    fi

    if test "$num" = "2"
    then
	server="$JAVA test.Server"
        serverReleaseCheck=no
    fi
done

#
# Set name of reference file
#
ref=TestInterface.ref

#
# Function to deactivate the server
#
deactivate()
{
    kill $!
    rm -f $ref
    exit
}

#
# Start server
#
$echo
$echo "Waiting for server to start up... \c"
rm -f $ref
$server 2> server.log &
trap deactivate 1 2 3 4 5 6 7 8 10 12 13 14 15
count=0
while test ! -s $ref -a $count -lt 6
do
    sleep 1
    count=`expr $count + 1`
done
if test ! -s $ref
then
    $echo "Failed!"
    $echo "(Server was not started)"
    exit
else
    $echo "OK!"
fi

#
# Start client
#
$client 2> client.log

#
# Wait for server deactivation
#
$echo "Waiting for server to deactivate... \c"
count=0
while test -r $ref -a $count -lt 3
do
    sleep 1
    count=`expr $count + 1`
done

if test -r $ref
then
    $echo "Failed!"
    $echo "(Server was not deactivated by client - deactivating server now)"
    deactivate
else
    $echo "OK!"
fi

#
# Check whether all objects have been released
#
if test "$clientReleaseCheck" = "yes"
then
    $echo "Testing whether all client objects have been released... \c"
    count=0
    if test -s client.log
    then
	$echo "Failed!"
    else
	$echo "OK!"
    fi
fi
if test "$serverReleaseCheck" = "yes"
then
    $echo "Testing whether all server objects have been released... \c"
    count=0
    if test -s server.log
    then
	$echo "Failed!"
    else
	$echo "OK!"
    fi
fi
