You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by nm...@apache.org on 2006/12/16 22:28:23 UTC

svn commit: r487892 - in /incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq: connector/stomp/StompConnectorTest.h connector/stomp/StompFrameTest.h core/ActiveMQSessionTest.h

Author: nmittler
Date: Sat Dec 16 13:28:22 2006
New Revision: 487892

URL: http://svn.apache.org/viewvc?view=rev&rev=487892
Log:
[AMQCPP-27] - Fixed a few memory leaks in unit tests

Modified:
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/stomp/StompConnectorTest.h
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/stomp/StompFrameTest.h
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/core/ActiveMQSessionTest.h

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/stomp/StompConnectorTest.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/stomp/StompConnectorTest.h?view=diff&rev=487892&r1=487891&r2=487892
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/stomp/StompConnectorTest.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/stomp/StompConnectorTest.h Sat Dec 16 13:28:22 2006
@@ -93,30 +93,37 @@
             StompResponseBuilder responseBuilder("testConnectionId");
             transport::DummyTransport transport( &responseBuilder );
             util::SimpleProperties properties;
-            StompConnector connector( &transport, properties );
-            connector.start();
             
-            SessionInfo* info1 = connector.createSession( cms::Session::AUTO_ACKNOWLEDGE );
+            // Using a pointer for the connector so we ensure the proper destruction
+            // order of objects - connector before the transport.
+            StompConnector* connector = new StompConnector( &transport, properties );
+            
+            connector->start();
+            
+            SessionInfo* info1 = connector->createSession( cms::Session::AUTO_ACKNOWLEDGE );
             CPPUNIT_ASSERT( info1->getAckMode() == cms::Session::AUTO_ACKNOWLEDGE );
             CPPUNIT_ASSERT( info1->getConnectionId() == connectionId );
             
-            SessionInfo* info2 = connector.createSession( cms::Session::DUPS_OK_ACKNOWLEDGE );
+            SessionInfo* info2 = connector->createSession( cms::Session::DUPS_OK_ACKNOWLEDGE );
             CPPUNIT_ASSERT( info2->getAckMode() == cms::Session::DUPS_OK_ACKNOWLEDGE );
             CPPUNIT_ASSERT( info2->getConnectionId() == connectionId );
             
-            SessionInfo* info3 = connector.createSession( cms::Session::CLIENT_ACKNOWLEDGE );
+            SessionInfo* info3 = connector->createSession( cms::Session::CLIENT_ACKNOWLEDGE );
             CPPUNIT_ASSERT( info3->getAckMode() == cms::Session::CLIENT_ACKNOWLEDGE );
             CPPUNIT_ASSERT( info3->getConnectionId() == connectionId );
             
-            SessionInfo* info4 = connector.createSession( cms::Session::SESSION_TRANSACTED );
+            SessionInfo* info4 = connector->createSession( cms::Session::SESSION_TRANSACTED );
             CPPUNIT_ASSERT( info4->getAckMode() == cms::Session::SESSION_TRANSACTED );
             CPPUNIT_ASSERT( info4->getConnectionId() == connectionId );
             
-            connector.destroyResource( info1 );
-            connector.destroyResource( info2 );
-            connector.destroyResource( info3 );
-            connector.destroyResource( info4 );
-
+            connector->destroyResource( info1 );
+            connector->destroyResource( info2 );
+            connector->destroyResource( info3 );
+            connector->destroyResource( info4 );
+
+            // Delete the connector here - this assures the propery order
+            // of destruction.
+            delete connector;
         }
         
         void testConsumers()
@@ -125,50 +132,58 @@
             StompResponseBuilder responseBuilder("testConnectionId");
             transport::DummyTransport transport( &responseBuilder );
             util::SimpleProperties properties;
-            StompConnector connector( &transport, properties );
-            connector.start();
             
-            SessionInfo* info1 = connector.createSession( cms::Session::AUTO_ACKNOWLEDGE );
+            // Using a pointer for the connector so we ensure the proper destruction
+            // order of objects - connector before the transport.
+            StompConnector* connector = new StompConnector( &transport, properties );
+            
+            connector->start();
+            
+            SessionInfo* info1 = connector->createSession( cms::Session::AUTO_ACKNOWLEDGE );
             std::string sel1 = "";
             StompTopic dest1( "dummy.topic.1" );
-            ConsumerInfo* cinfo1 = connector.createConsumer( &dest1, info1, sel1 );
+            ConsumerInfo* cinfo1 = connector->createConsumer( &dest1, info1, sel1 );
             CPPUNIT_ASSERT( cinfo1->getSessionInfo() == info1 );
             CPPUNIT_ASSERT( cinfo1->getDestination().toString() == dest1.toString() );
             CPPUNIT_ASSERT( cinfo1->getMessageSelector() == sel1 );
             
-            SessionInfo* info2 = connector.createSession( cms::Session::DUPS_OK_ACKNOWLEDGE );
+            SessionInfo* info2 = connector->createSession( cms::Session::DUPS_OK_ACKNOWLEDGE );
             std::string sel2 = "mysel2";
             StompTopic dest2( "dummy.topic.2" );
-            ConsumerInfo* cinfo2 = connector.createConsumer( &dest2, info2, sel2 );
+            ConsumerInfo* cinfo2 = connector->createConsumer( &dest2, info2, sel2 );
             CPPUNIT_ASSERT( cinfo2->getSessionInfo() == info2 );
             CPPUNIT_ASSERT( cinfo2->getDestination().toString() == dest2.toString() );
             CPPUNIT_ASSERT( cinfo2->getMessageSelector() == sel2 );
             
-            SessionInfo* info3 = connector.createSession( cms::Session::CLIENT_ACKNOWLEDGE );
+            SessionInfo* info3 = connector->createSession( cms::Session::CLIENT_ACKNOWLEDGE );
             std::string sel3 = "mysel3";
             StompQueue dest3( "dummy.queue.1" );
-            ConsumerInfo* cinfo3 = connector.createConsumer( &dest3, info3, sel3 );
+            ConsumerInfo* cinfo3 = connector->createConsumer( &dest3, info3, sel3 );
             CPPUNIT_ASSERT( cinfo3->getSessionInfo() == info3 );
             CPPUNIT_ASSERT( cinfo3->getDestination().toString() == dest3.toString() );
             CPPUNIT_ASSERT( cinfo3->getMessageSelector() == sel3 );
             
-            SessionInfo* info4 = connector.createSession( cms::Session::SESSION_TRANSACTED );
+            SessionInfo* info4 = connector->createSession( cms::Session::SESSION_TRANSACTED );
             std::string sel4 = "";
             StompTopic dest4( "dummy.queue.2" );
-            ConsumerInfo* cinfo4 = connector.createConsumer( &dest4, info4, sel4 );
+            ConsumerInfo* cinfo4 = connector->createConsumer( &dest4, info4, sel4 );
             CPPUNIT_ASSERT( cinfo4->getSessionInfo() == info4 );
             CPPUNIT_ASSERT( cinfo4->getDestination().toString() == dest4.toString() );
             CPPUNIT_ASSERT( cinfo4->getMessageSelector() == sel4 );
             
-            connector.destroyResource( cinfo1 );
-            connector.destroyResource( cinfo2 );
-            connector.destroyResource( cinfo3 );
-            connector.destroyResource( cinfo4 );
-
-            connector.destroyResource( info1 );
-            connector.destroyResource( info2 );
-            connector.destroyResource( info3 );
-            connector.destroyResource( info4 );
+            connector->destroyResource( cinfo1 );
+            connector->destroyResource( cinfo2 );
+            connector->destroyResource( cinfo3 );
+            connector->destroyResource( cinfo4 );
+
+            connector->destroyResource( info1 );
+            connector->destroyResource( info2 );
+            connector->destroyResource( info3 );
+            connector->destroyResource( info4 );
+            
+            // Delete the connector here - this assures the propery order
+            // of destruction.
+            delete connector;
         }
 
         void testProducers()
@@ -177,42 +192,50 @@
             StompResponseBuilder responseBuilder("testConnectionId");
             transport::DummyTransport transport( &responseBuilder );
             util::SimpleProperties properties;
-            StompConnector connector( &transport, properties );
-            connector.start();
             
-            SessionInfo* info1 = connector.createSession( cms::Session::AUTO_ACKNOWLEDGE );
+            // Using a pointer for the connector so we ensure the proper destruction
+            // order of objects - connector before the transport.
+            StompConnector* connector = new StompConnector( &transport, properties );
+            
+            connector->start();
+            
+            SessionInfo* info1 = connector->createSession( cms::Session::AUTO_ACKNOWLEDGE );
             StompTopic dest1( "dummy.topic.1" );
-            ProducerInfo* pinfo1 = connector.createProducer( &dest1, info1 );
+            ProducerInfo* pinfo1 = connector->createProducer( &dest1, info1 );
             CPPUNIT_ASSERT( pinfo1->getSessionInfo() == info1 );
             CPPUNIT_ASSERT( pinfo1->getDestination().toString() == dest1.toString() );
             
-            SessionInfo* info2 = connector.createSession( cms::Session::DUPS_OK_ACKNOWLEDGE );
+            SessionInfo* info2 = connector->createSession( cms::Session::DUPS_OK_ACKNOWLEDGE );
             StompTopic dest2( "dummy.topic.2" );
-            ProducerInfo* pinfo2 = connector.createProducer( &dest2, info2 );
+            ProducerInfo* pinfo2 = connector->createProducer( &dest2, info2 );
             CPPUNIT_ASSERT( pinfo2->getSessionInfo() == info2 );
             CPPUNIT_ASSERT( pinfo2->getDestination().toString() == dest2.toString() );
             
-            SessionInfo* info3 = connector.createSession( cms::Session::CLIENT_ACKNOWLEDGE );
+            SessionInfo* info3 = connector->createSession( cms::Session::CLIENT_ACKNOWLEDGE );
             StompQueue dest3( "dummy.queue.1" );
-            ProducerInfo* pinfo3 = connector.createProducer( &dest3, info3 );
+            ProducerInfo* pinfo3 = connector->createProducer( &dest3, info3 );
             CPPUNIT_ASSERT( pinfo3->getSessionInfo() == info3 );
             CPPUNIT_ASSERT( pinfo3->getDestination().toString() == dest3.toString() );
             
-            SessionInfo* info4 = connector.createSession( cms::Session::SESSION_TRANSACTED );
+            SessionInfo* info4 = connector->createSession( cms::Session::SESSION_TRANSACTED );
             StompTopic dest4( "dummy.queue.2" );
-            ProducerInfo* pinfo4 = connector.createProducer( &dest4, info4 );
+            ProducerInfo* pinfo4 = connector->createProducer( &dest4, info4 );
             CPPUNIT_ASSERT( pinfo4->getSessionInfo() == info4 );
             CPPUNIT_ASSERT( pinfo4->getDestination().toString() == dest4.toString() );
             
-            connector.destroyResource( pinfo1 );
-            connector.destroyResource( pinfo2 );
-            connector.destroyResource( pinfo3 );
-            connector.destroyResource( pinfo4 );
-
-            connector.destroyResource( info1 );
-            connector.destroyResource( info2 );
-            connector.destroyResource( info3 );
-            connector.destroyResource( info4 );
+            connector->destroyResource( pinfo1 );
+            connector->destroyResource( pinfo2 );
+            connector->destroyResource( pinfo3 );
+            connector->destroyResource( pinfo4 );
+
+            connector->destroyResource( info1 );
+            connector->destroyResource( info2 );
+            connector->destroyResource( info3 );
+            connector->destroyResource( info4 );
+            
+            // Delete the connector here - this assures the propery order
+            // of destruction.
+            delete connector;
         }
         
         void testCommand()
@@ -221,36 +244,40 @@
             StompResponseBuilder responseBuilder("testConnectionId");
             transport::DummyTransport transport( &responseBuilder );
             util::SimpleProperties properties;
-            StompConnector connector( &transport, properties );
-            connector.start();
+            
+            // Using a pointer for the connector so we ensure the proper destruction
+            // order of objects - connector before the transport.
+            StompConnector* connector = new StompConnector( &transport, properties );
+            
+            connector->start();
             
             StompTopic dest1( "dummy.topic" );
             StompTopic dest2( "dummy.topic2" );
             
-            SessionInfo* info1 = connector.createSession( cms::Session::AUTO_ACKNOWLEDGE );
-            ConsumerInfo* cinfo1 = connector.createConsumer( &dest1, info1, "" );
+            SessionInfo* info1 = connector->createSession( cms::Session::AUTO_ACKNOWLEDGE );
+            ConsumerInfo* cinfo1 = connector->createConsumer( &dest1, info1, "" );
             
-            SessionInfo* info2 = connector.createSession( cms::Session::DUPS_OK_ACKNOWLEDGE );
-            ConsumerInfo* cinfo2 = connector.createConsumer( &dest1, info2, "" );
+            SessionInfo* info2 = connector->createSession( cms::Session::DUPS_OK_ACKNOWLEDGE );
+            ConsumerInfo* cinfo2 = connector->createConsumer( &dest1, info2, "" );
             
-            SessionInfo* info3 = connector.createSession( cms::Session::CLIENT_ACKNOWLEDGE );
-            ConsumerInfo* cinfo3 = connector.createConsumer( &dest2, info3, "" );
+            SessionInfo* info3 = connector->createSession( cms::Session::CLIENT_ACKNOWLEDGE );
+            ConsumerInfo* cinfo3 = connector->createConsumer( &dest2, info3, "" );
             
-            SessionInfo* info4 = connector.createSession( cms::Session::SESSION_TRANSACTED );
-            ConsumerInfo* cinfo4 = connector.createConsumer( &dest2, info4, "" );
+            SessionInfo* info4 = connector->createSession( cms::Session::SESSION_TRANSACTED );
+            ConsumerInfo* cinfo4 = connector->createConsumer( &dest2, info4, "" );
             
             MyMessageListener listener;
-            connector.setConsumerMessageListener( &listener );
+            connector->setConsumerMessageListener( &listener );
             
             StompFrame* frame = new StompFrame();
             frame->setCommand( "MESSAGE" );
             frame->getProperties().setProperty( 
                 "destination", dest1.toProviderString() );
-            const char* buffer = strdup("hello world");
+            const char* buffer = "hello world";
             frame->setBody( (const unsigned char*)buffer, 12 );
 
             commands::TextMessageCommand* msg = 
-                new commands::TextMessageCommand( frame );
+                new commands::TextMessageCommand( frame ); // deleted by listener
             transport.fireCommand( msg );
             
             CPPUNIT_ASSERT( listener.consumers.size() == 2 );
@@ -266,10 +293,10 @@
             frame->setCommand( "MESSAGE" );
             frame->getProperties().setProperty( 
                 "destination", dest2.toProviderString() );
-            buffer = strdup("hello world");
+            buffer = "hello world";
             frame->setBody( (unsigned char*)buffer, 12 );
 
-            msg = new commands::TextMessageCommand( frame );
+            msg = new commands::TextMessageCommand( frame ); // deleted by listener
             transport.fireCommand( msg );
             
             CPPUNIT_ASSERT( listener.consumers.size() == 2 );
@@ -278,15 +305,19 @@
                     listener.consumers[ix] == cinfo4 );
             }
                         
-            connector.destroyResource( cinfo1 );
-            connector.destroyResource( cinfo2 );
-            connector.destroyResource( cinfo3 );
-            connector.destroyResource( cinfo4 );
-
-            connector.destroyResource( info1 );
-            connector.destroyResource( info2 );
-            connector.destroyResource( info3 );
-            connector.destroyResource( info4 );
+            connector->destroyResource( cinfo1 );
+            connector->destroyResource( cinfo2 );
+            connector->destroyResource( cinfo3 );
+            connector->destroyResource( cinfo4 );
+
+            connector->destroyResource( info1 );
+            connector->destroyResource( info2 );
+            connector->destroyResource( info3 );
+            connector->destroyResource( info4 );
+            
+            // Delete the connector here - this assures the propery order
+            // of destruction.
+            delete connector;
         }
         
         void testSendingCommands()

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/stomp/StompFrameTest.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/stomp/StompFrameTest.h?view=diff&rev=487892&r1=487891&r2=487892
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/stomp/StompFrameTest.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/connector/stomp/StompFrameTest.h Sat Dec 16 13:28:22 2006
@@ -55,7 +55,7 @@
          CPPUNIT_ASSERT( frame.getBody().size() == 0 );
          CPPUNIT_ASSERT( frame.getBodyLength() == 0 );
          
-         frame.setBody( (unsigned char*)strdup("ABC"), 4 );
+         frame.setBody( (unsigned char*)"ABC", 4 );
          
          CPPUNIT_ASSERT( frame.getBody().size() == 4 );
          CPPUNIT_ASSERT( frame.getBodyLength() == 4 );

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/core/ActiveMQSessionTest.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/core/ActiveMQSessionTest.h?view=diff&rev=487892&r1=487891&r2=487892
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/core/ActiveMQSessionTest.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/core/ActiveMQSessionTest.h Sat Dec 16 13:28:22 2006
@@ -199,7 +199,7 @@
             frame->setCommand( "MESSAGE" );
             frame->getProperties().setProperty( 
                 "destination", destination.toProviderString() );
-            const char* buffer = strdup( message.c_str() );
+            const char* buffer = message.c_str();
             frame->setBody( (unsigned char*)buffer, 12 );
 
             connector::stomp::commands::TextMessageCommand* msg =