#!/bin/sh
# @@@ START COPYRIGHT @@@
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
# @@@ END COPYRIGHT @@@

if [ $# -lt 2 ]; then
	echo "goshell284 <cli> <srv>"
	exit 1
fi
xclient=$1
xserver=$2
shift
shift
type=

# setup
. ./gosetup

maxcp=1
maxsp=1
if [ "$1" = "-maxcp" ]; then
	shift
	maxcp=$1
	shift
fi
if [ "$1" = "-maxsp" ]; then
	shift
	maxsp=$1
	shift
fi
maxes="-maxcp $maxcp -maxsp $maxsp"

echo "********* TEST `date` $xclient/$xserver *********"
tcheck -setup
. ./goshellsetup
echo "node" >> $TMP
echo "! Start the monitor processes across the cluster" >> $TMP
echo "startup" >> $TMP
echo "! Start the test server" >> $TMP
n=0
while [[ $n -lt $maxsp ]]; do
echo "set {process \$TSID$n } PERSIST_RETRIES=10,60" >> $TMP
echo "set {process \$TSID$n } PERSIST_ZONES=0,1" >> $TMP
echo "exec {nowait,name \$TSID$n} $xserver -server -inst $n $maxes $*" >> $TMP
n=`expr $n + 1`
done
echo "! Display process status of our processes" >> $TMP
echo "delay 1" >> $TMP
echo "ps" >> $TMP
echo "! Start the client process" >> $TMP
n=0
while [[ $n -lt $maxcp ]]; do
echo "exec {nowait,name \$c$n} $xclient -client -inst $n -name \$c$n $maxes $*" >> $TMP
n=`expr $n + 1`
done
echo "delay 5" >> $TMP
echo "! Display process status to see new processes" >> $TMP
echo "ps" >> $TMP
echo "! Wait for our processes to stop, then stop the monitor processes and exit." >> $TMP
n=0
while [[ $n -lt $maxsp ]]; do
echo "wait \$TSID$n" >> $TMP
n=`expr $n + 1`
done
n=0
while [[ $n -lt $maxcp ]]; do
echo "wait \$c$n" >> $TMP
n=`expr $n + 1`
done
echo "shutdown" >> $TMP
echo "exit" >> $TMP
. ./goshellfilter
tcheck $xclient
