#
# 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 Qpid Broker-J ######

#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 fairshare, or the priority alias
qpid_tests.broker_0_10.priority.PriorityTests.test_fairshare*
qpid_tests.broker_0_10.priority.PriorityTests.test_prioritised_delivery_with_alias

#QPID-6572 These tests pass a empty binding key argument, which won't match with the Qpid Broker-J'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 Qpid Broker-J
qpid_tests.broker_0_10.dtx.DtxTests.test_get_timeout

###### Behavioural differences between Qpid Broker-J & 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 Qpid Broker-J 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

###### Qpid Broker-J 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-6673 Qpid Broker-J 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

# QPID-7164
qpid_tests.broker_0_10.new_api.GeneralTests.test_qpid_3481_acquired_to_alt_exchange
qpid_tests.broker_0_10.new_api.GeneralTests.test_qpid_3481_acquired_to_alt_exchange_2_consumers

# QPID-7694: Qpid Broker-J validates queue declare arguments and return an error for unsupported ones
qpid_tests.broker_0_10.new_api.SequenceNumberTests.test_create_sequence_queue
