//
// 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-3391: the C++ broker does not currently validate the exchange creation arguments
org.apache.qpid.test.client.destination.AddressBasedDestinationTest#testCreateExchangeWithNonsenseArgs

// QPID-3576: JMS client issue. MessageConsumer#close() time-out.
org.apache.qpid.test.client.destination.AddressBasedDestinationTest#testDeleteOptions

// Those tests are testing 0.8 specific semantics
org.apache.qpid.test.client.ImmediateAndMandatoryPublishingTest#*
org.apache.qpid.test.client.CloseOnNoRouteForMandatoryMessageTest#*

org.apache.qpid.server.queue.PriorityTest#*
org.apache.qpid.server.queue.AMQPriorityQueueTest#*

// the 0-10 c++ broker does not implement the extended LVQ semantics which the Broker for Java does
org.apache.qpid.server.queue.ConflationQueueTest#*

// the 0-10 c++ broker does not implement sorted queues
org.apache.qpid.server.queue.SortedQueueTest#*

// the 0-10 c++ broker does not implement DLQ
org.apache.qpid.test.unit.client.MaxDeliveryCountTest#*

//this test checks explicitly for 0-8 flow control semantics
org.apache.qpid.test.client.ConsumerFlowControlTest#*

// 0-10 c++ broker doesn't implement virtual hosts, or those wackhy exchanges
org.apache.qpid.test.unit.client.connection.ConnectionTest#testUnresolvedVirtualHostFailure
org.apache.qpid.test.unit.client.connection.ConnectionTest#testDefaultExchanges

// 0-10 c++ broker in cpp.testprofile is started with no auth so won't pass this test
org.apache.qpid.test.unit.client.connection.ConnectionTest#testPasswordFailureConnection

// InVM Broker tests
org.apache.qpid.test.client.timeouts.SyncWaitDelayTest#*

// QPID-1262, QPID-1119 : This test fails occasionally due to potential protocol issue.
org.apache.qpid.test.client.timeouts.SyncWaitTimeoutDelayTest#*

// c++ broker doesn't support message bouncing
org.apache.qpid.server.exchange.ReturnUnroutableMandatoryMessageTest#*
org.apache.qpid.test.unit.topic.DurableSubscriptionTest#testUnsubscribeWhenUsingSelectorMakesTopicUnreachable
org.apache.qpid.test.unit.client.connection.ExceptionListenerTest#testExceptionListenerConnectionStopDeadlock

// c++ broker expires messages on delivery or when the queue cleaner thread runs.
org.apache.qpid.server.queue.TimeToLiveTest#testActiveTTL
org.apache.qpid.server.queue.TimeToLiveTest#testActiveTTLwithDurableSubscription

// QPID-1727 , QPID-1726 :c++ broker does not support flow to disk on transient queues. Also it requries a persistent store impl. for Apache
org.apache.qpid.test.client.QueueBrowsingFlowToDiskTest#*

// This test currently does not pick up the runtime location of the nonVm queueBacking store.
org.apache.qpid.test.unit.close.FlowToDiskBackingQueueDeleteTest#*

//QPID-1818 : 0-10 Client code path does not correctly restore a transacted session after failover.
org.apache.qpid.server.persistent.NoLocalAfterRecoveryTest#*

// QPID-1730: the C++ server has a totally different logging mechanism. We should split this file differently
org.apache.qpid.server.AlertingTest#*

// The C++ server has a totally different persistence mechanism
org.apache.qpid.server.store.PersistentStoreTest#*
org.apache.qpid.server.store.SplitStoreTest#*

// These tests are for persistent store modules from Broker for Java
org.apache.qpid.server.store.VirtualHostMessageStoreTest#testMessagePersistence
org.apache.qpid.server.store.VirtualHostMessageStoreTest#testMessageRemoval
org.apache.qpid.server.store.VirtualHostMessageStoreTest#testBindingPersistence
org.apache.qpid.server.store.VirtualHostMessageStoreTest#testDurableBindingRemoval
org.apache.qpid.server.store.VirtualHostMessageStoreTest#testQueuePersistence
org.apache.qpid.server.store.VirtualHostMessageStoreTest#testDurableQueueRemoval
org.apache.qpid.server.store.VirtualHostMessageStoreTest#testExchangePersistence
org.apache.qpid.server.store.VirtualHostMessageStoreTest#testDurableExchangeRemoval
org.apache.qpid.server.store.VirtualHostMessageStoreTest#testQueueExchangeAndBindingCreation
org.apache.qpid.server.store.DurableConfigurationStoreTest#*

// CPP Broker does not follow the same Logging convention as the Broker for Java
org.apache.qpid.server.BrokerStartupTest#*
org.apache.qpid.server.logging.*
org.apache.qpid.server.logging.messages.*
org.apache.qpid.server.logging.subjects.*
org.apache.qpid.server.logging.actors.*

// REST management is used in this test for validation
org.apache.qpid.server.queue.ModelTest#*
org.apache.qpid.server.queue.LiveQueueOperationsTest#*

// 0-10 is not supported by the MethodRegistry
org.apache.qpid.test.unit.close.JavaServerCloseRaceConditionTest#*

// QPID-2084 : this test needs more work for 0-10
org.apache.qpid.test.unit.client.DynamicQueueExchangeCreateTest#*

// QPID-2118 : JMS client for AMQP 0-10 has differrent error handling then 0-8 code path
org.apache.qpid.test.client.message.SelectorTest#testRuntimeSelectorError

//QPID-942 : Implemented Channel.Flow based Producer Side flow control to the Broker for Java (not in CPP Broker)
org.apache.qpid.server.queue.ProducerFlowControlTest#*
org.apache.qpid.test.client.ProducerFlowControlTest#*

//QPID-3986 : Flow control invoked on total store disk usage
org.apache.qpid.server.store.StoreOverfullTest#*
// 0-8/0-9/0-9-1 and/or Broker for Java specific failover tests related to the above Producer Flow Control mechanisms
org.apache.qpid.client.failover.FailoverBehaviourTest#testFailoverHandlerTimeoutExpires
org.apache.qpid.client.failover.FailoverBehaviourTest#testFlowControlFlagResetOnFailover
org.apache.qpid.client.failover.AddressBasedFailoverBehaviourTest#testFailoverHandlerTimeoutExpires
org.apache.qpid.client.failover.AddressBasedFailoverBehaviourTest#testFlowControlFlagResetOnFailover

org.apache.qpid.test.client.RollbackOrderTest#testOrderingAfterRollbackOnMessage#*

// Excluded because plugins from Broker for Java are not used in CPP broker
org.apache.qpid.server.virtualhost.plugin.*
org.apache.qpid.info.test.*
org.apache.qpid.server.security.access.*
org.apache.qpid.server.security.access.plugins.*
org.apache.qpid.server.security.auth.manager.*
org.apache.qpid.server.security.acl.*
org.apache.qpid.server.configuration.*
org.apache.qpid.server.configuration.plugins.*
org.apache.qpid.server.security.firewall.FirewallConfigTest#*
org.apache.qpid.server.security.firewall.FirewallConfigurationTest#*
org.apache.qpid.server.plugins.PluginTest#*

// Transacion timeouts not implemented in CPP broker
org.apache.qpid.test.unit.transacted.TransactionTimeoutDisabledTest#*
org.apache.qpid.test.unit.transacted.TransactionTimeoutConfigurationTest#*
org.apache.qpid.test.unit.transacted.TransactionTimeoutTest#*

// Broker for Java only
org.apache.qpid.server.SupportedProtocolVersionsTest#*
org.apache.qpid.server.stats.StatisticsReportingTest#*

// QPID-3133: On 0-10, the exception listener is currently not invoked when reconnection fails to occurs.
org.apache.qpid.server.failover.FailoverMethodTest#*

// CPP Broker does not implement non-"shared group" message groups
org.apache.qpid.server.queue.MessageGroupQueueTest#testSimpleGroupAssignment
org.apache.qpid.server.queue.MessageGroupQueueTest#testConsumerCloseGroupAssignment
org.apache.qpid.server.queue.MessageGroupQueueTest#testConsumerCloseWithRelease
org.apache.qpid.server.queue.MessageGroupQueueTest#testGroupAssignmentSurvivesEmpty

// CPP Broker does not implement message conversion from 0-9-1
org.apache.qpid.server.message.MessageProtocolConversionTest#*

// passwd script is a Broker for Java specific command line tool
org.apache.qpid.scripts.QpidPasswdTest#*

// QPID-3604: Immediate Prefetch no longer supported by 0-10
org.apache.qpid.client.AsynchMessageListenerTest#testImmediatePrefetchWithMessageListener

// Broker for Java has an extenstion to allow it to influence the prefix of temporary queue names
org.apache.qpid.client.TemporaryQueuePrefixTest#*

// QPID-3936: Exclude Performance Test Framework tests
org.apache.qpid.systest.disttest.*
org.apache.qpid.disttest.*
org.apache.qpid.systest.disttest.endtoend.*

// Exclude REST API tests for Broker for Java
org.apache.qpid.systest.rest.*
org.apache.qpid.systest.rest.acl.*

// Exclude failover tests requiring virtual host functionality
org.apache.qpid.client.failover.MultipleBrokersFailoverTest#*

// Uses Broker for Java specific configuration
org.apache.qpid.client.ssl.SSLTest#testClientCertMissingWhilstWanting
org.apache.qpid.client.ssl.SSLTest#testCreateSSLandTCPonSamePort


// QPID-2796 : JMS client for AMQP 0-10 only sends heartbeats in response to heartbeats from the server, not timeout based
org.apache.qpid.client.HeartbeatTest#testUnidirectionalHeartbeating
org.apache.qpid.client.HeartbeatTest#testHeartbeatsEnabledBrokerSide

// Exclude Broker for Java specific behavior allowing queue re-bind to topic exchanges on 0.8/0-10 paths
org.apache.qpid.server.queue.QueueBindTest#testQueueCanBeReboundOnTopicExchange

// Tests queue message durability settings which are a Broker for Java specific feature
org.apache.qpid.server.queue.QueueMessageDurabilityTest#*

// QPID-4429 : C++ Broker does not enforce max frame size negotiation rules as per the spec
org.apache.qpid.transport.MaxFrameSizeTest#*

// CPP Broker does not timeout connections with no activity like the Broker for Java
org.apache.qpid.transport.ProtocolNegotiationTest#testNoProtocolHeaderSent_BrokerClosesConnection
org.apache.qpid.transport.ProtocolNegotiationTest#testNoConnectionOpenSent_BrokerClosesConnection

// QPID-6000 : Tests Broker for Java specific message compression functionality, and uses the REST API to test it
org.apache.qpid.systest.MessageCompressionTest#*


org.apache.qpid.test.unit.client.AMQSessionTest#testQueueDepthForQueueThatDoesNotExistLegacyBehaviour_08_091

org.apache.qpid.client.prefetch.PrefetchBehaviourTest#testPrefetchWindowExpandsOnReceiveTransaction

org.apache.qpid.client.SyncPublishTest#*

org.apache.qpid.server.queue.ArrivalTimeFilterTest#*
org.apache.qpid.server.queue.DefaultFiltersTest#*
org.apache.qpid.server.queue.EnsureNondestructiveConsumersTest#*
org.apache.qpid.server.protocol.v0_8.*

//Broker for Java BDB System Tests
org.apache.qpid.server.store.berkeleydb.*
org.apache.qpid.server.store.berkeleydb.replication.*
org.apache.qpid.server.virtualhostnode.berkeleydb.*

// Broker for Java Derby Tests
org.apache.qpid.server.store.derby.*

// These tests are 0-8..0-91 specific
org.apache.qpid.test.unit.basic.PropertyValueTest#testLargeHeader_08091_HeadersFillContentHeaderFrame
org.apache.qpid.test.unit.basic.PropertyValueTest#testOverlyLargeHeaderRejected_08091

// QPID-6786 Sending headers larger than [first] transfer/frame size (which is outside the spec) isn't supported against the C++ broker
org.apache.qpid.test.unit.basic.PropertyValueTest#testLargeHeader_010_HeadersFillContentHeaderFrame

// QPID-6703 Use of Broker for Java specific queue creation arguments to properly fulfill JMS TemporaryQueue contract
org.apache.qpid.test.unit.client.temporaryqueue.TemporaryQueueTest#testClosingSessionDoesNotDeleteQueue

# QPID-7156: Test requires a Broker with a virtualhost
org.apache.qpid.test.unit.client.connection.BrokerClosesClientConnectionTest#testClientCloseOnVirtualHostStop

# cpp broker allows anonymous access by default
# the following test requires running broker with authentication enabled
org.apache.qpid.transport.ConnectionEstablishmentTest#testAuthenticationBypass

#Node Creation Policy Tests use Broker for Java Specific Config
org.apache.qpid.server.queue.NodeAutoCreationPolicyTest#*

# The consumer x-priority feature is Java Broker Specific
org.apache.qpid.server.queue.ConsumerPriorityTest#*

#The C++ broker does not implement AMQP management
org.apache.qpid.systest.management.amqp.*

# Exclude the JMS 2.0 test suite
org.apache.qpid.systests.jms_2_0.*
