#!/bin/bash

#
# 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.
#

# Run the federation system tests.

source ./test_env.sh

MODULENAME=federation_sys

# Test for long test
if [[ "$1" == "LONG_TEST" ]]; then
    USE_LONG_TEST=1
    shift # get rid of this param so it is not treated as a test name
fi

trap stop_brokers INT TERM QUIT

SKIPTESTS="-i federation_sys.E_* -i federation_sys.F_* -i federation_sys.G_* -i federation_sys.H_*"
if [ -z ${USE_LONG_TEST} ]; then
    SKIPTESTS="-i federation_sys.A_Long* -i federation_sys.B_Long* ${SKIPTESTS}"
fi
echo "WARNING: Tests using persistence will be ignored."
SKIPTESTS="${SKIPTESTS} -i federation_sys.C_* -i federation_sys.D_*"

start_brokers() {
    start_broker() {
        ${QPIDD_EXEC} --daemon --port 0 --auth no --no-data-dir $1 > qpidd.port
        PORT=`cat qpidd.port`
        eval "$2=${PORT}"
    }
    start_broker "" LOCAL_PORT
    start_broker "" REMOTE_PORT
    rm qpidd.port
}

stop_brokers() {
    ${QPIDD_EXEC} -q --port ${LOCAL_PORT}
    ${QPIDD_EXEC} -q --port ${REMOTE_PORT}
}

if test -d ${PYTHON_DIR} ;  then
    start_brokers
    echo "Running federation tests using brokers on local port ${LOCAL_PORT}, remote port ${REMOTE_PORT} (NOTE: clustering is DISABLED)"
    if [ -z ${USE_LONG_TEST} ]; then
        echo "NOTE: To run a full set of federation system tests, use \"make check-long\". To test with persistence, run the store version of this script."
    fi
    ${QPID_PYTHON_TEST} -m ${MODULENAME} ${SKIPTESTS} -b localhost:${REMOTE_PORT} -Dlocal-port=${LOCAL_PORT} -Dremote-port=${REMOTE_PORT} $@
    RETCODE=$?
    stop_brokers
    if test x${RETCODE} != x0; then
        echo "FAIL federation tests"; exit 1;
    fi
fi
