summaryrefslogtreecommitdiff
path: root/qpid/cpp/tests
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-03-21 02:08:18 +0000
committerAlan Conway <aconway@apache.org>2007-03-21 02:08:18 +0000
commitd2eb3361494710466280341c98f76c03536d2ebe (patch)
treef16ec2eacd8383e388657e54a22fc0214a0ce023 /qpid/cpp/tests
parent732544fe86089ab86c03fcc48d5ca4c72667c275 (diff)
downloadqpid-python-d2eb3361494710466280341c98f76c03536d2ebe.tar.gz
Renamed cpp-0-9 to cpp
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@520706 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/tests')
-rw-r--r--qpid/cpp/tests/.vg-supp4705
-rw-r--r--qpid/cpp/tests/APRBaseTest.cpp47
-rw-r--r--qpid/cpp/tests/AcceptorTest.cpp95
-rw-r--r--qpid/cpp/tests/AccumulatedAckTest.cpp107
-rw-r--r--qpid/cpp/tests/BrokerChannelTest.cpp356
-rw-r--r--qpid/cpp/tests/ClientChannelTest.cpp164
-rw-r--r--qpid/cpp/tests/ConfigurationTest.cpp98
-rw-r--r--qpid/cpp/tests/EventChannelConnectionTest.cpp109
-rw-r--r--qpid/cpp/tests/EventChannelTest.cpp187
-rw-r--r--qpid/cpp/tests/EventChannelThreadsTest.cpp247
-rw-r--r--qpid/cpp/tests/ExceptionTest.cpp61
-rw-r--r--qpid/cpp/tests/ExchangeTest.cpp73
-rw-r--r--qpid/cpp/tests/FieldTableTest.cpp55
-rw-r--r--qpid/cpp/tests/FramingTest.cpp381
-rw-r--r--qpid/cpp/tests/HeaderTest.cpp141
-rw-r--r--qpid/cpp/tests/HeadersExchangeTest.cpp115
-rw-r--r--qpid/cpp/tests/InMemoryContentTest.cpp92
-rw-r--r--qpid/cpp/tests/InProcessBroker.h169
-rw-r--r--qpid/cpp/tests/LazyLoadedContentTest.cpp112
-rw-r--r--qpid/cpp/tests/Makefile.am118
-rw-r--r--qpid/cpp/tests/MessageBuilderTest.cpp226
-rw-r--r--qpid/cpp/tests/MessageHandlerTest.cpp57
-rw-r--r--qpid/cpp/tests/MessageTest.cpp89
-rw-r--r--qpid/cpp/tests/MockChannel.h69
-rw-r--r--qpid/cpp/tests/MockConnectionInputHandler.h113
-rw-r--r--qpid/cpp/tests/ProducerConsumerTest.cpp283
-rw-r--r--qpid/cpp/tests/QueuePolicyTest.cpp89
-rw-r--r--qpid/cpp/tests/QueueRegistryTest.cpp95
-rw-r--r--qpid/cpp/tests/QueueTest.cpp185
-rw-r--r--qpid/cpp/tests/ReferenceTest.cpp102
-rw-r--r--qpid/cpp/tests/TopicExchangeTest.cpp200
-rw-r--r--qpid/cpp/tests/TxAckTest.cpp125
-rw-r--r--qpid/cpp/tests/TxBufferTest.cpp266
-rw-r--r--qpid/cpp/tests/TxPublishTest.cpp125
-rw-r--r--qpid/cpp/tests/ValueTest.cpp102
-rw-r--r--qpid/cpp/tests/client_test.cpp138
-rw-r--r--qpid/cpp/tests/echo_service.cpp230
-rw-r--r--qpid/cpp/tests/examples.Makefile66
-rw-r--r--qpid/cpp/tests/examples.README18
-rwxr-xr-xqpid/cpp/tests/kill_broker3
-rwxr-xr-xqpid/cpp/tests/python_tests8
-rw-r--r--qpid/cpp/tests/qpid_test_plugin.h43
-rwxr-xr-xqpid/cpp/tests/quick_topictest7
-rwxr-xr-xqpid/cpp/tests/run-python-tests0
-rwxr-xr-xqpid/cpp/tests/run-unit-tests9
-rw-r--r--qpid/cpp/tests/setup74
-rwxr-xr-xqpid/cpp/tests/start_broker14
-rw-r--r--qpid/cpp/tests/topic_listener.cpp217
-rw-r--r--qpid/cpp/tests/topic_publisher.cpp286
-rwxr-xr-xqpid/cpp/tests/topictest38
50 files changed, 10709 insertions, 0 deletions
diff --git a/qpid/cpp/tests/.vg-supp b/qpid/cpp/tests/.vg-supp
new file mode 100644
index 0000000000..e107377aa2
--- /dev/null
+++ b/qpid/cpp/tests/.vg-supp
@@ -0,0 +1,4705 @@
+{
+ x17984_1
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsmj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_2
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid6broker6BrokerEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid6broker6BrokerEEC1IS3_EEPT_
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_3
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid6broker15HeadersExchangeEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid6broker8ExchangeEEC1INS2_15HeadersExchangeEEEPT_
+ fun:_ZN4qpid6broker16ExchangeRegistry7declareERKSsS3_
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsmj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_4
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid6broker14FanOutExchangeEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid6broker8ExchangeEEC1INS2_14FanOutExchangeEEEPT_
+ fun:_ZN4qpid6broker16ExchangeRegistry7declareERKSsS3_
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsmj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_5
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid6broker13TopicExchangeEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid6broker8ExchangeEEC1INS2_13TopicExchangeEEEPT_
+ fun:_ZN4qpid6broker16ExchangeRegistry7declareERKSsS3_
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsmj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_6
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid3sys11APRAcceptorEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid3sys8AcceptorEEC1INS2_11APRAcceptorEEEPT_
+ fun:_ZN4qpid3sys8Acceptor6createEsiib
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_7
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid3sys7APRBase11getInstanceEv
+ fun:_ZN4qpid3sys7APRBase9incrementEv
+ fun:_ZN4qpid3sys7APRPoolC1Ev
+ fun:_ZN5boost7details4pool17singleton_defaultIN4qpid3sys7APRPoolEE8instanceEv
+ fun:_ZN4qpid3sys7APRPool3getEv
+ fun:_Z41__static_initialization_and_destruction_0ii
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_8
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znam
+ fun:_ZN4qpid3sys11LFProcessorC1EP10apr_pool_tiii
+ fun:_ZN4qpid3sys11APRAcceptorC1Esiib
+ fun:_ZN4qpid3sys8Acceptor6createEsiib
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_9
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid7framing5Value12decode_valueERNS0_6BufferE
+ fun:_ZN4qpid7framing10FieldTable6decodeERNS0_6BufferE
+ fun:_ZN4qpid7framing6Buffer13getFieldTableERNS0_10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody13decodeContentERNS0_6BufferE
+ fun:_ZN4qpid7framing13AMQMethodBody6decodeERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid7framing5ValueEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid7framing5ValueEEC1IS3_EEPT_
+ fun:_ZN4qpid7framing10FieldTable6decodeERNS0_6BufferE
+ fun:_ZN4qpid7framing6Buffer13getFieldTableERNS0_10FieldTableE
+}
+{
+ x17984_10
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid6broker14DirectExchangeEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid6broker8ExchangeEEC1INS2_14DirectExchangeEEEPT_
+ fun:_ZN4qpid6broker16ExchangeRegistry7declareERKSsS3_
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsmj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_11
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISsE8allocateEmPKv
+ fun:_ZNSt12_Vector_baseISsSaISsEE11_M_allocateEm
+ fun:_ZNSt12_Vector_baseISsSaISsEEC2EmRKS0_
+ fun:_ZNSt6vectorISsSaISsEEC2ERKS1_
+ fun:_ZN4qpid6broker6TokensC2ERKS1_
+ fun:_ZN4qpid6broker12TopicPatternC1ERKS1_
+ fun:_ZNSt4pairIKN4qpid6broker12TopicPatternESt6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS8_EEEC1ERKSB_
+ fun:_ZN9__gnu_cxx13new_allocatorISt4pairIKN4qpid6broker12TopicPatternESt6vectorIN5boost10shared_ptrINS3_5QueueEEESaISA_EEEE9constructEPSD_RKSD_
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE14_M_create_nodeERKSC_
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE9_M_insertEPSt18_Rb_tree_node_baseSK_RKSC_
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE13insert_uniqueERKSC_
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE13insert_uniqueESt17_Rb_tree_iteratorISC_ERKSC_
+ fun:_ZNSt3mapIN4qpid6broker12TopicPatternESt6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS7_EESt4lessIS2_ESaISt4pairIKS2_S9_EEE6insertESt17_Rb_tree_iteratorISE_ERKSE_
+ fun:_ZNSt3mapIN4qpid6broker12TopicPatternESt6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS7_EESt4lessIS2_ESaISt4pairIKS2_S9_EEEixERSD_
+ fun:_ZN4qpid6broker13TopicExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+}
+{
+ x17984_12
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker16ExchangeRegistry7declareERKSsS3_
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsmj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_13
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIPN5boost10shared_ptrIN4qpid6broker5QueueEEEE8allocateEmPKv
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE15_M_allocate_mapEm
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE17_M_initialize_mapEm
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EEC2ERKS6_m
+ fun:_ZNSt5dequeIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EEC1ERKS7_
+ fun:_ZNSt5queueIN5boost10shared_ptrIN4qpid6broker5QueueEEESt5dequeIS5_SaIS5_EEEC1ERKS8_
+ fun:_ZN4qpid6broker10AutoDeleteC1EPNS0_13QueueRegistryEj
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsmj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_14
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid7framing5Value12decode_valueERNS0_6BufferE
+ fun:_ZN4qpid7framing10FieldTable6decodeERNS0_6BufferE
+ fun:_ZN4qpid7framing6Buffer13getFieldTableERNS0_10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody13decodeContentERNS0_6BufferE
+ fun:_ZN4qpid7framing13AMQMethodBody6decodeERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZNSs4_Rep9_S_createEmmRKSaIcE
+ fun:_ZNSs9_M_mutateEmmm
+ fun:_ZNSs15_M_replace_safeEmmPKcm
+ fun:_ZN4qpid7framing6Buffer13getLongStringERSs
+}
+{
+ x17984_15
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE11_M_get_nodeEv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE14_M_create_nodeERKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE9_M_insertEPSt18_Rb_tree_node_baseSG_RKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE13insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_
+ fun:_ZNSt3mapISsN5boost10shared_ptrIN4qpid6broker5QueueEEESt4lessISsESaISt4pairIKSsS5_EEE6insertESt17_Rb_tree_iteratorISA_ERKSA_
+ fun:_ZNSt3mapISsN5boost10shared_ptrIN4qpid6broker5QueueEEESt4lessISsESaISt4pairIKSsS5_EEEixERS9_
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+}
+{
+ x17984_16
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIPN4qpid6broker13Configuration6OptionEE8allocateEmPKv
+ fun:_ZNSt12_Vector_baseIPN4qpid6broker13Configuration6OptionESaIS4_EE11_M_allocateEm
+ fun:_ZNSt6vectorIPN4qpid6broker13Configuration6OptionESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_
+ fun:_ZNSt6vectorIPN4qpid6broker13Configuration6OptionESaIS4_EE9push_backERKS4_
+ fun:_ZN4qpid6broker13ConfigurationC1Ev
+ fun:main
+}
+{
+ x17984_17
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid3sys8Acceptor6createEsiib
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_18
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker14FanOutExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__ZdlPv
+ fun:_ZN9__gnu_cxx13new_allocatorIN5boost10shared_ptrIN4qpid6broker5QueueEEEE10deallocateEPS6_m
+ fun:_ZNSt12_Vector_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE13_M_deallocateEPS5_m
+ fun:_ZNSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_
+ fun:_ZNSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE9push_backERKS5_
+ fun:_ZN4qpid6broker14FanOutExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+}
+{
+ x17984_19
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker15HeadersExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__ZdlPv
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEEEE10deallocateEPSB_m
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE11_M_put_nodeEPSt13_Rb_tree_nodeIS8_E
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE12destroy_nodeEPSt13_Rb_tree_nodeIS8_E
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE8_M_eraseEPSt13_Rb_tree_nodeIS8_E
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EED1Ev
+ fun:_ZNSt3mapISsN5boost10shared_ptrIN4qpid7framing5ValueEEESt4lessISsESaISt4pairIKSsS5_EEED1Ev
+}
+{
+ x17984_20
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_malloc
+ fun:apr_allocator_create
+ fun:apr_pool_initialize
+ fun:apr_initialize
+ fun:_ZN4qpid3sys7APRBaseC1Ev
+ fun:_ZN4qpid3sys7APRBase11getInstanceEv
+ fun:_ZN4qpid3sys7APRBase9incrementEv
+ fun:_ZN4qpid3sys7APRPoolC1Ev
+ fun:_ZN5boost7details4pool17singleton_defaultIN4qpid3sys7APRPoolEE8instanceEv
+ fun:_ZN4qpid3sys7APRPool3getEv
+ fun:_Z41__static_initialization_and_destruction_0ii
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_21
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid7framing5ValueEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid7framing5ValueEEC1IS3_EEPT_
+ fun:_ZN4qpid7framing10FieldTable6decodeERNS0_6BufferE
+ fun:_ZN4qpid7framing6Buffer13getFieldTableERNS0_10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody13decodeContentERNS0_6BufferE
+ fun:_ZN4qpid7framing13AMQMethodBody6decodeERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE11_M_get_nodeEv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE14_M_create_nodeERKS8_
+}
+{
+ x17984_22
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker13TopicExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__ZdlPv
+ fun:_ZN9__gnu_cxx13new_allocatorISsE10deallocateEPSsm
+ fun:_ZNSt12_Vector_baseISsSaISsEE13_M_deallocateEPSsm
+ fun:_ZNSt12_Vector_baseISsSaISsEED2Ev
+ fun:_ZNSt6vectorISsSaISsEED2Ev
+ fun:_ZN4qpid6broker6TokensD2Ev
+ fun:_ZN4qpid6broker12TopicPatternD1Ev
+ fun:_ZN4qpid6broker13TopicExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+}
+{
+ x17984_23
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS2_6broker5QueueEEEEE8allocateEmPKv
+ fun:_ZNSt12_Vector_baseISt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS1_6broker5QueueEEEESaIS9_EE11_M_allocateEm
+ fun:_ZNSt6vectorISt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS1_6broker5QueueEEEESaIS9_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS9_SB_EERKS9_
+ fun:_ZNSt6vectorISt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS1_6broker5QueueEEEESaIS9_EE9push_backERKS9_
+ fun:_ZN4qpid6broker15HeadersExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE11_M_get_nodeEv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE14_M_create_nodeERKS8_
+}
+{
+ x17984_24
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker7Channel8completeERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker14MessageBuilder5routeEv
+ fun:_ZN4qpid6broker14MessageBuilder10addContentERN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker7Channel13handleContentEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl13handleContentEtN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIPN4qpid6broker4TxOpEE8allocateEmPKv
+ fun:_ZNSt12_Vector_baseIPN4qpid6broker4TxOpESaIS3_EE11_M_allocateEm
+ fun:_ZNSt6vectorIPN4qpid6broker4TxOpESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_
+ fun:_ZNSt6vectorIPN4qpid6broker4TxOpESaIS3_EE9push_backERKS3_
+ fun:_ZN4qpid6broker8TxBuffer6enlistEPNS0_4TxOpE
+}
+{
+ x17984_25
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_26
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKN4qpid6broker12TopicPatternESt6vectorIN5boost10shared_ptrINS4_5QueueEEESaISB_EEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE11_M_get_nodeEv
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE14_M_create_nodeERKSC_
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE9_M_insertEPSt18_Rb_tree_node_baseSK_RKSC_
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE13insert_uniqueERKSC_
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE13insert_uniqueESt17_Rb_tree_iteratorISC_ERKSC_
+ fun:_ZNSt3mapIN4qpid6broker12TopicPatternESt6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS7_EESt4lessIS2_ESaISt4pairIKS2_S9_EEE6insertESt17_Rb_tree_iteratorISE_ERKSE_
+ fun:_ZNSt3mapIN4qpid6broker12TopicPatternESt6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS7_EESt4lessIS2_ESaISt4pairIKS2_S9_EEEixERSD_
+ fun:_ZN4qpid6broker13TopicExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_27
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIPN4qpid6broker8ConsumerEE8allocateEmPKv
+ fun:_ZNSt12_Vector_baseIPN4qpid6broker8ConsumerESaIS3_EE11_M_allocateEm
+ fun:_ZNSt6vectorIPN4qpid6broker8ConsumerESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_
+ fun:_ZNSt6vectorIPN4qpid6broker8ConsumerESaIS3_EE9push_backERKS3_
+ fun:_ZN4qpid6broker5Queue7consumeEPNS0_8ConsumerEb
+ fun:_ZN4qpid6broker7Channel7consumeERSsN5boost10shared_ptrINS0_5QueueEEEbbPNS0_15ConnectionTokenEPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16BasicHandlerImpl7consumeEttRKSsS4_bbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16BasicConsumeBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsPN4qpid6broker7Channel12ConsumerImplEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4qpid6broker7Channel12ConsumerImplEESt10_Select1stIS7_ESt4lessISsESaIS7_EE11_M_get_nodeEv
+}
+{
+ x17984_28
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsN5boost10shared_ptrIN4qpid6broker8ExchangeEEEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker8ExchangeEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE11_M_get_nodeEv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker8ExchangeEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE14_M_create_nodeERKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker8ExchangeEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE9_M_insertEPSt18_Rb_tree_node_baseSG_RKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker8ExchangeEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE13insert_uniqueERKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker8ExchangeEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE13insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_
+ fun:_ZNSt3mapISsN5boost10shared_ptrIN4qpid6broker8ExchangeEEESt4lessISsESaISt4pairIKSsS5_EEE6insertESt17_Rb_tree_iteratorISA_ERKSA_
+ fun:_ZNSt3mapISsN5boost10shared_ptrIN4qpid6broker8ExchangeEEESt4lessISsESaISt4pairIKSsS5_EEEixERS9_
+ fun:_ZN4qpid6broker16ExchangeRegistry7declareERKSsS3_
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsmj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_29
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE11_M_get_nodeEv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE14_M_create_nodeERKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE13_M_clone_nodeEPKSt13_Rb_tree_nodeIS8_E
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE7_M_copyEPKSt13_Rb_tree_nodeIS8_EPSG_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE7_M_copyEPKSt13_Rb_tree_nodeIS8_EPSG_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EEC1ERKSE_
+ fun:_ZNSt3mapISsN5boost10shared_ptrIN4qpid7framing5ValueEEESt4lessISsESaISt4pairIKSsS5_EEEC1ERKSC_
+ fun:_ZN4qpid7framing10FieldTableC1ERKS1_
+ fun:_ZNSt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS0_6broker5QueueEEEEC1ERKS8_
+ fun:_ZSt10_ConstructISt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS1_6broker5QueueEEEES9_EvPT_RKT0_
+ fun:_ZSt24__uninitialized_copy_auxIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS3_6broker5QueueEEEESt6vectorISB_SaISB_EEEESG_ET0_T_SI_SH_12__false_type
+ fun:_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS3_6broker5QueueEEEESt6vectorISB_SaISB_EEEESG_ET0_T_SI_SH_
+ fun:_ZSt22__uninitialized_copy_aIN9__gnu_cxx17__normal_iteratorIPSt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS3_6broker5QueueEEEESt6vectorISB_SaISB_EEEESG_SB_ET0_T_SI_SH_SaIT1_E
+ fun:_ZNSt6vectorISt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS1_6broker5QueueEEEESaIS9_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS9_SB_EERKS9_
+ fun:_ZNSt6vectorISt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS1_6broker5QueueEEEESaIS9_EE9push_backERKS9_
+ fun:_ZN4qpid6broker15HeadersExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+}
+{
+ x17984_30
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIPN4qpid3sys16LFSessionContextEE8allocateEmPKv
+ fun:_ZNSt12_Vector_baseIPN4qpid3sys16LFSessionContextESaIS3_EE11_M_allocateEm
+ fun:_ZNSt6vectorIPN4qpid3sys16LFSessionContextESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_
+ fun:_ZNSt6vectorIPN4qpid3sys16LFSessionContextESaIS3_EE9push_backERKS3_
+ fun:_ZN4qpid3sys11LFProcessor3addEPK12apr_pollfd_t
+ fun:_ZN4qpid3sys11APRAcceptor3runEPNS0_21SessionHandlerFactoryE
+ fun:_ZN4qpid6broker6Broker3runEv
+ fun:main
+}
+{
+ x17984_31
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZNSs4_Rep9_S_createEmmRKSaIcE
+ obj:/usr/lib/libstdc++.so.6.0.8
+ fun:_ZNSsC1EPKcRKSaIcE
+ fun:_ZN4qpid6broker7ChannelC1ERNS_7framing15ProtocolVersionEPNS2_13OutputHandlerEijPNS0_12MessageStoreEm
+ fun:_ZN4qpid6broker18SessionHandlerImpl18ChannelHandlerImpl4openEtRKSs
+ fun:_ZN4qpid7framing15ChannelOpenBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid7framing16AMQP_ClientProxy7Channel6openOkEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl18ChannelHandlerImpl4openEtRKSs
+ fun:_ZN4qpid7framing15ChannelOpenBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+}
+{
+ x17984_32
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIN5boost10shared_ptrIN4qpid7framing14AMQContentBodyEEEE8allocateEmPKv
+ fun:_ZNSt12_Vector_baseIN5boost10shared_ptrIN4qpid7framing14AMQContentBodyEEESaIS5_EE11_M_allocateEm
+ fun:_ZNSt6vectorIN5boost10shared_ptrIN4qpid7framing14AMQContentBodyEEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_
+ fun:_ZNSt6vectorIN5boost10shared_ptrIN4qpid7framing14AMQContentBodyEEESaIS5_EE9push_backERKS5_
+ fun:_ZN4qpid6broker15InMemoryContent3addEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker7Message10addContentEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker14MessageBuilder10addContentERN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker7Channel13handleContentEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl13handleContentEtN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZNSs4_Rep9_S_createEmmRKSaIcE
+}
+{
+ x17984_33
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid7framing14AMQContentBodyEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid7framing7AMQBodyEEC1INS2_14AMQContentBodyEEEPT_
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+}
+{
+ x17984_34
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_calloc
+ fun:_dl_allocate_tls
+ fun:pthread_create@@GLIBC_2.2.5
+ fun:_ZN4qpid3sys6ThreadC1EPNS0_8RunnableE
+ fun:_ZN4qpid6broker10AutoDelete5startEv
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsmj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_35
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid7framing14AMQContentBodyEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid7framing7AMQBodyEEC1INS2_14AMQContentBodyEEEPT_
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZNSs4_Rep9_S_createEmmRKSaIcE
+ fun:_ZNSs9_M_mutateEmmm
+ fun:_ZNSs15_M_replace_safeEmmPKcm
+ fun:_ZN4qpid7framing6Buffer10getRawDataERSsj
+ fun:_ZN4qpid7framing14AMQContentBody6decodeERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+}
+{
+ x17984_36
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid7framing13AMQHeaderBodyEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid7framing7AMQBodyEEC1INS2_13AMQHeaderBodyEEEPT_
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__ZdlPv
+ fun:_ZN4qpid7framing16BasicPublishBodyD0Ev
+ fun:_ZN5boost14checked_deleteIN4qpid7framing13AMQMethodBodyEEEvPT_
+ fun:_ZN5boost6detail17sp_counted_impl_pIN4qpid7framing13AMQMethodBodyEE7disposeEv
+ fun:_ZN5boost6detail15sp_counted_base7releaseEv
+ fun:_ZN5boost6detail12shared_countaSERKS1_
+ fun:_ZN5boost10shared_ptrIN4qpid7framing7AMQBodyEEaSERKS4_
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+}
+{
+ x17984_37
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid6broker7MessageEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid6broker7MessageEEC1IS3_EEPT_
+ fun:_ZN4qpid6broker7Channel13handlePublishEPNS0_7MessageEN5boost10shared_ptrINS0_8ExchangeEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16BasicHandlerImpl7publishEttRKSsS4_bb
+ fun:_ZN4qpid7framing16BasicPublishBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_38
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker14MessageBuilder9setHeaderERN5boost10shared_ptrINS_7framing13AMQHeaderBodyEEE
+ fun:_ZN4qpid6broker7Channel12handleHeaderEN5boost10shared_ptrINS_7framing13AMQHeaderBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl12handleHeaderEtN5boost10shared_ptrINS_7framing13AMQHeaderBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_39
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_40
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN5boost6detail12shared_countC1IN4qpid6broker5QueueEEEPT_
+ fun:_ZN5boost10shared_ptrIN4qpid6broker5QueueEEC1IS3_EEPT_
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE11_M_get_nodeEv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE14_M_create_nodeERKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE9_M_insertEPSt18_Rb_tree_node_baseSG_RKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE13insert_uniqueERKS8_
+}
+{
+ x17984_41
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker5Queue9configureERKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker5Queue6createERKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIN5boost10shared_ptrIN4qpid6broker5QueueEEEE8allocateEmPKv
+ fun:_ZNSt12_Vector_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE11_M_allocateEm
+ fun:_ZNSt12_Vector_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EEC2EmRKS6_
+ fun:_ZNSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EEC1ERKS7_
+ fun:_ZNSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS7_EEEC1ERS0_RKS9_
+ fun:_ZNSt3mapISsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS6_EESt4lessISsESaISt4pairIKSsS8_EEEixERSC_
+}
+{
+ x17984_42
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIN5boost10shared_ptrIN4qpid6broker5QueueEEEE8allocateEmPKv
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE16_M_allocate_nodeEv
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE15_M_create_nodesEPPS5_S9_
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE17_M_initialize_mapEm
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EEC2ERKS6_m
+ fun:_ZNSt5dequeIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EEC1ERKS7_
+ fun:_ZNSt5queueIN5boost10shared_ptrIN4qpid6broker5QueueEEESt5dequeIS5_SaIS5_EEEC1ERKS8_
+ fun:_ZN4qpid6broker10AutoDeleteC1EPNS0_13QueueRegistryEj
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsmj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x17984_43
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaISA_EEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS8_EEESt10_Select1stISB_ESt4lessISsESaISB_EE11_M_get_nodeEv
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS8_EEESt10_Select1stISB_ESt4lessISsESaISB_EE14_M_create_nodeERKSB_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS8_EEESt10_Select1stISB_ESt4lessISsESaISB_EE9_M_insertEPSt18_Rb_tree_node_baseSJ_RKSB_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS8_EEESt10_Select1stISB_ESt4lessISsESaISB_EE13insert_uniqueERKSB_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS8_EEESt10_Select1stISB_ESt4lessISsESaISB_EE13insert_uniqueESt17_Rb_tree_iteratorISB_ERKSB_
+ fun:_ZNSt3mapISsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS6_EESt4lessISsESaISt4pairIKSsS8_EEE6insertESt17_Rb_tree_iteratorISD_ERKSD_
+ fun:_ZNSt3mapISsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS6_EESt4lessISsESaISt4pairIKSsS8_EEEixERSC_
+ fun:_ZN4qpid6broker14DirectExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_44
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker18SessionHandlerImpl16BasicHandlerImpl7publishEttRKSsS4_bb
+ fun:_ZN4qpid7framing16BasicPublishBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_45
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker14DirectExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_46
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_malloc
+ fun:__new_exitfn
+ fun:__cxa_atexit
+ fun:_Z41__static_initialization_and_destruction_0ii
+ fun:_GLOBAL__I__ZN4qpid6broker9TxPublishC2EN5boost10shared_ptrINS0_7MessageEEEPKSs
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/broker/.libs/libqpidbroker.so.0.1.0
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/broker/.libs/libqpidbroker.so.0.1.0
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_47
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIPN5boost10shared_ptrIN4qpid6broker7MessageEEEE8allocateEmPKv
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EE15_M_allocate_mapEm
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EE17_M_initialize_mapEm
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EEC2ERKS6_m
+ fun:_ZNSt5dequeIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EEC1ERKS7_
+ fun:_ZNSt5queueIN5boost10shared_ptrIN4qpid6broker7MessageEEESt5dequeIS5_SaIS5_EEEC1ERKS8_
+ fun:_ZN4qpid6broker5QueueC1ERKSsjPNS0_12MessageStoreEPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+}
+{
+ x17984_48
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIPPN4qpid6broker7BindingEE8allocateEmPKv
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EE15_M_allocate_mapEm
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EE17_M_initialize_mapEm
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EEC2ERKS4_m
+ fun:_ZNSt5dequeIPN4qpid6broker7BindingESaIS3_EEC1ERKS5_
+ fun:_ZNSt5queueIPN4qpid6broker7BindingESt5dequeIS3_SaIS3_EEEC1ERKS6_
+ fun:_ZN4qpid6broker5QueueC1ERKSsjPNS0_12MessageStoreEPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+}
+{
+ x17984_49
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKmPFPN4qpid7framing13AMQMethodBodyEhhEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeImSt4pairIKmPFPN4qpid7framing13AMQMethodBodyEhhEESt10_Select1stIS8_ESt4lessImESaIS8_EE11_M_get_nodeEv
+ fun:_ZNSt8_Rb_treeImSt4pairIKmPFPN4qpid7framing13AMQMethodBodyEhhEESt10_Select1stIS8_ESt4lessImESaIS8_EE14_M_create_nodeERKS8_
+ fun:_ZNSt8_Rb_treeImSt4pairIKmPFPN4qpid7framing13AMQMethodBodyEhhEESt10_Select1stIS8_ESt4lessImESaIS8_EE9_M_insertEPSt18_Rb_tree_node_baseSG_RKS8_
+ fun:_ZNSt8_Rb_treeImSt4pairIKmPFPN4qpid7framing13AMQMethodBodyEhhEESt10_Select1stIS8_ESt4lessImESaIS8_EE13insert_uniqueERKS8_
+ fun:_ZNSt3mapImPFPN4qpid7framing13AMQMethodBodyEhhESt4lessImESaISt4pairIKmS5_EEE6insertERKSA_
+ fun:_ZN4qpid7framing21AMQP_MethodVersionMapC1Ev
+ fun:_Z41__static_initialization_and_destruction_0ii
+ fun:_GLOBAL__I__ZN4qpid7framing8AMQFrame10versionMapE
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorISt13_Rb_tree_nodeISt4pairIKmPFPN4qpid7framing13AMQMethodBodyEhhEEEE8allocateEmPKv
+ fun:_ZNSt8_Rb_treeImSt4pairIKmPFPN4qpid7framing13AMQMethodBodyEhhEESt10_Select1stIS8_ESt4lessImESaIS8_EE11_M_get_nodeEv
+ fun:_ZNSt8_Rb_treeImSt4pairIKmPFPN4qpid7framing13AMQMethodBodyEhhEESt10_Select1stIS8_ESt4lessImESaIS8_EE14_M_create_nodeERKS8_
+ fun:_ZNSt8_Rb_treeImSt4pairIKmPFPN4qpid7framing13AMQMethodBodyEhhEESt10_Select1stIS8_ESt4lessImESaIS8_EE9_M_insertEPSt18_Rb_tree_node_baseSG_RKS8_
+ fun:_ZNSt8_Rb_treeImSt4pairIKmPFPN4qpid7framing13AMQMethodBodyEhhEESt10_Select1stIS8_ESt4lessImESaIS8_EE13insert_uniqueERKS8_
+}
+{
+ x17984_50
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid7framing13AMQHeaderBody16createPropertiesEi
+ fun:_ZN4qpid7framing13AMQHeaderBody6decodeERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_51
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker18SessionHandlerImpl18ChannelHandlerImpl4openEtRKSs
+ fun:_ZN4qpid7framing15ChannelOpenBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZNSs4_Rep9_S_createEmmRKSaIcE
+ obj:/usr/lib/libstdc++.so.6.0.8
+ fun:_ZNSsC1EPKcRKSaIcE
+ fun:_ZN4qpid6broker7ChannelC1ERNS_7framing15ProtocolVersionEPNS2_13OutputHandlerEijPNS0_12MessageStoreEm
+ fun:_ZN4qpid6broker18SessionHandlerImpl18ChannelHandlerImpl4openEtRKSs
+ fun:_ZN4qpid7framing15ChannelOpenBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+}
+{
+ x17984_52
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZNSs4_Rep9_S_createEmmRKSaIcE
+ obj:/usr/lib/libstdc++.so.6.0.8
+ fun:_ZNSsC1EPKcRKSaIcE
+ fun:_Z41__static_initialization_and_destruction_0ii
+ fun:_GLOBAL__I__ZN4qpid6broker6TokensaSERKSs
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/broker/.libs/libqpidbroker.so.0.1.0
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/broker/.libs/libqpidbroker.so.0.1.0
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_53
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIPPN4qpid6broker7BindingEE8allocateEmPKv
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EE15_M_allocate_mapEm
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EE17_M_initialize_mapEm
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EEC2ERKS4_m
+ fun:_ZNSt5dequeIPN4qpid6broker7BindingESaIS3_EEC1ERKS4_
+ fun:_ZN4qpid6broker5QueueC1ERKSsjPNS0_12MessageStoreEPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+}
+{
+ x17984_54
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIN5boost10shared_ptrIN4qpid6broker7MessageEEEE8allocateEmPKv
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EE16_M_allocate_nodeEv
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EE15_M_create_nodesEPPS5_S9_
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EE17_M_initialize_mapEm
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EEC2ERKS6_m
+ fun:_ZNSt5dequeIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EEC1ERKS7_
+ fun:_ZNSt5queueIN5boost10shared_ptrIN4qpid6broker7MessageEEESt5dequeIS5_SaIS5_EEEC1ERKS8_
+ fun:_ZN4qpid6broker5QueueC1ERKSsjPNS0_12MessageStoreEPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_55
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwm
+ fun:_ZN9__gnu_cxx13new_allocatorIPN4qpid6broker7BindingEE8allocateEmPKv
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EE16_M_allocate_nodeEv
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EE15_M_create_nodesEPPS3_S7_
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EE17_M_initialize_mapEm
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EEC2ERKS4_m
+ fun:_ZNSt5dequeIPN4qpid6broker7BindingESaIS3_EEC1ERKS5_
+ fun:_ZNSt5queueIPN4qpid6broker7BindingESt5dequeIS3_SaIS3_EEEC1ERKS6_
+ fun:_ZN4qpid6broker5QueueC1ERKSsjPNS0_12MessageStoreEPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_56
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_malloc
+ fun:apr_pool_create_ex
+ fun:apr_pool_initialize
+ fun:apr_initialize
+ fun:_ZN4qpid3sys7APRBaseC1Ev
+ fun:_ZN4qpid3sys7APRBase11getInstanceEv
+ fun:_ZN4qpid3sys7APRBase9incrementEv
+ fun:_ZN4qpid3sys7APRPoolC1Ev
+ fun:_ZN5boost7details4pool17singleton_defaultIN4qpid3sys7APRPoolEE8instanceEv
+ fun:_ZN4qpid3sys7APRPool3getEv
+ fun:_Z41__static_initialization_and_destruction_0ii
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:/home_old/e/work/rh/rhn/messaging-clean/trunk/qpid-help2man/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ x17984_57
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_malloc
+ fun:apr_palloc
+ fun:apr_pollset_create
+ fun:_ZN4qpid3sys11LFProcessorC1EP10apr_pool_tiii
+ fun:_ZN4qpid3sys11APRAcceptorC1Esiib
+ fun:_ZN4qpid3sys8Acceptor6createEsiib
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+
+{
+ x7393_1
+ Memcheck:Leak
+ fun:_Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_2
+ Memcheck:Leak
+ fun:_Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+}
+{
+ x7393_3
+ Memcheck:Leak
+ fun:_Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_4
+ Memcheck:Leak
+ fun:_Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_5
+ Memcheck:Leak
+ fun:_Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ fun:_Z8runTestsRK17CommandLineParser
+}
+{
+ x7393_6
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE15_M_create_nodesEPPS5_S9_
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE17_M_initialize_mapEj
+ fun:_ZN4qpid6broker10AutoDeleteC1EPNS0_13QueueRegistryEj
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsyj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x7393_7
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_8
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker14MessageBuilder9setHeaderERN5boost10shared_ptrINS_7framing13AMQHeaderBodyEEE
+ fun:_ZN4qpid6broker7Channel12handleHeaderEN5boost10shared_ptrINS_7framing13AMQHeaderBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl12handleHeaderEtN5boost10shared_ptrINS_7framing13AMQHeaderBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_9
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker7Channel13handlePublishEPNS0_7MessageEN5boost10shared_ptrINS0_8ExchangeEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16BasicHandlerImpl7publishEttRKSsS4_bb
+ fun:_ZN4qpid7framing16BasicPublishBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_10
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker18SessionHandlerImplC1EPNS_3sys14SessionContextEPNS0_13QueueRegistryEPNS0_16ExchangeRegistryEPNS0_10AutoDeleteERKNS0_8SettingsE
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImpl6createEPNS_3sys14SessionContextE
+ fun:_ZN4qpid3sys11APRAcceptor3runEPNS0_21SessionHandlerFactoryE
+ fun:_ZN4qpid6broker6Broker3runEv
+ fun:main
+}
+{
+ x7393_11
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE9_M_insertEPSt18_Rb_tree_node_baseSG_RKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE13insert_uniqueERKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker5QueueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE13insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_12
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_
+ fun:_ZN4qpid6broker14DirectExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_13
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt8_Rb_treeItSt4pairIKtPN4qpid6broker7ChannelEESt10_Select1stIS6_ESt4lessItESaIS6_EE9_M_insertEPSt18_Rb_tree_node_baseSE_RKS6_
+ fun:_ZNSt8_Rb_treeItSt4pairIKtPN4qpid6broker7ChannelEESt10_Select1stIS6_ESt4lessItESaIS6_EE13insert_uniqueERKS6_
+ fun:_ZNSt8_Rb_treeItSt4pairIKtPN4qpid6broker7ChannelEESt10_Select1stIS6_ESt4lessItESaIS6_EE13insert_uniqueESt17_Rb_tree_iteratorIS6_ERKS6_
+ fun:_ZN4qpid6broker18SessionHandlerImpl18ChannelHandlerImpl4openEtRKSs
+ fun:_ZN4qpid7framing15ChannelOpenBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_14
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_15
+ Memcheck:Leak
+ fun:calloc
+ fun:_dl_allocate_tls
+ fun:pthread_create@@GLIBC_2.1
+ fun:apr_thread_create
+ fun:_ZN4qpid6broker10AutoDelete5startEv
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsyj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x7393_16
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4qpid6broker7Channel12ConsumerImplEESt10_Select1stIS7_ESt4lessISsESaIS7_EE9_M_insertEPSt18_Rb_tree_node_baseSF_RKS7_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4qpid6broker7Channel12ConsumerImplEESt10_Select1stIS7_ESt4lessISsESaIS7_EE13insert_uniqueERKS7_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsPN4qpid6broker7Channel12ConsumerImplEESt10_Select1stIS7_ESt4lessISsESaIS7_EE13insert_uniqueESt17_Rb_tree_iteratorIS7_ERKS7_
+ fun:_ZN4qpid6broker7Channel7consumeERSsN5boost10shared_ptrINS0_5QueueEEEbbPNS0_15ConnectionTokenEPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16BasicHandlerImpl7consumeEttRKSsS4_bbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16BasicConsumeBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_17
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker7Channel7consumeERSsN5boost10shared_ptrINS0_5QueueEEEbbPNS0_15ConnectionTokenEPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16BasicHandlerImpl7consumeEttRKSsS4_bbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16BasicConsumeBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_18
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker5Queue9configureERKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker5Queue6createERKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_19
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker7Channel7deliverERN5boost10shared_ptrINS0_7MessageEEERKSsRNS3_INS0_5QueueEEEb
+ fun:_ZN4qpid6broker7Channel12ConsumerImpl7deliverERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker5Queue8dispatchERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker5Queue8dispatchEv
+ fun:_ZN4qpid6broker18SessionHandlerImpl16BasicHandlerImpl7consumeEttRKSsS4_bbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16BasicConsumeBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_20
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt11_Deque_baseIPN4qpid7framing8AMQFrameESaIS3_EE17_M_initialize_mapEj
+ fun:_ZN4qpid3sys16LFSessionContextC1EP10apr_pool_tP12apr_socket_tPNS0_11LFProcessorEb
+ fun:_ZN4qpid3sys11APRAcceptor3runEPNS0_21SessionHandlerFactoryE
+ fun:_ZN4qpid6broker6Broker3runEv
+ fun:main
+}
+{
+ x7393_21
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS8_EEESt10_Select1stISB_ESt4lessISsESaISB_EE9_M_insertEPSt18_Rb_tree_node_baseSJ_RKSB_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS8_EEESt10_Select1stISB_ESt4lessISsESaISB_EE13insert_uniqueERKSB_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS8_EEESt10_Select1stISB_ESt4lessISsESaISB_EE13insert_uniqueESt17_Rb_tree_iteratorISB_ERKSB_
+ fun:_ZNSt3mapISsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS6_EESt4lessISsESaISt4pairIKSsS8_EEEixERSC_
+ fun:_ZN4qpid6broker14DirectExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_22
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker14DirectExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_23
+ Memcheck:Leak
+ fun:calloc
+ fun:__new_exitfn
+ fun:__cxa_atexit
+ fun:_Z41__static_initialization_and_destruction_0ii
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/broker/.libs/libqpidbroker.so.0.1.0
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/broker/.libs/libqpidbroker.so.0.1.0
+ fun:call_init
+ fun:_dl_init
+ obj:/lib/ld-2.4.so
+}
+{
+ x7393_24
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EE17_M_initialize_mapEj
+ fun:_ZN4qpid6broker5QueueC1ERKSsjPNS0_12MessageStoreEPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_25
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EE17_M_initialize_mapEj
+ fun:_ZN4qpid6broker5QueueC1ERKSsjPNS0_12MessageStoreEPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_26
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker18SessionHandlerImpl16BasicHandlerImpl7publishEttRKSsS4_bb
+ fun:_ZN4qpid7framing16BasicPublishBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_27
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt8_Rb_treeIySt4pairIKyPFPN4qpid7framing13AMQMethodBodyEhhEESt10_Select1stIS8_ESt4lessIyESaIS8_EE9_M_insertEPSt18_Rb_tree_node_baseSG_RKS8_
+ fun:_ZNSt8_Rb_treeIySt4pairIKyPFPN4qpid7framing13AMQMethodBodyEhhEESt10_Select1stIS8_ESt4lessIyESaIS8_EE13insert_uniqueERKS8_
+ fun:_ZN4qpid7framing21AMQP_MethodVersionMapC1Ev
+ fun:_Z41__static_initialization_and_destruction_0ii
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ fun:call_init
+ fun:_dl_init
+ obj:/lib/ld-2.4.so
+}
+{
+ x7393_28
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid7framing13AMQHeaderBody16createPropertiesEi
+ fun:_ZN4qpid7framing13AMQHeaderBody6decodeERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_29
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker18SessionHandlerImpl18ChannelHandlerImpl4openEtRKSs
+ fun:_ZN4qpid7framing15ChannelOpenBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_30
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImpl6createEPNS_3sys14SessionContextE
+ fun:_ZN4qpid3sys11APRAcceptor3runEPNS0_21SessionHandlerFactoryE
+ fun:_ZN4qpid6broker6Broker3runEv
+ fun:main
+}
+{
+ x7393_31
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid3sys11APRAcceptor3runEPNS0_21SessionHandlerFactoryE
+ fun:_ZN4qpid6broker6Broker3runEv
+ fun:main
+}
+{
+ x7393_32
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSs4_Rep9_S_createEjjRKSaIcE
+ obj:/usr/lib/libstdc++.so.6.0.8
+ fun:_ZNSsC1EPKcRKSaIcE
+ fun:_Z41__static_initialization_and_destruction_0ii
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/broker/.libs/libqpidbroker.so.0.1.0
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/broker/.libs/libqpidbroker.so.0.1.0
+ fun:call_init
+ fun:_dl_init
+ obj:/lib/ld-2.4.so
+}
+{
+ x7393_33
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker18SessionHandlerImpl9initiatedEPNS_7framing18ProtocolInitiationE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_34
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt11_Deque_baseIPN4qpid7framing8AMQFrameESaIS3_EE15_M_create_nodesEPPS3_S7_
+ fun:_ZNSt11_Deque_baseIPN4qpid7framing8AMQFrameESaIS3_EE17_M_initialize_mapEj
+ fun:_ZN4qpid3sys16LFSessionContextC1EP10apr_pool_tP12apr_socket_tPNS0_11LFProcessorEb
+ fun:_ZN4qpid3sys11APRAcceptor3runEPNS0_21SessionHandlerFactoryE
+ fun:_ZN4qpid6broker6Broker3runEv
+ fun:main
+}
+{
+ x7393_35
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EE15_M_create_nodesEPPS5_S9_
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker7MessageEEESaIS5_EE17_M_initialize_mapEj
+ fun:_ZN4qpid6broker5QueueC1ERKSsjPNS0_12MessageStoreEPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_36
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EE15_M_create_nodesEPPS3_S7_
+ fun:_ZNSt11_Deque_baseIPN4qpid6broker7BindingESaIS3_EE17_M_initialize_mapEj
+ fun:_ZN4qpid6broker5QueueC1ERKSsjPNS0_12MessageStoreEPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker13QueueRegistry7declareERKSsbjPKNS0_15ConnectionTokenE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl7declareEttRKSsbbbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16QueueDeclareBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_37
+ Memcheck:Leak
+ fun:malloc
+ fun:apr_palloc
+ fun:apr_pollset_create
+ fun:_ZN4qpid3sys11LFProcessorC1EP10apr_pool_tiii
+ fun:_ZN4qpid3sys11APRAcceptorC1Esiib
+ fun:_ZN4qpid3sys8Acceptor6createEsiib
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x7393_38
+ Memcheck:Leak
+ fun:malloc
+ fun:apr_pool_create_ex
+ fun:apr_pool_initialize
+ fun:apr_initialize
+ fun:_ZN4qpid3sys7APRBaseC1Ev
+ fun:_ZN4qpid3sys7APRBase11getInstanceEv
+ fun:_ZN4qpid3sys7APRBase9incrementEv
+ fun:_ZN4qpid3sys7APRPoolC1Ev
+ fun:_ZN4qpid3sys7APRPool3getEv
+ fun:_Z41__static_initialization_and_destruction_0ii
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ fun:call_init
+ fun:_dl_init
+ obj:/lib/ld-2.4.so
+}
+{
+ x7393_39
+ Memcheck:Leak
+ fun:_Znaj
+ fun:_ZN4qpid7framing6BufferC1Ej
+ fun:_ZN4qpid3sys16LFSessionContextC1EP10apr_pool_tP12apr_socket_tPNS0_11LFProcessorEb
+ fun:_ZN4qpid3sys11APRAcceptor3runEPNS0_21SessionHandlerFactoryE
+ fun:_ZN4qpid6broker6Broker3runEv
+ fun:main
+}
+{
+ x7393_40
+ Memcheck:Leak
+ fun:_Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_41
+ Memcheck:Leak
+ fun:malloc
+ fun:_dl_new_object
+ fun:_dl_map_object_from_fd
+ fun:_dl_map_object
+ fun:openaux
+ fun:_dl_catch_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_42
+ Memcheck:Leak
+ fun:malloc
+ fun:_dl_map_object
+ fun:openaux
+ fun:_dl_catch_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_43
+ Memcheck:Leak
+ fun:malloc
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_44
+ Memcheck:Leak
+ fun:_Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_45
+ Memcheck:Leak
+ fun:realloc
+ fun:add_to_global
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_46
+ Memcheck:Leak
+ fun:realloc
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_47
+ Memcheck:Leak
+ fun:calloc
+ fun:_dl_check_map_versions
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_48
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSs4_Rep9_S_createEjjRKSaIcE
+ obj:/usr/lib/libstdc++.so.6.0.8
+ fun:_ZNSsC1EPKcRKSaIcE
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_49
+ Memcheck:Leak
+ fun:calloc
+ fun:_dl_new_object
+ fun:_dl_map_object_from_fd
+ fun:_dl_map_object
+ fun:openaux
+ fun:_dl_catch_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ fun:_Z8runTestsRK17CommandLineParser
+ fun:main
+}
+{
+ x7393_50
+ Memcheck:Leak
+ fun:_Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+}
+{
+ x7393_51
+ Memcheck:Param
+ epoll_ctl(event)
+ fun:epoll_ctl
+ fun:_ZN4qpid3sys11LFProcessor3addEPK12apr_pollfd_t
+ fun:_ZN4qpid3sys16LFSessionContext4initEPNS0_14SessionHandlerE
+ fun:_ZN4qpid3sys11APRAcceptor3runEPNS0_21SessionHandlerFactoryE
+ fun:_ZN4qpid6broker6Broker3runEv
+ fun:main
+}
+{
+ x7393_52
+ Memcheck:Param
+ epoll_ctl(event)
+ fun:epoll_ctl
+ fun:_ZN4qpid3sys11LFProcessor10reactivateEPK12apr_pollfd_t
+ fun:_ZN4qpid3sys16LFSessionContext14stopProcessingEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_53
+ Memcheck:Param
+ epoll_ctl(event)
+ fun:epoll_ctl
+ fun:_ZN4qpid3sys11LFProcessor6updateEPK12apr_pollfd_t
+ fun:_ZN4qpid3sys16LFSessionContext4sendEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid6broker7Message7deliverEPNS_7framing13OutputHandlerEiRKSsyjPNS2_15ProtocolVersionE
+ fun:_ZN4qpid6broker7Channel7deliverERN5boost10shared_ptrINS0_7MessageEEERKSsRNS3_INS0_5QueueEEEb
+ fun:_ZN4qpid6broker7Channel12ConsumerImpl7deliverERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker5Queue8dispatchERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker5Queue7processERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker5Queue7deliverERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker18DeliverableMessage9deliverToERN5boost10shared_ptrINS0_5QueueEEE
+ fun:_ZN4qpid6broker15HeadersExchange5routeERNS0_11DeliverableERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker7Channel8completeERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker14MessageBuilder5routeEv
+ fun:_ZN4qpid6broker14MessageBuilder10addContentERN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker7Channel13handleContentEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl13handleContentEtN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_54
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS8_EEESt10_Select1stISB_ESt4lessISsESaISB_EE9_M_insertEPSt18_Rb_tree_node_baseSJ_RKSB_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS8_EEESt10_Select1stISB_ESt4lessISsESaISB_EE13insert_uniqueESt17_Rb_tree_iteratorISB_ERKSB_
+ fun:_ZNSt3mapISsSt6vectorIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS6_EESt4lessISsESaISt4pairIKSsS8_EEEixERSC_
+ fun:_ZN4qpid6broker14DirectExchange5routeERNS0_11DeliverableERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker7Channel8completeERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker14MessageBuilder5routeEv
+ fun:_ZN4qpid6broker14MessageBuilder10addContentERN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker7Channel13handleContentEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl13handleContentEtN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_55
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsyj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x7393_56
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid3sys7APRBase11getInstanceEv
+ fun:_ZN4qpid3sys7APRBase9incrementEv
+ fun:_ZN4qpid3sys7APRPoolC1Ev
+ fun:_ZN4qpid3sys7APRPool3getEv
+ fun:_Z41__static_initialization_and_destruction_0ii
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ fun:call_init
+ fun:_dl_init
+ obj:/lib/ld-2.4.so
+}
+{
+ x7393_57
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x7393_58
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker16ExchangeRegistry7declareERKSsS3_
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsyj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x7393_59
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid3sys8Acceptor6createEsiib
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x7393_60
+ Memcheck:Leak
+ fun:_Znaj
+ fun:_ZN4qpid3sys11LFProcessorC1EP10apr_pool_tiii
+ fun:_ZN4qpid3sys11APRAcceptorC1Esiib
+ fun:_ZN4qpid3sys8Acceptor6createEsiib
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x7393_61
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid7framing5Value12decode_valueERNS0_6BufferE
+ fun:_ZN4qpid7framing10FieldTable6decodeERNS0_6BufferE
+ fun:_ZN4qpid7framing6Buffer13getFieldTableERNS0_10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody13decodeContentERNS0_6BufferE
+ fun:_ZN4qpid7framing13AMQMethodBody6decodeERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_62
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker7Channel8completeERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker14MessageBuilder5routeEv
+ fun:_ZN4qpid6broker14MessageBuilder10addContentERN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker7Channel13handleContentEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl13handleContentEtN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_63
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE9_M_insertEPSt18_Rb_tree_node_baseSK_RKSC_
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE13insert_uniqueERKSC_
+ fun:_ZNSt8_Rb_treeIN4qpid6broker12TopicPatternESt4pairIKS2_St6vectorIN5boost10shared_ptrINS1_5QueueEEESaIS9_EEESt10_Select1stISC_ESt4lessIS2_ESaISC_EE13insert_uniqueESt17_Rb_tree_iteratorISC_ERKSC_
+ fun:_ZN4qpid6broker13TopicExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_64
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt11_Deque_baseIN5boost10shared_ptrIN4qpid6broker5QueueEEESaIS5_EE17_M_initialize_mapEj
+ fun:_ZN4qpid6broker10AutoDeleteC1EPNS0_13QueueRegistryEj
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsyj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x7393_65
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt6vectorIPN4qpid6broker13Configuration6OptionESaIS4_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS4_S6_EERKS4_
+ fun:_ZN4qpid6broker13ConfigurationC1Ev
+ fun:main
+}
+{
+ x7393_66
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid7framing5ValueEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE7_M_copyEPKSt13_Rb_tree_nodeIS8_EPSG_
+ fun:_ZNSt6vectorISt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS1_6broker5QueueEEEESaIS9_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS9_SB_EERKS9_
+ fun:_ZN4qpid6broker15HeadersExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_67
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker14FanOutExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_68
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker15HeadersExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_69
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt6vectorIPN4qpid6broker4TxOpESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_
+ fun:_ZN4qpid6broker8TxBuffer6enlistEPNS0_4TxOpE
+ fun:_ZN4qpid6broker7Channel8completeERN5boost10shared_ptrINS0_7MessageEEE
+ fun:_ZN4qpid6broker14MessageBuilder5routeEv
+ fun:_ZN4qpid6broker14MessageBuilder10addContentERN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker7Channel13handleContentEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl13handleContentEtN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_70
+ Memcheck:Leak
+ fun:malloc
+ fun:apr_allocator_create
+ fun:apr_pool_initialize
+ fun:apr_initialize
+ fun:_ZN4qpid3sys7APRBaseC1Ev
+ fun:_ZN4qpid3sys7APRBase11getInstanceEv
+ fun:_ZN4qpid3sys7APRBase9incrementEv
+ fun:_ZN4qpid3sys7APRPoolC1Ev
+ fun:_ZN4qpid3sys7APRPool3getEv
+ fun:_Z41__static_initialization_and_destruction_0ii
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ obj:/home/gordon/qpid/trunk/qpid/cpp/lib/common/.libs/libqpidcommon.so.0.1.0
+ fun:call_init
+ fun:_dl_init
+ obj:/lib/ld-2.4.so
+}
+{
+ x7393_71
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid6broker13TopicExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_72
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt6vectorISt4pairIN4qpid7framing10FieldTableEN5boost10shared_ptrINS1_6broker5QueueEEEESaIS9_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS9_SB_EERKS9_
+ fun:_ZN4qpid6broker15HeadersExchange4bindEN5boost10shared_ptrINS0_5QueueEEERKSsPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16QueueHandlerImpl4bindEttRKSsS4_S4_bRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_73
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZN4qpid7framing10FieldTable6decodeERNS0_6BufferE
+ fun:_ZN4qpid7framing6Buffer13getFieldTableERNS0_10FieldTableE
+ fun:_ZN4qpid7framing13QueueBindBody13decodeContentERNS0_6BufferE
+ fun:_ZN4qpid7framing13AMQMethodBody6decodeERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame10decodeBodyERNS0_6BufferEj
+ fun:_ZN4qpid7framing8AMQFrame6decodeERNS0_6BufferE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_74
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt6vectorIPN4qpid6broker8ConsumerESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_
+ fun:_ZN4qpid6broker5Queue7consumeEPNS0_8ConsumerEb
+ fun:_ZN4qpid6broker7Channel7consumeERSsN5boost10shared_ptrINS0_5QueueEEEbbPNS0_15ConnectionTokenEPKNS_7framing10FieldTableE
+ fun:_ZN4qpid6broker18SessionHandlerImpl16BasicHandlerImpl7consumeEttRKSsS4_bbbbRKNS_7framing10FieldTableE
+ fun:_ZN4qpid7framing16BasicConsumeBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_75
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker8ExchangeEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE9_M_insertEPSt18_Rb_tree_node_baseSG_RKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker8ExchangeEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE13insert_uniqueERKS8_
+ fun:_ZNSt8_Rb_treeISsSt4pairIKSsN5boost10shared_ptrIN4qpid6broker8ExchangeEEEESt10_Select1stIS8_ESt4lessISsESaIS8_EE13insert_uniqueESt17_Rb_tree_iteratorIS8_ERKS8_
+ fun:_ZNSt3mapISsN5boost10shared_ptrIN4qpid6broker8ExchangeEEESt4lessISsESaISt4pairIKSsS5_EEEixERS9_
+ fun:_ZN4qpid6broker16ExchangeRegistry7declareERKSsS3_
+ fun:_ZN4qpid6broker25SessionHandlerFactoryImplC1ERKSsyj
+ fun:_ZN4qpid6broker6BrokerC1ERKNS0_13ConfigurationE
+ fun:_ZN4qpid6broker6Broker6createERKNS0_13ConfigurationE
+ fun:main
+}
+{
+ x7393_76
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt6vectorIPN4qpid3sys16LFSessionContextESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_
+ fun:_ZN4qpid3sys11LFProcessor3addEPK12apr_pollfd_t
+ fun:_ZN4qpid3sys16LFSessionContext4initEPNS0_14SessionHandlerE
+ fun:_ZN4qpid3sys11APRAcceptor3runEPNS0_21SessionHandlerFactoryE
+ fun:_ZN4qpid6broker6Broker3runEv
+ fun:main
+}
+{
+ x7393_77
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSt6vectorIN5boost10shared_ptrIN4qpid7framing14AMQContentBodyEEESaIS5_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS5_S7_EERKS5_
+ fun:_ZN4qpid6broker15InMemoryContent3addEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker7Message10addContentEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker14MessageBuilder10addContentERN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker7Channel13handleContentEN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl13handleContentEtN5boost10shared_ptrINS_7framing14AMQContentBodyEEE
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ x7393_78
+ Memcheck:Leak
+ fun:_Znwj
+ fun:_ZNSs4_Rep9_S_createEjjRKSaIcE
+ obj:/usr/lib/libstdc++.so.6.0.8
+ fun:_ZNSsC1EPKcRKSaIcE
+ fun:_ZN4qpid6broker7ChannelC1ERNS_7framing15ProtocolVersionEPNS2_13OutputHandlerEijPNS0_12MessageStoreEy
+ fun:_ZN4qpid6broker18SessionHandlerImpl18ChannelHandlerImpl4openEtRKSs
+ fun:_ZN4qpid7framing15ChannelOpenBody6invokeERNS0_21AMQP_ServerOperationsEt
+ fun:_ZN4qpid6broker18SessionHandlerImpl8receivedEPNS_7framing8AMQFrameE
+ fun:_ZN4qpid3sys16LFSessionContext4readEv
+ fun:_ZN4qpid3sys11LFProcessor3runEv
+ fun:_ZN4qpid3sys6Thread11runRunnableEP12apr_thread_tPv
+ fun:dummy_worker
+ fun:start_thread
+ fun:clone
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ fun:_ZNSs4_Rep9_S_createEjjRKSaIcE
+ obj:/usr/lib/libstdc++.so.6.0.8
+ fun:_ZNSsC1EPKcRKSaIcE
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_malloc
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:do_dlopen
+ fun:_dl_catch_error
+ fun:__libc_dlopen_mode
+ fun:pthread_cancel_init
+ fun:_Unwind_ForcedUnwind
+ fun:__pthread_unwind
+ fun:pthread_exit
+ fun:pthread_exit
+ obj:*
+ obj:*
+ obj:*
+ fun:start_thread
+ fun:clone
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_malloc
+ fun:_dl_new_object
+ fun:_dl_map_object_from_fd
+ fun:_dl_map_object
+ fun:openaux
+ fun:_dl_catch_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_malloc
+ fun:_dl_map_object
+ fun:openaux
+ fun:_dl_catch_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_malloc
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_realloc
+ fun:add_to_global
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_realloc
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_calloc
+ fun:_dl_check_map_versions
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libcZdsoZa_calloc
+ fun:_dl_new_object
+ fun:_dl_map_object_from_fd
+ fun:_dl_map_object
+ fun:openaux
+ fun:_dl_catch_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ fun:_ZNSs4_Rep9_S_createEjjRKSaIcE
+ obj:/usr/lib/libstdc++.so.6.0.8
+ fun:_ZNSsC1EPKcRKSaIcE
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:call_init
+ fun:_dl_init
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@GLIBC_2.0
+ fun:_ZN7CppUnit21DynamicLibraryManager13doLoadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManager11loadLibraryERKSs
+ fun:_ZN7CppUnit21DynamicLibraryManagerC1ERKSs
+ fun:_ZN7CppUnit13PlugInManager4loadERKSsRKNS_16PlugInParametersE
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZN7CppUnit19TestFactoryRegistry14addTestToSuiteEPNS_9TestSuiteE
+ fun:_ZN7CppUnit19TestFactoryRegistry8makeTestEv
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit27TestSuiteBuilderContextBase15makeTestFixtureEv
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:_ZNK7CppUnit21TestCaseMethodFunctorclEv
+ fun:_ZN7CppUnit16DefaultProtector7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZNK7CppUnit14ProtectorChain14ProtectFunctorclEv
+ fun:_ZN7CppUnit14ProtectorChain7protectERKNS_7FunctorERKNS_16ProtectorContextE
+ fun:_ZN7CppUnit10TestResult7protectERKNS_7FunctorEPNS_4TestERKSs
+ fun:_ZN7CppUnit8TestCase3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite15doRunChildTestsEPNS_10TestResultE
+ fun:_ZN7CppUnit13TestComposite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestRunner13WrappingSuite3runEPNS_10TestResultE
+ fun:_ZN7CppUnit10TestResult7runTestEPNS_4TestE
+ fun:_ZN7CppUnit10TestRunner3runERNS_10TestResultERKSs
+ obj:/usr/bin/DllPlugInTester
+ obj:/usr/bin/DllPlugInTester
+ fun:__libc_start_main
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
+{
+ == NOT YET INVESTIGATED ==
+ Memcheck:Leak
+ fun:_vgrZU_libstdcZpZpZa__Znwj
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+}
diff --git a/qpid/cpp/tests/APRBaseTest.cpp b/qpid/cpp/tests/APRBaseTest.cpp
new file mode 100644
index 0000000000..7d95c3bf52
--- /dev/null
+++ b/qpid/cpp/tests/APRBaseTest.cpp
@@ -0,0 +1,47 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <apr/APRBase.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+
+using namespace qpid::sys;
+
+class APRBaseTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(APRBaseTest);
+ CPPUNIT_TEST(testMe);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void testMe()
+ {
+ APRBase::increment();
+ APRBase::increment();
+ APRBase::decrement();
+ APRBase::decrement();
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(APRBaseTest);
+
diff --git a/qpid/cpp/tests/AcceptorTest.cpp b/qpid/cpp/tests/AcceptorTest.cpp
new file mode 100644
index 0000000000..34a51888d4
--- /dev/null
+++ b/qpid/cpp/tests/AcceptorTest.cpp
@@ -0,0 +1,95 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <iostream>
+#include <boost/bind.hpp>
+
+#include "sys/Thread.h"
+#include "sys/Acceptor.h"
+#include "sys/Socket.h"
+#include "framing/Buffer.h"
+#include "qpid_test_plugin.h"
+
+#include "MockConnectionInputHandler.h"
+
+using namespace qpid::sys;
+using namespace qpid::framing;
+using namespace std;
+
+const char hello[] = "hello";
+const size_t size = sizeof(hello);
+
+
+class AcceptorTest : public CppUnit::TestCase, private Runnable
+{
+ CPPUNIT_TEST_SUITE(AcceptorTest);
+ CPPUNIT_TEST(testAccept);
+ CPPUNIT_TEST_SUITE_END();
+
+ private:
+ MockConnectionInputHandlerFactory factory;
+ Acceptor::shared_ptr acceptor;
+
+ public:
+
+ void run() {
+ acceptor->run(factory);
+ }
+
+ void setUp() {
+ acceptor = Acceptor::create(0, 10, 3);
+ }
+
+ void tearDown() {
+ acceptor.reset();
+ }
+
+ void testAccept()
+ {
+ int port = acceptor->getPort();
+ CPPUNIT_ASSERT(port > 0);
+ Thread runThread(*this);
+ // Connect to the acceptor
+ Socket client = Socket::createTcp();
+ client.connect("localhost", port);
+ factory.waitForHandler();
+ CPPUNIT_ASSERT(factory.handler != 0);
+ // Send a protocol initiation.
+ Buffer buf(1024);
+ ProtocolInitiation(4,2).encode(buf);
+ buf.flip();
+ client.send(buf.start(), buf.available());
+
+ // Verify session handler got the protocol init.
+ ProtocolInitiation init = factory.handler->waitForProtocolInit();
+ CPPUNIT_ASSERT_EQUAL(int(4), int(init.getMajor()));
+ CPPUNIT_ASSERT_EQUAL(int(2), int(init.getMinor()));
+
+ acceptor->shutdown();
+ runThread.join();
+ factory.handler->waitForClosed();
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(AcceptorTest);
+
diff --git a/qpid/cpp/tests/AccumulatedAckTest.cpp b/qpid/cpp/tests/AccumulatedAckTest.cpp
new file mode 100644
index 0000000000..30554f808e
--- /dev/null
+++ b/qpid/cpp/tests/AccumulatedAckTest.cpp
@@ -0,0 +1,107 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <AccumulatedAck.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+#include <list>
+
+using std::list;
+using namespace qpid::broker;
+
+class AccumulatedAckTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(AccumulatedAckTest);
+ CPPUNIT_TEST(testGeneral);
+ CPPUNIT_TEST(testCovers);
+ CPPUNIT_TEST(testUpdateAndConsolidate);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+ void testGeneral()
+ {
+ AccumulatedAck ack(0);
+ ack.clear();
+ ack.update(3,3);
+ ack.update(7,7);
+ ack.update(9,9);
+ ack.update(1,2);
+ ack.update(4,5);
+ ack.update(6,6);
+
+ for(int i = 1; i <= 7; i++) CPPUNIT_ASSERT(ack.covers(i));
+ CPPUNIT_ASSERT(ack.covers(9));
+
+ CPPUNIT_ASSERT(!ack.covers(8));
+ CPPUNIT_ASSERT(!ack.covers(10));
+
+ ack.consolidate();
+
+ for(int i = 1; i <= 7; i++) CPPUNIT_ASSERT(ack.covers(i));
+ CPPUNIT_ASSERT(ack.covers(9));
+
+ CPPUNIT_ASSERT(!ack.covers(8));
+ CPPUNIT_ASSERT(!ack.covers(10));
+ }
+
+ void testCovers()
+ {
+ AccumulatedAck ack(5);
+ ack.individual.push_back(7);
+ ack.individual.push_back(9);
+
+ CPPUNIT_ASSERT(ack.covers(1));
+ CPPUNIT_ASSERT(ack.covers(2));
+ CPPUNIT_ASSERT(ack.covers(3));
+ CPPUNIT_ASSERT(ack.covers(4));
+ CPPUNIT_ASSERT(ack.covers(5));
+ CPPUNIT_ASSERT(ack.covers(7));
+ CPPUNIT_ASSERT(ack.covers(9));
+
+ CPPUNIT_ASSERT(!ack.covers(6));
+ CPPUNIT_ASSERT(!ack.covers(8));
+ CPPUNIT_ASSERT(!ack.covers(10));
+ }
+
+ void testUpdateAndConsolidate()
+ {
+ AccumulatedAck ack(0);
+ ack.update(1, 1);
+ ack.update(3, 3);
+ ack.update(10, 10);
+ ack.update(8, 8);
+ ack.update(6, 6);
+ ack.update(3, 3);
+ ack.update(2, 2);
+ ack.update(0, 5);
+ ack.consolidate();
+ CPPUNIT_ASSERT_EQUAL((uint64_t) 6, ack.range);
+ CPPUNIT_ASSERT_EQUAL((size_t) 2, ack.individual.size());
+ list<uint64_t>::iterator i = ack.individual.begin();
+ CPPUNIT_ASSERT_EQUAL((uint64_t) 8, *i);
+ i++;
+ CPPUNIT_ASSERT_EQUAL((uint64_t) 10, *i);
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(AccumulatedAckTest);
+
diff --git a/qpid/cpp/tests/BrokerChannelTest.cpp b/qpid/cpp/tests/BrokerChannelTest.cpp
new file mode 100644
index 0000000000..9216ae4672
--- /dev/null
+++ b/qpid/cpp/tests/BrokerChannelTest.cpp
@@ -0,0 +1,356 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <BrokerChannel.h>
+#include <BrokerMessage.h>
+#include <BrokerQueue.h>
+#include <FanOutExchange.h>
+#include <NullMessageStore.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+#include <memory>
+#include <AMQP_HighestVersion.h>
+#include "AMQFrame.h"
+#include "MockChannel.h"
+#include "broker/Connection.h"
+#include "ProtocolInitiation.h"
+
+using namespace boost;
+using namespace qpid::broker;
+using namespace qpid::framing;
+using namespace qpid::sys;
+using std::string;
+using std::queue;
+
+struct MockHandler : ConnectionOutputHandler{
+ std::vector<AMQFrame*> frames;
+
+ void send(AMQFrame* frame){ frames.push_back(frame); }
+
+ void close() {};
+};
+
+
+class BrokerChannelTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(BrokerChannelTest);
+ CPPUNIT_TEST(testConsumerMgmt);
+ CPPUNIT_TEST(testDeliveryNoAck);
+ CPPUNIT_TEST(testDeliveryAndRecovery);
+ CPPUNIT_TEST(testStaging);
+ CPPUNIT_TEST(testQueuePolicy);
+ CPPUNIT_TEST_SUITE_END();
+
+ Broker::shared_ptr broker;
+ Connection connection;
+ MockHandler handler;
+
+ class MockMessageStore : public NullMessageStore
+ {
+ struct MethodCall
+ {
+ const string name;
+ Message* const msg;
+ const string data;//only needed for appendContent
+
+ void check(const MethodCall& other) const
+ {
+ CPPUNIT_ASSERT_EQUAL(name, other.name);
+ CPPUNIT_ASSERT_EQUAL(msg, other.msg);
+ CPPUNIT_ASSERT_EQUAL(data, other.data);
+ }
+ };
+
+ queue<MethodCall> expected;
+ bool expectMode;//true when setting up expected calls
+
+ void handle(const MethodCall& call)
+ {
+ if (expectMode) {
+ expected.push(call);
+ } else {
+ call.check(expected.front());
+ expected.pop();
+ }
+ }
+
+ void handle(const string& name, Message* msg, const string& data)
+ {
+ MethodCall call = {name, msg, data};
+ handle(call);
+ }
+
+ public:
+
+ MockMessageStore() : expectMode(false) {}
+
+ void stage(Message* const msg)
+ {
+ if(!expectMode) msg->setPersistenceId(1);
+ MethodCall call = {"stage", msg, ""};
+ handle(call);
+ }
+
+ void appendContent(Message* msg, const string& data)
+ {
+ MethodCall call = {"appendContent", msg, data};
+ handle(call);
+ }
+
+ // Don't hide overloads.
+ using NullMessageStore::destroy;
+
+ void destroy(Message* msg)
+ {
+ MethodCall call = {"destroy", msg, ""};
+ handle(call);
+ }
+
+ void expect()
+ {
+ expectMode = true;
+ }
+
+ void test()
+ {
+ expectMode = false;
+ }
+
+ void check()
+ {
+ CPPUNIT_ASSERT(expected.empty());
+ }
+ };
+
+
+ public:
+
+ BrokerChannelTest() :
+ broker(Broker::create()),
+ connection(&handler, *broker)
+ {
+ connection.initiated(new ProtocolInitiation());
+ }
+
+
+ void testConsumerMgmt(){
+ Queue::shared_ptr queue(new Queue("my_queue"));
+ Channel channel(connection, 0, 0, 0);
+ channel.open();
+ CPPUNIT_ASSERT(!channel.exists("my_consumer"));
+
+ ConnectionToken* owner = 0;
+ string tag("my_consumer");
+ channel.consume(tag, queue, false, false, owner);
+ string tagA;
+ string tagB;
+ channel.consume(tagA, queue, false, false, owner);
+ channel.consume(tagB, queue, false, false, owner);
+ CPPUNIT_ASSERT_EQUAL((uint32_t) 3, queue->getConsumerCount());
+ CPPUNIT_ASSERT(channel.exists("my_consumer"));
+ CPPUNIT_ASSERT(channel.exists(tagA));
+ CPPUNIT_ASSERT(channel.exists(tagB));
+ channel.cancel(tagA);
+ CPPUNIT_ASSERT_EQUAL((uint32_t) 2, queue->getConsumerCount());
+ CPPUNIT_ASSERT(channel.exists("my_consumer"));
+ CPPUNIT_ASSERT(!channel.exists(tagA));
+ CPPUNIT_ASSERT(channel.exists(tagB));
+ channel.close();
+ CPPUNIT_ASSERT_EQUAL((uint32_t) 0, queue->getConsumerCount());
+ }
+
+ void testDeliveryNoAck(){
+ Channel channel(connection, 7, 10000);
+ channel.open();
+ const string data("abcdefghijklmn");
+ Message::shared_ptr msg(
+ createMessage("test", "my_routing_key", "my_message_id", 14));
+ addContent(msg, data);
+ Queue::shared_ptr queue(new Queue("my_queue"));
+ ConnectionToken* owner(0);
+ string tag("no_ack");
+ channel.consume(tag, queue, false, false, owner);
+
+ queue->deliver(msg);
+ CPPUNIT_ASSERT_EQUAL((size_t) 4, handler.frames.size());
+ CPPUNIT_ASSERT_EQUAL(ChannelId(0), handler.frames[0]->getChannel());
+ CPPUNIT_ASSERT_EQUAL(ChannelId(7), handler.frames[1]->getChannel());
+ CPPUNIT_ASSERT_EQUAL(ChannelId(7), handler.frames[2]->getChannel());
+ CPPUNIT_ASSERT_EQUAL(ChannelId(7), handler.frames[3]->getChannel());
+ CPPUNIT_ASSERT(dynamic_cast<ConnectionStartBody*>(
+ handler.frames[0]->getBody().get()));
+ CPPUNIT_ASSERT(dynamic_cast<BasicDeliverBody*>(
+ handler.frames[1]->getBody().get()));
+ CPPUNIT_ASSERT(dynamic_cast<AMQHeaderBody*>(
+ handler.frames[2]->getBody().get()));
+ AMQContentBody* contentBody = dynamic_cast<AMQContentBody*>(
+ handler.frames[3]->getBody().get());
+ CPPUNIT_ASSERT(contentBody);
+ CPPUNIT_ASSERT_EQUAL(data, contentBody->getData());
+ }
+
+ void testDeliveryAndRecovery(){
+ Channel channel(connection, 7, 10000);
+ channel.open();
+ const string data("abcdefghijklmn");
+
+ Message::shared_ptr msg(createMessage("test", "my_routing_key", "my_message_id", 14));
+ addContent(msg, data);
+
+ Queue::shared_ptr queue(new Queue("my_queue"));
+ ConnectionToken* owner(0);
+ string tag("ack");
+ channel.consume(tag, queue, true, false, owner);
+
+ queue->deliver(msg);
+ CPPUNIT_ASSERT_EQUAL((size_t) 4, handler.frames.size());
+ CPPUNIT_ASSERT_EQUAL(ChannelId(0), handler.frames[0]->getChannel());
+ CPPUNIT_ASSERT_EQUAL(ChannelId(7), handler.frames[1]->getChannel());
+ CPPUNIT_ASSERT_EQUAL(ChannelId(7), handler.frames[2]->getChannel());
+ CPPUNIT_ASSERT_EQUAL(ChannelId(7), handler.frames[3]->getChannel());
+ CPPUNIT_ASSERT(dynamic_cast<ConnectionStartBody*>(
+ handler.frames[0]->getBody().get()));
+ CPPUNIT_ASSERT(dynamic_cast<BasicDeliverBody*>(
+ handler.frames[1]->getBody().get()));
+ CPPUNIT_ASSERT(dynamic_cast<AMQHeaderBody*>(
+ handler.frames[2]->getBody().get()));
+ AMQContentBody* contentBody = dynamic_cast<AMQContentBody*>(
+ handler.frames[3]->getBody().get());
+ CPPUNIT_ASSERT(contentBody);
+ CPPUNIT_ASSERT_EQUAL(data, contentBody->getData());
+ }
+
+ void testStaging(){
+ MockMessageStore store;
+ Channel channel(
+ connection, 1, 1000/*framesize*/, &store, 10/*staging threshold*/);
+ const string data[] = {"abcde", "fghij", "klmno"};
+
+ Message* msg = new BasicMessage(
+ 0, "my_exchange", "my_routing_key", false, false,
+ MockChannel::basicGetBody());
+
+ store.expect();
+ store.stage(msg);
+ for (int i = 0; i < 3; i++) {
+ store.appendContent(msg, data[i]);
+ }
+ store.destroy(msg);
+ store.test();
+
+ Exchange::shared_ptr exchange =
+ broker->getExchanges().declare("my_exchange", "fanout").first;
+ Queue::shared_ptr queue(new Queue("my_queue"));
+ exchange->bind(queue, "", 0);
+
+ AMQHeaderBody::shared_ptr header(new AMQHeaderBody(BASIC));
+ uint64_t contentSize(0);
+ for (int i = 0; i < 3; i++) {
+ contentSize += data[i].size();
+ }
+ header->setContentSize(contentSize);
+ channel.handlePublish(msg);
+ channel.handleHeader(header);
+
+ for (int i = 0; i < 3; i++) {
+ AMQContentBody::shared_ptr body(new AMQContentBody(data[i]));
+ channel.handleContent(body);
+ }
+ Message::shared_ptr msg2 = queue->dequeue();
+ CPPUNIT_ASSERT_EQUAL(msg, msg2.get());
+ msg2.reset();//should trigger destroy call
+
+ store.check();
+ }
+
+
+ //NOTE: strictly speaking this should/could be part of QueueTest,
+ //but as it can usefully use the same utility classes as this
+ //class it is defined here for simpllicity
+ void testQueuePolicy()
+ {
+ MockMessageStore store;
+ {//must ensure that store is last thing deleted as it is needed by destructor of lazy loaded content
+ const string data1("abcd");
+ const string data2("efghijk");
+ const string data3("lmnopqrstuvwxyz");
+ Message::shared_ptr msg1(createMessage("e", "A", "MsgA", data1.size()));
+ Message::shared_ptr msg2(createMessage("e", "B", "MsgB", data2.size()));
+ Message::shared_ptr msg3(createMessage("e", "C", "MsgC", data3.size()));
+ addContent(msg1, data1);
+ addContent(msg2, data2);
+ addContent(msg3, data3);
+
+ QueuePolicy policy(2, 0);//third message should be stored on disk and lazy loaded
+ FieldTable settings;
+ policy.update(settings);
+
+ store.expect();
+ store.stage(msg3.get());
+ store.destroy(msg3.get());
+ store.test();
+
+ Queue::shared_ptr queue(new Queue("my_queue", false, &store, 0));
+ queue->configure(settings);//set policy
+ queue->deliver(msg1);
+ queue->deliver(msg2);
+ queue->deliver(msg3);
+
+ Message::shared_ptr next = queue->dequeue();
+ CPPUNIT_ASSERT_EQUAL(msg1, next);
+ CPPUNIT_ASSERT_EQUAL((uint32_t) data1.size(), next->encodedContentSize());
+ next = queue->dequeue();
+ CPPUNIT_ASSERT_EQUAL(msg2, next);
+ CPPUNIT_ASSERT_EQUAL((uint32_t) data2.size(), next->encodedContentSize());
+ next = queue->dequeue();
+ CPPUNIT_ASSERT_EQUAL(msg3, next);
+ CPPUNIT_ASSERT_EQUAL((uint32_t) 0, next->encodedContentSize());
+
+ next.reset();
+ msg1.reset();
+ msg2.reset();
+ msg3.reset();//must clear all references to messages to allow them to be destroyed
+
+ }
+ store.check();
+ }
+
+ Message* createMessage(const string& exchange, const string& routingKey, const string& messageId, uint64_t contentSize)
+ {
+ BasicMessage* msg = new BasicMessage(
+ 0, exchange, routingKey, false, false,
+ MockChannel::basicGetBody());
+ AMQHeaderBody::shared_ptr header(new AMQHeaderBody(BASIC));
+ header->setContentSize(contentSize);
+ msg->setHeader(header);
+ msg->getHeaderProperties()->setMessageId(messageId);
+ return msg;
+ }
+
+ void addContent(Message::shared_ptr msg, const string& data)
+ {
+ AMQContentBody::shared_ptr body(new AMQContentBody(data));
+ msg->addContent(body);
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(BrokerChannelTest);
diff --git a/qpid/cpp/tests/ClientChannelTest.cpp b/qpid/cpp/tests/ClientChannelTest.cpp
new file mode 100644
index 0000000000..7b0bc363fe
--- /dev/null
+++ b/qpid/cpp/tests/ClientChannelTest.cpp
@@ -0,0 +1,164 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <vector>
+#include "qpid_test_plugin.h"
+#include "InProcessBroker.h"
+#include "ClientChannel.h"
+#include "ClientMessage.h"
+#include "ClientQueue.h"
+#include "ClientExchange.h"
+
+using namespace std;
+using namespace boost;
+using namespace qpid::client;
+using namespace qpid::sys;
+using namespace qpid::framing;
+
+/**
+ * Test client API using an in-process broker.
+ */
+class ClientChannelTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(ClientChannelTest);
+ CPPUNIT_TEST(testPublishGet);
+ CPPUNIT_TEST(testGetNoContent);
+ CPPUNIT_TEST(testConsumeCancel);
+ CPPUNIT_TEST(testConsumePublished);
+ CPPUNIT_TEST_SUITE_END();
+
+ struct Listener: public qpid::client::MessageListener {
+ vector<Message> messages;
+ Monitor monitor;
+ void received(Message& msg) {
+ Mutex::ScopedLock l(monitor);
+ messages.push_back(msg);
+ monitor.notifyAll();
+ }
+ };
+
+ InProcessBrokerClient connection; // client::connection + local broker
+ Channel channel;
+ const std::string qname;
+ const std::string data;
+ Queue queue;
+ Exchange exchange;
+ Listener listener;
+
+ public:
+
+ ClientChannelTest()
+ : qname("testq"), data("hello"),
+ queue(qname, true), exchange("", Exchange::DIRECT_EXCHANGE)
+ {
+ connection.openChannel(channel);
+ CPPUNIT_ASSERT(channel.getId() != 0);
+ channel.declareQueue(queue);
+ }
+
+ void testPublishGet() {
+ Message pubMsg(data);
+ pubMsg.getHeaders().setString("hello", "world");
+ channel.getBasic().publish(pubMsg, exchange, qname);
+ Message getMsg;
+ CPPUNIT_ASSERT(channel.getBasic().get(getMsg, queue));
+ CPPUNIT_ASSERT_EQUAL(data, getMsg.getData());
+ CPPUNIT_ASSERT_EQUAL(string("world"),
+ getMsg.getHeaders().getString("hello"));
+ CPPUNIT_ASSERT(!channel.getBasic().get(getMsg, queue)); // Empty queue
+ }
+
+ void testGetNoContent() {
+ Message pubMsg;
+ pubMsg.getHeaders().setString("hello", "world");
+ channel.getBasic().publish(pubMsg, exchange, qname);
+ Message getMsg;
+ CPPUNIT_ASSERT(channel.getBasic().get(getMsg, queue));
+ CPPUNIT_ASSERT(getMsg.getData().empty());
+ CPPUNIT_ASSERT_EQUAL(string("world"),
+ getMsg.getHeaders().getString("hello"));
+ }
+
+ void testConsumeCancel() {
+ string tag; // Broker assigned
+ channel.getBasic().consume(queue, tag, &listener);
+ channel.start();
+ CPPUNIT_ASSERT_EQUAL(size_t(0), listener.messages.size());
+ channel.getBasic().publish(Message("a"), exchange, qname);
+ {
+ Mutex::ScopedLock l(listener.monitor);
+ Time deadline(now() + 1*TIME_SEC);
+ while (listener.messages.size() != 1) {
+ CPPUNIT_ASSERT(listener.monitor.wait(deadline));
+ }
+ }
+ CPPUNIT_ASSERT_EQUAL(size_t(1), listener.messages.size());
+ CPPUNIT_ASSERT_EQUAL(string("a"), listener.messages[0].getData());
+
+ channel.getBasic().publish(Message("b"), exchange, qname);
+ channel.getBasic().publish(Message("c"), exchange, qname);
+ {
+ Mutex::ScopedLock l(listener.monitor);
+ while (listener.messages.size() != 3) {
+ CPPUNIT_ASSERT(listener.monitor.wait(1*TIME_SEC));
+ }
+ }
+ CPPUNIT_ASSERT_EQUAL(size_t(3), listener.messages.size());
+ CPPUNIT_ASSERT_EQUAL(string("b"), listener.messages[1].getData());
+ CPPUNIT_ASSERT_EQUAL(string("c"), listener.messages[2].getData());
+
+ channel.getBasic().cancel(tag);
+ channel.getBasic().publish(Message("d"), exchange, qname);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), listener.messages.size());
+ {
+ Mutex::ScopedLock l(listener.monitor);
+ CPPUNIT_ASSERT(!listener.monitor.wait(TIME_SEC/2));
+ }
+ Message msg;
+ CPPUNIT_ASSERT(channel.getBasic().get(msg, queue));
+ CPPUNIT_ASSERT_EQUAL(string("d"), msg.getData());
+ }
+
+ // Consume already-published messages
+ void testConsumePublished() {
+ Message pubMsg("x");
+ pubMsg.getHeaders().setString("y", "z");
+ channel.getBasic().publish(pubMsg, exchange, qname);
+ string tag;
+ channel.getBasic().consume(queue, tag, &listener);
+ CPPUNIT_ASSERT_EQUAL(size_t(0), listener.messages.size());
+ channel.start();
+ {
+ Mutex::ScopedLock l(listener.monitor);
+ while (listener.messages.size() != 1)
+ CPPUNIT_ASSERT(listener.monitor.wait(1*TIME_SEC));
+ }
+ CPPUNIT_ASSERT_EQUAL(string("x"), listener.messages[0].getData());
+ CPPUNIT_ASSERT_EQUAL(string("z"),
+ listener.messages[0].getHeaders().getString("y"));
+ }
+
+
+
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(ClientChannelTest);
diff --git a/qpid/cpp/tests/ConfigurationTest.cpp b/qpid/cpp/tests/ConfigurationTest.cpp
new file mode 100644
index 0000000000..3a1d5ba85d
--- /dev/null
+++ b/qpid/cpp/tests/ConfigurationTest.cpp
@@ -0,0 +1,98 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <Configuration.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+
+using namespace std;
+using namespace qpid::broker;
+
+class ConfigurationTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(ConfigurationTest);
+ CPPUNIT_TEST(testIsHelp);
+ CPPUNIT_TEST(testPortLongForm);
+ CPPUNIT_TEST(testPortShortForm);
+ CPPUNIT_TEST(testStore);
+ CPPUNIT_TEST(testStagingThreshold);
+ CPPUNIT_TEST(testVarious);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void testIsHelp()
+ {
+ Configuration conf;
+ char* argv[] = {"ignore", "--help"};
+ conf.parse("ignore", 2, argv);
+ CPPUNIT_ASSERT(conf.isHelp());
+ }
+
+ void testPortLongForm()
+ {
+ Configuration conf;
+ char* argv[] = {"ignore", "--port", "6789"};
+ conf.parse("ignore", 3, argv);
+ CPPUNIT_ASSERT_EQUAL(6789, conf.getPort());
+ }
+
+ void testPortShortForm()
+ {
+ Configuration conf;
+ char* argv[] = {"ignore", "-p", "6789"};
+ conf.parse("ignore", 3, argv);
+ CPPUNIT_ASSERT_EQUAL(6789, conf.getPort());
+ }
+
+ void testStore()
+ {
+ Configuration conf;
+ char* argv[] = {"ignore", "--store", "my-store-module.so"};
+ conf.parse("ignore", 3, argv);
+ std::string expected("my-store-module.so");
+ CPPUNIT_ASSERT_EQUAL(expected, conf.getStore());
+ }
+
+ void testStagingThreshold()
+ {
+ Configuration conf;
+ char* argv[] = {"ignore", "--staging-threshold", "123456789"};
+ conf.parse("ignore", 3, argv);
+ long expected = 123456789;
+ CPPUNIT_ASSERT_EQUAL(expected, conf.getStagingThreshold());
+ }
+
+ void testVarious()
+ {
+ Configuration conf;
+ char* argv[] = {"ignore", "-t", "--worker-threads", "10"};
+ conf.parse("ignore", 4, argv);
+ CPPUNIT_ASSERT_EQUAL(5672, conf.getPort());//default
+ CPPUNIT_ASSERT_EQUAL(10, conf.getWorkerThreads());
+ CPPUNIT_ASSERT(conf.isTrace());
+ CPPUNIT_ASSERT(!conf.isHelp());
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(ConfigurationTest);
+
diff --git a/qpid/cpp/tests/EventChannelConnectionTest.cpp b/qpid/cpp/tests/EventChannelConnectionTest.cpp
new file mode 100644
index 0000000000..66561daf83
--- /dev/null
+++ b/qpid/cpp/tests/EventChannelConnectionTest.cpp
@@ -0,0 +1,109 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <iostream>
+#include <boost/bind.hpp>
+#include "framing/AMQHeartbeatBody.h"
+#include "framing/AMQFrame.h"
+#include "sys/posix/EventChannelConnection.h"
+#include "sys/ConnectionInputHandler.h"
+#include "sys/ConnectionInputHandlerFactory.h"
+#include "sys/Socket.h"
+#include "qpid_test_plugin.h"
+#include "MockConnectionInputHandler.h"
+
+using namespace qpid::sys;
+using namespace qpid::framing;
+using namespace std;
+
+class EventChannelConnectionTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(EventChannelConnectionTest);
+ CPPUNIT_TEST(testSendReceive);
+ CPPUNIT_TEST(testCloseExternal);
+ CPPUNIT_TEST(testCloseException);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void setUp() {
+ threads = EventChannelThreads::create();
+ CPPUNIT_ASSERT_EQUAL(0, ::pipe(pipe));
+ connection.reset(
+ new EventChannelConnection(threads, factory, pipe[0], pipe[1]));
+ CPPUNIT_ASSERT(factory.handler != 0);
+ }
+
+ void tearDown() {
+ threads->shutdown();
+ threads->join();
+ }
+
+ void testSendReceive()
+ {
+ // Send a protocol initiation.
+ Buffer buf(1024);
+ ProtocolInitiation(4,2).encode(buf);
+ buf.flip();
+ ssize_t n = write(pipe[1], buf.start(), buf.available());
+ CPPUNIT_ASSERT_EQUAL(ssize_t(buf.available()), n);
+
+ // Verify session handler got the protocol init.
+ ProtocolInitiation init = factory.handler->waitForProtocolInit();
+ CPPUNIT_ASSERT_EQUAL(int(4), int(init.getMajor()));
+ CPPUNIT_ASSERT_EQUAL(int(2), int(init.getMinor()));
+
+ // Send a heartbeat frame, verify connection got it.
+ connection->send(new AMQFrame(42, new AMQHeartbeatBody()));
+ AMQFrame frame = factory.handler->waitForFrame();
+ CPPUNIT_ASSERT_EQUAL(uint16_t(42), frame.getChannel());
+ CPPUNIT_ASSERT_EQUAL(uint8_t(HEARTBEAT_BODY),
+ frame.getBody()->type());
+ threads->shutdown();
+ }
+
+ // Make sure the handler is closed if the connection is closed.
+ void testCloseExternal() {
+ connection->close();
+ factory.handler->waitForClosed();
+ }
+
+ // Make sure the handler is closed if the connection closes or fails.
+ // TODO aconway 2006-12-18: logs exception message in test output.
+ void testCloseException() {
+ ::close(pipe[0]);
+ ::close(pipe[1]);
+ // TODO aconway 2006-12-18: Shouldn't this be failing?
+ connection->send(new AMQFrame(42, new AMQHeartbeatBody()));
+ factory.handler->waitForClosed();
+ }
+
+ private:
+ EventChannelThreads::shared_ptr threads;
+ int pipe[2];
+ std::auto_ptr<EventChannelConnection> connection;
+ MockConnectionInputHandlerFactory factory;
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(EventChannelConnectionTest);
+
diff --git a/qpid/cpp/tests/EventChannelTest.cpp b/qpid/cpp/tests/EventChannelTest.cpp
new file mode 100644
index 0000000000..8e5c724a15
--- /dev/null
+++ b/qpid/cpp/tests/EventChannelTest.cpp
@@ -0,0 +1,187 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <posix/EventChannel.h>
+#include <posix/check.h>
+#include <sys/Runnable.h>
+#include <sys/Socket.h>
+#include <sys/Thread.h>
+#include <qpid_test_plugin.h>
+
+#include <sys/socket.h>
+#include <signal.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <iostream>
+
+using namespace qpid::sys;
+
+
+const char hello[] = "hello";
+const size_t size = sizeof(hello);
+
+struct RunMe : public Runnable
+{
+ bool ran;
+ RunMe() : ran(false) {}
+ void run() { ran = true; }
+};
+
+class EventChannelTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(EventChannelTest);
+ CPPUNIT_TEST(testEvent);
+ CPPUNIT_TEST(testRead);
+ CPPUNIT_TEST(testFailedRead);
+ CPPUNIT_TEST(testWrite);
+ CPPUNIT_TEST(testFailedWrite);
+ CPPUNIT_TEST(testReadWrite);
+ CPPUNIT_TEST(testAccept);
+ CPPUNIT_TEST_SUITE_END();
+
+ private:
+ EventChannel::shared_ptr ec;
+ int pipe[2];
+ char readBuf[size];
+
+ public:
+
+ void setUp()
+ {
+ memset(readBuf, size, 0);
+ ec = EventChannel::create();
+ if (::pipe(pipe) != 0) throw QPID_POSIX_ERROR(errno);
+ // Ignore SIGPIPE, otherwise we will crash writing to broken pipe.
+ signal(SIGPIPE, SIG_IGN);
+ }
+
+ // Verify that calling getEvent returns event.
+ template <class T> bool isNextEvent(T& event)
+ {
+ return &event == dynamic_cast<T*>(ec->getEvent());
+ }
+
+ template <class T> bool isNextEventOk(T& event)
+ {
+ Event* next = ec->getEvent();
+ if (next) next->throwIfError();
+ return &event == next;
+ }
+
+ void testEvent()
+ {
+ RunMe runMe;
+ CPPUNIT_ASSERT(!runMe.ran);
+ // Instances of Event just pass thru the channel immediately.
+ Event e(runMe.functor());
+ ec->postEvent(e);
+ CPPUNIT_ASSERT(isNextEventOk(e));
+ e.dispatch();
+ CPPUNIT_ASSERT(runMe.ran);
+ }
+
+ void testRead() {
+ ReadEvent re(pipe[0], readBuf, size);
+ ec->postEvent(re);
+ CPPUNIT_ASSERT_EQUAL(ssize_t(size), ::write(pipe[1], hello, size));
+ CPPUNIT_ASSERT(isNextEventOk(re));
+ CPPUNIT_ASSERT_EQUAL(size, re.getSize());
+ CPPUNIT_ASSERT_EQUAL(std::string(hello), std::string(readBuf));
+ }
+
+ void testFailedRead()
+ {
+ ReadEvent re(pipe[0], readBuf, size);
+ ec->postEvent(re);
+
+ // EOF before all data read.
+ ::close(pipe[1]);
+ CPPUNIT_ASSERT(isNextEvent(re));
+ CPPUNIT_ASSERT(re.hasError());
+ try {
+ re.throwIfError();
+ CPPUNIT_FAIL("Expected QpidError.");
+ }
+ catch (const qpid::QpidError&) { }
+
+ // Bad file descriptor. Note in this case we fail
+ // in postEvent and throw immediately.
+ try {
+ ReadEvent bad;
+ ec->postEvent(bad);
+ CPPUNIT_FAIL("Expected QpidError.");
+ }
+ catch (const qpid::QpidError&) { }
+ }
+
+ void testWrite() {
+ WriteEvent wr(pipe[1], hello, size);
+ ec->postEvent(wr);
+ CPPUNIT_ASSERT(isNextEventOk(wr));
+ CPPUNIT_ASSERT_EQUAL(ssize_t(size), ::read(pipe[0], readBuf, size));;
+ CPPUNIT_ASSERT_EQUAL(std::string(hello), std::string(readBuf));
+ }
+
+ void testFailedWrite() {
+ WriteEvent wr(pipe[1], hello, size);
+ ::close(pipe[0]);
+ ec->postEvent(wr);
+ CPPUNIT_ASSERT(isNextEvent(wr));
+ CPPUNIT_ASSERT(wr.hasError());
+ }
+
+ void testReadWrite()
+ {
+ ReadEvent re(pipe[0], readBuf, size);
+ WriteEvent wr(pipe[1], hello, size);
+ ec->postEvent(re);
+ ec->postEvent(wr);
+ ec->getEvent();
+ ec->getEvent();
+ CPPUNIT_ASSERT_EQUAL(std::string(hello), std::string(readBuf));
+ }
+
+ void testAccept() {
+ Socket s = Socket::createTcp();
+ int port = s.listen(0, 10);
+ CPPUNIT_ASSERT(port != 0);
+
+ AcceptEvent ae(s.fd());
+ ec->postEvent(ae);
+ Socket client = Socket::createTcp();
+ client.connect("localhost", port);
+ CPPUNIT_ASSERT(isNextEvent(ae));
+ ae.dispatch();
+
+ // Verify client writes are read by the accepted descriptor.
+ char readBuf[size];
+ ReadEvent re(ae.getAcceptedDesscriptor(), readBuf, size);
+ ec->postEvent(re);
+ CPPUNIT_ASSERT_EQUAL(ssize_t(size), client.send(hello, sizeof(hello)));
+ CPPUNIT_ASSERT(isNextEvent(re));
+ re.dispatch();
+ CPPUNIT_ASSERT_EQUAL(std::string(hello), std::string(readBuf));
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(EventChannelTest);
+
diff --git a/qpid/cpp/tests/EventChannelThreadsTest.cpp b/qpid/cpp/tests/EventChannelThreadsTest.cpp
new file mode 100644
index 0000000000..285ed29518
--- /dev/null
+++ b/qpid/cpp/tests/EventChannelThreadsTest.cpp
@@ -0,0 +1,247 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <iostream>
+#include <boost/bind.hpp>
+
+#include <sys/Socket.h>
+#include <posix/EventChannelThreads.h>
+#include <qpid_test_plugin.h>
+
+
+using namespace std;
+
+using namespace qpid::sys;
+
+const int nConnections = 5;
+const int nMessages = 10; // Messages read/written per connection.
+
+
+// Accepts + reads + writes.
+const int totalEvents = nConnections+2*nConnections*nMessages;
+
+/**
+ * Messages are numbered 0..nMessages.
+ * We count the total number of events, and the
+ * number of reads and writes for each message number.
+ */
+class TestResults : public Monitor {
+ public:
+ TestResults() : isShutdown(false), nEventsRemaining(totalEvents) {}
+
+ void countEvent() {
+ if (--nEventsRemaining == 0)
+ shutdown();
+ }
+
+ void countRead(int messageNo) {
+ ++reads[messageNo];
+ countEvent();
+ }
+
+ void countWrite(int messageNo) {
+ ++writes[messageNo];
+ countEvent();
+ }
+
+ void shutdown(const std::string& exceptionMsg = std::string()) {
+ ScopedLock lock(*this);
+ exception = exceptionMsg;
+ isShutdown = true;
+ notifyAll();
+ }
+
+ void wait() {
+ ScopedLock lock(*this);
+ Time deadline = now() + 10*TIME_SEC;
+ while (!isShutdown) {
+ CPPUNIT_ASSERT(Monitor::wait(deadline));
+ }
+ }
+
+ bool isShutdown;
+ std::string exception;
+ AtomicCount reads[nMessages];
+ AtomicCount writes[nMessages];
+ AtomicCount nEventsRemaining;
+};
+
+TestResults results;
+
+EventChannelThreads::shared_ptr threads;
+
+// Functor to wrap callbacks in try/catch.
+class SafeCallback {
+ public:
+ SafeCallback(Runnable& r) : callback(r.functor()) {}
+ SafeCallback(Event::Callback cb) : callback(cb) {}
+
+ void operator()() {
+ std::string exception;
+ try {
+ callback();
+ return;
+ }
+ catch (const std::exception& e) {
+ exception = e.what();
+ }
+ catch (...) {
+ exception = "Unknown exception.";
+ }
+ results.shutdown(exception);
+ }
+
+ private:
+ Event::Callback callback;
+};
+
+/** Repost an event N times. */
+class Repost {
+ public:
+ Repost(int n) : count (n) {}
+ virtual ~Repost() {}
+
+ void repost(Event* event) {
+ if (--count==0) {
+ delete event;
+ } else {
+ threads->postEvent(event);
+ }
+ }
+ private:
+ int count;
+};
+
+
+
+/** Repeating read event. */
+class TestReadEvent : public ReadEvent, public Runnable, private Repost {
+ public:
+ explicit TestReadEvent(int fd=-1) :
+ ReadEvent(fd, &value, sizeof(value), SafeCallback(*this)),
+ Repost(nMessages)
+ {}
+
+ void run() {
+ CPPUNIT_ASSERT_EQUAL(sizeof(value), getSize());
+ CPPUNIT_ASSERT(0 <= value);
+ CPPUNIT_ASSERT(value < nMessages);
+ results.countRead(value);
+ repost(this);
+ }
+
+ private:
+ int value;
+ ReadEvent original;
+};
+
+
+/** Fire and forget write event */
+class TestWriteEvent : public WriteEvent, public Runnable, private Repost {
+ public:
+ TestWriteEvent(int fd=-1) :
+ WriteEvent(fd, &value, sizeof(value), SafeCallback(*this)),
+ Repost(nMessages),
+ value(0)
+ {}
+
+ void run() {
+ CPPUNIT_ASSERT_EQUAL(sizeof(int), getSize());
+ results.countWrite(value++);
+ repost(this);
+ }
+
+ private:
+ int value;
+};
+
+/** Fire-and-forget Accept event, posts reads on the accepted connection. */
+class TestAcceptEvent : public AcceptEvent, public Runnable, private Repost {
+ public:
+ TestAcceptEvent(int fd=-1) :
+ AcceptEvent(fd, SafeCallback(*this)),
+ Repost(nConnections)
+ {}
+
+ void run() {
+ threads->postEvent(new TestReadEvent(getAcceptedDesscriptor()));
+ results.countEvent();
+ repost(this);
+ }
+};
+
+class EventChannelThreadsTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(EventChannelThreadsTest);
+ CPPUNIT_TEST(testThreads);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void setUp() {
+ threads = EventChannelThreads::create(EventChannel::create());
+ }
+
+ void tearDown() {
+ threads.reset();
+ }
+
+ void testThreads()
+ {
+ Socket listener = Socket::createTcp();
+ int port = listener.listen();
+
+ // Post looping accept events, will repost nConnections times.
+ // The accept event will automatically post read events.
+ threads->postEvent(new TestAcceptEvent(listener.fd()));
+
+ // Make connections.
+ Socket connections[nConnections];
+ for (int i = 0; i < nConnections; ++i) {
+ connections[i] = Socket::createTcp();
+ connections[i].connect("localhost", port);
+ }
+
+ // Post looping write events.
+ for (int i = 0; i < nConnections; ++i) {
+ threads->postEvent(new TestWriteEvent(connections[i].fd()));
+ }
+
+ // Wait for all events to be dispatched.
+ results.wait();
+
+ if (!results.exception.empty()) CPPUNIT_FAIL(results.exception);
+ CPPUNIT_ASSERT_EQUAL(0, int(results.nEventsRemaining));
+
+ // Expect a read and write for each messageNo from each connection.
+ for (int messageNo = 0; messageNo < nMessages; ++messageNo) {
+ CPPUNIT_ASSERT_EQUAL(nConnections, int(results.reads[messageNo]));
+ CPPUNIT_ASSERT_EQUAL(nConnections, int(results.writes[messageNo]));
+ }
+
+ threads->shutdown();
+ threads->join();
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(EventChannelThreadsTest);
+
diff --git a/qpid/cpp/tests/ExceptionTest.cpp b/qpid/cpp/tests/ExceptionTest.cpp
new file mode 100644
index 0000000000..6cea863168
--- /dev/null
+++ b/qpid/cpp/tests/ExceptionTest.cpp
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+#include <Exception.h>
+#include <qpid_test_plugin.h>
+
+using namespace qpid;
+
+struct CountDestroyedException : public Exception {
+ int& count;
+ static int staticCount;
+ CountDestroyedException() : count(staticCount) { }
+ CountDestroyedException(int& n) : count(n) {}
+ ~CountDestroyedException() throw() { count++; }
+ void throwSelf() const { throw *this; }
+};
+
+int CountDestroyedException::staticCount = 0;
+
+
+class ExceptionTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(ExceptionTest);
+ CPPUNIT_TEST(testHeapException);
+ CPPUNIT_TEST_SUITE_END();
+ public:
+ // Verify proper memory management for heap-allocated exceptions.
+ void testHeapException() {
+ int count = 0;
+ try {
+ std::auto_ptr<Exception> p(
+ new CountDestroyedException(count));
+ p.release()->throwSelf();
+ CPPUNIT_FAIL("Expected CountDestroyedException.");
+ } catch (const CountDestroyedException& e) {
+ CPPUNIT_ASSERT(&e.count == &count);
+ }
+ CPPUNIT_ASSERT_EQUAL(1, count);
+ }
+};
+
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(ExceptionTest);
+
diff --git a/qpid/cpp/tests/ExchangeTest.cpp b/qpid/cpp/tests/ExchangeTest.cpp
new file mode 100644
index 0000000000..cccec92024
--- /dev/null
+++ b/qpid/cpp/tests/ExchangeTest.cpp
@@ -0,0 +1,73 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <DeliverableMessage.h>
+#include <DirectExchange.h>
+#include <BrokerExchange.h>
+#include <BrokerQueue.h>
+#include <TopicExchange.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+#include "BasicGetBody.h"
+
+using namespace qpid::broker;
+using namespace qpid::framing;
+using namespace qpid::sys;
+
+class ExchangeTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(ExchangeTest);
+ CPPUNIT_TEST(testMe);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void testMe()
+ {
+ Queue::shared_ptr queue(new Queue("queue", true));
+ Queue::shared_ptr queue2(new Queue("queue2", true));
+
+ TopicExchange topic("topic");
+ topic.bind(queue, "abc", 0);
+ topic.bind(queue2, "abc", 0);
+
+ DirectExchange direct("direct");
+ direct.bind(queue, "abc", 0);
+ direct.bind(queue2, "abc", 0);
+
+ queue.reset();
+ queue2.reset();
+
+ Message::shared_ptr msgPtr(
+ new BasicMessage(
+ 0, "e", "A", true, true,
+ AMQMethodBody::shared_ptr(
+ new BasicGetBody(ProtocolVersion()))));
+ DeliverableMessage msg(msgPtr);
+ topic.route(msg, "abc", 0);
+ direct.route(msg, "abc", 0);
+
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(ExchangeTest);
diff --git a/qpid/cpp/tests/FieldTableTest.cpp b/qpid/cpp/tests/FieldTableTest.cpp
new file mode 100644
index 0000000000..8d9285bf4b
--- /dev/null
+++ b/qpid/cpp/tests/FieldTableTest.cpp
@@ -0,0 +1,55 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <iostream>
+#include <amqp_framing.h>
+#include <qpid_test_plugin.h>
+
+using namespace qpid::framing;
+
+class FieldTableTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(FieldTableTest);
+ CPPUNIT_TEST(testMe);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void testMe()
+ {
+ FieldTable ft;
+ ft.setString("A", "BCDE");
+ CPPUNIT_ASSERT_EQUAL(std::string("BCDE"), ft.getString("A"));
+
+ Buffer buffer(100);
+ buffer.putFieldTable(ft);
+ buffer.flip();
+ FieldTable ft2;
+ buffer.getFieldTable(ft2);
+ CPPUNIT_ASSERT_EQUAL(std::string("BCDE"), ft2.getString("A"));
+
+ }
+};
+
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(FieldTableTest);
+
diff --git a/qpid/cpp/tests/FramingTest.cpp b/qpid/cpp/tests/FramingTest.cpp
new file mode 100644
index 0000000000..f8754337c8
--- /dev/null
+++ b/qpid/cpp/tests/FramingTest.cpp
@@ -0,0 +1,381 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <memory>
+#include <boost/lexical_cast.hpp>
+
+#include <ConnectionRedirectBody.h>
+#include <ProtocolVersion.h>
+#include <amqp_framing.h>
+#include <iostream>
+#include <qpid_test_plugin.h>
+#include <sstream>
+#include <typeinfo>
+#include <QpidError.h>
+#include <AMQP_HighestVersion.h>
+#include "AMQRequestBody.h"
+#include "AMQResponseBody.h"
+#include "Requester.h"
+#include "Responder.h"
+#include "InProcessBroker.h"
+#include "client/Connection.h"
+#include "client/ClientExchange.h"
+#include "client/ClientQueue.h"
+
+using namespace qpid;
+using namespace qpid::framing;
+using namespace std;
+
+template <class T>
+std::string tostring(const T& x)
+{
+ std::ostringstream out;
+ out << x;
+ return out.str();
+}
+
+class FramingTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(FramingTest);
+ CPPUNIT_TEST(testBasicQosBody);
+ CPPUNIT_TEST(testConnectionSecureBody);
+ CPPUNIT_TEST(testConnectionRedirectBody);
+ CPPUNIT_TEST(testAccessRequestBody);
+ CPPUNIT_TEST(testBasicConsumeBody);
+ CPPUNIT_TEST(testConnectionRedirectBodyFrame);
+ CPPUNIT_TEST(testBasicConsumeOkBodyFrame);
+ CPPUNIT_TEST(testRequestBodyFrame);
+ CPPUNIT_TEST(testResponseBodyFrame);
+ CPPUNIT_TEST(testRequester);
+ CPPUNIT_TEST(testResponder);
+ CPPUNIT_TEST(testInlineContent);
+ CPPUNIT_TEST(testContentReference);
+ CPPUNIT_TEST(testContentValidation);
+ CPPUNIT_TEST(testRequestResponseRoundtrip);
+ CPPUNIT_TEST_SUITE_END();
+
+ private:
+ Buffer buffer;
+ ProtocolVersion version;
+ AMQP_MethodVersionMap versionMap;
+
+ public:
+
+ FramingTest() : buffer(1024), version(highestProtocolVersion) {}
+
+ void testBasicQosBody()
+ {
+ BasicQosBody in(version, 0xCAFEBABE, 0xABBA, true);
+ in.encodeContent(buffer);
+ buffer.flip();
+ BasicQosBody out(version);
+ out.decodeContent(buffer);
+ CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
+ }
+
+ void testConnectionSecureBody()
+ {
+ std::string s = "security credential";
+ ConnectionSecureBody in(version, s);
+ in.encodeContent(buffer);
+ buffer.flip();
+ ConnectionSecureBody out(version);
+ out.decodeContent(buffer);
+ CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
+ }
+
+ void testConnectionRedirectBody()
+ {
+ std::string a = "hostA";
+ std::string b = "hostB";
+ ConnectionRedirectBody in(version, 0, a, b);
+ in.encodeContent(buffer);
+ buffer.flip();
+ ConnectionRedirectBody out(version);
+ out.decodeContent(buffer);
+ CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
+ }
+
+ void testAccessRequestBody()
+ {
+ std::string s = "text";
+ AccessRequestBody in(version, s, true, false, true, false, true);
+ in.encodeContent(buffer);
+ buffer.flip();
+ AccessRequestBody out(version);
+ out.decodeContent(buffer);
+ CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
+ }
+
+ void testBasicConsumeBody()
+ {
+ std::string q = "queue";
+ std::string t = "tag";
+ BasicConsumeBody in(version, 0, q, t, false, true, false, false,
+ FieldTable());
+ in.encodeContent(buffer);
+ buffer.flip();
+ BasicConsumeBody out(version);
+ out.decodeContent(buffer);
+ CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
+ }
+
+
+ void testConnectionRedirectBodyFrame()
+ {
+ std::string a = "hostA";
+ std::string b = "hostB";
+ AMQFrame in(version, 999,
+ new ConnectionRedirectBody(version, 0, a, b));
+ in.encode(buffer);
+ buffer.flip();
+ AMQFrame out;
+ out.decode(buffer);
+ CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
+ }
+
+ void testBasicConsumeOkBodyFrame()
+ {
+ std::string s = "hostA";
+ AMQFrame in(version, 999, new BasicConsumeOkBody(version, 0, s));
+ in.encode(buffer);
+ buffer.flip();
+ AMQFrame out;
+ for(int i = 0; i < 5; i++){
+ out.decode(buffer);
+ CPPUNIT_ASSERT_EQUAL(tostring(in), tostring(out));
+ }
+ }
+
+ void testRequestBodyFrame() {
+ std::string testing("testing");
+ AMQBody::shared_ptr request(new ChannelOpenBody(version, testing));
+ AMQFrame in(version, 999, request);
+ in.encode(buffer);
+ buffer.flip();
+ AMQFrame out;
+ out.decode(buffer);
+ ChannelOpenBody* decoded =
+ dynamic_cast<ChannelOpenBody*>(out.getBody().get());
+ CPPUNIT_ASSERT(decoded);
+ CPPUNIT_ASSERT_EQUAL(testing, decoded->getOutOfBand());
+ }
+
+ void testResponseBodyFrame() {
+ AMQBody::shared_ptr response(new ChannelOkBody(version));
+ AMQFrame in(version, 999, response);
+ in.encode(buffer);
+ buffer.flip();
+ AMQFrame out;
+ out.decode(buffer);
+ ChannelOkBody* decoded =
+ dynamic_cast<ChannelOkBody*>(out.getBody().get());
+ CPPUNIT_ASSERT(decoded);
+ }
+
+ void testInlineContent() {
+ Content content(INLINE, "MyData");
+ CPPUNIT_ASSERT(content.isInline());
+ content.encode(buffer);
+ buffer.flip();
+ Content recovered;
+ recovered.decode(buffer);
+ CPPUNIT_ASSERT(recovered.isInline());
+ CPPUNIT_ASSERT_EQUAL(content.getValue(), recovered.getValue());
+ }
+
+ void testContentReference() {
+ Content content(REFERENCE, "MyRef");
+ CPPUNIT_ASSERT(content.isReference());
+ content.encode(buffer);
+ buffer.flip();
+ Content recovered;
+ recovered.decode(buffer);
+ CPPUNIT_ASSERT(recovered.isReference());
+ CPPUNIT_ASSERT_EQUAL(content.getValue(), recovered.getValue());
+ }
+
+ void testContentValidation() {
+ try {
+ Content content(REFERENCE, "");
+ CPPUNIT_ASSERT(false);//fail, expected exception
+ } catch (QpidError& e) {
+ CPPUNIT_ASSERT_EQUAL(FRAMING_ERROR, e.code);
+ CPPUNIT_ASSERT_EQUAL(string("Reference cannot be empty"), e.msg);
+ }
+
+ try {
+ Content content(2, "Blah");
+ CPPUNIT_ASSERT(false);//fail, expected exception
+ } catch (QpidError& e) {
+ CPPUNIT_ASSERT_EQUAL(FRAMING_ERROR, e.code);
+ CPPUNIT_ASSERT_EQUAL(string("Invalid discriminator: 2"), e.msg);
+ }
+
+ try {
+ buffer.putOctet(2);
+ buffer.putLongString("blah, blah");
+ buffer.flip();
+ Content content;
+ content.decode(buffer);
+ CPPUNIT_ASSERT(false);//fail, expected exception
+ } catch (QpidError& e) {
+ CPPUNIT_ASSERT_EQUAL(FRAMING_ERROR, e.code);
+ CPPUNIT_ASSERT_EQUAL(string("Invalid discriminator: 2"), e.msg);
+ }
+
+ }
+
+ void testRequester() {
+ Requester r;
+ AMQRequestBody::Data q;
+ AMQResponseBody::Data p;
+
+ r.sending(q);
+ CPPUNIT_ASSERT_EQUAL(1ULL, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(0ULL, q.responseMark);
+
+ r.sending(q);
+ CPPUNIT_ASSERT_EQUAL(2ULL, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(0ULL, q.responseMark);
+
+ // Now process a response
+ p.responseId = 1;
+ p.requestId = 2;
+ r.processed(AMQResponseBody::Data(1, 2));
+
+ r.sending(q);
+ CPPUNIT_ASSERT_EQUAL(3ULL, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(1ULL, q.responseMark);
+
+ try {
+ r.processed(p); // Already processed this response.
+ CPPUNIT_FAIL("Expected exception");
+ } catch (...) {}
+
+ try {
+ p.requestId = 50;
+ r.processed(p); // No such request
+ CPPUNIT_FAIL("Expected exception");
+ } catch (...) {}
+
+ r.sending(q); // reqId=4
+ r.sending(q); // reqId=5
+ r.sending(q); // reqId=6
+ p.responseId++;
+ p.requestId = 4;
+ p.batchOffset = 2;
+ r.processed(p);
+ r.sending(q);
+ CPPUNIT_ASSERT_EQUAL(7ULL, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(2ULL, q.responseMark);
+
+ p.responseId++;
+ p.requestId = 1; // Out of order
+ p.batchOffset = 0;
+ r.processed(p);
+ r.sending(q);
+ CPPUNIT_ASSERT_EQUAL(8ULL, q.requestId);
+ CPPUNIT_ASSERT_EQUAL(3ULL, q.responseMark);
+ }
+
+ void testResponder() {
+ Responder r;
+ AMQRequestBody::Data q;
+ AMQResponseBody::Data p;
+
+ q.requestId = 1;
+ q.responseMark = 0;
+ r.received(q);
+ p.requestId = q.requestId;
+ r.sending(p);
+ CPPUNIT_ASSERT_EQUAL(1ULL, p.responseId);
+ CPPUNIT_ASSERT_EQUAL(1ULL, p.requestId);
+ CPPUNIT_ASSERT_EQUAL(0U, p.batchOffset);
+ CPPUNIT_ASSERT_EQUAL(0ULL, r.getResponseMark());
+
+ q.requestId++;
+ q.responseMark = 1;
+ r.received(q);
+ r.sending(p);
+ CPPUNIT_ASSERT_EQUAL(2ULL, p.responseId);
+ CPPUNIT_ASSERT_EQUAL(0U, p.batchOffset);
+ CPPUNIT_ASSERT_EQUAL(1ULL, r.getResponseMark());
+
+ try {
+ // Response mark higher any request ID sent.
+ q.responseMark = 3;
+ r.received(q);
+ } catch(...) {}
+
+ try {
+ // Response mark lower than previous response mark.
+ q.responseMark = 0;
+ r.received(q);
+ } catch(...) {}
+
+ // TODO aconway 2007-01-14: Test for batching when supported.
+
+ }
+
+ // expect may contain null chars so use string(ptr,size) constructor
+ // Use sizeof(expect)-1 to strip the trailing null.
+#define ASSERT_FRAME(expect, frame) \
+ CPPUNIT_ASSERT_EQUAL(string(expect, sizeof(expect)-1), boost::lexical_cast<string>(frame))
+
+ void testRequestResponseRoundtrip() {
+ broker::InProcessBroker ibroker(version);
+ client::Connection clientConnection;
+ clientConnection.setConnector(ibroker);
+ clientConnection.open("");
+ client::Channel c;
+ clientConnection.openChannel(c);
+
+ client::Exchange exchange(
+ "MyExchange", client::Exchange::TOPIC_EXCHANGE);
+ client::Queue queue("MyQueue", true);
+ c.declareExchange(exchange);
+ c.declareQueue(queue);
+ c.bind(exchange, queue, "MyTopic", framing::FieldTable());
+ broker::InProcessBroker::Conversation::const_iterator i = ibroker.conversation.begin();
+ ASSERT_FRAME("BROKER: Frame[channel=0; request(id=1,mark=0): ConnectionStart: versionMajor=0; versionMinor=9; serverProperties={}; mechanisms=PLAIN; locales=en_US]", *i++);
+ ASSERT_FRAME("CLIENT: Frame[channel=0; response(id=1,request=1,batch=0): ConnectionStartOk: clientProperties={}; mechanism=PLAIN; response=\000guest\000guest; locale=en_US]", *i++);
+ ASSERT_FRAME("BROKER: Frame[channel=0; request(id=2,mark=1): ConnectionTune: channelMax=100; frameMax=65536; heartbeat=0]", *i++);
+ ASSERT_FRAME("CLIENT: Frame[channel=0; response(id=2,request=2,batch=0): ConnectionTuneOk: channelMax=100; frameMax=65536; heartbeat=0]", *i++);
+ ASSERT_FRAME("CLIENT: Frame[channel=0; request(id=1,mark=0): ConnectionOpen: virtualHost=/; capabilities=; insist=1]", *i++);
+ ASSERT_FRAME("BROKER: Frame[channel=0; response(id=1,request=1,batch=0): ConnectionOpenOk: knownHosts=]", *i++);
+ ASSERT_FRAME("CLIENT: Frame[channel=1; request(id=1,mark=0): ChannelOpen: outOfBand=]", *i++);
+ ASSERT_FRAME("BROKER: Frame[channel=1; response(id=1,request=1,batch=0): ChannelOpenOk: channelId=]", *i++);
+ ASSERT_FRAME("CLIENT: Frame[channel=1; request(id=2,mark=1): ExchangeDeclare: ticket=0; exchange=MyExchange; type=topic; passive=0; durable=0; autoDelete=0; internal=0; nowait=0; arguments={}]", *i++);
+ ASSERT_FRAME("BROKER: Frame[channel=1; response(id=2,request=2,batch=0): ExchangeDeclareOk: ]", *i++);
+ ASSERT_FRAME("CLIENT: Frame[channel=1; request(id=3,mark=2): QueueDeclare: ticket=0; queue=MyQueue; passive=0; durable=0; exclusive=1; autoDelete=1; nowait=0; arguments={}]", *i++);
+ ASSERT_FRAME("BROKER: Frame[channel=1; response(id=3,request=3,batch=0): QueueDeclareOk: queue=MyQueue; messageCount=0; consumerCount=0]", *i++);
+ ASSERT_FRAME("CLIENT: Frame[channel=1; request(id=4,mark=3): QueueBind: ticket=0; queue=MyQueue; exchange=MyExchange; routingKey=MyTopic; nowait=0; arguments={}]", *i++);
+ ASSERT_FRAME("BROKER: Frame[channel=1; response(id=4,request=4,batch=0): QueueBindOk: ]", *i++);
+ }
+ };
+
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(FramingTest);
+
+
+
diff --git a/qpid/cpp/tests/HeaderTest.cpp b/qpid/cpp/tests/HeaderTest.cpp
new file mode 100644
index 0000000000..f77aaaedb4
--- /dev/null
+++ b/qpid/cpp/tests/HeaderTest.cpp
@@ -0,0 +1,141 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <iostream>
+#include <amqp_framing.h>
+#include <qpid_test_plugin.h>
+
+using namespace qpid::framing;
+
+class HeaderTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(HeaderTest);
+ CPPUNIT_TEST(testGenericProperties);
+ CPPUNIT_TEST(testAllSpecificProperties);
+ CPPUNIT_TEST(testSomeSpecificProperties);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+
+ void testGenericProperties()
+ {
+ AMQHeaderBody body(BASIC);
+ dynamic_cast<BasicHeaderProperties*>(body.getProperties())->getHeaders().setString("A", "BCDE");
+ Buffer buffer(100);
+
+ body.encode(buffer);
+ buffer.flip();
+ AMQHeaderBody body2;
+ body2.decode(buffer, body.size());
+ BasicHeaderProperties* props =
+ dynamic_cast<BasicHeaderProperties*>(body2.getProperties());
+ CPPUNIT_ASSERT_EQUAL(std::string("BCDE"),
+ props->getHeaders().getString("A"));
+ }
+
+ void testAllSpecificProperties(){
+ string contentType("text/html");
+ string contentEncoding("UTF8");
+ uint8_t deliveryMode(2);
+ uint8_t priority(3);
+ string correlationId("abc");
+ string replyTo("no-address");
+ string expiration("why is this a string?");
+ string messageId("xyz");
+ uint64_t timestamp(0xabcd);
+ string type("eh?");
+ string userId("guest");
+ string appId("just testing");
+ string clusterId("no clustering required");
+
+ AMQHeaderBody body(BASIC);
+ BasicHeaderProperties* properties =
+ dynamic_cast<BasicHeaderProperties*>(body.getProperties());
+ properties->setContentType(contentType);
+ properties->getHeaders().setString("A", "BCDE");
+ properties->setDeliveryMode(deliveryMode);
+ properties->setPriority(priority);
+ properties->setCorrelationId(correlationId);
+ properties->setReplyTo(replyTo);
+ properties->setExpiration(expiration);
+ properties->setMessageId(messageId);
+ properties->setTimestamp(timestamp);
+ properties->setType(type);
+ properties->setUserId(userId);
+ properties->setAppId(appId);
+ properties->setClusterId(clusterId);
+
+ Buffer buffer(10000);
+ body.encode(buffer);
+ buffer.flip();
+ AMQHeaderBody temp;
+ temp.decode(buffer, body.size());
+ properties = dynamic_cast<BasicHeaderProperties*>(temp.getProperties());
+
+ CPPUNIT_ASSERT_EQUAL(contentType, properties->getContentType());
+ CPPUNIT_ASSERT_EQUAL(std::string("BCDE"), properties->getHeaders().getString("A"));
+ CPPUNIT_ASSERT_EQUAL(deliveryMode, properties->getDeliveryMode());
+ CPPUNIT_ASSERT_EQUAL(priority, properties->getPriority());
+ CPPUNIT_ASSERT_EQUAL(correlationId, properties->getCorrelationId());
+ CPPUNIT_ASSERT_EQUAL(replyTo, properties->getReplyTo());
+ CPPUNIT_ASSERT_EQUAL(expiration, properties->getExpiration());
+ CPPUNIT_ASSERT_EQUAL(messageId, properties->getMessageId());
+ CPPUNIT_ASSERT_EQUAL(timestamp, properties->getTimestamp());
+ CPPUNIT_ASSERT_EQUAL(type, properties->getType());
+ CPPUNIT_ASSERT_EQUAL(userId, properties->getUserId());
+ CPPUNIT_ASSERT_EQUAL(appId, properties->getAppId());
+ CPPUNIT_ASSERT_EQUAL(clusterId, properties->getClusterId());
+ }
+
+ void testSomeSpecificProperties(){
+ string contentType("application/octet-stream");
+ uint8_t deliveryMode(5);
+ uint8_t priority(6);
+ string expiration("Z");
+ uint64_t timestamp(0xabe4a34a);
+
+ AMQHeaderBody body(BASIC);
+ BasicHeaderProperties* properties =
+ dynamic_cast<BasicHeaderProperties*>(body.getProperties());
+ properties->setContentType(contentType);
+ properties->setDeliveryMode(deliveryMode);
+ properties->setPriority(priority);
+ properties->setExpiration(expiration);
+ properties->setTimestamp(timestamp);
+
+ Buffer buffer(100);
+ body.encode(buffer);
+ buffer.flip();
+ AMQHeaderBody temp;
+ temp.decode(buffer, body.size());
+ properties = dynamic_cast<BasicHeaderProperties*>(temp.getProperties());
+
+ CPPUNIT_ASSERT_EQUAL(contentType, properties->getContentType());
+ CPPUNIT_ASSERT_EQUAL((int) deliveryMode, (int) properties->getDeliveryMode());
+ CPPUNIT_ASSERT_EQUAL((int) priority, (int) properties->getPriority());
+ CPPUNIT_ASSERT_EQUAL(expiration, properties->getExpiration());
+ CPPUNIT_ASSERT_EQUAL(timestamp, properties->getTimestamp());
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(HeaderTest);
+
diff --git a/qpid/cpp/tests/HeadersExchangeTest.cpp b/qpid/cpp/tests/HeadersExchangeTest.cpp
new file mode 100644
index 0000000000..6cd51c55a9
--- /dev/null
+++ b/qpid/cpp/tests/HeadersExchangeTest.cpp
@@ -0,0 +1,115 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <HeadersExchange.h>
+#include <FieldTable.h>
+#include <Value.h>
+#include <qpid_test_plugin.h>
+
+using namespace qpid::broker;
+using namespace qpid::framing;
+
+class HeadersExchangeTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(HeadersExchangeTest);
+ CPPUNIT_TEST(testMatchAll);
+ CPPUNIT_TEST(testMatchAny);
+ CPPUNIT_TEST(testMatchEmptyValue);
+ CPPUNIT_TEST(testMatchEmptyArgs);
+ CPPUNIT_TEST(testMatchNoXMatch);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void testMatchAll()
+ {
+ FieldTable b, m;
+ b.setString("x-match", "all");
+ b.setString("foo", "FOO");
+ b.setInt("n", 42);
+ m.setString("foo", "FOO");
+ m.setInt("n", 42);
+ CPPUNIT_ASSERT(HeadersExchange::match(b, m));
+
+ // Ignore extras.
+ m.setString("extra", "x");
+ CPPUNIT_ASSERT(HeadersExchange::match(b, m));
+
+ // Fail mismatch, wrong value.
+ m.setString("foo", "NotFoo");
+ CPPUNIT_ASSERT(!HeadersExchange::match(b, m));
+
+ // Fail mismatch, missing value
+ m.erase("foo");
+ CPPUNIT_ASSERT(!HeadersExchange::match(b, m));
+ }
+
+ void testMatchAny()
+ {
+ FieldTable b, m;
+ b.setString("x-match", "any");
+ b.setString("foo", "FOO");
+ b.setInt("n", 42);
+ m.setString("foo", "FOO");
+ CPPUNIT_ASSERT(HeadersExchange::match(b, m));
+ m.erase("foo");
+ CPPUNIT_ASSERT(!HeadersExchange::match(b, m));
+ m.setInt("n", 42);
+ CPPUNIT_ASSERT(HeadersExchange::match(b, m));
+ }
+
+ void testMatchEmptyValue()
+ {
+ FieldTable b, m;
+ b.setString("x-match", "all");
+ b.getMap()["foo"] = FieldTable::ValuePtr(new EmptyValue());
+ b.getMap()["n"] = FieldTable::ValuePtr(new EmptyValue());
+ CPPUNIT_ASSERT(!HeadersExchange::match(b, m));
+ m.setString("foo", "blah");
+ m.setInt("n", 123);
+ }
+
+ void testMatchEmptyArgs()
+ {
+ FieldTable b, m;
+ m.setString("foo", "FOO");
+
+ b.setString("x-match", "all");
+ CPPUNIT_ASSERT(HeadersExchange::match(b, m));
+ b.setString("x-match", "any");
+ CPPUNIT_ASSERT(!HeadersExchange::match(b, m));
+ }
+
+
+ void testMatchNoXMatch()
+ {
+ FieldTable b, m;
+ b.setString("foo", "FOO");
+ m.setString("foo", "FOO");
+ CPPUNIT_ASSERT(!HeadersExchange::match(b, m));
+ }
+
+
+};
+
+// make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(HeadersExchangeTest);
diff --git a/qpid/cpp/tests/InMemoryContentTest.cpp b/qpid/cpp/tests/InMemoryContentTest.cpp
new file mode 100644
index 0000000000..d02cc56a7b
--- /dev/null
+++ b/qpid/cpp/tests/InMemoryContentTest.cpp
@@ -0,0 +1,92 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <InMemoryContent.h>
+#include <qpid_test_plugin.h>
+#include <AMQP_HighestVersion.h>
+#include <iostream>
+#include <list>
+#include "AMQFrame.h"
+#include "MockChannel.h"
+
+using std::list;
+using std::string;
+using boost::dynamic_pointer_cast;
+using namespace qpid::broker;
+using namespace qpid::framing;
+
+
+class InMemoryContentTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(InMemoryContentTest);
+ CPPUNIT_TEST(testRefragmentation);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+ void testRefragmentation()
+ {
+ {//no remainder
+ string out[] = {"abcde", "fghij", "klmno", "pqrst"};
+ string in[] = {out[0] + out[1], out[2] + out[3]};
+ refragment(2, in, 4, out);
+ }
+ {//remainder for last frame
+ string out[] = {"abcde", "fghij", "klmno", "pqrst", "uvw"};
+ string in[] = {out[0] + out[1], out[2] + out[3] + out[4]};
+ refragment(2, in, 5, out);
+ }
+ }
+
+
+ void refragment(size_t inCount, string* in, size_t outCount, string* out, uint32_t framesize = 5)
+ {
+ InMemoryContent content;
+ MockChannel channel(3);
+
+ addframes(content, inCount, in);
+ content.send(channel, framesize);
+ CPPUNIT_ASSERT_EQUAL(outCount, channel.out.frames.size());
+
+ for (unsigned int i = 0; i < outCount; i++) {
+ AMQContentBody::shared_ptr chunk(
+ dynamic_pointer_cast<AMQContentBody>(
+ channel.out.frames[i]->getBody()));
+ CPPUNIT_ASSERT(chunk);
+ CPPUNIT_ASSERT_EQUAL(out[i], chunk->getData());
+ CPPUNIT_ASSERT_EQUAL(
+ ChannelId(3), channel.out.frames[i]->getChannel());
+ }
+ }
+
+ void addframes(InMemoryContent& content, size_t frameCount, string* frameData)
+ {
+ for (unsigned int i = 0; i < frameCount; i++) {
+ AMQContentBody::shared_ptr frame(new AMQContentBody(frameData[i]));
+ content.add(frame);
+ }
+ }
+
+
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(InMemoryContentTest);
+
diff --git a/qpid/cpp/tests/InProcessBroker.h b/qpid/cpp/tests/InProcessBroker.h
new file mode 100644
index 0000000000..709ca9b953
--- /dev/null
+++ b/qpid/cpp/tests/InProcessBroker.h
@@ -0,0 +1,169 @@
+#ifndef _tests_InProcessBroker_h
+#define _tests_InProcessBroker_h
+
+/*
+ *
+ * Copyright (c) 2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ *
+ */
+#include <vector>
+#include <iostream>
+#include <algorithm>
+
+#include "AMQP_HighestVersion.h"
+#include "framing/AMQFrame.h"
+#include "broker/Broker.h"
+#include "broker/Connection.h"
+#include "client/Connector.h"
+#include "client/Connection.h"
+
+namespace qpid {
+namespace broker {
+
+/** Make a copy of a frame body. Inefficient, only intended for tests. */
+// TODO aconway 2007-01-29: from should be const, need to fix
+// AMQPFrame::encode as const.
+framing::AMQFrame copy(framing::AMQFrame& from) {
+ framing::Buffer buffer(from.size());
+ from.encode(buffer);
+ buffer.flip();
+ framing::AMQFrame result;
+ result.decode(buffer);
+ return result;
+}
+
+/**
+ * A broker that implements client::Connector allowing direct
+ * in-process connection of client to broker. Used to write round-trip
+ * tests without requiring an external broker process.
+ *
+ * Also allows you to "snoop" on frames exchanged between client & broker.
+ *
+ * see FramingTest::testRequestResponseRoundtrip() for example of use.
+ */
+class InProcessBroker : public client::Connector {
+ public:
+ enum Sender {CLIENT,BROKER};
+
+ struct Frame : public framing::AMQFrame {
+ Frame(Sender e, const AMQFrame& f) : AMQFrame(f), from(e) {}
+ bool fromBroker() const { return from == BROKER; }
+ bool fromClient() const { return from == CLIENT; }
+
+ template <class MethodType>
+ MethodType* asMethod() {
+ return dynamic_cast<MethodType*>(getBody().get());
+ }
+
+ Sender from;
+ };
+ typedef std::vector<Frame> Conversation;
+
+ InProcessBroker(framing::ProtocolVersion ver=
+ framing::highestProtocolVersion
+ ) :
+ Connector(ver),
+ protocolInit(ver),
+ broker(broker::Broker::create()),
+ brokerOut(BROKER, conversation),
+ brokerConnection(&brokerOut, *broker),
+ clientOut(CLIENT, conversation, &brokerConnection)
+ {}
+
+ ~InProcessBroker() { broker->shutdown(); }
+
+ void connect(const std::string& /*host*/, int /*port*/) {}
+ void init() { brokerConnection.initiated(&protocolInit); }
+ void close() {}
+
+ /** Client's input handler. */
+ void setInputHandler(framing::InputHandler* handler) {
+ brokerOut.in = handler;
+ }
+
+ /** Called by client to send a frame */
+ void send(framing::AMQFrame* frame) {
+ clientOut.send(frame);
+ }
+
+ /** Entire client-broker conversation is recorded here */
+ Conversation conversation;
+
+ private:
+ /** OutputHandler that forwards data to an InputHandler */
+ struct OutputToInputHandler : public sys::ConnectionOutputHandler {
+ OutputToInputHandler(
+ Sender from_, Conversation& conversation_,
+ framing::InputHandler* ih=0
+ ) : from(from_), conversation(conversation_), in(ih) {}
+
+ void send(framing::AMQFrame* frame) {
+ conversation.push_back(Frame(from, copy(*frame)));
+ in->received(frame);
+ }
+
+ void close() {}
+
+ Sender from;
+ Conversation& conversation;
+ framing::InputHandler* in;
+ };
+
+ framing::ProtocolInitiation protocolInit;
+ Broker::shared_ptr broker;
+ OutputToInputHandler brokerOut;
+ broker::Connection brokerConnection;
+ OutputToInputHandler clientOut;
+};
+
+std::ostream& operator<<(
+ std::ostream& out, const InProcessBroker::Frame& frame)
+{
+ return out << (frame.fromBroker()? "BROKER: ":"CLIENT: ") <<
+ static_cast<const framing::AMQFrame&>(frame);
+}
+std::ostream& operator<<(
+ std::ostream& out, const InProcessBroker::Conversation& conv)
+{
+ for (InProcessBroker::Conversation::const_iterator i = conv.begin();
+ i != conv.end(); ++i)
+ {
+ out << *i << std::endl;
+ }
+ return out;
+}
+
+
+}} // namespace qpid::broker
+
+/** An in-process client+broker all in one. */
+class InProcessBrokerClient : public qpid::client::Connection {
+ public:
+ qpid::broker::InProcessBroker broker;
+ qpid::broker::InProcessBroker::Conversation& conversation;
+
+ /** Constructor creates broker and opens client connection. */
+ InProcessBrokerClient(qpid::framing::ProtocolVersion version=
+ qpid::framing::highestProtocolVersion
+ ) : broker(version), conversation(broker.conversation)
+ {
+ setConnector(broker);
+ open("");
+ }
+
+ ~InProcessBrokerClient() {}
+};
+
+#endif // _tests_InProcessBroker_h
diff --git a/qpid/cpp/tests/LazyLoadedContentTest.cpp b/qpid/cpp/tests/LazyLoadedContentTest.cpp
new file mode 100644
index 0000000000..b24cd5a84a
--- /dev/null
+++ b/qpid/cpp/tests/LazyLoadedContentTest.cpp
@@ -0,0 +1,112 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <LazyLoadedContent.h>
+#include <AMQP_HighestVersion.h>
+#include <NullMessageStore.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+#include <list>
+#include <sstream>
+#include "AMQFrame.h"
+#include "MockChannel.h"
+using std::list;
+using std::string;
+using boost::dynamic_pointer_cast;
+using namespace qpid::broker;
+using namespace qpid::framing;
+
+
+
+class LazyLoadedContentTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(LazyLoadedContentTest);
+ CPPUNIT_TEST(testFragmented);
+ CPPUNIT_TEST(testWhole);
+ CPPUNIT_TEST(testHalved);
+ CPPUNIT_TEST_SUITE_END();
+
+ class TestMessageStore : public NullMessageStore
+ {
+ const string content;
+
+ public:
+ TestMessageStore(const string& _content) : content(_content) {}
+
+ void loadContent(Message* const, string& data, uint64_t offset, uint32_t length)
+ {
+ if (offset + length <= content.size()) {
+ data = content.substr(offset, length);
+ } else{
+ std::stringstream error;
+ error << "Invalid segment: offset=" << offset << ", length=" << length << ", content_length=" << content.size();
+ throw qpid::Exception(error.str());
+ }
+ }
+ };
+
+
+public:
+ void testFragmented()
+ {
+ string data = "abcdefghijklmnopqrstuvwxyz";
+ uint32_t framesize = 5;
+ string out[] = {"abcde", "fghij", "klmno", "pqrst", "uvwxy", "z"};
+ load(data, 6, out, framesize);
+ }
+
+ void testWhole()
+ {
+ string data = "abcdefghijklmnopqrstuvwxyz";
+ uint32_t framesize = 50;
+ string out[] = {data};
+ load(data, 1, out, framesize);
+ }
+
+ void testHalved()
+ {
+ string data = "abcdefghijklmnopqrstuvwxyz";
+ uint32_t framesize = 13;
+ string out[] = {"abcdefghijklm", "nopqrstuvwxyz"};
+ load(data, 2, out, framesize);
+ }
+
+ void load(string& in, size_t outCount, string* out, uint32_t framesize)
+ {
+ TestMessageStore store(in);
+ LazyLoadedContent content(&store, 0, in.size());
+ MockChannel channel(3);
+ content.send(channel, framesize);
+ CPPUNIT_ASSERT_EQUAL(outCount, channel.out.frames.size());
+
+ for (unsigned int i = 0; i < outCount; i++) {
+ AMQContentBody::shared_ptr chunk(dynamic_pointer_cast<AMQContentBody, AMQBody>(channel.out.frames[i]->getBody()));
+ CPPUNIT_ASSERT(chunk);
+ CPPUNIT_ASSERT_EQUAL(out[i], chunk->getData());
+ CPPUNIT_ASSERT_EQUAL(
+ ChannelId(3), channel.out.frames[i]->getChannel());
+ }
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(LazyLoadedContentTest);
+
diff --git a/qpid/cpp/tests/Makefile.am b/qpid/cpp/tests/Makefile.am
new file mode 100644
index 0000000000..edad0945f3
--- /dev/null
+++ b/qpid/cpp/tests/Makefile.am
@@ -0,0 +1,118 @@
+AM_CXXFLAGS = $(WARNING_CFLAGS) $(CPPUNIT_CXXFLAGS)
+INCLUDES = \
+ -I$(top_srcdir)/gen \
+ -I$(top_srcdir)/lib \
+ -I$(top_srcdir)/lib/client \
+ -I$(top_srcdir)/lib/broker \
+ -I$(top_srcdir)/lib/common \
+ -I$(top_srcdir)/lib/common/sys \
+ -I$(top_srcdir)/lib/common/framing \
+ $(APR_CXXFLAGS)
+
+# Unit tests
+broker_tests = \
+ AccumulatedAckTest \
+ BrokerChannelTest \
+ ConfigurationTest \
+ ExchangeTest \
+ HeadersExchangeTest \
+ InMemoryContentTest \
+ LazyLoadedContentTest \
+ MessageBuilderTest \
+ MessageTest \
+ ReferenceTest \
+ QueueRegistryTest \
+ QueueTest \
+ QueuePolicyTest \
+ TopicExchangeTest \
+ TxAckTest \
+ TxBufferTest \
+ TxPublishTest \
+ ValueTest \
+ MessageHandlerTest
+
+client_tests = \
+ ClientChannelTest
+
+framing_tests = \
+ FieldTableTest \
+ FramingTest \
+ HeaderTest
+
+misc_tests = \
+ ExceptionTest \
+ ProducerConsumerTest
+
+posix_tests = \
+ EventChannelTest \
+ EventChannelThreadsTest
+
+unit_tests = \
+ $(broker_tests) \
+ $(client_tests) \
+ $(framing_tests) \
+ $(misc_tests)
+
+# Executable client tests
+
+client_exe_tests = \
+ client_test \
+ echo_service \
+ topic_listener \
+ topic_publisher
+
+noinst_PROGRAMS = $(client_exe_tests)
+
+TESTS_ENVIRONMENT = \
+ VALGRIND=$(VALGRIND) \
+ abs_builddir='$(abs_builddir)' \
+ PATH="$(abs_builddir)/../src$(PATH_SEPARATOR)$$PATH" \
+ abs_srcdir='$(abs_srcdir)'
+
+CLIENT_TESTS = client_test quick_topictest
+TESTS = run-unit-tests start_broker $(CLIENT_TESTS) python_tests kill_broker
+
+EXTRA_DIST = \
+ $(TESTS) \
+ .vg-supp \
+ InProcessBroker.h \
+ MockChannel.h \
+ MockConnectionInputHandler.h \
+ qpid_test_plugin.h \
+ setup \
+ topicall \
+ topictest \
+ APRBaseTest.cpp
+
+CLEANFILES=qpidd.log
+DISTCLEANFILES=gen.mk
+
+include gen.mk
+
+abs_builddir = @abs_builddir@
+extra_libs = $(CPPUNIT_LIBS)
+lib_client = $(abs_builddir)/../lib/client/libqpidclient.la
+lib_common = $(abs_builddir)/../lib/common/libqpidcommon.la
+lib_broker = $(abs_builddir)/../lib/broker/libqpidbroker.la
+
+gen.mk: Makefile.am
+ ( \
+ for i in $(client_exe_tests); do \
+ echo $${i}_SOURCES = $$i.cpp; \
+ echo $${i}_LDADD = '$$(lib_client) $$(lib_common) $$(extra_libs)'; \
+ done; \
+ libs=; \
+ for i in $(unit_tests); do \
+ libs="$$libs $${i}.la"; \
+ echo $${i}_la_SOURCES = $$i.cpp; \
+ echo $${i}_la_LIBADD = '$$(lib_common) $$(lib_client)'; \
+ echo $${i}_la_LIBADD += '$$(lib_broker) $$(extra_libs)'; \
+ echo $${i}_la_LDFLAGS = "-module -rpath `pwd`"; \
+ done; \
+ echo "check_LTLIBRARIES =$$libs"; \
+ ) \
+ > $@-t
+ mv $@-t $@
+
+
+check: $(check_LTLIBRARIES) $(lib_common) $(lib_client) $(lib_broker)
diff --git a/qpid/cpp/tests/MessageBuilderTest.cpp b/qpid/cpp/tests/MessageBuilderTest.cpp
new file mode 100644
index 0000000000..d3b3902e97
--- /dev/null
+++ b/qpid/cpp/tests/MessageBuilderTest.cpp
@@ -0,0 +1,226 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <Exception.h>
+#include <BrokerMessage.h>
+#include <MessageBuilder.h>
+#include <NullMessageStore.h>
+#include <Buffer.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+#include <memory>
+#include "MockChannel.h"
+
+using namespace boost;
+using namespace qpid::broker;
+using namespace qpid::framing;
+using namespace qpid::sys;
+
+class MessageBuilderTest : public CppUnit::TestCase
+{
+ struct MockHandler : CompletionHandler {
+ Message::shared_ptr msg;
+
+ virtual void complete(Message::shared_ptr _msg){
+ msg = _msg;
+ }
+ };
+
+ class TestMessageStore : public NullMessageStore
+ {
+ Buffer* header;
+ Buffer* content;
+ const uint32_t contentBufferSize;
+
+ public:
+
+ void stage(Message* const msg)
+ {
+ if (msg->getPersistenceId() == 0) {
+ header = new Buffer(msg->encodedHeaderSize());
+ msg->encodeHeader(*header);
+ content = new Buffer(contentBufferSize);
+ msg->setPersistenceId(1);
+ } else {
+ throw qpid::Exception("Message already staged!");
+ }
+ }
+
+ void appendContent(Message* msg, const string& data)
+ {
+ if (msg) {
+ content->putRawData(data);
+ } else {
+ throw qpid::Exception("Invalid message id!");
+ }
+ }
+
+ // Don't hide overloads.
+ using NullMessageStore::destroy;
+
+ void destroy(BasicMessage* msg)
+ {
+ CPPUNIT_ASSERT(msg->getPersistenceId());
+ }
+
+ BasicMessage::shared_ptr getRestoredMessage()
+ {
+ BasicMessage::shared_ptr msg(new BasicMessage());
+ if (header) {
+ header->flip();
+ msg->decodeHeader(*header);
+ delete header;
+ header = 0;
+ if (content) {
+ content->flip();
+ msg->decodeContent(*content);
+ delete content;
+ content = 0;
+ }
+ }
+ return msg;
+ }
+
+ //dont care about any of the other methods:
+ TestMessageStore(uint32_t _contentBufferSize) : NullMessageStore(), header(0), content(0),
+ contentBufferSize(_contentBufferSize) {}
+ ~TestMessageStore(){}
+ };
+
+ CPPUNIT_TEST_SUITE(MessageBuilderTest);
+ CPPUNIT_TEST(testHeaderOnly);
+ CPPUNIT_TEST(test1ContentFrame);
+ CPPUNIT_TEST(test2ContentFrames);
+ CPPUNIT_TEST(testStaging);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void testHeaderOnly(){
+ MockHandler handler;
+ MessageBuilder builder(&handler);
+
+ Message::shared_ptr message(
+ new BasicMessage(
+ 0, "test", "my_routing_key", false, false,
+ MockChannel::basicGetBody()));
+ AMQHeaderBody::shared_ptr header(new AMQHeaderBody(BASIC));
+ header->setContentSize(0);
+
+ builder.initialise(message);
+ CPPUNIT_ASSERT(!handler.msg);
+ builder.setHeader(header);
+ CPPUNIT_ASSERT(handler.msg);
+ CPPUNIT_ASSERT_EQUAL(message, handler.msg);
+ }
+
+ void test1ContentFrame(){
+ MockHandler handler;
+ MessageBuilder builder(&handler);
+
+ string data1("abcdefg");
+
+ Message::shared_ptr message(
+ new BasicMessage(0, "test", "my_routing_key", false, false,
+ MockChannel::basicGetBody()));
+ AMQHeaderBody::shared_ptr header(new AMQHeaderBody(BASIC));
+ header->setContentSize(7);
+ AMQContentBody::shared_ptr part1(new AMQContentBody(data1));
+
+ builder.initialise(message);
+ CPPUNIT_ASSERT(!handler.msg);
+ builder.setHeader(header);
+ CPPUNIT_ASSERT(!handler.msg);
+ builder.addContent(part1);
+ CPPUNIT_ASSERT(handler.msg);
+ CPPUNIT_ASSERT_EQUAL(message, handler.msg);
+ }
+
+ void test2ContentFrames(){
+ MockHandler handler;
+ MessageBuilder builder(&handler);
+
+ string data1("abcdefg");
+ string data2("hijklmn");
+
+ Message::shared_ptr message(
+ new BasicMessage(0, "test", "my_routing_key", false, false,
+ MockChannel::basicGetBody()));
+ AMQHeaderBody::shared_ptr header(new AMQHeaderBody(BASIC));
+ header->setContentSize(14);
+ AMQContentBody::shared_ptr part1(new AMQContentBody(data1));
+ AMQContentBody::shared_ptr part2(new AMQContentBody(data2));
+
+ builder.initialise(message);
+ CPPUNIT_ASSERT(!handler.msg);
+ builder.setHeader(header);
+ CPPUNIT_ASSERT(!handler.msg);
+ builder.addContent(part1);
+ CPPUNIT_ASSERT(!handler.msg);
+ builder.addContent(part2);
+ CPPUNIT_ASSERT(handler.msg);
+ CPPUNIT_ASSERT_EQUAL(message, handler.msg);
+ }
+
+ void testStaging(){
+ //store must be the last thing to be destroyed or destructor
+ //of Message fails (it uses the store to call destroy if lazy
+ //loaded content is in use)
+ TestMessageStore store(14);
+ {
+ MockHandler handler;
+ MessageBuilder builder(&handler, &store, 5);
+
+ string data1("abcdefg");
+ string data2("hijklmn");
+
+ Message::shared_ptr message(
+ new BasicMessage(0, "test", "my_routing_key", false, false,
+ MockChannel::basicGetBody()));
+ AMQHeaderBody::shared_ptr header(new AMQHeaderBody(BASIC));
+ header->setContentSize(14);
+ BasicHeaderProperties* properties = dynamic_cast<BasicHeaderProperties*>(header->getProperties());
+ properties->setMessageId("MyMessage");
+ properties->getHeaders().setString("abc", "xyz");
+
+ AMQContentBody::shared_ptr part1(new AMQContentBody(data1));
+ AMQContentBody::shared_ptr part2(new AMQContentBody(data2));
+
+ builder.initialise(message);
+ builder.setHeader(header);
+ builder.addContent(part1);
+ builder.addContent(part2);
+ CPPUNIT_ASSERT(handler.msg);
+ CPPUNIT_ASSERT_EQUAL(message, handler.msg);
+
+ BasicMessage::shared_ptr restored = store.getRestoredMessage();
+ CPPUNIT_ASSERT_EQUAL(message->getExchange(), restored->getExchange());
+ CPPUNIT_ASSERT_EQUAL(message->getRoutingKey(), restored->getRoutingKey());
+ CPPUNIT_ASSERT_EQUAL(message->getHeaderProperties()->getMessageId(), restored->getHeaderProperties()->getMessageId());
+ CPPUNIT_ASSERT_EQUAL(message->getHeaderProperties()->getHeaders().getString("abc"),
+ restored->getHeaderProperties()->getHeaders().getString("abc"));
+ CPPUNIT_ASSERT_EQUAL((uint64_t) 14, restored->contentSize());
+ }
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(MessageBuilderTest);
diff --git a/qpid/cpp/tests/MessageHandlerTest.cpp b/qpid/cpp/tests/MessageHandlerTest.cpp
new file mode 100644
index 0000000000..55971355f6
--- /dev/null
+++ b/qpid/cpp/tests/MessageHandlerTest.cpp
@@ -0,0 +1,57 @@
+/*
+ *
+ * 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.
+ *
+ */
+//#include <iostream>
+//#include <AMQP_HighestVersion.h>
+#include <amqp_framing.h>
+#include <qpid_test_plugin.h>
+
+#include <BrokerAdapter.h>
+
+using namespace qpid::framing;
+using namespace qpid::broker;
+
+class MessageHandlerTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(MessageHandlerTest);
+ CPPUNIT_TEST(testOpenMethod);
+ CPPUNIT_TEST_SUITE_END();
+private:
+
+public:
+
+ MessageHandlerTest()
+ {
+ }
+
+ void testOpenMethod()
+ {
+ //AMQFrame frame(highestProtocolVersion, 0, method);
+ //TestBodyHandler handler(method);
+ //handler.handleBody(frame.getBody());
+ }
+
+};
+
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(MessageHandlerTest);
+
diff --git a/qpid/cpp/tests/MessageTest.cpp b/qpid/cpp/tests/MessageTest.cpp
new file mode 100644
index 0000000000..a3bbfe4afc
--- /dev/null
+++ b/qpid/cpp/tests/MessageTest.cpp
@@ -0,0 +1,89 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <BrokerMessage.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+#include <AMQP_HighestVersion.h>
+#include "AMQFrame.h"
+#include "MockChannel.h"
+
+using namespace boost;
+using namespace qpid::broker;
+using namespace qpid::framing;
+
+class MessageTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(MessageTest);
+ CPPUNIT_TEST(testEncodeDecode);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void testEncodeDecode()
+ {
+ string exchange = "MyExchange";
+ string routingKey = "MyRoutingKey";
+ string messageId = "MyMessage";
+ string data1("abcdefg");
+ string data2("hijklmn");
+
+ BasicMessage::shared_ptr msg(
+ new BasicMessage(0, exchange, routingKey, false, false,
+ MockChannel::basicGetBody()));
+ AMQHeaderBody::shared_ptr header(new AMQHeaderBody(BASIC));
+ header->setContentSize(14);
+ AMQContentBody::shared_ptr part1(new AMQContentBody(data1));
+ AMQContentBody::shared_ptr part2(new AMQContentBody(data2));
+ msg->setHeader(header);
+ msg->addContent(part1);
+ msg->addContent(part2);
+
+ msg->getHeaderProperties()->setMessageId(messageId);
+ msg->getHeaderProperties()->setDeliveryMode(PERSISTENT);
+ msg->getHeaderProperties()->getHeaders().setString("abc", "xyz");
+
+ Buffer buffer(msg->encodedSize());
+ msg->encode(buffer);
+ buffer.flip();
+
+ msg.reset(new BasicMessage());
+ msg->decode(buffer);
+ CPPUNIT_ASSERT_EQUAL(exchange, msg->getExchange());
+ CPPUNIT_ASSERT_EQUAL(routingKey, msg->getRoutingKey());
+ CPPUNIT_ASSERT_EQUAL(messageId, msg->getHeaderProperties()->getMessageId());
+ CPPUNIT_ASSERT_EQUAL((uint8_t) PERSISTENT, msg->getHeaderProperties()->getDeliveryMode());
+ CPPUNIT_ASSERT_EQUAL(string("xyz"), msg->getHeaderProperties()->getHeaders().getString("abc"));
+ CPPUNIT_ASSERT_EQUAL((uint64_t) 14, msg->contentSize());
+
+ MockChannel channel(1);
+ // FIXME aconway 2007-02-02: deliver should take ProtocolVersion
+ msg->deliver(channel, "ignore", 0, 100);
+ CPPUNIT_ASSERT_EQUAL((size_t) 3, channel.out.frames.size());
+ AMQContentBody::shared_ptr contentBody(dynamic_pointer_cast<AMQContentBody, AMQBody>(channel.out.frames[2]->getBody()));
+ CPPUNIT_ASSERT(contentBody);
+ CPPUNIT_ASSERT_EQUAL(data1 + data2, contentBody->getData());
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(MessageTest);
+
diff --git a/qpid/cpp/tests/MockChannel.h b/qpid/cpp/tests/MockChannel.h
new file mode 100644
index 0000000000..10fcb56969
--- /dev/null
+++ b/qpid/cpp/tests/MockChannel.h
@@ -0,0 +1,69 @@
+#ifndef _tests_MockChannel_h
+#define _tests_MockChannel_h
+
+/*
+ *
+ * Copyright (c) 2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ *
+ */
+
+#include <boost/shared_ptr.hpp>
+#include "framing/MethodContext.h"
+#include "framing/ChannelAdapter.h"
+#include "framing/OutputHandler.h"
+#include "framing/AMQFrame.h"
+#include "BasicGetBody.h"
+
+/** Mock output handler to collect frames */
+struct MockOutputHandler : public qpid::framing::OutputHandler {
+ std::vector<qpid::framing::AMQFrame*> frames;
+ void send(qpid::framing::AMQFrame* frame){ frames.push_back(frame); }
+};
+
+/**
+ * Combination mock OutputHandler and ChannelAdapter for tests.
+ */
+struct MockChannel : public qpid::framing::ChannelAdapter
+{
+ typedef qpid::framing::BasicGetBody Body;
+ static Body::shared_ptr basicGetBody() {
+ return Body::shared_ptr(
+ new Body(qpid::framing::ProtocolVersion()));
+ }
+
+ MockOutputHandler out;
+
+ MockChannel(qpid::framing::ChannelId id) {
+ init(id, out, qpid::framing::ProtocolVersion());
+ }
+
+ bool isOpen() const { return true; }
+
+ void handleHeader(
+ boost::shared_ptr<qpid::framing::AMQHeaderBody> b) { send(b); }
+ void handleContent(
+ boost::shared_ptr<qpid::framing::AMQContentBody> b) { send(b); }
+ void handleHeartbeat(
+ boost::shared_ptr<qpid::framing::AMQHeartbeatBody> b) { send(b); }
+ void handleMethodInContext(
+ boost::shared_ptr<qpid::framing::AMQMethodBody> method,
+ const qpid::framing::MethodContext& context)
+ {
+ context.channel->send(method);
+ };
+
+};
+
+#endif /*!_tests_MockChannel_h*/
diff --git a/qpid/cpp/tests/MockConnectionInputHandler.h b/qpid/cpp/tests/MockConnectionInputHandler.h
new file mode 100644
index 0000000000..b039e244d9
--- /dev/null
+++ b/qpid/cpp/tests/MockConnectionInputHandler.h
@@ -0,0 +1,113 @@
+#ifndef _tests_MockConnectionInputHandler_h
+#define _tests_MockConnectionInputHandler_h
+
+/*
+ *
+ * Copyright (c) 2006 The Apache Software Foundation
+ *
+ * Licensed 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.
+ *
+ */
+
+#include "sys/ConnectionInputHandler.h"
+#include "sys/ConnectionInputHandlerFactory.h"
+#include "sys/Monitor.h"
+#include "framing/ProtocolInitiation.h"
+
+struct MockConnectionInputHandler : public qpid::sys::ConnectionInputHandler {
+
+ MockConnectionInputHandler() : state(START) {}
+
+ ~MockConnectionInputHandler() {}
+
+ void initiated(qpid::framing::ProtocolInitiation* pi) {
+ qpid::sys::Monitor::ScopedLock l(monitor);
+ init = *pi;
+ setState(GOT_INIT);
+ }
+
+ void received(qpid::framing::AMQFrame* framep) {
+ qpid::sys::Monitor::ScopedLock l(monitor);
+ frame = *framep;
+ setState(GOT_FRAME);
+ }
+
+ qpid::framing::ProtocolInitiation waitForProtocolInit() {
+ waitFor(GOT_INIT);
+ return init;
+ }
+
+ qpid::framing::AMQFrame waitForFrame() {
+ waitFor(GOT_FRAME);
+ return frame;
+ }
+
+ void waitForClosed() {
+ waitFor(CLOSED);
+ }
+
+ void closed() {
+ qpid::sys::Monitor::ScopedLock l(monitor);
+ setState(CLOSED);
+ }
+
+ void idleOut() {}
+ void idleIn() {}
+
+ private:
+ typedef enum { START, GOT_INIT, GOT_FRAME, CLOSED } State;
+
+ void setState(State s) {
+ state = s;
+ monitor.notify();
+ }
+
+ void waitFor(State s) {
+ qpid::sys::Monitor::ScopedLock l(monitor);
+ qpid::sys::Time deadline = qpid::sys::now() + 10*qpid::sys::TIME_SEC;
+ while (state != s)
+ CPPUNIT_ASSERT(monitor.wait(deadline));
+ }
+
+ qpid::sys::Monitor monitor;
+ State state;
+ qpid::framing::ProtocolInitiation init;
+ qpid::framing::AMQFrame frame;
+};
+
+
+struct MockConnectionInputHandlerFactory : public qpid::sys::ConnectionInputHandlerFactory {
+ MockConnectionInputHandlerFactory() : handler(0) {}
+
+ qpid::sys::ConnectionInputHandler* create(qpid::sys::ConnectionOutputHandler*) {
+ qpid::sys::Monitor::ScopedLock lock(monitor);
+ handler = new MockConnectionInputHandler();
+ monitor.notifyAll();
+ return handler;
+ }
+
+ void waitForHandler() {
+ qpid::sys::Monitor::ScopedLock lock(monitor);
+ qpid::sys::Time deadline =
+ qpid::sys::now() + 500 * qpid::sys::TIME_SEC;
+ while (handler == 0)
+ CPPUNIT_ASSERT(monitor.wait(deadline));
+ }
+
+ MockConnectionInputHandler* handler;
+ qpid::sys::Monitor monitor;
+};
+
+
+
+#endif /*!_tests_MockConnectionInputHandler_h*/
diff --git a/qpid/cpp/tests/ProducerConsumerTest.cpp b/qpid/cpp/tests/ProducerConsumerTest.cpp
new file mode 100644
index 0000000000..e6d4090596
--- /dev/null
+++ b/qpid/cpp/tests/ProducerConsumerTest.cpp
@@ -0,0 +1,283 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <vector>
+#include <iostream>
+
+#include <boost/bind.hpp>
+
+#include <qpid_test_plugin.h>
+#include "InProcessBroker.h"
+#include "sys/ProducerConsumer.h"
+#include "sys/Thread.h"
+#include "AMQP_HighestVersion.h"
+#include "sys/AtomicCount.h"
+
+using namespace qpid::sys;
+using namespace qpid::framing;
+using namespace boost;
+using namespace std;
+
+/** A counter that notifies a monitor when changed */
+class WatchedCounter : public Monitor {
+ public:
+ WatchedCounter(int i=0) : count(i) {}
+ WatchedCounter(const WatchedCounter& c) : Monitor(), count(int(c)) {}
+
+ WatchedCounter& operator=(const WatchedCounter& x) {
+ return *this = int(x);
+ }
+
+ WatchedCounter& operator=(int i) {
+ Lock l(*this);
+ count = i;
+ return *this;
+ }
+
+ int operator++() {
+ Lock l(*this);
+ notifyAll();
+ return ++count;
+ }
+
+ int operator++(int) {
+ Lock l(*this);
+ notifyAll();
+ return count++;
+ }
+
+ bool operator==(int i) const {
+ Lock l(const_cast<WatchedCounter&>(*this));
+ return i == count;
+ }
+
+ operator int() const {
+ Lock l(const_cast<WatchedCounter&>(*this));
+ return count;
+ }
+
+ bool waitFor(int i, Time timeout=TIME_SEC) {
+ Lock l(*this);
+ Time deadline = timeout+now();
+ while (count != i) {
+ if (!wait(deadline))
+ return false;
+ }
+ assert(count == i);
+ return true;
+ }
+
+ private:
+ typedef Mutex::ScopedLock Lock;
+ int count;
+};
+
+class ProducerConsumerTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(ProducerConsumerTest);
+ CPPUNIT_TEST(testProduceConsume);
+ CPPUNIT_TEST(testTimeout);
+ CPPUNIT_TEST(testStop);
+ CPPUNIT_TEST(testCancel);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+ InProcessBrokerClient client;
+ ProducerConsumer pc;
+
+ WatchedCounter stopped;
+ WatchedCounter timeout;
+ WatchedCounter consumed;
+ WatchedCounter produced;
+
+ struct ConsumeRunnable : public Runnable {
+ ProducerConsumerTest& test;
+ ConsumeRunnable(ProducerConsumerTest& test_) : test(test_) {}
+ void run() { test.consume(); }
+ };
+
+ struct ConsumeTimeoutRunnable : public Runnable {
+ ProducerConsumerTest& test;
+ Time timeout;
+ ConsumeTimeoutRunnable(ProducerConsumerTest& test_, const Time& t)
+ : test(test_), timeout(t) {}
+ void run() { test.consumeTimeout(timeout); }
+ };
+
+
+ void consumeInternal(ProducerConsumer::ConsumerLock& consumer) {
+ if (pc.isStopped()) {
+ ++stopped;
+ return;
+ }
+ if (consumer.isTimedOut()) {
+ ++timeout;
+ return;
+ }
+ CPPUNIT_ASSERT(consumer.isOk());
+ CPPUNIT_ASSERT(pc.available() > 0);
+ consumer.confirm();
+ consumed++;
+ }
+
+ void consume() {
+ ProducerConsumer::ConsumerLock consumer(pc);
+ consumeInternal(consumer);
+ };
+
+ void consumeTimeout(const Time& timeout) {
+ ProducerConsumer::ConsumerLock consumer(pc, timeout);
+ consumeInternal(consumer);
+ };
+
+ void produce() {
+ ProducerConsumer::ProducerLock producer(pc);
+ CPPUNIT_ASSERT(producer.isOk());
+ producer.confirm();
+ produced++;
+ }
+
+ void join(vector<Thread>& threads) {
+ for_each(threads.begin(), threads.end(), bind(&Thread::join,_1));
+ }
+
+ vector<Thread> startThreads(size_t n, Runnable& runnable) {
+ vector<Thread> threads(n);
+ while (n > 0)
+ threads[--n] = Thread(runnable);
+ return threads;
+ }
+
+public:
+ ProducerConsumerTest() : client(highestProtocolVersion) {}
+
+ void testProduceConsume() {
+ ConsumeRunnable runMe(*this);
+ produce();
+ produce();
+ CPPUNIT_ASSERT(produced.waitFor(2));
+ vector<Thread> threads = startThreads(1, runMe);
+ CPPUNIT_ASSERT(consumed.waitFor(1));
+ join(threads);
+
+ threads = startThreads(1, runMe);
+ CPPUNIT_ASSERT(consumed.waitFor(2));
+ join(threads);
+
+ threads = startThreads(3, runMe);
+ produce();
+ produce();
+ CPPUNIT_ASSERT(consumed.waitFor(4));
+ produce();
+ CPPUNIT_ASSERT(consumed.waitFor(5));
+ join(threads);
+ CPPUNIT_ASSERT_EQUAL(0, int(stopped));
+ }
+
+ void testTimeout() {
+ try {
+ // 0 timeout no items available throws exception
+ ProducerConsumer::ConsumerLock consumer(pc, 0);
+ CPPUNIT_FAIL("Expected exception");
+ } catch(...){}
+
+ produce();
+ CPPUNIT_ASSERT(produced.waitFor(1));
+ CPPUNIT_ASSERT_EQUAL(1, int(pc.available()));
+ {
+ // 0 timeout succeeds if there's an item available.
+ ProducerConsumer::ConsumerLock consume(pc, 0);
+ CPPUNIT_ASSERT(consume.isOk());
+ consume.confirm();
+ }
+ CPPUNIT_ASSERT_EQUAL(0, int(pc.available()));
+
+ // Produce an item within the timeout.
+ ConsumeTimeoutRunnable runMe(*this, 2*TIME_SEC);
+ vector<Thread> threads = startThreads(1, runMe);
+ produce();
+ CPPUNIT_ASSERT(consumed.waitFor(1));
+ join(threads);
+ }
+
+
+ void testStop() {
+ ConsumeRunnable runMe(*this);
+ vector<Thread> threads = startThreads(2, runMe);
+ while (pc.consumers() != 2)
+ Thread::yield();
+ pc.stop();
+ CPPUNIT_ASSERT(stopped.waitFor(2));
+ join(threads);
+
+ threads = startThreads(1, runMe); // Should stop immediately.
+ CPPUNIT_ASSERT(stopped.waitFor(3));
+ join(threads);
+
+ // Produce/consume while stopped should return isStopped and
+ // throw on confirm.
+ try {
+ ProducerConsumer::ProducerLock p(pc);
+ CPPUNIT_ASSERT(pc.isStopped());
+ CPPUNIT_FAIL("Expected exception");
+ }
+ catch (...) {} // Expected
+ try {
+ ProducerConsumer::ConsumerLock c(pc);
+ CPPUNIT_ASSERT(pc.isStopped());
+ CPPUNIT_FAIL("Expected exception");
+ }
+ catch (...) {} // Expected
+ }
+
+ void testCancel() {
+ CPPUNIT_ASSERT_EQUAL(size_t(0), pc.available());
+ {
+ ProducerConsumer::ProducerLock p(pc);
+ CPPUNIT_ASSERT(p.isOk());
+ p.cancel();
+ }
+ // Nothing was produced.
+ CPPUNIT_ASSERT_EQUAL(size_t(0), pc.available());
+ {
+ ProducerConsumer::ConsumerLock c(pc, 0);
+ CPPUNIT_ASSERT(c.isTimedOut());
+ }
+ // Now produce but cancel the consume
+ {
+ ProducerConsumer::ProducerLock p(pc);
+ CPPUNIT_ASSERT(p.isOk());
+ p.confirm();
+ }
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pc.available());
+ {
+ ProducerConsumer::ConsumerLock c(pc);
+ CPPUNIT_ASSERT(c.isOk());
+ c.cancel();
+ }
+ CPPUNIT_ASSERT_EQUAL(size_t(1), pc.available());
+ }
+};
+
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(ProducerConsumerTest);
+
diff --git a/qpid/cpp/tests/QueuePolicyTest.cpp b/qpid/cpp/tests/QueuePolicyTest.cpp
new file mode 100644
index 0000000000..20917dcd6a
--- /dev/null
+++ b/qpid/cpp/tests/QueuePolicyTest.cpp
@@ -0,0 +1,89 @@
+ /*
+ *
+ * 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.
+ *
+ */
+#include <QueuePolicy.h>
+#include <qpid_test_plugin.h>
+
+using namespace qpid::broker;
+using namespace qpid::framing;
+
+class QueuePolicyTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(QueuePolicyTest);
+ CPPUNIT_TEST(testCount);
+ CPPUNIT_TEST(testSize);
+ CPPUNIT_TEST(testBoth);
+ CPPUNIT_TEST(testSettings);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+ void testCount(){
+ QueuePolicy policy(5, 0);
+ CPPUNIT_ASSERT(!policy.limitExceeded());
+ for (int i = 0; i < 5; i++) policy.enqueued(10);
+ CPPUNIT_ASSERT_EQUAL((uint64_t) 0, policy.getMaxSize());
+ CPPUNIT_ASSERT_EQUAL((uint32_t) 5, policy.getMaxCount());
+ CPPUNIT_ASSERT(!policy.limitExceeded());
+ policy.enqueued(10);
+ CPPUNIT_ASSERT(policy.limitExceeded());
+ policy.dequeued(10);
+ CPPUNIT_ASSERT(!policy.limitExceeded());
+ policy.enqueued(10);
+ CPPUNIT_ASSERT(policy.limitExceeded());
+ }
+
+ void testSize(){
+ QueuePolicy policy(0, 50);
+ for (int i = 0; i < 5; i++) policy.enqueued(10);
+ CPPUNIT_ASSERT(!policy.limitExceeded());
+ policy.enqueued(10);
+ CPPUNIT_ASSERT(policy.limitExceeded());
+ policy.dequeued(10);
+ CPPUNIT_ASSERT(!policy.limitExceeded());
+ policy.enqueued(10);
+ CPPUNIT_ASSERT(policy.limitExceeded());
+ }
+
+ void testBoth(){
+ QueuePolicy policy(5, 50);
+ for (int i = 0; i < 5; i++) policy.enqueued(11);
+ CPPUNIT_ASSERT(policy.limitExceeded());
+ policy.dequeued(20);
+ CPPUNIT_ASSERT(!policy.limitExceeded());//fails
+ policy.enqueued(5);
+ policy.enqueued(10);
+ CPPUNIT_ASSERT(policy.limitExceeded());
+ }
+
+ void testSettings(){
+ //test reading and writing the policy from/to field table
+ FieldTable settings;
+ QueuePolicy a(101, 303);
+ a.update(settings);
+ QueuePolicy b(settings);
+ CPPUNIT_ASSERT_EQUAL(a.getMaxCount(), b.getMaxCount());
+ CPPUNIT_ASSERT_EQUAL(a.getMaxSize(), b.getMaxSize());
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(QueuePolicyTest);
+
diff --git a/qpid/cpp/tests/QueueRegistryTest.cpp b/qpid/cpp/tests/QueueRegistryTest.cpp
new file mode 100644
index 0000000000..3926d56292
--- /dev/null
+++ b/qpid/cpp/tests/QueueRegistryTest.cpp
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ */
+
+#include <QueueRegistry.h>
+#include <qpid_test_plugin.h>
+#include <string>
+
+using namespace qpid::broker;
+
+class QueueRegistryTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(QueueRegistryTest);
+ CPPUNIT_TEST(testDeclare);
+ CPPUNIT_TEST(testDeclareTmp);
+ CPPUNIT_TEST(testFind);
+ CPPUNIT_TEST(testDestroy);
+ CPPUNIT_TEST_SUITE_END();
+
+ private:
+ std::string foo, bar;
+ QueueRegistry reg;
+ std::pair<Queue::shared_ptr, bool> qc;
+
+ public:
+ void setUp() {
+ foo = "foo";
+ bar = "bar";
+ }
+
+ void testDeclare() {
+ qc = reg.declare(foo, false, 0, 0);
+ Queue::shared_ptr q = qc.first;
+ CPPUNIT_ASSERT(q);
+ CPPUNIT_ASSERT(qc.second); // New queue
+ CPPUNIT_ASSERT_EQUAL(foo, q->getName());
+
+ qc = reg.declare(foo, false, 0, 0);
+ CPPUNIT_ASSERT_EQUAL(q, qc.first);
+ CPPUNIT_ASSERT(!qc.second);
+
+ qc = reg.declare(bar, false, 0, 0);
+ q = qc.first;
+ CPPUNIT_ASSERT(q);
+ CPPUNIT_ASSERT_EQUAL(true, qc.second);
+ CPPUNIT_ASSERT_EQUAL(bar, q->getName());
+ }
+
+ void testDeclareTmp()
+ {
+ qc = reg.declare(std::string(), false, 0, 0);
+ CPPUNIT_ASSERT(qc.second);
+ CPPUNIT_ASSERT_EQUAL(std::string("tmp_1"), qc.first->getName());
+ }
+
+ void testFind() {
+ CPPUNIT_ASSERT(reg.find(foo) == 0);
+
+ reg.declare(foo, false, 0, 0);
+ reg.declare(bar, false, 0, 0);
+ Queue::shared_ptr q = reg.find(bar);
+ CPPUNIT_ASSERT(q);
+ CPPUNIT_ASSERT_EQUAL(bar, q->getName());
+ }
+
+ void testDestroy() {
+ qc = reg.declare(foo, false, 0, 0);
+ reg.destroy(foo);
+ // Queue is gone from the registry.
+ CPPUNIT_ASSERT(reg.find(foo) == 0);
+ // Queue is not actually destroyed till we drop our reference.
+ CPPUNIT_ASSERT_EQUAL(foo, qc.first->getName());
+ // We shoud be the only reference.
+ CPPUNIT_ASSERT_EQUAL(1L, qc.first.use_count());
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(QueueRegistryTest);
diff --git a/qpid/cpp/tests/QueueTest.cpp b/qpid/cpp/tests/QueueTest.cpp
new file mode 100644
index 0000000000..fa38029de1
--- /dev/null
+++ b/qpid/cpp/tests/QueueTest.cpp
@@ -0,0 +1,185 @@
+ /*
+ *
+ * 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.
+ *
+ */
+#include <BrokerQueue.h>
+#include <QueueRegistry.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+#include "MockChannel.h"
+
+using namespace qpid::broker;
+using namespace qpid::sys;
+
+
+class TestBinding : public virtual Binding{
+ bool cancelled;
+
+public:
+ TestBinding();
+ virtual void cancel();
+ bool isCancelled();
+};
+
+class TestConsumer : public virtual Consumer{
+public:
+ Message::shared_ptr last;
+
+ virtual bool deliver(Message::shared_ptr& msg);
+};
+
+
+class QueueTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(QueueTest);
+ CPPUNIT_TEST(testConsumers);
+ CPPUNIT_TEST(testBinding);
+ CPPUNIT_TEST(testRegistry);
+ CPPUNIT_TEST(testDequeue);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+ Message::shared_ptr message(std::string exchange, std::string routingKey) {
+ return Message::shared_ptr(
+ new BasicMessage(0, exchange, routingKey, true, true,
+ MockChannel::basicGetBody()));
+ }
+
+ void testConsumers(){
+ Queue::shared_ptr queue(new Queue("my_queue", true));
+
+ //Test adding consumers:
+ TestConsumer c1;
+ TestConsumer c2;
+ queue->consume(&c1);
+ queue->consume(&c2);
+
+ CPPUNIT_ASSERT_EQUAL(uint32_t(2), queue->getConsumerCount());
+
+ //Test basic delivery:
+ Message::shared_ptr msg1 = message("e", "A");
+ Message::shared_ptr msg2 = message("e", "B");
+ Message::shared_ptr msg3 = message("e", "C");
+
+ queue->deliver(msg1);
+ CPPUNIT_ASSERT_EQUAL(msg1.get(), c1.last.get());
+
+ queue->deliver(msg2);
+ CPPUNIT_ASSERT_EQUAL(msg2.get(), c2.last.get());
+
+ queue->deliver(msg3);
+ CPPUNIT_ASSERT_EQUAL(msg3.get(), c1.last.get());
+
+ //Test cancellation:
+ queue->cancel(&c1);
+ CPPUNIT_ASSERT_EQUAL(uint32_t(1), queue->getConsumerCount());
+ queue->cancel(&c2);
+ CPPUNIT_ASSERT_EQUAL(uint32_t(0), queue->getConsumerCount());
+ }
+
+ void testBinding(){
+ Queue::shared_ptr queue(new Queue("my_queue", true));
+ //Test bindings:
+ TestBinding a;
+ TestBinding b;
+ queue->bound(&a);
+ queue->bound(&b);
+
+ queue.reset();
+
+ CPPUNIT_ASSERT(a.isCancelled());
+ CPPUNIT_ASSERT(b.isCancelled());
+ }
+
+ void testRegistry(){
+ //Test use of queues in registry:
+ QueueRegistry registry;
+ registry.declare("queue1", true, true);
+ registry.declare("queue2", true, true);
+ registry.declare("queue3", true, true);
+
+ CPPUNIT_ASSERT(registry.find("queue1"));
+ CPPUNIT_ASSERT(registry.find("queue2"));
+ CPPUNIT_ASSERT(registry.find("queue3"));
+
+ registry.destroy("queue1");
+ registry.destroy("queue2");
+ registry.destroy("queue3");
+
+ CPPUNIT_ASSERT(!registry.find("queue1"));
+ CPPUNIT_ASSERT(!registry.find("queue2"));
+ CPPUNIT_ASSERT(!registry.find("queue3"));
+ }
+
+ void testDequeue(){
+ Queue::shared_ptr queue(new Queue("my_queue", true));
+ Message::shared_ptr msg1 = message("e", "A");
+ Message::shared_ptr msg2 = message("e", "B");
+ Message::shared_ptr msg3 = message("e", "C");
+ Message::shared_ptr received;
+
+ queue->deliver(msg1);
+ queue->deliver(msg2);
+ queue->deliver(msg3);
+
+ CPPUNIT_ASSERT_EQUAL(uint32_t(3), queue->getMessageCount());
+
+ received = queue->dequeue();
+ CPPUNIT_ASSERT_EQUAL(msg1.get(), received.get());
+ CPPUNIT_ASSERT_EQUAL(uint32_t(2), queue->getMessageCount());
+
+ received = queue->dequeue();
+ CPPUNIT_ASSERT_EQUAL(msg2.get(), received.get());
+ CPPUNIT_ASSERT_EQUAL(uint32_t(1), queue->getMessageCount());
+
+ TestConsumer consumer;
+ queue->consume(&consumer);
+ queue->dispatch();
+ CPPUNIT_ASSERT_EQUAL(msg3.get(), consumer.last.get());
+ CPPUNIT_ASSERT_EQUAL(uint32_t(0), queue->getMessageCount());
+
+ received = queue->dequeue();
+ CPPUNIT_ASSERT(!received);
+ CPPUNIT_ASSERT_EQUAL(uint32_t(0), queue->getMessageCount());
+
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(QueueTest);
+
+//TestBinding
+TestBinding::TestBinding() : cancelled(false) {}
+
+void TestBinding::cancel(){
+ CPPUNIT_ASSERT(!cancelled);
+ cancelled = true;
+}
+
+bool TestBinding::isCancelled(){
+ return cancelled;
+}
+
+//TestConsumer
+bool TestConsumer::deliver(Message::shared_ptr& msg){
+ last = msg;
+ return true;
+}
+
diff --git a/qpid/cpp/tests/ReferenceTest.cpp b/qpid/cpp/tests/ReferenceTest.cpp
new file mode 100644
index 0000000000..753f68ee75
--- /dev/null
+++ b/qpid/cpp/tests/ReferenceTest.cpp
@@ -0,0 +1,102 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <iostream>
+#include <memory>
+#include "qpid_test_plugin.h"
+#include "Reference.h"
+#include "BrokerMessageMessage.h"
+#include "MessageTransferBody.h"
+#include "MessageAppendBody.h"
+#include "CompletionHandler.h"
+
+using namespace boost;
+using namespace qpid::broker;
+using namespace qpid::framing;
+using namespace std;
+
+class ReferenceTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(ReferenceTest);
+ CPPUNIT_TEST(testRegistry);
+ CPPUNIT_TEST(testReference);
+ CPPUNIT_TEST_SUITE_END();
+
+ ProtocolVersion v;
+ ReferenceRegistry registry;
+ Reference::shared_ptr r1;
+ MessageTransferBody::shared_ptr t1, t2;
+ MessageMessage::shared_ptr m1, m2;
+ MessageAppendBody::shared_ptr a1, a2;
+ public:
+
+ ReferenceTest() :
+ r1(registry.open("bar")),
+ t1(new MessageTransferBody(v)),
+ t2(new MessageTransferBody(v)),
+ m1(new MessageMessage(0, 1, t1, r1)),
+ m2(new MessageMessage(0, 2, t2, r1)),
+ a1(new MessageAppendBody(v)),
+ a2(new MessageAppendBody(v))
+ {}
+
+ void testRegistry() {
+ Reference::shared_ptr ref = registry.open("foo");
+ CPPUNIT_ASSERT_EQUAL(string("foo"), ref->getId());
+ CPPUNIT_ASSERT(ref == registry.get("foo"));
+ try {
+ registry.get("none");
+ CPPUNIT_FAIL("Expected exception");
+ } catch (...) {}
+ try {
+ registry.open("foo");
+ CPPUNIT_FAIL("Expected exception");
+ } catch(...) {}
+ }
+
+ void testReference() {
+ r1->addMessage(m1);
+ r1->addMessage(m2);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), r1->getMessages().size());
+ r1->append(a1);
+ r1->append(a2);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), r1->getAppends().size());
+ const vector<MessageMessage::shared_ptr> messages = r1->getMessages();
+ r1->close();
+ try {
+ registry.open("bar");
+ CPPUNIT_FAIL("Expected exception");
+ } catch(...) {}
+
+ CPPUNIT_ASSERT_EQUAL(messages[0], m1);
+ CPPUNIT_ASSERT_EQUAL(messages[0]->getReference()->getAppends()[0], a1);
+ CPPUNIT_ASSERT_EQUAL(messages[0]->getReference()->getAppends()[1], a2);
+
+ CPPUNIT_ASSERT_EQUAL(messages[1], m2);
+ CPPUNIT_ASSERT_EQUAL(messages[1]->getReference()->getAppends()[0], a1);
+ CPPUNIT_ASSERT_EQUAL(messages[1]->getReference()->getAppends()[1], a2);
+ }
+
+
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(ReferenceTest);
diff --git a/qpid/cpp/tests/TopicExchangeTest.cpp b/qpid/cpp/tests/TopicExchangeTest.cpp
new file mode 100644
index 0000000000..4ba9cdd6e5
--- /dev/null
+++ b/qpid/cpp/tests/TopicExchangeTest.cpp
@@ -0,0 +1,200 @@
+/*
+ * 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.
+ */
+#include <TopicExchange.h>
+#include <qpid_test_plugin.h>
+
+using namespace qpid::broker;
+
+Tokens makeTokens(char** begin, char** end)
+{
+ Tokens t;
+ t.insert(t.end(), begin, end);
+ return t;
+}
+
+// Calculate size of an array.
+#define LEN(a) (sizeof(a)/sizeof(a[0]))
+
+// Convert array to token vector
+#define TOKENS(a) makeTokens(a, a + LEN(a))
+
+// Allow CPPUNIT_EQUALS to print a Tokens.
+CppUnit::OStringStream& operator <<(CppUnit::OStringStream& out, const Tokens& v)
+{
+ out << "[ ";
+ for (Tokens::const_iterator i = v.begin();
+ i != v.end(); ++i)
+ {
+ out << '"' << *i << '"' << (i+1 == v.end() ? "]" : ", ");
+ }
+ return out;
+}
+
+
+class TokensTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(TokensTest);
+ CPPUNIT_TEST(testTokens);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+ void testTokens()
+ {
+ Tokens tokens("hello.world");
+ char* expect[] = {"hello", "world"};
+ CPPUNIT_ASSERT_EQUAL(TOKENS(expect), tokens);
+
+ tokens = "a.b.c";
+ char* expect2[] = { "a", "b", "c" };
+ CPPUNIT_ASSERT_EQUAL(TOKENS(expect2), tokens);
+
+ tokens = "";
+ CPPUNIT_ASSERT(tokens.empty());
+
+ tokens = "x";
+ char* expect3[] = { "x" };
+ CPPUNIT_ASSERT_EQUAL(TOKENS(expect3), tokens);
+
+ tokens = (".x");
+ char* expect4[] = { "", "x" };
+ CPPUNIT_ASSERT_EQUAL(TOKENS(expect4), tokens);
+
+ tokens = ("x.");
+ char* expect5[] = { "x", "" };
+ CPPUNIT_ASSERT_EQUAL(TOKENS(expect5), tokens);
+
+ tokens = (".");
+ char* expect6[] = { "", "" };
+ CPPUNIT_ASSERT_EQUAL(TOKENS(expect6), tokens);
+
+ tokens = ("..");
+ char* expect7[] = { "", "", "" };
+ CPPUNIT_ASSERT_EQUAL(TOKENS(expect7), tokens);
+ }
+
+};
+
+#define ASSERT_NORMALIZED(expect, pattern) \
+ CPPUNIT_ASSERT_EQUAL(Tokens(expect), static_cast<Tokens>(TopicPattern(pattern)))
+class TopicPatternTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(TopicPatternTest);
+ CPPUNIT_TEST(testNormalize);
+ CPPUNIT_TEST(testPlain);
+ CPPUNIT_TEST(testStar);
+ CPPUNIT_TEST(testHash);
+ CPPUNIT_TEST(testMixed);
+ CPPUNIT_TEST(testCombo);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void testNormalize()
+ {
+ CPPUNIT_ASSERT(TopicPattern("").empty());
+ ASSERT_NORMALIZED("a.b.c", "a.b.c");
+ ASSERT_NORMALIZED("a.*.c", "a.*.c");
+ ASSERT_NORMALIZED("#", "#");
+ ASSERT_NORMALIZED("#", "#.#.#.#");
+ ASSERT_NORMALIZED("*.*.*.#", "#.*.#.*.#.#.*");
+ ASSERT_NORMALIZED("a.*.*.*.#", "a.*.#.*.#.*.#");
+ ASSERT_NORMALIZED("a.*.*.*.#", "a.*.#.*.#.*");
+ }
+
+ void testPlain() {
+ TopicPattern p("ab.cd.e");
+ CPPUNIT_ASSERT(p.match("ab.cd.e"));
+ CPPUNIT_ASSERT(!p.match("abx.cd.e"));
+ CPPUNIT_ASSERT(!p.match("ab.cd"));
+ CPPUNIT_ASSERT(!p.match("ab.cd..e."));
+ CPPUNIT_ASSERT(!p.match("ab.cd.e."));
+ CPPUNIT_ASSERT(!p.match(".ab.cd.e"));
+
+ p = "";
+ CPPUNIT_ASSERT(p.match(""));
+
+ p = ".";
+ CPPUNIT_ASSERT(p.match("."));
+ }
+
+
+ void testStar()
+ {
+ TopicPattern p("a.*.b");
+ CPPUNIT_ASSERT(p.match("a.xx.b"));
+ CPPUNIT_ASSERT(!p.match("a.b"));
+
+ p = "*.x";
+ CPPUNIT_ASSERT(p.match("y.x"));
+ CPPUNIT_ASSERT(p.match(".x"));
+ CPPUNIT_ASSERT(!p.match("x"));
+
+ p = "x.x.*";
+ CPPUNIT_ASSERT(p.match("x.x.y"));
+ CPPUNIT_ASSERT(p.match("x.x."));
+ CPPUNIT_ASSERT(!p.match("x.x"));
+ CPPUNIT_ASSERT(!p.match("q.x.y"));
+ }
+
+ void testHash()
+ {
+ TopicPattern p("a.#.b");
+ CPPUNIT_ASSERT(p.match("a.b"));
+ CPPUNIT_ASSERT(p.match("a.x.b"));
+ CPPUNIT_ASSERT(p.match("a..x.y.zz.b"));
+ CPPUNIT_ASSERT(!p.match("a.b."));
+ CPPUNIT_ASSERT(!p.match("q.x.b"));
+
+ p = "a.#";
+ CPPUNIT_ASSERT(p.match("a"));
+ CPPUNIT_ASSERT(p.match("a.b"));
+ CPPUNIT_ASSERT(p.match("a.b.c"));
+
+ p = "#.a";
+ CPPUNIT_ASSERT(p.match("a"));
+ CPPUNIT_ASSERT(p.match("x.y.a"));
+ }
+
+ void testMixed()
+ {
+ TopicPattern p("*.x.#.y");
+ CPPUNIT_ASSERT(p.match("a.x.y"));
+ CPPUNIT_ASSERT(p.match("a.x.p.qq.y"));
+ CPPUNIT_ASSERT(!p.match("a.a.x.y"));
+ CPPUNIT_ASSERT(!p.match("aa.x.b.c"));
+
+ p = "a.#.b.*";
+ CPPUNIT_ASSERT(p.match("a.b.x"));
+ CPPUNIT_ASSERT(p.match("a.x.x.x.b.x"));
+ }
+
+ void testCombo() {
+ TopicPattern p("*.#.#.*.*.#");
+ CPPUNIT_ASSERT(p.match("x.y.z"));
+ CPPUNIT_ASSERT(p.match("x.y.z.a.b.c"));
+ CPPUNIT_ASSERT(!p.match("x.y"));
+ CPPUNIT_ASSERT(!p.match("x"));
+ }
+};
+
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(TopicPatternTest);
+CPPUNIT_TEST_SUITE_REGISTRATION(TokensTest);
diff --git a/qpid/cpp/tests/TxAckTest.cpp b/qpid/cpp/tests/TxAckTest.cpp
new file mode 100644
index 0000000000..c189533ea9
--- /dev/null
+++ b/qpid/cpp/tests/TxAckTest.cpp
@@ -0,0 +1,125 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <NullMessageStore.h>
+#include <RecoveryManager.h>
+#include <TxAck.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+#include <list>
+#include <vector>
+#include "MockChannel.h"
+
+using std::list;
+using std::vector;
+using namespace qpid::broker;
+using namespace qpid::framing;
+
+class TxAckTest : public CppUnit::TestCase
+{
+
+ class TestMessageStore : public NullMessageStore
+ {
+ public:
+ vector< std::pair<Message*, const string*> > dequeued;
+
+ void dequeue(TransactionContext*, Message* const msg, const Queue& /*queue*/, const string * const xid)
+ {
+ dequeued.push_back(std::pair<Message*, const string*>(msg, xid));
+ }
+
+ TestMessageStore() : NullMessageStore() {}
+ ~TestMessageStore(){}
+ };
+
+ CPPUNIT_TEST_SUITE(TxAckTest);
+ CPPUNIT_TEST(testPrepare2pc);
+ CPPUNIT_TEST(testPrepare);
+ CPPUNIT_TEST(testCommit);
+ CPPUNIT_TEST_SUITE_END();
+
+
+ AccumulatedAck acked;
+ TestMessageStore store;
+ Queue::shared_ptr queue;
+ vector<Message::shared_ptr> messages;
+ list<DeliveryRecord> deliveries;
+ TxAck op;
+ std::string xid;
+
+
+public:
+
+ TxAckTest() : acked(0), queue(new Queue("my_queue", false, &store, 0)), op(acked, deliveries, &xid)
+ {
+ for(int i = 0; i < 10; i++){
+ Message::shared_ptr msg(
+ new BasicMessage(0, "exchange", "routing_key", false, false,
+ MockChannel::basicGetBody()));
+ msg->setHeader(AMQHeaderBody::shared_ptr(new AMQHeaderBody(BASIC)));
+ msg->getHeaderProperties()->setDeliveryMode(PERSISTENT);
+ messages.push_back(msg);
+ deliveries.push_back(DeliveryRecord(msg, queue, "xyz", (i+1)));
+ }
+
+ //assume msgs 1-5, 7 and 9 are all acked (i.e. 6, 8 & 10 are not)
+ acked.range = 5;
+ acked.individual.push_back(7);
+ acked.individual.push_back(9);
+ }
+
+ void testPrepare()
+ {
+ //ensure acked messages are discarded, i.e. dequeued from store
+ op.prepare(0);
+ CPPUNIT_ASSERT_EQUAL((size_t) 7, store.dequeued.size());
+ CPPUNIT_ASSERT_EQUAL((size_t) 10, deliveries.size());
+ int dequeued[] = {0, 1, 2, 3, 4, 6, 8};
+ for (int i = 0; i < 7; i++) {
+ CPPUNIT_ASSERT_EQUAL(messages[dequeued[i]].get(), store.dequeued[i].first);
+ }
+ }
+
+ void testPrepare2pc()
+ {
+ xid = "abcdefg";
+ testPrepare();
+ const string expected(xid);
+ for (int i = 0; i < 7; i++) {
+ CPPUNIT_ASSERT_EQUAL(expected, *store.dequeued[i].second);
+ }
+ }
+
+ void testCommit()
+ {
+ //emsure acked messages are removed from list
+ op.commit();
+ CPPUNIT_ASSERT_EQUAL((size_t) 3, deliveries.size());
+ list<DeliveryRecord>::iterator i = deliveries.begin();
+ CPPUNIT_ASSERT(i->matches(6));//msg 6
+ CPPUNIT_ASSERT((++i)->matches(8));//msg 8
+ CPPUNIT_ASSERT((++i)->matches(10));//msg 10
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(TxAckTest);
+
diff --git a/qpid/cpp/tests/TxBufferTest.cpp b/qpid/cpp/tests/TxBufferTest.cpp
new file mode 100644
index 0000000000..8a9b233eb9
--- /dev/null
+++ b/qpid/cpp/tests/TxBufferTest.cpp
@@ -0,0 +1,266 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <TxBuffer.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+#include <vector>
+
+using namespace qpid::broker;
+
+template <class T> void assertEqualVector(std::vector<T>& expected, std::vector<T>& actual){
+ unsigned int i = 0;
+ while(i < expected.size() && i < actual.size()){
+ CPPUNIT_ASSERT_EQUAL(expected[i], actual[i]);
+ i++;
+ }
+ CPPUNIT_ASSERT(i == expected.size());
+ CPPUNIT_ASSERT(i == actual.size());
+}
+
+class TxBufferTest : public CppUnit::TestCase
+{
+ class MockTxOp : public TxOp{
+ enum op_codes {PREPARE=2, COMMIT=4, ROLLBACK=8};
+ std::vector<int> expected;
+ std::vector<int> actual;
+ bool failOnPrepare;
+ public:
+ MockTxOp() : failOnPrepare(false) {}
+ MockTxOp(bool _failOnPrepare) : failOnPrepare(_failOnPrepare) {}
+
+ bool prepare(TransactionContext*) throw(){
+ actual.push_back(PREPARE);
+ return !failOnPrepare;
+ }
+ void commit() throw(){
+ actual.push_back(COMMIT);
+ }
+ void rollback() throw(){
+ actual.push_back(ROLLBACK);
+ }
+ MockTxOp& expectPrepare(){
+ expected.push_back(PREPARE);
+ return *this;
+ }
+ MockTxOp& expectCommit(){
+ expected.push_back(COMMIT);
+ return *this;
+ }
+ MockTxOp& expectRollback(){
+ expected.push_back(ROLLBACK);
+ return *this;
+ }
+ void check(){
+ assertEqualVector(expected, actual);
+ }
+ ~MockTxOp(){}
+ };
+
+ class MockTransactionalStore : public TransactionalStore{
+ enum op_codes {BEGIN=2, COMMIT=4, ABORT=8};
+ std::vector<int> expected;
+ std::vector<int> actual;
+
+ enum states {OPEN = 1, COMMITTED = 2, ABORTED = 3};
+ int state;
+
+ class TestTransactionContext : public TransactionContext{
+ MockTransactionalStore* store;
+ public:
+ TestTransactionContext(MockTransactionalStore* _store) : store(_store) {}
+ void commit(){
+ if(store->state != OPEN) throw "txn already completed";
+ store->state = COMMITTED;
+ }
+
+ void abort(){
+ if(store->state != OPEN) throw "txn already completed";
+ store->state = ABORTED;
+ }
+ ~TestTransactionContext(){}
+ };
+
+
+ public:
+ MockTransactionalStore() : state(OPEN){}
+
+ std::auto_ptr<TransactionContext> begin(){
+ actual.push_back(BEGIN);
+ std::auto_ptr<TransactionContext> txn(new TestTransactionContext(this));
+ return txn;
+ }
+ void commit(TransactionContext* ctxt){
+ actual.push_back(COMMIT);
+ TestTransactionContext* txn(dynamic_cast<TestTransactionContext*>(ctxt));
+ CPPUNIT_ASSERT(txn);
+ txn->commit();
+ }
+ void abort(TransactionContext* ctxt){
+ actual.push_back(ABORT);
+ TestTransactionContext* txn(dynamic_cast<TestTransactionContext*>(ctxt));
+ CPPUNIT_ASSERT(txn);
+ txn->abort();
+ }
+ MockTransactionalStore& expectBegin(){
+ expected.push_back(BEGIN);
+ return *this;
+ }
+ MockTransactionalStore& expectCommit(){
+ expected.push_back(COMMIT);
+ return *this;
+ }
+ MockTransactionalStore& expectAbort(){
+ expected.push_back(ABORT);
+ return *this;
+ }
+ void check(){
+ assertEqualVector(expected, actual);
+ }
+
+ bool isCommitted(){
+ return state == COMMITTED;
+ }
+
+ bool isAborted(){
+ return state == ABORTED;
+ }
+
+ bool isOpen() const{
+ return state == OPEN;
+ }
+ ~MockTransactionalStore(){}
+ };
+
+ CPPUNIT_TEST_SUITE(TxBufferTest);
+ CPPUNIT_TEST(testPrepareAndCommit);
+ CPPUNIT_TEST(testFailOnPrepare);
+ CPPUNIT_TEST(testRollback);
+ CPPUNIT_TEST(testBufferIsClearedAfterRollback);
+ CPPUNIT_TEST(testBufferIsClearedAfterCommit);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ void testPrepareAndCommit(){
+ MockTransactionalStore store;
+ store.expectBegin().expectCommit();
+
+ MockTxOp opA;
+ opA.expectPrepare().expectCommit();
+ MockTxOp opB;
+ opB.expectPrepare().expectPrepare().expectCommit().expectCommit();//opB enlisted twice to test reative order
+ MockTxOp opC;
+ opC.expectPrepare().expectCommit();
+
+ TxBuffer buffer;
+ buffer.enlist(&opA);
+ buffer.enlist(&opB);
+ buffer.enlist(&opB);//opB enlisted twice
+ buffer.enlist(&opC);
+
+ CPPUNIT_ASSERT(buffer.prepare(&store));
+ buffer.commit();
+ store.check();
+ CPPUNIT_ASSERT(store.isCommitted());
+ opA.check();
+ opB.check();
+ opC.check();
+ }
+
+ void testFailOnPrepare(){
+ MockTransactionalStore store;
+ store.expectBegin().expectAbort();
+
+ MockTxOp opA;
+ opA.expectPrepare();
+ MockTxOp opB(true);
+ opB.expectPrepare();
+ MockTxOp opC;//will never get prepare as b will fail
+
+ TxBuffer buffer;
+ buffer.enlist(&opA);
+ buffer.enlist(&opB);
+ buffer.enlist(&opC);
+
+ CPPUNIT_ASSERT(!buffer.prepare(&store));
+ store.check();
+ CPPUNIT_ASSERT(store.isAborted());
+ opA.check();
+ opB.check();
+ opC.check();
+ }
+
+ void testRollback(){
+ MockTxOp opA;
+ opA.expectRollback();
+ MockTxOp opB(true);
+ opB.expectRollback();
+ MockTxOp opC;
+ opC.expectRollback();
+
+ TxBuffer buffer;
+ buffer.enlist(&opA);
+ buffer.enlist(&opB);
+ buffer.enlist(&opC);
+
+ buffer.rollback();
+ opA.check();
+ opB.check();
+ opC.check();
+ }
+
+ void testBufferIsClearedAfterRollback(){
+ MockTxOp opA;
+ opA.expectRollback();
+ MockTxOp opB;
+ opB.expectRollback();
+
+ TxBuffer buffer;
+ buffer.enlist(&opA);
+ buffer.enlist(&opB);
+
+ buffer.rollback();
+ buffer.commit();//second call should not reach ops
+ opA.check();
+ opB.check();
+ }
+
+ void testBufferIsClearedAfterCommit(){
+ MockTxOp opA;
+ opA.expectCommit();
+ MockTxOp opB;
+ opB.expectCommit();
+
+ TxBuffer buffer;
+ buffer.enlist(&opA);
+ buffer.enlist(&opB);
+
+ buffer.commit();
+ buffer.rollback();//second call should not reach ops
+ opA.check();
+ opB.check();
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(TxBufferTest);
+
diff --git a/qpid/cpp/tests/TxPublishTest.cpp b/qpid/cpp/tests/TxPublishTest.cpp
new file mode 100644
index 0000000000..d9d5607c06
--- /dev/null
+++ b/qpid/cpp/tests/TxPublishTest.cpp
@@ -0,0 +1,125 @@
+/*
+ *
+ * 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.
+ *
+ */
+#include <NullMessageStore.h>
+#include <RecoveryManager.h>
+#include <TxPublish.h>
+#include <qpid_test_plugin.h>
+#include <iostream>
+#include <list>
+#include <vector>
+#include "MockChannel.h"
+
+using std::list;
+using std::pair;
+using std::vector;
+using namespace qpid::broker;
+using namespace qpid::framing;
+
+class TxPublishTest : public CppUnit::TestCase
+{
+ struct Triple
+ {
+ string first;
+ Message* second;
+ const string* third;
+ };
+
+ class TestMessageStore : public NullMessageStore
+ {
+ public:
+ vector<Triple> enqueued;
+
+ void enqueue(TransactionContext*, Message* const msg, const Queue& queue, const string * const xid)
+ {
+ Triple args = {queue.getName(), msg, xid};
+ enqueued.push_back(args);
+ }
+
+ //dont care about any of the other methods:
+ TestMessageStore() : NullMessageStore(false) {}
+ ~TestMessageStore(){}
+ };
+
+ CPPUNIT_TEST_SUITE(TxPublishTest);
+ CPPUNIT_TEST(testPrepare);
+ CPPUNIT_TEST(testPrepare2pc);
+ CPPUNIT_TEST(testCommit);
+ CPPUNIT_TEST_SUITE_END();
+
+
+ TestMessageStore store;
+ Queue::shared_ptr queue1;
+ Queue::shared_ptr queue2;
+ Message::shared_ptr const msg;
+ TxPublish op;
+ string xid;
+
+public:
+
+ TxPublishTest() :
+ queue1(new Queue("queue1", false, &store, 0)),
+ queue2(new Queue("queue2", false, &store, 0)),
+ msg(new BasicMessage(0, "exchange", "routing_key", false, false,
+ MockChannel::basicGetBody())),
+ op(msg, &xid)
+ {
+ msg->setHeader(AMQHeaderBody::shared_ptr(new AMQHeaderBody(BASIC)));
+ msg->getHeaderProperties()->setDeliveryMode(PERSISTENT);
+ op.deliverTo(queue1);
+ op.deliverTo(queue2);
+ }
+
+ void testPrepare()
+ {
+ //ensure messages are enqueued in store
+ op.prepare(0);
+ CPPUNIT_ASSERT_EQUAL((size_t) 2, store.enqueued.size());
+ CPPUNIT_ASSERT_EQUAL(string("queue1"), store.enqueued[0].first);
+ CPPUNIT_ASSERT_EQUAL(msg.get(), store.enqueued[0].second);
+ CPPUNIT_ASSERT_EQUAL(string("queue2"), store.enqueued[1].first);
+ CPPUNIT_ASSERT_EQUAL(msg.get(), store.enqueued[1].second);
+ }
+
+ void testPrepare2pc()
+ {
+ xid = "abcde";
+ const string expected(xid);
+ testPrepare();
+ CPPUNIT_ASSERT_EQUAL(expected, *store.enqueued[0].third);
+ CPPUNIT_ASSERT_EQUAL(expected, *store.enqueued[1].third);
+ }
+
+ void testCommit()
+ {
+ //ensure messages are delivered to queue
+ op.commit();
+ CPPUNIT_ASSERT_EQUAL((uint32_t) 1, queue1->getMessageCount());
+ CPPUNIT_ASSERT_EQUAL(msg, queue1->dequeue());
+
+ CPPUNIT_ASSERT_EQUAL((uint32_t) 1, queue2->getMessageCount());
+ CPPUNIT_ASSERT_EQUAL(msg, queue2->dequeue());
+ }
+};
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(TxPublishTest);
+
diff --git a/qpid/cpp/tests/ValueTest.cpp b/qpid/cpp/tests/ValueTest.cpp
new file mode 100644
index 0000000000..a3f9ec2541
--- /dev/null
+++ b/qpid/cpp/tests/ValueTest.cpp
@@ -0,0 +1,102 @@
+/*
+ * 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.
+ */
+#include <Value.h>
+#include <qpid_test_plugin.h>
+
+using namespace qpid::framing;
+
+
+class ValueTest : public CppUnit::TestCase
+{
+ CPPUNIT_TEST_SUITE(ValueTest);
+ CPPUNIT_TEST(testStringValueEquals);
+ CPPUNIT_TEST(testIntegerValueEquals);
+ CPPUNIT_TEST(testDecimalValueEquals);
+ CPPUNIT_TEST(testFieldTableValueEquals);
+ CPPUNIT_TEST_SUITE_END();
+
+ StringValue s;
+ IntegerValue i;
+ DecimalValue d;
+ FieldTableValue ft;
+ EmptyValue e;
+
+ public:
+ ValueTest() :
+ s("abc"),
+ i(42),
+ d(1234,2)
+
+ {
+ ft.getValue().setString("foo", "FOO");
+ ft.getValue().setInt("magic", 7);
+ }
+
+ void testStringValueEquals()
+ {
+
+ CPPUNIT_ASSERT(StringValue("abc") == s);
+ CPPUNIT_ASSERT(s != StringValue("foo"));
+ CPPUNIT_ASSERT(s != e);
+ CPPUNIT_ASSERT(e != d);
+ CPPUNIT_ASSERT(e != ft);
+ }
+
+ void testIntegerValueEquals()
+ {
+ CPPUNIT_ASSERT(IntegerValue(42) == i);
+ CPPUNIT_ASSERT(IntegerValue(5) != i);
+ CPPUNIT_ASSERT(i != e);
+ CPPUNIT_ASSERT(i != d);
+ }
+
+ void testDecimalValueEquals()
+ {
+ CPPUNIT_ASSERT(DecimalValue(1234, 2) == d);
+ CPPUNIT_ASSERT(DecimalValue(12345, 2) != d);
+ CPPUNIT_ASSERT(DecimalValue(1234, 3) != d);
+ CPPUNIT_ASSERT(d != s);
+ }
+
+
+ void testFieldTableValueEquals()
+ {
+ CPPUNIT_ASSERT_EQUAL(std::string("FOO"),
+ ft.getValue().getString("foo"));
+ CPPUNIT_ASSERT_EQUAL(7, ft.getValue().getInt("magic"));
+
+ FieldTableValue f2;
+ CPPUNIT_ASSERT(ft != f2);
+ f2.getValue().setString("foo", "FOO");
+ CPPUNIT_ASSERT(ft != f2);
+ f2.getValue().setInt("magic", 7);
+ CPPUNIT_ASSERT_EQUAL(ft,f2);
+ CPPUNIT_ASSERT(ft == f2);
+ f2.getValue().setString("foo", "BAR");
+ CPPUNIT_ASSERT(ft != f2);
+ CPPUNIT_ASSERT(ft != i);
+ }
+
+};
+
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(ValueTest);
+
diff --git a/qpid/cpp/tests/client_test.cpp b/qpid/cpp/tests/client_test.cpp
new file mode 100644
index 0000000000..413523a6a7
--- /dev/null
+++ b/qpid/cpp/tests/client_test.cpp
@@ -0,0 +1,138 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+/**
+ * This file provides a simple test (and example) of basic
+ * functionality including declaring an exchange and a queue, binding
+ * these together, publishing a message and receiving that message
+ * asynchronously.
+ */
+
+#include <iostream>
+
+#include <QpidError.h>
+#include <ClientChannel.h>
+#include <Connection.h>
+#include <ClientMessage.h>
+#include <MessageListener.h>
+#include <sys/Monitor.h>
+#include <FieldTable.h>
+
+using namespace qpid::client;
+using namespace qpid::sys;
+using std::string;
+
+bool verbose = false;
+
+/**
+ * A simple message listener implementation that prints out the
+ * message content then notifies a montitor allowing the test to
+ * complete.
+ */
+class SimpleListener : public virtual MessageListener{
+ Monitor* monitor;
+
+public:
+ inline SimpleListener(Monitor* _monitor) : monitor(_monitor){}
+
+ inline virtual void received(Message& msg){
+ if (verbose)
+ std::cout << "Received message " << msg.getData() << std::endl;
+ monitor->notify();
+ }
+};
+
+int main(int argc, char**)
+{
+ verbose = argc > 1;
+ try {
+ //Use a custom exchange
+ Exchange exchange("MyExchange", Exchange::TOPIC_EXCHANGE);
+ //Use a named, temporary queue
+ Queue queue("MyQueue", true);
+
+
+ Connection con(verbose);
+ string host("localhost");
+ con.open(host, 5672, "guest", "guest", "/test");
+ if (verbose)
+ std::cout << "Opened connection." << std::endl;
+
+ //Create and open a channel on the connection through which
+ //most functionality is exposed
+ Channel channel;
+ con.openChannel(channel);
+ if (verbose) std::cout << "Opened channel." << std::endl;
+
+ //'declare' the exchange and the queue, which will create them
+ //as they don't exist
+ channel.declareExchange(exchange);
+ if (verbose) std::cout << "Declared exchange." << std::endl;
+ channel.declareQueue(queue);
+ if (verbose) std::cout << "Declared queue." << std::endl;
+
+ //now bind the queue to the exchange
+ qpid::framing::FieldTable args;
+ channel.bind(exchange, queue, "MyTopic", args);
+ if (verbose) std::cout << "Bound queue to exchange." << std::endl;
+
+ //Set up a message listener to receive any messages that
+ //arrive in our queue on the broker. We only expect one, and
+ //as it will be received on another thread, we create a
+ //montior to use to notify the main thread when that message
+ //is received.
+ Monitor monitor;
+ SimpleListener listener(&monitor);
+ string tag("MyTag");
+ channel.getBasic().consume(queue, tag, &listener);
+ if (verbose) std::cout << "Registered consumer." << std::endl;
+
+ //we need to enable the message dispatching for this channel
+ //and we want that to occur on another thread so we call
+ //start().
+ channel.start();
+
+ //Now we create and publish a message to our exchange with a
+ //routing key that will cause it to be routed to our queue
+ Message msg;
+ string data("MyMessage");
+ msg.setData(data);
+ channel.getBasic().publish(msg, exchange, "MyTopic");
+ if (verbose) std::cout << "Published message: " << data << std::endl;
+
+ {
+ Monitor::ScopedLock l(monitor);
+ //now we wait until we receive notification that the
+ //message was received
+ monitor.wait();
+ }
+
+ //close the channel & connection
+ channel.close();
+ if (verbose) std::cout << "Closed channel." << std::endl;
+ con.close();
+ if (verbose) std::cout << "Closed connection." << std::endl;
+ return 0;
+ } catch(const std::exception& e) {
+ std::cout << e.what() << std::endl;
+ }
+ return 1;
+}
diff --git a/qpid/cpp/tests/echo_service.cpp b/qpid/cpp/tests/echo_service.cpp
new file mode 100644
index 0000000000..412ffbeb58
--- /dev/null
+++ b/qpid/cpp/tests/echo_service.cpp
@@ -0,0 +1,230 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+/**
+ * This class provides an example of using AMQP for a request-response
+ * style system. 'Requests' are messages sent to a well known
+ * destination. A 'service' process consumes these message and
+ * responds by echoing the message back to the sender on a
+ * sender-specified private queue.
+ */
+
+#include <QpidError.h>
+#include <ClientChannel.h>
+#include <Connection.h>
+#include <ClientExchange.h>
+#include <MessageListener.h>
+#include <ClientQueue.h>
+#include <sys/Time.h>
+#include <iostream>
+#include <sstream>
+
+using namespace qpid::client;
+using namespace qpid::sys;
+using std::string;
+
+
+/**
+ * A message listener implementation representing the 'service', this
+ * will 'echo' any requests received.
+ */
+class EchoServer : public MessageListener{
+ Channel* const channel;
+public:
+ EchoServer(Channel* channel);
+ virtual void received(Message& msg);
+};
+
+/**
+ * A message listener implementation that merely prints received
+ * messages to the console. Used to report on 'echo' responses.
+ */
+class LoggingListener : public MessageListener{
+public:
+ virtual void received(Message& msg);
+};
+
+/**
+ * A utility class that manages the command line options needed to run
+ * the example confirgurably.
+ */
+class Args{
+ string host;
+ int port;
+ bool trace;
+ bool help;
+ bool client;
+public:
+ inline Args() : host("localhost"), port(5672), trace(false), help(false), client(false){}
+ void parse(int argc, char** argv);
+ void usage();
+
+ inline const string& getHost() const { return host;}
+ inline int getPort() const { return port; }
+ inline bool getTrace() const { return trace; }
+ inline bool getHelp() const { return help; }
+ inline bool getClient() const { return client; }
+};
+
+/**
+ * The main test path. There are two basic modes: 'client' and
+ * 'service'. First one or more services are started, then one or more
+ * clients are started and messages can be sent.
+ */
+int main(int argc, char** argv){
+ const std::string echo_service("echo_service");
+ Args args;
+ args.parse(argc, argv);
+ if (args.getHelp()) {
+ args.usage();
+ } else if (args.getClient()) {
+ //we have been started in 'client' mode, i.e. we will send an
+ //echo requests and print responses received.
+ try {
+ //Create connection & open a channel
+ Connection connection(args.getTrace());
+ connection.open(args.getHost(), args.getPort());
+ Channel channel;
+ connection.openChannel(channel);
+
+ //Setup: declare the private 'response' queue and bind it
+ //to the direct exchange by its name which will be
+ //generated by the server
+ Queue response;
+ channel.declareQueue(response);
+ qpid::framing::FieldTable emptyArgs;
+ channel.bind(Exchange::STANDARD_DIRECT_EXCHANGE, response, response.getName(), emptyArgs);
+
+ //Consume from the response queue, logging all echoed message to console:
+ LoggingListener listener;
+ std::string tag;
+ channel.getBasic().consume(response, tag, &listener);
+
+ //Process incoming requests on a new thread
+ channel.start();
+
+ //get messages from console and send them:
+ std::string text;
+ std::cout << "Enter text to send:" << std::endl;
+ while (std::getline(std::cin, text)) {
+ std::cout << "Sending " << text << " to echo server." << std::endl;
+ Message msg;
+ msg.getHeaders().setString("RESPONSE_QUEUE", response.getName());
+ msg.setData(text);
+ channel.getBasic().publish(msg, Exchange::STANDARD_DIRECT_EXCHANGE, echo_service);
+
+ std::cout << "Enter text to send:" << std::endl;
+ }
+
+ connection.close();
+ } catch(qpid::QpidError error) {
+ std::cout << error.what() << std::endl;
+ }
+ } else {
+ // we are in 'service' mode, i.e. we will consume messages
+ // from the request queue and echo each request back to the
+ // senders own private response queue.
+ try {
+ //Create connection & open a channel
+ Connection connection(args.getTrace());
+ connection.open(args.getHost(), args.getPort());
+ Channel channel;
+ connection.openChannel(channel);
+
+ //Setup: declare the 'request' queue and bind it to the direct exchange with a 'well known' name
+ Queue request("request");
+ channel.declareQueue(request);
+ qpid::framing::FieldTable emptyArgs;
+ channel.bind(Exchange::STANDARD_DIRECT_EXCHANGE, request, echo_service, emptyArgs);
+
+ //Consume from the request queue, echoing back all messages received to the client that sent them
+ EchoServer server(&channel);
+ std::string tag = "server_tag";
+ channel.getBasic().consume(request, tag, &server);
+
+ //Process incoming requests on the main thread
+ channel.getBasic().run();
+
+ connection.close();
+ } catch(qpid::QpidError error) {
+ std::cout << error.what() << std::endl;
+ }
+ }
+}
+
+EchoServer::EchoServer(Channel* _channel) : channel(_channel){}
+
+void EchoServer::received(Message& message)
+{
+ //get name of response queues binding to the default direct exchange:
+ const std::string name = message.getHeaders().getString("RESPONSE_QUEUE");
+
+ if (name.empty()) {
+ std::cout << "Cannot echo " << message.getData() << ", no response queue specified." << std::endl;
+ } else {
+ //print message to console:
+ std::cout << "Echoing " << message.getData() << " back to " << name << std::endl;
+
+ //'echo' the message back:
+ channel->getBasic().publish(message, Exchange::STANDARD_DIRECT_EXCHANGE, name);
+ }
+}
+
+void LoggingListener::received(Message& message)
+{
+ //print message to console:
+ std::cout << "Received echo: " << message.getData() << std::endl;
+}
+
+
+void Args::parse(int argc, char** argv){
+ for(int i = 1; i < argc; i++){
+ string name(argv[i]);
+ if("-help" == name){
+ help = true;
+ break;
+ }else if("-host" == name){
+ host = argv[++i];
+ }else if("-port" == name){
+ port = atoi(argv[++i]);
+ }else if("-trace" == name){
+ trace = true;
+ }else if("-client" == name){
+ client = true;
+ }else{
+ std::cout << "Warning: unrecognised option " << name << std::endl;
+ }
+ }
+}
+
+void Args::usage(){
+ std::cout << "Options:" << std::endl;
+ std::cout << " -help" << std::endl;
+ std::cout << " Prints this usage message" << std::endl;
+ std::cout << " -host <host>" << std::endl;
+ std::cout << " Specifies host to connect to (default is localhost)" << std::endl;
+ std::cout << " -port <port>" << std::endl;
+ std::cout << " Specifies port to conect to (default is 5762)" << std::endl;
+ std::cout << " -trace" << std::endl;
+ std::cout << " Indicates that the frames sent and received should be logged" << std::endl;
+ std::cout << " -client" << std::endl;
+ std::cout << " Run as a client (else will run as a server)" << std::endl;
+}
diff --git a/qpid/cpp/tests/examples.Makefile b/qpid/cpp/tests/examples.Makefile
new file mode 100644
index 0000000000..45999f7852
--- /dev/null
+++ b/qpid/cpp/tests/examples.Makefile
@@ -0,0 +1,66 @@
+#
+# XXX: Edit these locations to suit.
+#
+BOOST_LOCATION := $(HOME)/local/boost-1.33.1
+APR_LOCATION := $(HOME)/local/apr-1.2.7
+
+CXXFLAGS := -DNDEBUG -DUSE_APR -MMD -fpic
+
+#
+# Configure Boost.
+#
+BOOST_CFLAGS := -I$(BOOST_LOCATION)/include/boost-1_33_1
+CXXFLAGS := $(CXXFLAGS) $(BOOST_CFLAGS)
+
+#
+# Configure APR.
+#
+APR_CFLAGS := -I$(APR_LOCATION)/include/apr-1
+APR_LDFLAGS := $(shell $(APR_LOCATION)/bin/apr-1-config --libs) -L$(APR_LOCATION)/lib -lapr-1
+CXXFLAGS := $(CXXFLAGS) $(APR_CFLAGS)
+LDFLAGS := $(LDFLAGS) $(APR_LDFLAGS)
+
+#
+# Configure Qpid cpp client.
+#
+QPID_CLIENT_LDFLAGS := ../lib/libcommon.so ../lib/libclient.so
+includeDir := ../include
+QPID_CLIENT_CFLAGS := \
+ -I$(includeDir)/gen \
+ -I$(includeDir)/client \
+ -I$(includeDir)/broker \
+ -I$(includeDir)/common \
+ -I$(includeDir)/common/sys \
+ -I$(includeDir)/common/framing
+
+CXXFLAGS := $(CXXFLAGS) $(QPID_CLIENT_CFLAGS)
+LDFLAGS := $(LDFLAGS) $(QPID_CLIENT_LDFLAGS)
+
+CXX := g++
+
+#
+# Add rule to build examples.
+#
+.SUFFIX: .cpp
+%: %.cpp
+ $(CXX) $(CXXFLAGS) $(LDFLAGS) $< -o $@
+
+#
+# Define targets.
+#
+
+EXAMPLES := client_test topic_listener topic_publisher echo_service
+
+cppFiles := $(wildcard *.cpp)
+programs = $(foreach cppFile, $(cppFiles), $(subst .cpp, ,$(cppFile)))
+
+.PHONY:
+all: $(programs)
+
+debug:
+ @echo cppFiles = $(cppFiles)
+ @echo programs = $(programs)
+
+.PHONY:
+clean:
+ -rm $(EXAMPLES)
diff --git a/qpid/cpp/tests/examples.README b/qpid/cpp/tests/examples.README
new file mode 100644
index 0000000000..65f908c249
--- /dev/null
+++ b/qpid/cpp/tests/examples.README
@@ -0,0 +1,18 @@
+Building the examples
+---------------------
+
+You had better edit the Makefile and provide the locations for APR and boost.
+
+Then just type 'make'.
+
+
+Running the examples
+--------------------
+
+Before running the examples ensure that you have setup your LD_LIBRARY_PATH.
+
+Most of the examples take the following connection parameters for your
+AMQP broker:
+
+ -host host
+ -port port
diff --git a/qpid/cpp/tests/kill_broker b/qpid/cpp/tests/kill_broker
new file mode 100755
index 0000000000..b71ca22ffd
--- /dev/null
+++ b/qpid/cpp/tests/kill_broker
@@ -0,0 +1,3 @@
+#!/bin/sh
+PID=qpidd.pid
+if [ -f $PID ] ; then kill -9 `cat $PID` ; rm -f $PID ; fi
diff --git a/qpid/cpp/tests/python_tests b/qpid/cpp/tests/python_tests
new file mode 100755
index 0000000000..4ee177ce6a
--- /dev/null
+++ b/qpid/cpp/tests/python_tests
@@ -0,0 +1,8 @@
+#!/bin/sh
+# Run the python tests.
+if test -d ../../python ; then
+ cd ../../python && ./run-tests -v -s "0-9" -I cpp_failing_0-9.txt
+else
+ echo Warning: python tests not found.
+fi
+
diff --git a/qpid/cpp/tests/qpid_test_plugin.h b/qpid/cpp/tests/qpid_test_plugin.h
new file mode 100644
index 0000000000..b2f4a8ffed
--- /dev/null
+++ b/qpid/cpp/tests/qpid_test_plugin.h
@@ -0,0 +1,43 @@
+#ifndef _qpid_test_plugin_
+#define _qpid_test_plugin_
+
+/*
+ *
+ * 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.
+ *
+ */
+
+/**
+ * Convenience to include cppunit headers needed by qpid test plugins and
+ * workaround for warning from superfluous main() declaration
+ * in cppunit/TestPlugIn.h
+ */
+
+#include <cppunit/TestCase.h>
+#include <cppunit/TextTestRunner.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+
+// Redefine CPPUNIT_PLUGIN_IMPLEMENT_MAIN to a dummy typedef to avoid warnings.
+//
+#if defined(CPPUNIT_HAVE_UNIX_DLL_LOADER) || defined(CPPUNIT_HAVE_UNIX_SHL_LOADER)
+#undef CPPUNIT_PLUGIN_IMPLEMENT_MAIN
+#define CPPUNIT_PLUGIN_IMPLEMENT_MAIN() typedef char __CppUnitPlugInImplementMainDummyTypeDef
+#endif
+
+#endif /*!_qpid_test_plugin_*/
diff --git a/qpid/cpp/tests/quick_topictest b/qpid/cpp/tests/quick_topictest
new file mode 100755
index 0000000000..9df5b5c84c
--- /dev/null
+++ b/qpid/cpp/tests/quick_topictest
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Quick and quiet topic test for make check.
+./topictest -s2 -m2 -b1 > topictest.log 2>&1 || {
+ echo See topictest.log.
+ exit 1
+}
+rm topictest.log
diff --git a/qpid/cpp/tests/run-python-tests b/qpid/cpp/tests/run-python-tests
new file mode 100755
index 0000000000..e69de29bb2
--- /dev/null
+++ b/qpid/cpp/tests/run-python-tests
diff --git a/qpid/cpp/tests/run-unit-tests b/qpid/cpp/tests/run-unit-tests
new file mode 100755
index 0000000000..0ab01f05c5
--- /dev/null
+++ b/qpid/cpp/tests/run-unit-tests
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+. $srcdir/setup
+
+fail=0
+$vg DllPlugInTester -c -b $pwd/.libs/*.so 2> out || fail=1
+vg_check out || fail=1
+
+exit $fail
diff --git a/qpid/cpp/tests/setup b/qpid/cpp/tests/setup
new file mode 100644
index 0000000000..9dde4758b1
--- /dev/null
+++ b/qpid/cpp/tests/setup
@@ -0,0 +1,74 @@
+# -*- sh -*-
+
+test "$VERBOSE" = yes && set -x
+
+pwd=`pwd`
+t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$
+pid=0
+test -z "$TEST_DEBUG" &&
+trap 's=$?;test $pid = 0||kill -2 $pid;cd "$pwd" && rm -rf $t0 && exit $s' 0
+test -z "$TEST_DEBUG" && trap '(exit $?); exit $?' 1 2 13 15
+
+framework_failure=0
+mkdir -p $tmp || framework_failure=1
+cd $tmp || framework_failure=1
+
+gen_supp=--gen-suppressions=all
+# This option makes valgrind significantly slower.
+full_leak_check=--leak-check=full
+
+vg_options="
+ --suppressions=$abs_srcdir/.vg-supp
+ --num-callers=25
+ --demangle=no
+ --track-fds=yes
+ $full_leak_check
+ $gen_supp
+ "
+# configure tests for the existence of valgrind.
+# If it's not available, then make $vg and vg_check no-ops.
+if test x$VALGRIND = x; then
+ vg=
+else
+ vg="libtool --mode=execute valgrind `echo $vg_options` --"
+fi
+
+vg_leak_check()
+{
+ local file=$1
+ local fail
+ # If we detect a leak, dump all output to stderr.
+ grep -E '^==[0-9]+== +definitely lost: [^0]' $file \
+ && { fail=1; cat $file 1>&2;
+ echo "found memory leaks (see log file, $file); see above" 1>&2; }
+ test "$fail" = ''
+}
+
+
+# Ensure 1) that there is an ERROR SUMMARY line, and
+# 2) that the number of errors is 0.
+# An offending line looks like this:
+# ==29302== ERROR SUMMARY: 4 errors from 2 contexts (suppressed: 16 from 5)
+vg_error_check()
+{
+ local file=$1
+ local fail
+ # If we detect a leak, dump all output to stderr.
+ grep -E '^==[0-9]+== ERROR SUMMARY:' $file > /dev/null \
+ || { fail=1; cat $file 1>&2;
+ echo "no valgrind ERROR SUMMARY line in $file" 1>&2; }
+ if test "$fail" = ''; then
+ grep -E '^==[0-9]+== ERROR SUMMARY: [^0] ' $file \
+ && { fail=1; cat $file 1>&2;
+ echo "valgrind reported errors in $file; see above" 1>&2; }
+ fi
+ test "$fail" = ''
+}
+
+vg_check()
+{
+ local file=$1
+ if test x$VALGRIND != x; then
+ vg_error_check $file && vg_leak_check $file
+ fi
+}
diff --git a/qpid/cpp/tests/start_broker b/qpid/cpp/tests/start_broker
new file mode 100755
index 0000000000..fe30458463
--- /dev/null
+++ b/qpid/cpp/tests/start_broker
@@ -0,0 +1,14 @@
+#!/bin/sh
+set -e
+
+LOG=`pwd`/qpidd.log
+PID=`pwd`/qpidd.pid
+
+rm -rf $LOG $PID
+
+# Start the daemon, recording its PID.
+../src/qpidd > $LOG 2>&1 & echo $! > $PID
+
+# FIXME aconway 2007-01-18: qpidd should not return till it is accepting
+# connections, remove arbitrary sleep.
+sleep 5
diff --git a/qpid/cpp/tests/topic_listener.cpp b/qpid/cpp/tests/topic_listener.cpp
new file mode 100644
index 0000000000..5f5500f7b9
--- /dev/null
+++ b/qpid/cpp/tests/topic_listener.cpp
@@ -0,0 +1,217 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+/**
+ * This file provides one half of a test and example of a pub-sub
+ * style of interaction. See topic_publisher.cpp for the other half,
+ * in which the logic for publishing is defined.
+ *
+ * This file contains the listener logic. A listener will subscribe to
+ * a logical 'topic'. It will count the number of messages it receives
+ * and the time elapsed between the first one and the last one. It
+ * recognises two types of 'special' message that tell it to (a) send
+ * a report containing this information, (b) shutdown (i.e. stop
+ * listening).
+ */
+
+#include <QpidError.h>
+#include <ClientChannel.h>
+#include <Connection.h>
+#include <ClientExchange.h>
+#include <MessageListener.h>
+#include <ClientQueue.h>
+#include <sys/Time.h>
+#include <iostream>
+#include <sstream>
+
+using namespace qpid::client;
+using namespace qpid::sys;
+using namespace std;
+
+/**
+ * A message listener implementation in which the runtime logic is
+ * defined.
+ */
+class Listener : public MessageListener{
+ Channel* const channel;
+ const string responseQueue;
+ const bool transactional;
+ bool init;
+ int count;
+ Time start;
+
+ void shutdown();
+ void report();
+public:
+ Listener(Channel* channel, const string& reponseQueue, bool tx);
+ virtual void received(Message& msg);
+};
+
+/**
+ * A utility class for managing the options passed in.
+ */
+class Args{
+ string host;
+ int port;
+ AckMode ackMode;
+ bool transactional;
+ int prefetch;
+ bool trace;
+ bool help;
+public:
+ inline Args() : host("localhost"), port(5672), ackMode(NO_ACK), transactional(false), prefetch(1000), trace(false), help(false){}
+ void parse(int argc, char** argv);
+ void usage();
+
+ const string& getHost() const { return host;}
+ int getPort() const { return port; }
+ AckMode getAckMode(){ return ackMode; }
+ bool getTransactional() const { return transactional; }
+ int getPrefetch(){ return prefetch; }
+ bool getTrace() const { return trace; }
+ bool getHelp() const { return help; }
+};
+
+/**
+ * The main routine creates a Listener instance and sets it up to
+ * consume from a private queue bound to the exchange with the
+ * appropriate topic name.
+ */
+int main(int argc, char** argv){
+ Args args;
+ args.parse(argc, argv);
+ if(args.getHelp()){
+ args.usage();
+ }else{
+ try{
+ cout << "topic_listener: Started." << endl;
+ Connection connection(args.getTrace());
+ connection.open(args.getHost(), args.getPort(), "guest", "guest", "/test");
+ Channel channel(args.getTransactional(), args.getPrefetch());
+ connection.openChannel(channel);
+
+ //declare exchange, queue and bind them:
+ Queue response("response");
+ channel.declareQueue(response);
+
+ Queue control;
+ channel.declareQueue(control);
+ qpid::framing::FieldTable bindArgs;
+ channel.bind(Exchange::STANDARD_TOPIC_EXCHANGE, control, "topic_control", bindArgs);
+ //set up listener
+ Listener listener(&channel, response.getName(), args.getTransactional());
+ string tag;
+ channel.getBasic().consume(control, tag, &listener, args.getAckMode());
+ cout << "topic_listener: Consuming." << endl;
+ channel.getBasic().run();
+ connection.close();
+ cout << "topic_listener: normal exit" << endl;
+ return 0;
+ }catch(qpid::QpidError error){
+ cout << "topic_listener: " << error.what() << endl;
+ }
+ }
+ return 1;
+}
+
+Listener::Listener(Channel* _channel, const string& _responseq, bool tx) :
+ channel(_channel), responseQueue(_responseq), transactional(tx), init(false), count(0){}
+
+void Listener::received(Message& message){
+ if(!init){
+ start = now();
+ count = 0;
+ init = true;
+ }
+ string type(message.getHeaders().getString("TYPE"));
+
+ if(type == "TERMINATION_REQUEST"){
+ shutdown();
+ }else if(type == "REPORT_REQUEST"){
+ //send a report:
+ report();
+ init = false;
+ }else if (++count % 100 == 0){
+ cout <<"Received " << count << " messages." << endl;
+ }
+}
+
+void Listener::shutdown(){
+ channel->close();
+}
+
+void Listener::report(){
+ Time finish = now();
+ Time time = finish - start;
+ stringstream reportstr;
+ reportstr << "Received " << count << " messages in "
+ << time/TIME_MSEC << " ms.";
+ Message msg(reportstr.str());
+ msg.getHeaders().setString("TYPE", "REPORT");
+ channel->getBasic().publish(msg, string(), responseQueue);
+ if(transactional){
+ channel->commit();
+ }
+}
+
+
+void Args::parse(int argc, char** argv){
+ for(int i = 1; i < argc; i++){
+ string name(argv[i]);
+ if("-help" == name){
+ help = true;
+ break;
+ }else if("-host" == name){
+ host = argv[++i];
+ }else if("-port" == name){
+ port = atoi(argv[++i]);
+ }else if("-ack_mode" == name){
+ ackMode = AckMode(atoi(argv[++i]));
+ }else if("-transactional" == name){
+ transactional = true;
+ }else if("-prefetch" == name){
+ prefetch = atoi(argv[++i]);
+ }else if("-trace" == name){
+ trace = true;
+ }else{
+ cout << "Warning: unrecognised option " << name << endl;
+ }
+ }
+}
+
+void Args::usage(){
+ cout << "Options:" << endl;
+ cout << " -help" << endl;
+ cout << " Prints this usage message" << endl;
+ cout << " -host <host>" << endl;
+ cout << " Specifies host to connect to (default is localhost)" << endl;
+ cout << " -port <port>" << endl;
+ cout << " Specifies port to conect to (default is 5762)" << endl;
+ cout << " -ack_mode <mode>" << endl;
+ cout << " Sets the acknowledgement mode" << endl;
+ cout << " 0=NO_ACK (default), 1=AUTO_ACK, 2=LAZY_ACK" << endl;
+ cout << " -transactional" << endl;
+ cout << " Indicates the client should use transactions" << endl;
+ cout << " -prefetch <count>" << endl;
+ cout << " Specifies the prefetch count (default is 1000)" << endl;
+ cout << " -trace" << endl;
+ cout << " Indicates that the frames sent and received should be logged" << endl;
+}
diff --git a/qpid/cpp/tests/topic_publisher.cpp b/qpid/cpp/tests/topic_publisher.cpp
new file mode 100644
index 0000000000..0e6c63ab35
--- /dev/null
+++ b/qpid/cpp/tests/topic_publisher.cpp
@@ -0,0 +1,286 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+/**
+ * This file provides one half of a test and example of a pub-sub
+ * style of interaction. See topic_listener.cpp for the other half, in
+ * which the logic for subscribers is defined.
+ *
+ * This file contains the publisher logic. The publisher will send a
+ * number of messages to the exchange with the appropriate routing key
+ * for the logical 'topic'. Once it has done this it will then send a
+ * request that each subscriber report back with the number of message
+ * it has received and the time that elapsed between receiving the
+ * first one and receiving the report request. Once the expected
+ * number of reports are received, it sends out a request that each
+ * subscriber shutdown.
+ */
+
+#include <QpidError.h>
+#include <ClientChannel.h>
+#include <Connection.h>
+#include <ClientExchange.h>
+#include <MessageListener.h>
+#include <ClientQueue.h>
+#include <sys/Monitor.h>
+#include "unistd.h"
+#include <sys/Time.h>
+#include <cstdlib>
+#include <iostream>
+
+using namespace qpid::client;
+using namespace qpid::sys;
+using std::string;
+
+/**
+ * The publishing logic is defined in this class. It implements
+ * message listener and can therfore be used to receive messages sent
+ * back by the subscribers.
+ */
+class Publisher : public MessageListener{
+ Channel* const channel;
+ const std::string controlTopic;
+ const bool transactional;
+ Monitor monitor;
+ int count;
+
+ void waitForCompletion(int msgs);
+ string generateData(int size);
+
+public:
+ Publisher(Channel* channel, const std::string& controlTopic, bool tx);
+ virtual void received(Message& msg);
+ int64_t publish(int msgs, int listeners, int size);
+ void terminate();
+};
+
+/**
+ * A utility class for managing the options passed in to the test
+ */
+class Args{
+ string host;
+ int port;
+ int messages;
+ int subscribers;
+ AckMode ackMode;
+ bool transactional;
+ int prefetch;
+ int batches;
+ int delay;
+ int size;
+ bool trace;
+ bool help;
+public:
+ inline Args() : host("localhost"), port(5672), messages(1000), subscribers(1),
+ ackMode(NO_ACK), transactional(false), prefetch(1000), batches(1),
+ delay(0), size(256), trace(false), help(false){}
+
+ void parse(int argc, char** argv);
+ void usage();
+
+ const string& getHost() const { return host;}
+ int getPort() const { return port; }
+ int getMessages() const { return messages; }
+ int getSubscribers() const { return subscribers; }
+ AckMode getAckMode(){ return ackMode; }
+ bool getTransactional() const { return transactional; }
+ int getPrefetch(){ return prefetch; }
+ int getBatches(){ return batches; }
+ int getDelay(){ return delay; }
+ int getSize(){ return size; }
+ bool getTrace() const { return trace; }
+ bool getHelp() const { return help; }
+};
+
+int main(int argc, char** argv) {
+ Args args;
+ args.parse(argc, argv);
+ if(args.getHelp()){
+ args.usage();
+ } else {
+ try{
+ Connection connection(args.getTrace());
+ connection.open(args.getHost(), args.getPort(), "guest", "guest", "/test");
+ Channel channel(args.getTransactional(), args.getPrefetch());
+ connection.openChannel(channel);
+
+ //declare queue (relying on default binding):
+ Queue response("response");
+ channel.declareQueue(response);
+
+ //set up listener
+ Publisher publisher(&channel, "topic_control", args.getTransactional());
+ std::string tag("mytag");
+ channel.getBasic().consume(response, tag, &publisher, args.getAckMode());
+ channel.start();
+
+ int batchSize(args.getBatches());
+ int64_t max(0);
+ int64_t min(0);
+ int64_t sum(0);
+ for(int i = 0; i < batchSize; i++){
+ if(i > 0 && args.getDelay()) sleep(args.getDelay());
+ int64_t msecs =
+ publisher.publish(args.getMessages(),
+ args.getSubscribers(),
+ args.getSize()) / TIME_MSEC;
+ if(!max || msecs > max) max = msecs;
+ if(!min || msecs < min) min = msecs;
+ sum += msecs;
+ std::cout << "Completed " << (i+1) << " of " << batchSize
+ << " in " << msecs << "ms" << std::endl;
+ }
+ publisher.terminate();
+ int64_t avg = sum / batchSize;
+ if(batchSize > 1){
+ std::cout << batchSize << " batches completed. avg=" << avg <<
+ ", max=" << max << ", min=" << min << std::endl;
+ }
+ channel.close();
+ connection.close();
+ return 0;
+ }catch(qpid::QpidError error) {
+ std::cout << error.what() << std::endl;
+ }
+ }
+ return 1;
+}
+
+Publisher::Publisher(Channel* _channel, const std::string& _controlTopic, bool tx) :
+ channel(_channel), controlTopic(_controlTopic), transactional(tx){}
+
+void Publisher::received(Message& ){
+ //count responses and when all are received end the current batch
+ Monitor::ScopedLock l(monitor);
+ if(--count == 0){
+ monitor.notify();
+ }
+}
+
+void Publisher::waitForCompletion(int msgs){
+ count = msgs;
+ monitor.wait();
+}
+
+int64_t Publisher::publish(int msgs, int listeners, int size){
+ Message msg;
+ msg.setData(generateData(size));
+ Time start = now();
+ {
+ Monitor::ScopedLock l(monitor);
+ for(int i = 0; i < msgs; i++){
+ channel->getBasic().publish(msg, Exchange::STANDARD_TOPIC_EXCHANGE, controlTopic);
+ }
+ //send report request
+ Message reportRequest;
+ reportRequest.getHeaders().setString("TYPE", "REPORT_REQUEST");
+ channel->getBasic().publish(reportRequest, Exchange::STANDARD_TOPIC_EXCHANGE, controlTopic);
+ if(transactional){
+ channel->commit();
+ }
+
+ waitForCompletion(listeners);
+ }
+
+ Time finish = now();
+ return finish - start;
+}
+
+string Publisher::generateData(int size){
+ string data;
+ for(int i = 0; i < size; i++){
+ data += ('A' + (i / 26));
+ }
+ return data;
+}
+
+void Publisher::terminate(){
+ //send termination request
+ Message terminationRequest;
+ terminationRequest.getHeaders().setString("TYPE", "TERMINATION_REQUEST");
+ channel->getBasic().publish(terminationRequest, Exchange::STANDARD_TOPIC_EXCHANGE, controlTopic);
+ if(transactional){
+ channel->commit();
+ }
+}
+
+void Args::parse(int argc, char** argv){
+ for(int i = 1; i < argc; i++){
+ string name(argv[i]);
+ if("-help" == name){
+ help = true;
+ break;
+ }else if("-host" == name){
+ host = argv[++i];
+ }else if("-port" == name){
+ port = atoi(argv[++i]);
+ }else if("-messages" == name){
+ messages = atoi(argv[++i]);
+ }else if("-subscribers" == name){
+ subscribers = atoi(argv[++i]);
+ }else if("-ack_mode" == name){
+ ackMode = AckMode(atoi(argv[++i]));
+ }else if("-transactional" == name){
+ transactional = true;
+ }else if("-prefetch" == name){
+ prefetch = atoi(argv[++i]);
+ }else if("-batches" == name){
+ batches = atoi(argv[++i]);
+ }else if("-delay" == name){
+ delay = atoi(argv[++i]);
+ }else if("-size" == name){
+ size = atoi(argv[++i]);
+ }else if("-trace" == name){
+ trace = true;
+ }else{
+ std::cout << "Warning: unrecognised option " << name << std::endl;
+ }
+ }
+}
+
+void Args::usage(){
+ std::cout << "Options:" << std::endl;
+ std::cout << " -help" << std::endl;
+ std::cout << " Prints this usage message" << std::endl;
+ std::cout << " -host <host>" << std::endl;
+ std::cout << " Specifies host to connect to (default is localhost)" << std::endl;
+ std::cout << " -port <port>" << std::endl;
+ std::cout << " Specifies port to conect to (default is 5762)" << std::endl;
+ std::cout << " -messages <count>" << std::endl;
+ std::cout << " Specifies how many messages to send" << std::endl;
+ std::cout << " -subscribers <count>" << std::endl;
+ std::cout << " Specifies how many subscribers to expect reports from" << std::endl;
+ std::cout << " -ack_mode <mode>" << std::endl;
+ std::cout << " Sets the acknowledgement mode" << std::endl;
+ std::cout << " 0=NO_ACK (default), 1=AUTO_ACK, 2=LAZY_ACK" << std::endl;
+ std::cout << " -transactional" << std::endl;
+ std::cout << " Indicates the client should use transactions" << std::endl;
+ std::cout << " -prefetch <count>" << std::endl;
+ std::cout << " Specifies the prefetch count (default is 1000)" << std::endl;
+ std::cout << " -batches <count>" << std::endl;
+ std::cout << " Specifies how many batches to run" << std::endl;
+ std::cout << " -delay <seconds>" << std::endl;
+ std::cout << " Causes a delay between each batch" << std::endl;
+ std::cout << " -size <bytes>" << std::endl;
+ std::cout << " Sets the size of the published messages (default is 256 bytes)" << std::endl;
+ std::cout << " -trace" << std::endl;
+ std::cout << " Indicates that the frames sent and received should be logged" << std::endl;
+}
diff --git a/qpid/cpp/tests/topictest b/qpid/cpp/tests/topictest
new file mode 100755
index 0000000000..76807b82bd
--- /dev/null
+++ b/qpid/cpp/tests/topictest
@@ -0,0 +1,38 @@
+#!/bin/bash
+# Run the C++ topic test
+
+# Clean up old log files
+rm -f subscriber_*.log
+
+# Defaults values
+SUBSCRIBERS=10
+MESSAGES=2000
+BATCHES=10
+
+while getopts "s:m:b:" opt ; do
+ case $opt in
+ s) SUBSCRIBERS=$OPTARG ;;
+ m) MESSAGES=$OPTARG ;;
+ b) BATCHES=$OPTARG ;;
+ ?)
+ echo "Usage: %0 [-s <subscribers>] [-m <messages.] [-b <batches>]"
+ exit 1
+ ;;
+ esac
+done
+
+subscribe() {
+ echo Start subscriber $1
+ LOG="subscriber_$1.log"
+ ./topic_listener > $LOG 2>&1 && rm -f $LOG
+}
+
+publish() {
+ ./topic_publisher -messages $MESSAGES -batches $BATCHES -subscribers $SUBSCRIBERS
+}
+
+for ((i=$SUBSCRIBERS ; i--; )); do
+ subscribe $i &
+done
+
+publish 2>&1 || exit 1