#!/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 highres timestamp changes
source ./test_env.sh
test -d $PYTHON_DIR || { echo "Skipping python tests, no python dir."; exit 0; }

LOG_FILE=hires_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 highres timestamp test started on $PORT, pid is $($QPIDD_EXEC --no-module-dir --check --port $PORT)

$srcdir/qpid-ctrl -b localhost:$PORT setLogLevel level='debug+:Broker' > /dev/null
$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=1 body=LOWRES > /dev/null
$srcdir/qpid-ctrl -b localhost:$PORT setLogHiresTimestamp logHires='true' > /dev/null
$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=2 body=HI_RES > /dev/null
$srcdir/qpid-ctrl -b localhost:$PORT setLogHiresTimestamp logHires='false' > /dev/null
$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=3 body=LOWRES > /dev/null

# Expect 3 log entries with 'echo' in them
if [[ $(grep echo $LOG_FILE | wc -l) -ne 3 ]]; then 
   cat $LOG_FILE
   error "Log content error - expected 3 echo log entries"
fi

# Lines 1 and 3 are length X
# Line 2 is length X+10 because of timestamp addition
LEN1=$(grep echo $LOG_FILE | grep \(1 | wc -m)
LEN2=$(grep echo $LOG_FILE | grep \(2 | wc -m)
LEN3=$(grep echo $LOG_FILE | grep \(3 | wc -m)
EXPECTED_LEN2=$(( $LEN1 + 10 ))

if [ $LEN1 -ne $LEN3 ]; then
    cat $LOG_FILE
    error "Log content error - expected echo 3 to be same line length as echo 1"
fi

if [ $LEN2 -ne $EXPECTED_LEN2 ]; then
    cat $LOG_FILE
    error "Log content error - expected echo 2 to be 10 characters longer than echo 1"
fi

rm -rf $LOG_FILE
echo OK

