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

qpid.port.protocol_handshake_timeout=10000

SpawnedBrokerHolder.brokerStartupTime=60000
FailoverBaseCase.defaultFailoverTime=15000
qpid.test_nowait_for_ports=true


# Reduce the size of the IO pools to utilse fewer resources on the shared Apache CI environment
qpid.port.amqp.threadPool.size=4
qpid.port.amqp.threadPool.numberOfSelectors=1
virtualhost.connectionThreadPool.size=4
virtualhost.connectionThreadPool.numberOfSelectors=1
port.http.threadPool.maximum=8
port.http.threadPool.minimum=4

BDBHAVirtualHostNodeTestHelper.numberOfSleepsOnChangeWaiting=100
BDBHAVirtualHostNodeTestHelper.sleepIntervalOnChangeWaiting=100
BDBHAVirtualHostNodeTestHelper.waitForVirtualhostInterval=30000

qpid.test_receive_short_timeout=1000
qpid.test_receive_timeout=2000
qpid.test_receive_long_timeout=10000
