#!/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 a simple test to verify dynamic log level changes
source ./test_env.sh
test -d $PYTHON_DIR || { echo "Skipping python tests, no python dir."; exit 0; }

LOG_FILE=log_test.log
trap cleanup EXIT

cleanup() {
    test -n "$PORT" && $QPIDD_EXEC --no-module-dir --quit --port $PORT
}

error() { 
    echo $*;
    exit 1;
}

rm -rf $LOG_FILE
PORT=$($QPIDD_EXEC --auth=no --no-module-dir --daemon --port=0 --log-to-file $LOG_FILE) || error "Could not start broker"

echo Broker for log level test started on $PORT, pid is $($QPIDD_EXEC --no-module-dir --check --port $PORT)

$srcdir/qpid-ctrl -b localhost:$PORT setLogLevel level='notice+' > /dev/null
$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=1 body=HIDDEN > /dev/null
$srcdir/qpid-ctrl -b localhost:$PORT setLogLevel level='debug+:Broker' > /dev/null
$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=2 body=VISIBLE > /dev/null
$srcdir/qpid-ctrl -b localhost:$PORT setLogLevel level='notice+' > /dev/null

#check log includes debug statement for last echo, but not the first
if [[ $(grep echo $LOG_FILE | wc -l) -ne 1 ]]; then 
   cat $LOG_FILE
   error "Log contents not as expected"
else
  rm -rf $LOG_FILE
  echo OK
fi

