Author: tabish
Date: Wed Mar 11 18:55:53 2009
New Revision: 752573
URL: http://svn.apache.org/viewvc?rev=752573&view=rev
Log:
http://issues.apache.org/activemq/browse/AMQCPP-100
Fixes for shutdown issues in the Failover transport as well as some code
cleanup. Added a new unit test for the TaskRunner classes added to
activemq/util
Added:
activemq/activemq-cpp/trunk/src/main/activemq/util/Task.h (with props)
activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.cpp (with
props)
activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.h (with
props)
activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.cpp
(with props)
activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.h (with
props)
Modified:
activemq/activemq-cpp/trunk/src/main/Makefile.am
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.cpp
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.h
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.cpp
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.h
activemq/activemq-cpp/trunk/src/test/Makefile.am
activemq/activemq-cpp/trunk/src/test/activemq/transport/failover/FailoverTransportTest.cpp
activemq/activemq-cpp/trunk/src/test/testRegistry.cpp
Modified: activemq/activemq-cpp/trunk/src/main/Makefile.am
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/Makefile.am?rev=752573&r1=752572&r2=752573&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/Makefile.am (original)
+++ activemq/activemq-cpp/trunk/src/main/Makefile.am Wed Mar 11 18:55:53 2009
@@ -27,6 +27,7 @@
activemq/util/URISupport.cpp \
activemq/util/MemoryUsage.cpp \
activemq/util/CompositeData.cpp \
+ activemq/util/TaskRunner.cpp \
activemq/cmsutil/DynamicDestinationResolver.cpp \
activemq/cmsutil/ResourceLifecycleManager.cpp \
activemq/cmsutil/CmsAccessor.cpp \
@@ -229,7 +230,9 @@
activemq/util/URISupport.h \
activemq/util/MemoryUsage.h \
activemq/util/Usage.h \
- activemq/util/CompositeData.h \
+ activemq/util/CompositeData.h \
+ activemq/util/Task.h \
+ activemq/util/TaskRunner.h \
activemq/wireformat/WireFormat.h \
activemq/wireformat/WireFormatNegotiator.h \
activemq/wireformat/WireFormatFactory.h \
Modified:
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.cpp
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.cpp?rev=752573&r1=752572&r2=752573&view=diff
==============================================================================
---
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.cpp
(original)
+++
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.cpp
Wed Mar 11 18:55:53 2009
@@ -65,6 +65,7 @@
this->stateTracker.setTrackTransactions( true );
this->myTransportListener.reset( new FailoverTransportListener( this ) );
this->reconnectTask.reset( new ReconnectTask( this ) );
+ this->taskRunner.reset( new TaskRunner( reconnectTask.get() ) );
}
////////////////////////////////////////////////////////////////////////////////
@@ -399,7 +400,7 @@
sleepMutex.notifyAll();
}
- reconnectTask->shutdown( 500 );
+ taskRunner->shutdown( 500 );
if( transportToStop != NULL ) {
transportToStop->close();
@@ -411,7 +412,7 @@
synchronized( &reconnectMutex ) {
if( started ) {
- reconnectTask->wakeup();
+ taskRunner->wakeup();
}
}
}
@@ -467,7 +468,7 @@
connectedTransportURI.reset( NULL );
connected = false;
if( reconnectOk ) {
- reconnectTask->wakeup();
+ taskRunner->wakeup();
}
}
Modified:
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.h
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.h?rev=752573&r1=752572&r2=752573&view=diff
==============================================================================
---
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.h
(original)
+++
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/FailoverTransport.h
Wed Mar 11 18:55:53 2009
@@ -21,6 +21,7 @@
#include <activemq/util/Config.h>
#include <activemq/commands/Command.h>
+#include <activemq/util/TaskRunner.h>
#include <activemq/state/ConnectionStateTracker.h>
#include <activemq/transport/CompositeTransport.h>
#include <activemq/transport/failover/BackupTransport.h>
@@ -43,6 +44,7 @@
using namespace decaf::lang;
using decaf::net::URI;
using namespace decaf::util;
+ using namespace activemq::util;
using activemq::commands::Command;
using activemq::commands::Response;
@@ -88,6 +90,7 @@
Pointer<Transport> connectedTransport;
Pointer<Exception> connectionFailure;
Pointer<ReconnectTask> reconnectTask;
+ Pointer<TaskRunner> taskRunner;
Pointer<TransportListener> disposedListener;
Pointer<TransportListener> myTransportListener;
TransportListener* transportListener;
Modified:
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.cpp
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.cpp?rev=752573&r1=752572&r2=752573&view=diff
==============================================================================
---
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.cpp
(original)
+++
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.cpp
Wed Mar 11 18:55:53 2009
@@ -36,48 +36,6 @@
throw NullPointerException(
__FILE__, __LINE__, "Parent FailoverTransport passed was null" );
}
-
- this->threadTerminated = false;
- this->pending = false;
- this->shutDown = false;
-
- this->start();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-ReconnectTask::~ReconnectTask() {
- try{
- this->shutdown();
- }
- AMQ_CATCHALL_NOTHROW()
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void ReconnectTask::shutdown( unsigned int timeout ) {
-
- synchronized( &mutex ) {
- shutDown = true;
- pending = true;
- mutex.notifyAll();
-
- // Wait till the thread stops ( no need to wait if shutdown
- // is called from thread that is shutting down)
- if( !threadTerminated ) {
- mutex.wait( timeout );
- }
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-void ReconnectTask::wakeup() {
-
- synchronized( &mutex ) {
- if( shutDown) {
- return;
- }
- pending = true;
- mutex.notifyAll();
- }
}
////////////////////////////////////////////////////////////////////////////////
@@ -98,49 +56,8 @@
} else {
// build backups on the next iteration
result = true;
- this->wakeup();
+ parent->taskRunner->wakeup();
}
return result;
}
-
-////////////////////////////////////////////////////////////////////////////////
-void ReconnectTask::run() {
-
- try {
-
- while( true ) {
-
- synchronized( &mutex ) {
- pending = false;
- if( shutDown ) {
- return;
- }
- }
-
- if( !this->iterate() ) {
-
- // wait to be notified.
- synchronized( &mutex ) {
- if( shutDown ) {
- return;
- }
- while( !pending ) {
- mutex.wait();
- }
- }
- }
-
- }
- }
- AMQ_CATCH_NOTHROW( Exception )
- AMQ_CATCHALL_NOTHROW()
-
- // Make sure we notify any waiting threads that thread
- // has terminated.
- synchronized( &mutex ) {
- threadTerminated = true;
- mutex.notifyAll();
- }
-
-}
Modified:
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.h
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.h?rev=752573&r1=752572&r2=752573&view=diff
==============================================================================
---
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.h
(original)
+++
activemq/activemq-cpp/trunk/src/main/activemq/transport/failover/ReconnectTask.h
Wed Mar 11 18:55:53 2009
@@ -20,9 +20,7 @@
#include <activemq/util/Config.h>
-#include <decaf/lang/Thread.h>
-#include <decaf/lang/Runnable.h>
-#include <decaf/util/concurrent/Mutex.h>
+#include <activemq/util/Task.h>
namespace activemq {
namespace transport {
@@ -30,37 +28,18 @@
class FailoverTransport;
- class AMQCPP_API ReconnectTask : public decaf::lang::Thread {
+ class AMQCPP_API ReconnectTask : public activemq::util::Task {
private:
- decaf::util::concurrent::Mutex mutex;
-
- bool threadTerminated;
- bool pending;
- bool shutDown;
-
FailoverTransport* parent;
public:
ReconnectTask( FailoverTransport* parent );
-
- virtual ~ReconnectTask();
-
- void shutdown( unsigned int timeout );
-
- void shutdown() {
- this->shutdown( 0 );
- }
-
- void wakeup();
-
- protected:
+ virtual ~ReconnectTask() {}
bool iterate();
- virtual void run();
-
};
}}}
Added: activemq/activemq-cpp/trunk/src/main/activemq/util/Task.h
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/util/Task.h?rev=752573&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/util/Task.h (added)
+++ activemq/activemq-cpp/trunk/src/main/activemq/util/Task.h Wed Mar 11
18:55:53 2009
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+
+#ifndef _ACTIVEMQ_UTIL_TASK_H_
+#define _ACTIVEMQ_UTIL_TASK_H_
+
+namespace activemq {
+namespace util {
+
+ /**
+ * Represents a unit of work that requires one or more iterations to
complete.
+ *
+ * @since 3.0
+ */
+ class Task {
+ public:
+
+ virtual ~Task() {}
+
+ /**
+ * Perform one iteration of work, returns true if the task needs
+ * to run again to complete or false to indicate that the task is now
+ * complete.
+ *
+ * @return true if the task should be run again or false if the task
+ * has completed and the runner should wait for a wakeup call.
+ */
+ virtual bool iterate() = 0;
+
+ };
+
+}}
+
+#endif /* _ACTIVEMQ_UTIL_TASK_H_ */
Propchange: activemq/activemq-cpp/trunk/src/main/activemq/util/Task.h
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.cpp
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.cpp?rev=752573&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.cpp (added)
+++ activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.cpp Wed Mar
11 18:55:53 2009
@@ -0,0 +1,134 @@
+/*
+ * 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 "TaskRunner.h"
+
+#include <activemq/exceptions/ActiveMQException.h>
+
+using namespace activemq;
+using namespace activemq::util;
+using namespace activemq::exceptions;
+using namespace decaf;
+using namespace decaf::lang;
+using namespace decaf::lang::exceptions;
+
+////////////////////////////////////////////////////////////////////////////////
+TaskRunner::TaskRunner( Task* task ) : task( task ) {
+
+ if( this->task == NULL ) {
+ throw NullPointerException(
+ __FILE__, __LINE__, "Task passed was null" );
+ }
+
+ this->threadTerminated = false;
+ this->pending = false;
+ this->shutDown = false;
+
+ this->thread.reset( new Thread( this ) );
+ this->thread->start();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+TaskRunner::~TaskRunner() {
+ try{
+ this->shutdown();
+ }
+ AMQ_CATCHALL_NOTHROW()
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TaskRunner::shutdown( unsigned int timeout ) {
+
+ synchronized( &mutex ) {
+ shutDown = true;
+ pending = true;
+ mutex.notifyAll();
+
+ // Wait till the thread stops ( no need to wait if shutdown
+ // is called from thread that is shutting down)
+ if( !threadTerminated ) {
+ mutex.wait( timeout );
+ }
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TaskRunner::shutdown() {
+
+ synchronized( &mutex ) {
+ shutDown = true;
+ pending = true;
+ mutex.notifyAll();
+ }
+
+ // Wait till the thread stops
+ if( !threadTerminated ) {
+ this->thread->join();
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TaskRunner::wakeup() {
+
+ synchronized( &mutex ) {
+ if( shutDown) {
+ return;
+ }
+ pending = true;
+ mutex.notifyAll();
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void TaskRunner::run() {
+
+ try {
+
+ while( true ) {
+
+ synchronized( &mutex ) {
+ pending = false;
+ if( shutDown ) {
+ return;
+ }
+ }
+
+ if( !this->task->iterate() ) {
+
+ // wait to be notified.
+ synchronized( &mutex ) {
+ if( shutDown ) {
+ return;
+ }
+ while( !pending ) {
+ mutex.wait();
+ }
+ }
+ }
+
+ }
+ }
+ AMQ_CATCH_NOTHROW( Exception )
+ AMQ_CATCHALL_NOTHROW()
+
+ // Make sure we notify any waiting threads that thread
+ // has terminated.
+ synchronized( &mutex ) {
+ threadTerminated = true;
+ mutex.notifyAll();
+ }
+}
Propchange: activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.h
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.h?rev=752573&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.h (added)
+++ activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.h Wed Mar 11
18:55:53 2009
@@ -0,0 +1,79 @@
+/*
+ * 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.
+ */
+
+#ifndef _ACTIVEMQ_UTIL_TASKRUNNER_H_
+#define _ACTIVEMQ_UTIL_TASKRUNNER_H_
+
+#include <activemq/util/Task.h>
+
+#include <decaf/lang/Thread.h>
+#include <decaf/lang/Runnable.h>
+#include <decaf/util/concurrent/Mutex.h>
+#include <decaf/lang/Pointer.h>
+
+namespace activemq {
+namespace util {
+
+ using decaf::lang::Pointer;
+
+ class TaskRunner : public decaf::lang::Runnable {
+ private:
+
+ decaf::util::concurrent::Mutex mutex;
+
+ Pointer<decaf::lang::Thread> thread;
+
+ bool threadTerminated;
+ bool pending;
+ bool shutDown;
+
+ Task* task;
+
+ public:
+
+ TaskRunner( Task* task );
+ virtual ~TaskRunner();
+
+ /**
+ * Shutdown after a timeout, does not guarantee that the task's iterate
+ * method has completed and the thread halted.
+ *
+ * @param timeout - Time in Milliseconds to wait for the task to stop.
+ */
+ void shutdown( unsigned int timeout );
+
+ /**
+ * Shutdown once the task has finished and the TaskRunner's thread has
exited.
+ */
+ void shutdown();
+
+ /**
+ * Signal the TaskRunner to wakeup and execute another iteration cycle
on
+ * the task, the Task instance will be run until its iterate method has
+ * returned false indicating it is done.
+ */
+ void wakeup();
+
+ protected:
+
+ virtual void run();
+
+ };
+
+}}
+
+#endif /*_ACTIVEMQ_UTIL_TASKRUNNER_H_*/
Propchange: activemq/activemq-cpp/trunk/src/main/activemq/util/TaskRunner.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: activemq/activemq-cpp/trunk/src/test/Makefile.am
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/Makefile.am?rev=752573&r1=752572&r2=752573&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/Makefile.am (original)
+++ activemq/activemq-cpp/trunk/src/test/Makefile.am Wed Mar 11 18:55:53 2009
@@ -47,6 +47,7 @@
activemq/util/URISupportTest.cpp \
activemq/util/MemoryUsageTest.cpp \
activemq/util/LongSequenceGeneratorTest.cpp \
+ activemq/util/TaskRunnerTest.cpp \
activemq/wireformat/WireFormatRegistryTest.cpp \
activemq/wireformat/openwire/OpenWireFormatTest.cpp \
activemq/wireformat/openwire/marshal/PrimitiveMapMarshallerTest.cpp \
@@ -147,6 +148,7 @@
activemq/util/URISupportTest.h \
activemq/util/MemoryUsageTest.h \
activemq/util/LongSequenceGeneratorTest.h \
+ activemq/util/TaskRunnerTest.h \
activemq/wireformat/WireFormatRegistryTest.h \
activemq/wireformat/openwire/OpenWireFormatTest.h \
activemq/wireformat/openwire/marshal/PrimitiveMapMarshallerTest.h \
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=752573&r1=752572&r2=752573&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
Wed Mar 11 18:55:53 2009
@@ -54,7 +54,7 @@
CPPUNIT_ASSERT( failover != NULL );
CPPUNIT_ASSERT( failover->isRandomize() == false );
-// transport->start();
+ transport->start();
transport->close();
}
Added: activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.cpp
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.cpp?rev=752573&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.cpp
(added)
+++ activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.cpp Wed
Mar 11 18:55:53 2009
@@ -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 "TaskRunnerTest.h"
+
+#include <memory>
+
+#include <activemq/util/Task.h>
+#include <activemq/util/TaskRunner.h>
+
+#include <decaf/lang/Thread.h>
+#include <decaf/lang/exceptions/NullPointerException.h>
+
+using namespace activemq;
+using namespace activemq::util;
+using namespace decaf::lang;
+using namespace decaf::lang::exceptions;
+
+////////////////////////////////////////////////////////////////////////////////
+class SimpleCountingTask : public Task {
+private:
+
+ unsigned int count;
+
+public:
+
+ SimpleCountingTask() : count(0) {}
+ virtual ~SimpleCountingTask() {}
+
+ virtual bool iterate() {
+
+ count++;
+ return false;
+ }
+
+ unsigned int getCount() const { return count; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+class InfiniteCountingTask : public Task {
+private:
+
+ unsigned int count;
+
+public:
+
+ InfiniteCountingTask() : count(0) {}
+ virtual ~InfiniteCountingTask() {}
+
+ virtual bool iterate() {
+
+ count++;
+ return true;
+ }
+
+ unsigned int getCount() const { return count; }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+void TaskRunnerTest::testSimple() {
+
+ CPPUNIT_ASSERT_THROW_MESSAGE(
+ "Should throw a NullPointerException",
+ std::auto_ptr<TaskRunner>( new TaskRunner( NULL ) ),
+ NullPointerException );
+
+ SimpleCountingTask simpleTask;
+ CPPUNIT_ASSERT( simpleTask.getCount() == 0 );
+ TaskRunner simpleTaskRunner( &simpleTask );
+
+ simpleTaskRunner.wakeup();
+ Thread::sleep( 250 );
+ CPPUNIT_ASSERT( simpleTask.getCount() >= 1 );
+ simpleTaskRunner.wakeup();
+ Thread::sleep( 250 );
+ CPPUNIT_ASSERT( simpleTask.getCount() >= 2 );
+
+ InfiniteCountingTask infiniteTask;
+ CPPUNIT_ASSERT( infiniteTask.getCount() == 0 );
+ TaskRunner infiniteTaskRunner( &infiniteTask );
+ Thread::sleep( 500 );
+ CPPUNIT_ASSERT( infiniteTask.getCount() != 0 );
+ infiniteTaskRunner.shutdown();
+ int count = infiniteTask.getCount();
+ Thread::sleep( 250 );
+ CPPUNIT_ASSERT( infiniteTask.getCount() == count );
+
+}
Propchange:
activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.h
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.h?rev=752573&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.h (added)
+++ activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.h Wed Mar
11 18:55:53 2009
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+
+#ifndef _ACTIVEMQ_UTIL_TASKRUNNERTEST_H_
+#define _ACTIVEMQ_UTIL_TASKRUNNERTEST_H_
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace activemq {
+namespace util {
+
+ class TaskRunnerTest : public CppUnit::TestFixture {
+
+ CPPUNIT_TEST_SUITE( TaskRunnerTest );
+ CPPUNIT_TEST( testSimple );
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ TaskRunnerTest() {}
+ virtual ~TaskRunnerTest() {}
+
+ void testSimple();
+
+ };
+
+}}
+
+#endif /* _ACTIVEMQ_UTIL_TASKRUNNERTEST_H_ */
Propchange: activemq/activemq-cpp/trunk/src/test/activemq/util/TaskRunnerTest.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: activemq/activemq-cpp/trunk/src/test/testRegistry.cpp
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/testRegistry.cpp?rev=752573&r1=752572&r2=752573&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/testRegistry.cpp (original)
+++ activemq/activemq-cpp/trunk/src/test/testRegistry.cpp Wed Mar 11 18:55:53
2009
@@ -105,6 +105,8 @@
//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::URISupportTest );
//#include <activemq/util/MemoryUsageTest.h>
//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::MemoryUsageTest );
+//#include <activemq/util/TaskRunnerTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::util::TaskRunnerTest );
//
//#include <activemq/wireformat/WireFormatRegistryTest.h>
//CPPUNIT_TEST_SUITE_REGISTRATION(
activemq::wireformat::WireFormatRegistryTest );