You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2009/03/17 21:10:32 UTC

svn commit: r755380 - in /activemq/activemq-cpp/trunk/src: main/activemq/state/ test/ test/activemq/state/ test/activemq/transport/failover/

Author: tabish
Date: Tue Mar 17 20:10:31 2009
New Revision: 755380

URL: http://svn.apache.org/viewvc?rev=755380&view=rev
Log:
http://issues.apache.org/activemq/browse/AMQCPP-100

Adds new test code for the Failover Transport to simulate a realistic use case, which exposed some errors in the state tracker code, fixes for those errors are attached as well. 

Modified:
    activemq/activemq-cpp/trunk/src/main/activemq/state/ConnectionStateTracker.cpp
    activemq/activemq-cpp/trunk/src/main/activemq/state/ConnectionStateTracker.h
    activemq/activemq-cpp/trunk/src/test/activemq/state/ConnectionStateTrackerTest.cpp
    activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.cpp
    activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.h
    activemq/activemq-cpp/trunk/src/test/testRegistry.cpp

Modified: activemq/activemq-cpp/trunk/src/main/activemq/state/ConnectionStateTracker.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/state/ConnectionStateTracker.cpp?rev=755380&r1=755379&r2=755380&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/state/ConnectionStateTracker.cpp (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/state/ConnectionStateTracker.cpp Tue Mar 17 20:10:31 2009
@@ -269,7 +269,7 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-Pointer<Command> ConnectionStateTracker::processAddDestination( DestinationInfo* info )
+Pointer<Command> ConnectionStateTracker::processDestinationInfo( DestinationInfo* info )
     throw ( exceptions::ActiveMQException ) {
 
     try{
@@ -305,7 +305,7 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-Pointer<Command> ConnectionStateTracker::processAddProducer( ProducerInfo* info )
+Pointer<Command> ConnectionStateTracker::processProducerInfo( ProducerInfo* info )
     throw ( exceptions::ActiveMQException ) {
 
     try{
@@ -362,7 +362,7 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-Pointer<Command> ConnectionStateTracker::processAddConsumer( ConsumerInfo* info )
+Pointer<Command> ConnectionStateTracker::processConsumerInfo( ConsumerInfo* info )
     throw ( exceptions::ActiveMQException ) {
 
     try{
@@ -418,7 +418,7 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-Pointer<Command> ConnectionStateTracker::processAddSession( SessionInfo* info)
+Pointer<Command> ConnectionStateTracker::processSessionInfo( SessionInfo* info)
     throw ( exceptions::ActiveMQException ) {
 
     try{
@@ -462,7 +462,7 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-Pointer<Command> ConnectionStateTracker::processAddConnection( ConnectionInfo* info )
+Pointer<Command> ConnectionStateTracker::processConnectionInfo( ConnectionInfo* info )
     throw ( exceptions::ActiveMQException ) {
 
     try{

Modified: activemq/activemq-cpp/trunk/src/main/activemq/state/ConnectionStateTracker.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/state/ConnectionStateTracker.h?rev=755380&r1=755379&r2=755380&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/state/ConnectionStateTracker.h (original)
+++ activemq/activemq-cpp/trunk/src/main/activemq/state/ConnectionStateTracker.h Tue Mar 17 20:10:31 2009
@@ -81,31 +81,31 @@
         void restore( const Pointer<transport::Transport>& transport )
             throw( decaf::io::IOException );
 
-        virtual Pointer<Command> processAddDestination( DestinationInfo* info )
+        virtual Pointer<Command> processDestinationInfo( DestinationInfo* info )
             throw ( exceptions::ActiveMQException );
 
         virtual Pointer<Command> processRemoveDestination( DestinationInfo* info )
             throw ( exceptions::ActiveMQException );
 
-        virtual Pointer<Command> processAddProducer( ProducerInfo* info )
+        virtual Pointer<Command> processProducerInfo( ProducerInfo* info )
             throw ( exceptions::ActiveMQException );
 
         virtual Pointer<Command> processRemoveProducer( ProducerId* id )
             throw ( exceptions::ActiveMQException );
 
-        virtual Pointer<Command> processAddConsumer( ConsumerInfo* info )
+        virtual Pointer<Command> processConsumerInfo( ConsumerInfo* info )
             throw ( exceptions::ActiveMQException );
 
         virtual Pointer<Command> processRemoveConsumer( ConsumerId* id )
             throw ( exceptions::ActiveMQException );
 
-        virtual Pointer<Command> processAddSession( SessionInfo* info )
+        virtual Pointer<Command> processSessionInfo( SessionInfo* info )
             throw ( exceptions::ActiveMQException );
 
         virtual Pointer<Command> processRemoveSession( SessionId* id )
             throw ( exceptions::ActiveMQException );
 
-        virtual Pointer<Command> processAddConnection( ConnectionInfo* info)
+        virtual Pointer<Command> processConnectionInfo( ConnectionInfo* info)
             throw ( exceptions::ActiveMQException );
 
         virtual Pointer<Command> processRemoveConnection( ConnectionId* id )

Modified: activemq/activemq-cpp/trunk/src/test/activemq/state/ConnectionStateTrackerTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/activemq/state/ConnectionStateTrackerTest.cpp?rev=755380&r1=755379&r2=755380&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/activemq/state/ConnectionStateTrackerTest.cpp (original)
+++ activemq/activemq-cpp/trunk/src/test/activemq/state/ConnectionStateTrackerTest.cpp Tue Mar 17 20:10:31 2009
@@ -59,10 +59,10 @@
     producer_info->setProducerId( producer_id );
 
     ConnectionStateTracker tracker;
-    tracker.processAddConnection( conn_info.get() );
-    tracker.processAddSession( session_info.get() );
-    tracker.processAddConsumer( consumer_info.get() );
-    tracker.processAddProducer( producer_info.get() );
+    tracker.processConnectionInfo( conn_info.get() );
+    tracker.processSessionInfo( session_info.get() );
+    tracker.processConsumerInfo( consumer_info.get() );
+    tracker.processProducerInfo( producer_info.get() );
 
     tracker.processRemoveProducer( producer_id.get() );
     tracker.processRemoveConsumer( consumer_id.get() );

Modified: activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.cpp?rev=755380&r1=755379&r2=755380&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.cpp (original)
+++ activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.cpp Tue Mar 17 20:10:31 2009
@@ -24,6 +24,7 @@
 #include <activemq/commands/ActiveMQMessage.h>
 #include <decaf/lang/Pointer.h>
 #include <decaf/lang/Thread.h>
+#include <decaf/util/UUID.h>
 
 using namespace activemq;
 using namespace activemq::commands;
@@ -368,3 +369,145 @@
 
     transport->close();
 }
+
+////////////////////////////////////////////////////////////////////////////////
+void FailoverTransportTest::testWithOpewireCommands() {
+
+    std::string uri = "failover://(mock://localhost:61616)?randomize=false";
+
+    DefaultTransportListener listener;
+    FailoverTransportFactory factory;
+
+    Pointer<Transport> transport( factory.create( uri ) );
+    CPPUNIT_ASSERT( transport != NULL );
+    transport->setTransportListener( &listener );
+
+    FailoverTransport* failover = dynamic_cast<FailoverTransport*>(
+        transport->narrow( typeid( FailoverTransport ) ) );
+
+    CPPUNIT_ASSERT( failover != NULL );
+    CPPUNIT_ASSERT( failover->isRandomize() == false );
+
+    transport->start();
+
+    Pointer<ConnectionInfo> connection = createConnection();
+    transport->request( connection );
+    Pointer<SessionInfo> session1 = createSession( connection );
+    transport->request( session1 );
+    Pointer<SessionInfo> session2 = createSession( connection );
+    transport->request( session2 );
+    Pointer<ConsumerInfo> consumer1 = createConsumer( session1 );
+    transport->request( consumer1 );
+    Pointer<ConsumerInfo> consumer2 = createConsumer( session1 );
+    transport->request( consumer2 );
+    Pointer<ConsumerInfo> consumer3 = createConsumer( session2 );
+    transport->request( consumer3 );
+
+    Pointer<ProducerInfo> producer1 = createProducer( session2 );
+    transport->request( producer1 );
+
+    // Remove the Producers
+    this->disposeOf( producer1, transport );
+
+    // Remove the Consumers
+    this->disposeOf( consumer1, transport );
+    this->disposeOf( consumer2, transport );
+    this->disposeOf( consumer3, transport );
+
+    // Remove the Session instances.
+    this->disposeOf( session1, transport );
+    this->disposeOf( session2, transport );
+
+    // Indicate that we are done.
+    Pointer<ShutdownInfo> shutdown( new ShutdownInfo() );
+    transport->oneway( shutdown );
+
+    transport->close();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<ConnectionInfo> FailoverTransportTest::createConnection() {
+
+    Pointer<ConnectionId> id( new ConnectionId() );
+    id->setValue( UUID::randomUUID().toString() );
+
+    Pointer<ConnectionInfo> info( new ConnectionInfo() );
+    info->setClientId( UUID::randomUUID().toString() );
+    info->setConnectionId( id );
+
+    return info;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<SessionInfo> FailoverTransportTest::createSession( const Pointer<ConnectionInfo>& parent ) {
+
+    static int idx = 1;
+
+    Pointer<SessionId> id( new SessionId() );
+    id->setConnectionId( parent->getConnectionId()->getValue() );
+    id->setValue( idx++ );
+
+    Pointer<SessionInfo> info( new SessionInfo() );
+    info->setSessionId( id );
+
+    return info;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<ConsumerInfo> FailoverTransportTest::createConsumer( const Pointer<SessionInfo>& parent ) {
+
+    static int idx = 1;
+
+    Pointer<ConsumerId> id( new ConsumerId() );
+    id->setConnectionId( parent->getSessionId()->getConnectionId() );
+    id->setSessionId( parent->getSessionId()->getValue() );
+    id->setValue( idx++ );
+
+    Pointer<ConsumerInfo> info( new ConsumerInfo() );
+    info->setConsumerId( id );
+
+    return info;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<ProducerInfo> FailoverTransportTest::createProducer( const Pointer<SessionInfo>& parent ) {
+
+    static int idx = 1;
+
+    Pointer<ProducerId> id( new ProducerId() );
+    id->setConnectionId( parent->getSessionId()->getConnectionId() );
+    id->setSessionId( parent->getSessionId()->getValue() );
+    id->setValue( idx++ );
+
+    Pointer<ProducerInfo> info( new ProducerInfo() );
+    info->setProducerId( id );
+
+    return info;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void FailoverTransportTest::disposeOf( const Pointer<SessionInfo>& session,
+                                       Pointer<Transport>& transport ) {
+
+    Pointer<RemoveInfo> command( new RemoveInfo() );
+    command->setObjectId( session->getSessionId() );
+    transport->oneway( command );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void FailoverTransportTest::disposeOf( const Pointer<ConsumerInfo>& consumer,
+                                       Pointer<Transport>& transport ) {
+
+    Pointer<RemoveInfo> command( new RemoveInfo() );
+    command->setObjectId( consumer->getConsumerId() );
+    transport->oneway( command );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void FailoverTransportTest::disposeOf( const Pointer<ProducerInfo>& producer,
+                                       Pointer<Transport>& transport ) {
+
+    Pointer<RemoveInfo> command( new RemoveInfo() );
+    command->setObjectId( producer->getProducerId() );
+    transport->oneway( command );
+}

Modified: activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.h?rev=755380&r1=755379&r2=755380&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.h (original)
+++ activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.h Tue Mar 17 20:10:31 2009
@@ -22,10 +22,21 @@
 #include <cppunit/extensions/HelperMacros.h>
 #include <activemq/util/Config.h>
 
+#include <activemq/commands/ConnectionInfo.h>
+#include <activemq/commands/SessionInfo.h>
+#include <activemq/commands/ProducerInfo.h>
+#include <activemq/commands/ConsumerInfo.h>
+
+#include <activemq/transport/Transport.h>
+#include <decaf/lang/Pointer.h>
+
 namespace activemq {
 namespace transport {
 namespace failover {
 
+    using decaf::lang::Pointer;
+    using namespace activemq::commands;
+
     class FailoverTransportTest : public CppUnit::TestFixture {
 
         CPPUNIT_TEST_SUITE( FailoverTransportTest );
@@ -38,6 +49,7 @@
         CPPUNIT_TEST( testSendRequestMessage );
         CPPUNIT_TEST( testSendOnewayMessageFail );
         CPPUNIT_TEST( testSendRequestMessageFail );
+        CPPUNIT_TEST( testWithOpewireCommands );
         CPPUNIT_TEST_SUITE_END();
 
     public:
@@ -75,6 +87,25 @@
         void testSendOnewayMessageFail();
         void testSendRequestMessageFail();
 
+        // Test the transport using a realistic set of commands being sen through which
+        // simulates creation of a Connection, Session, Topics, Producers and Consumers
+        // and then removing them all as a normal shutdown would.
+        void testWithOpewireCommands();
+
+    private:
+
+        Pointer<ConnectionInfo> createConnection();
+        Pointer<SessionInfo> createSession( const Pointer<ConnectionInfo>& parent );
+        Pointer<ConsumerInfo> createConsumer( const Pointer<SessionInfo>& parent );
+        Pointer<ProducerInfo> createProducer( const Pointer<SessionInfo>& parent );
+
+        void disposeOf( const Pointer<SessionInfo>& session,
+                        Pointer<Transport>& transport );
+        void disposeOf( const Pointer<ConsumerInfo>& consumer,
+                        Pointer<Transport>& transport );
+        void disposeOf( const Pointer<ProducerInfo>& producer,
+                        Pointer<Transport>& transport );
+
     };
 
 }}}

Modified: activemq/activemq-cpp/trunk/src/test/testRegistry.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/testRegistry.cpp?rev=755380&r1=755379&r2=755380&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/testRegistry.cpp (original)
+++ activemq/activemq-cpp/trunk/src/test/testRegistry.cpp Tue Mar 17 20:10:31 2009
@@ -75,22 +75,22 @@
 //CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQConnectionTest );
 //#include <activemq/core/ActiveMQSessionTest.h>
 //CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQSessionTest );
-
-#include <activemq/state/ConnectionStateTrackerTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConnectionStateTrackerTest );
-#include <activemq/state/ConnectionStateTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConnectionStateTest );
-#include <activemq/state/ConsumerStateTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConsumerStateTest );
-#include <activemq/state/ProducerStateTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ProducerStateTest );
-#include <activemq/state/SessionStateTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::SessionStateTest );
-#include <activemq/state/TransactionStateTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::TransactionStateTest );
-
-//#include <activemq/transport/failover/FailoverTransportTest.h>
-//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::failover::FailoverTransportTest );
+//
+//#include <activemq/state/ConnectionStateTrackerTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConnectionStateTrackerTest );
+//#include <activemq/state/ConnectionStateTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConnectionStateTest );
+//#include <activemq/state/ConsumerStateTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ConsumerStateTest );
+//#include <activemq/state/ProducerStateTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::ProducerStateTest );
+//#include <activemq/state/SessionStateTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::SessionStateTest );
+//#include <activemq/state/TransactionStateTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::state::TransactionStateTest );
+//
+#include <activemq/transport/failover/FailoverTransportTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::failover::FailoverTransportTest );
 //
 //#include <activemq/transport/correlator/ResponseCorrelatorTest.h>
 //CPPUNIT_TEST_SUITE_REGISTRATION( activemq::transport::correlator::ResponseCorrelatorTest );