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

###### Feature not supported in Broker for Java ######

#The broker does not have the appropriate QMF support
qpid_tests.broker_0_10.management.*
qpid_tests.broker_0_10.qmf_events.*
qpid_tests.broker_0_10.stats.BrokerStatsTests.*
qpid_tests.broker_0_10.msg_groups.MultiConsumerMsgGroupTests.test_default_group_id
qpid_tests.broker_0_10.msg_groups.MultiConsumerMsgGroupTests.test_move_*
qpid_tests.broker_0_10.msg_groups.MultiConsumerMsgGroupTests.test_purge_*
qpid_tests.broker_0_10.msg_groups.MultiConsumerMsgGroupTests.test_query
qpid_tests.broker_0_10.msg_groups.MultiConsumerMsgGroupTests.test_reroute

qpid_tests.broker_0_10.new_api.GeneralTests.test_ambiguous_create_1
qpid_tests.broker_0_10.new_api.GeneralTests.test_ambiguous_create_2
qpid_tests.broker_0_10.new_api.GeneralTests.test_ambiguous_delete_1
qpid_tests.broker_0_10.new_api.GeneralTests.test_ambiguous_delete_2
qpid_tests.broker_0_10.new_api.GeneralTests.test_node_disambiguation_1
qpid_tests.broker_0_10.new_api.GeneralTests.test_node_disambiguation_2

#The broker does not support the Queue Sequence Number feature from QPID-4591
qpid_tests.broker_0_10.new_api.SequenceNumberTests.test_get_sequence_number
qpid_tests.broker_0_10.new_api.SequenceNumberTests.test_sequence_number_gap

#The broker does not use the same threshold alerting system (or the QMF support needed for the tests)
qpid_tests.broker_0_10.threshold.*

#The broker does not support the policy extension
qpid_tests.broker_0_10.extensions.ExtensionTests.test_policy_*

#The broker does not support the timed-autodelete extension
qpid_tests.broker_0_10.extensions.ExtensionTests.test_timed_autodelete

#The broker does not support ring queues, fairshare, or the priority alias
qpid_tests.broker_0_10.priority.PriorityTests.test_ring_queue*
qpid_tests.broker_0_10.priority.PriorityTests.test_fairshare*
qpid_tests.broker_0_10.priority.PriorityTests.test_prioritised_delivery_with_alias
#QPID-6299 broker does not support ring queue on lvq
qpid_tests.broker_0_10.lvq.LVQTests.test_ring_lvq2

#QPID-6572 These tests pass a empty binding key argument, which won't match with the Broker for Java's stricter impl.
qpid_tests.broker_0_10.exchange.AutodeleteTests.testAutodeleteFanout
qpid_tests.broker_0_10.exchange.AutodeleteTests.testAutodeleteHeaders

# QPID-5531 : Changes to the C++ behaviour in having a default timeout for every transaction not implemented in Broker for Java
qpid_tests.broker_0_10.dtx.DtxTests.test_get_timeout

###### Behavioural differences between Broker for Java & CPP Broker ######

#Tests changed/added in QPID-5280 and QPID-5283
qpid_tests.broker_0_10.queue.QueueTests.test_declare_exclusive
qpid_tests.broker_0_10.queue.QueueTests.test_declare_exclusive_alreadyinuse

#QPID-3587 Broker for Java does not alter queue counts until msgs are accepted.
qpid_tests.broker_0_10.message.MessageTests.test_ack
qpid_tests.broker_0_10.message.MessageTests.test_acquire
qpid_tests.broker_0_10.message.MessageTests.test_acquire_with_no_accept_and_credit_flow

qpid_tests.broker_0_10.dtx.DtxTests.test_forget_xid_on_completion
qpid_tests.broker_0_10.dtx.DtxTests.test_implicit_end
qpid_tests.broker_0_10.dtx.DtxTests.test_simple_commit
qpid_tests.broker_0_10.dtx.DtxTests.test_simple_prepare_commit
qpid_tests.broker_0_10.dtx.DtxTests.test_simple_prepare_rollback
qpid_tests.broker_0_10.dtx.DtxTests.test_simple_rollback

qpid_tests.broker_0_10.new_api.GeneralTests.test_qpid_3481_acquired_to_alt_exchange_2_consumers

###### Broker for Java defects ######

#QPID-3591 Fails due to bytes credit issue
qpid_tests.broker_0_10.message.MessageTests.test_credit_flow_bytes
qpid_tests.broker_0_10.message.MessageTests.test_window_flow_bytes

#QPID-3605 Durable subscriber with no-local true receives messages on re-connection
qpid_tests.broker_0_10.message.MessageTests.test_no_local_awkward

#QPID-6122 TimeoutTests occasionally fail against the Broker for Java
qpid.tests.messaging.endpoints.TimeoutTests.*

# QPID-6673 Broker for Java cannot discriminate between null and empty messages
qpid.tests.messaging.message.MessageEchoTests.testApplicationProperties
qpid.tests.messaging.message.MessageEchoTests.testContentTypeUnknown
qpid.tests.messaging.message.MessageEchoTests.testProperties
qpid.tests.messaging.message.MessageEchoTests.testTextPlainEmpty

