#
# 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.
#
java.naming.factory.initial=org.apache.qpid.jndi.PropertiesFileInitialContextFactory
java.naming.provider.url=${test.profiles}/test-provider.properties

broker.ready=Listening on TCP
broker.config=build/etc/config-systests.json
messagestore.class.name=org.apache.qpid.server.store.MemoryMessageStore
broker.protocol.excludes=
broker.persistent=false

max_prefetch=1000
qpid.dest_syntax=BURL

log=debug
amqj.logging.level=${log}
amqj.server.logging.level=${log}
amqj.protocol.logging.level=${log}
root.logging.level=warn

# System property log4j.configuration is used by log4j.
# QpidBrokerTestCase uses log4j.configuration.file to construct a java.io.File, eg for log configuration of spawned brokers.
log4j.configuration.file=${test.profiles}/log4j-test.xml
log4j.configuration=file:///${log4j.configuration.file}

log4j.debug=false

# Note test-provider.properties also has variables of same name.
# Keep in sync
test.port=15672
test.mport=18999
test.cport=19099
test.hport=18080
#Note : Management will start open second port on: mport + 100 : 19099 
test.port.ssl=15671
test.port.alt=25672
test.port.alt.ssl=25671

test.exclude=true
profile.excludes=
test.excludes=Excludes JavaExcludes ${profile}.excludes ${profile.excludes}
test.mem=512M
test=*Test
haltonfailure=no
haltonerror=no
exclude.modules=none

profile.clustered=false
broker.config-store-type=json
broker.virtualhosts-config="${QPID_HOME}/etc/virtualhosts-systests.xml"


