summaryrefslogtreecommitdiff
path: root/cpp/test
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/test')
-rw-r--r--cpp/test/IceStorm/Makefile5
-rw-r--r--cpp/test/IceStorm/Makefile.mak5
-rw-r--r--cpp/test/IceStorm/federation/.depend6
-rw-r--r--cpp/test/IceStorm/federation/.gitignore3
-rw-r--r--cpp/test/IceStorm/federation/0.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/federation/1.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/federation/2.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/federation/Makefile3
-rw-r--r--cpp/test/IceStorm/federation/Makefile.mak3
-rw-r--r--cpp/test/IceStorm/federation/Publisher.cpp2
-rw-r--r--cpp/test/IceStorm/federation/Subscriber.cpp2
-rw-r--r--cpp/test/IceStorm/federation/db/.gitignore1
-rwxr-xr-xcpp/test/IceStorm/federation/run.py124
-rw-r--r--cpp/test/IceStorm/federation2/.depend6
-rw-r--r--cpp/test/IceStorm/federation2/.gitignore6
-rw-r--r--cpp/test/IceStorm/federation2/0.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/federation2/0.db2/.gitignore1
-rw-r--r--cpp/test/IceStorm/federation2/1.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/federation2/1.db2/.gitignore1
-rw-r--r--cpp/test/IceStorm/federation2/2.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/federation2/2.db2/.gitignore1
-rw-r--r--cpp/test/IceStorm/federation2/Makefile3
-rw-r--r--cpp/test/IceStorm/federation2/Makefile.mak6
-rw-r--r--cpp/test/IceStorm/federation2/Publisher.cpp47
-rw-r--r--cpp/test/IceStorm/federation2/Subscriber.cpp2
-rwxr-xr-xcpp/test/IceStorm/federation2/run.py642
-rw-r--r--cpp/test/IceStorm/rep1/.depend6
-rw-r--r--cpp/test/IceStorm/rep1/.gitignore12
-rw-r--r--cpp/test/IceStorm/rep1/0.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/rep1/1.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/rep1/2.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/rep1/Makefile56
-rw-r--r--cpp/test/IceStorm/rep1/Makefile.mak76
-rw-r--r--cpp/test/IceStorm/rep1/Publisher.cpp149
-rw-r--r--cpp/test/IceStorm/rep1/Single.ice23
-rw-r--r--cpp/test/IceStorm/rep1/Sub.cpp124
-rw-r--r--cpp/test/IceStorm/rep1/Subscriber.cpp217
-rwxr-xr-xcpp/test/IceStorm/rep1/run.py398
-rw-r--r--cpp/test/IceStorm/repgrid/.depend4
-rw-r--r--cpp/test/IceStorm/repgrid/.gitignore10
-rw-r--r--cpp/test/IceStorm/repgrid/Client.cpp147
-rw-r--r--cpp/test/IceStorm/repgrid/Makefile38
-rw-r--r--cpp/test/IceStorm/repgrid/Makefile.mak56
-rw-r--r--cpp/test/IceStorm/repgrid/Single.ice23
-rw-r--r--cpp/test/IceStorm/repgrid/application.xml54
-rw-r--r--cpp/test/IceStorm/repgrid/db/.gitignore1
-rwxr-xr-xcpp/test/IceStorm/repgrid/run.py32
-rw-r--r--cpp/test/IceStorm/repstress/.depend10
-rw-r--r--cpp/test/IceStorm/repstress/.gitignore14
-rw-r--r--cpp/test/IceStorm/repstress/0.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/repstress/1.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/repstress/2.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/repstress/Control.cpp63
-rw-r--r--cpp/test/IceStorm/repstress/Controller.ice24
-rw-r--r--cpp/test/IceStorm/repstress/Makefile59
-rw-r--r--cpp/test/IceStorm/repstress/Makefile.mak78
-rw-r--r--cpp/test/IceStorm/repstress/Publisher.cpp169
-rw-r--r--cpp/test/IceStorm/repstress/Single.ice23
-rw-r--r--cpp/test/IceStorm/repstress/Subscriber.cpp162
-rwxr-xr-xcpp/test/IceStorm/repstress/run.py169
-rw-r--r--cpp/test/IceStorm/single/.depend6
-rw-r--r--cpp/test/IceStorm/single/.gitignore3
-rw-r--r--cpp/test/IceStorm/single/0.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/single/1.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/single/2.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/single/Makefile3
-rw-r--r--cpp/test/IceStorm/single/Makefile.mak3
-rw-r--r--cpp/test/IceStorm/single/Publisher.cpp2
-rw-r--r--cpp/test/IceStorm/single/Subscriber.cpp11
-rwxr-xr-xcpp/test/IceStorm/single/run.py134
-rw-r--r--cpp/test/IceStorm/stress/.depend6
-rw-r--r--cpp/test/IceStorm/stress/.gitignore6
-rw-r--r--cpp/test/IceStorm/stress/0.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/stress/0.db2/.gitignore1
-rw-r--r--cpp/test/IceStorm/stress/1.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/stress/1.db2/.gitignore1
-rw-r--r--cpp/test/IceStorm/stress/2.db/.gitignore1
-rw-r--r--cpp/test/IceStorm/stress/2.db2/.gitignore1
-rw-r--r--cpp/test/IceStorm/stress/Makefile3
-rw-r--r--cpp/test/IceStorm/stress/Makefile.mak6
-rw-r--r--cpp/test/IceStorm/stress/Publisher.cpp2
-rw-r--r--cpp/test/IceStorm/stress/Subscriber.cpp2
-rwxr-xr-xcpp/test/IceStorm/stress/run.py377
83 files changed, 2894 insertions, 757 deletions
diff --git a/cpp/test/IceStorm/Makefile b/cpp/test/IceStorm/Makefile
index 1fc080ddd3e..c31494dc138 100644
--- a/cpp/test/IceStorm/Makefile
+++ b/cpp/test/IceStorm/Makefile
@@ -14,7 +14,10 @@ include $(top_srcdir)/config/Make.rules
SUBDIRS = single \
federation \
federation2 \
- stress
+ stress \
+ rep1 \
+ repstress \
+ repgrid
$(EVERYTHING)::
@for subdir in $(SUBDIRS); \
diff --git a/cpp/test/IceStorm/Makefile.mak b/cpp/test/IceStorm/Makefile.mak
index 26d6110a05e..189028c5bc6 100644
--- a/cpp/test/IceStorm/Makefile.mak
+++ b/cpp/test/IceStorm/Makefile.mak
@@ -14,7 +14,10 @@ top_srcdir = ..\..
SUBDIRS = single \
federation \
federation2 \
- stress
+ stress \
+ rep1 \
+ repstress \
+ repgrid
$(EVERYTHING)::
@for %i in ( $(SUBDIRS) ) do \
diff --git a/cpp/test/IceStorm/federation/.depend b/cpp/test/IceStorm/federation/.depend
index 17947ebeaa9..46c15001bb1 100644
--- a/cpp/test/IceStorm/federation/.depend
+++ b/cpp/test/IceStorm/federation/.depend
@@ -1,5 +1,5 @@
-Event$(OBJEXT): Event.cpp Event.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
-Publisher$(OBJEXT): Publisher.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Event.h
-Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Event.h ../../include/TestCommon.h
+Event$(OBJEXT): Event.cpp Event.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
+Publisher$(OBJEXT): Publisher.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Event.h
+Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Event.h ../../include/TestCommon.h
Event.cpp: Event.ice
Event.ice: $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/test/IceStorm/federation/.gitignore b/cpp/test/IceStorm/federation/.gitignore
index 08f28c36e0f..f6811ab9123 100644
--- a/cpp/test/IceStorm/federation/.gitignore
+++ b/cpp/test/IceStorm/federation/.gitignore
@@ -7,3 +7,6 @@ Event.cpp
Event.h
build.txt
db/*
+0.db/*
+1.db/*
+2.db/*
diff --git a/cpp/test/IceStorm/federation/0.db/.gitignore b/cpp/test/IceStorm/federation/0.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/federation/0.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/federation/1.db/.gitignore b/cpp/test/IceStorm/federation/1.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/federation/1.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/federation/2.db/.gitignore b/cpp/test/IceStorm/federation/2.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/federation/2.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/federation/Makefile b/cpp/test/IceStorm/federation/Makefile
index ffc90c7dfba..b1ef9bd92bd 100644
--- a/cpp/test/IceStorm/federation/Makefile
+++ b/cpp/test/IceStorm/federation/Makefile
@@ -42,5 +42,8 @@ $(SUBSCRIBER): $(OBJS) $(SOBJS)
clean::
-rm -f build.txt
-rm -f db/*
+ -rm -f 0.db/*
+ -rm -f 1.db/*
+ -rm -f 2.db/*
include .depend
diff --git a/cpp/test/IceStorm/federation/Makefile.mak b/cpp/test/IceStorm/federation/Makefile.mak
index 30d7eab0b51..fa8da0b91a0 100644
--- a/cpp/test/IceStorm/federation/Makefile.mak
+++ b/cpp/test/IceStorm/federation/Makefile.mak
@@ -61,5 +61,8 @@ clean::
del /q Event.cpp Event.h
del /q db\topicmanager db\log.*
for %f in (db\*) do if not %f == db\.gitignore del /q %f
+ for %f in (0.db\*) do if not %f == 0.db\.gitignore del /q %f
+ for %f in (1.db\*) do if not %f == 1.db\.gitignore del /q %f
+ for %f in (2.db\*) do if not %f == 2.db\.gitignore del /q %f
!include .depend
diff --git a/cpp/test/IceStorm/federation/Publisher.cpp b/cpp/test/IceStorm/federation/Publisher.cpp
index 93bf778fc69..bcd8d254cdd 100644
--- a/cpp/test/IceStorm/federation/Publisher.cpp
+++ b/cpp/test/IceStorm/federation/Publisher.cpp
@@ -20,7 +20,7 @@ int
run(int argc, char* argv[], const CommunicatorPtr& communicator)
{
PropertiesPtr properties = communicator->getProperties();
- const char* managerProxyProperty = "IceStorm.TopicManager.Proxy";
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
string managerProxy = properties->getProperty(managerProxyProperty);
if(managerProxy.empty())
{
diff --git a/cpp/test/IceStorm/federation/Subscriber.cpp b/cpp/test/IceStorm/federation/Subscriber.cpp
index b7447abd108..6bef00cd002 100644
--- a/cpp/test/IceStorm/federation/Subscriber.cpp
+++ b/cpp/test/IceStorm/federation/Subscriber.cpp
@@ -95,7 +95,7 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
}
PropertiesPtr properties = communicator->getProperties();
- const char* managerProxyProperty = "IceStorm.TopicManager.Proxy";
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
string managerProxy = properties->getProperty(managerProxyProperty);
if(managerProxy.empty())
{
diff --git a/cpp/test/IceStorm/federation/db/.gitignore b/cpp/test/IceStorm/federation/db/.gitignore
index 39af5887579..dc8ec467d5f 100644
--- a/cpp/test/IceStorm/federation/db/.gitignore
+++ b/cpp/test/IceStorm/federation/db/.gitignore
@@ -1 +1,2 @@
+*
# Dummy file, so that git retains this otherwise empty directory.
diff --git a/cpp/test/IceStorm/federation/run.py b/cpp/test/IceStorm/federation/run.py
index 3f36ce46a4c..0cf7f0f5ae9 100755
--- a/cpp/test/IceStorm/federation/run.py
+++ b/cpp/test/IceStorm/federation/run.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# **********************************************************************
#
-# Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
#
# This copy of Ice is licensed to you under the terms described in the
# ICE_LICENSE file included in this distribution.
@@ -25,25 +25,9 @@ TestUtil.processCmdLine()
name = os.path.join("IceStorm", "federation")
testdir = os.path.dirname(os.path.abspath(__file__))
-iceBox = TestUtil.getIceBox(testdir)
-iceBoxAdmin = os.path.join(TestUtil.getBinDir(__file__), "iceboxadmin")
-iceStormAdmin = os.path.join(TestUtil.getBinDir(__file__), "icestormadmin")
+import IceStormUtil
-iceStormService = " --IceBox.Service.IceStorm=IceStormService," + TestUtil.getIceSoVersion() + ":createIceStorm" + \
- ' --IceStorm.TopicManager.Endpoints="default -p 12011"' + \
- ' --IceStorm.Publish.Endpoints="default"' + \
- " --IceBox.PrintServicesReady=IceStorm" + \
- " --IceBox.InheritProperties=1" + \
- ' --Ice.Admin.Endpoints="default -p 12010"' + \
- " --Ice.Admin.InstanceName=IceBox"
-
-serviceManagerProxy = ' --IceBoxAdmin.ServiceManager.Proxy="IceBox/admin -f IceBox.ServiceManager:default -p 12010"'
-
-iceStormReference = ' --IceStorm.TopicManager.Proxy="IceStorm/TopicManager:default -p 12011"'
-
-def doTest(batch):
- global testdir
- global iceStormReference
+def doTest(icestorm, batch):
publisher = os.path.join(testdir, "publisher")
subscriber = os.path.join(testdir, "subscriber")
@@ -55,7 +39,7 @@ def doTest(batch):
name = "subscriber"
batchOptions = ""
- subscriberPipe = TestUtil.startServer(subscriber, batchOptions + iceStormReference + " 2>&1")
+ subscriberPipe = TestUtil.startServer(subscriber, batchOptions + icestorm.reference() + " 2>&1")
TestUtil.getServerPid(subscriberPipe)
TestUtil.getAdapterReady(subscriberPipe)
@@ -63,7 +47,7 @@ def doTest(batch):
# Start the publisher. This should publish events which eventually
# causes subscriber to terminate.
#
- publisherPipe = TestUtil.startClient(publisher, iceStormReference + " 2>&1")
+ publisherPipe = TestUtil.startClient(publisher, icestorm.reference() + " 2>&1")
TestUtil.printOutputFromPipe(publisherPipe)
@@ -72,65 +56,51 @@ def doTest(batch):
return subscriberStatus or publisherStatus
-dbHome = os.path.join(testdir, "db")
-TestUtil.cleanDbDir(dbHome)
-iceStormDBEnv=" --Freeze.DbEnv.IceStorm.DbHome=" + dbHome
-
-print "starting icestorm service...",
-iceBoxPipe = TestUtil.startServer(iceBox, iceStormService + iceStormDBEnv + " 2>&1")
-TestUtil.getServerPid(iceBoxPipe)
-TestUtil.waitServiceReady(iceBoxPipe, "IceStorm")
-print "ok"
-
-print "setting up topics...",
-iceStormAdminPipe = TestUtil.startClient(iceStormAdmin, iceStormReference + \
- r' -e "create fed1 fed2 fed3; link fed1 fed2 10; link fed2 fed3 5" 2>&1')
-iceStormAdminStatus = TestUtil.closePipe(iceStormAdminPipe)
-if iceStormAdminStatus:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
+def runtest(type, **args):
+ icestorm = IceStormUtil.init(toplevel, testdir, type, **args)
-#
-# Test oneway subscribers.
-#
-print "testing oneway subscribers...",
-sys.stdout.flush()
-onewayStatus = doTest(0)
-print "ok"
+ icestorm.start()
-#
-# Test batch oneway subscribers.
-#
-print "testing batch subscribers...",
-sys.stdout.flush()
-batchStatus = doTest(1)
-print "ok"
+ print "setting up topics...",
+ sys.stdout.flush()
+ icestorm.admin("create fed1 fed2 fed3; link fed1 fed2 10; link fed2 fed3 5")
+ print "ok"
-#
-# Destroy the topics.
-#
-print "destroying topics...",
-iceStormAdminPipe = TestUtil.startClient(iceStormAdmin, iceStormReference + r' -e "destroy fed1 fed2 fed3" 2>&1')
-iceStormAdminStatus = TestUtil.closePipe(iceStormAdminPipe)
-if iceStormAdminStatus:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
+ #
+ # Test oneway subscribers.
+ #
+ print "testing oneway subscribers...",
+ sys.stdout.flush()
+ onewayStatus = doTest(icestorm, 0)
+ print "ok"
-#
-# Shutdown icestorm.
-#
-print "shutting down icestorm service...",
-iceBoxAdminPipe = TestUtil.startClient(iceBoxAdmin, serviceManagerProxy + r' shutdown 2>&1')
-iceBoxAdminStatus = TestUtil.closePipe(iceBoxAdminPipe)
-if iceBoxAdminStatus:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-if TestUtil.serverStatus() or onewayStatus or batchStatus:
- TestUtil.killServers()
- sys.exit(1)
+ #
+ # Test batch oneway subscribers.
+ #
+ print "testing batch subscribers...",
+ sys.stdout.flush()
+ batchStatus = doTest(icestorm, 1)
+ print "ok"
+
+ #
+ # Destroy the topics.
+ #
+ print "destroying topics...",
+ icestorm.admin("destroy fed1 fed2 fed3")
+ print "ok"
+
+ #
+ # Shutdown icestorm.
+ #
+ icestorm.stop()
+
+ if TestUtil.serverStatus() or onewayStatus or batchStatus:
+ TestUtil.killServers()
+ sys.exit(1)
+
+runtest("persistent")
+runtest("transient")
+runtest("replicated", replicatedPublisher = False)
+runtest("replicated", replicatedPublisher = True)
sys.exit(0)
diff --git a/cpp/test/IceStorm/federation2/.depend b/cpp/test/IceStorm/federation2/.depend
index 17947ebeaa9..8f10780e93b 100644
--- a/cpp/test/IceStorm/federation2/.depend
+++ b/cpp/test/IceStorm/federation2/.depend
@@ -1,5 +1,5 @@
-Event$(OBJEXT): Event.cpp Event.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
-Publisher$(OBJEXT): Publisher.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Event.h
-Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Event.h ../../include/TestCommon.h
+Event$(OBJEXT): Event.cpp Event.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
+Publisher$(OBJEXT): Publisher.cpp $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/IceUtil/Options.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Event.h
+Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Event.h ../../include/TestCommon.h
Event.cpp: Event.ice
Event.ice: $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/test/IceStorm/federation2/.gitignore b/cpp/test/IceStorm/federation2/.gitignore
index f01afc6f930..1e15a552882 100644
--- a/cpp/test/IceStorm/federation2/.gitignore
+++ b/cpp/test/IceStorm/federation2/.gitignore
@@ -8,3 +8,9 @@ Event.h
build.txt
db/*
db2/*
+0.db/*
+0.db2/*
+1.db/*
+1.db2/*
+2.db/*
+2.db2/*
diff --git a/cpp/test/IceStorm/federation2/0.db/.gitignore b/cpp/test/IceStorm/federation2/0.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/federation2/0.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/federation2/0.db2/.gitignore b/cpp/test/IceStorm/federation2/0.db2/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/federation2/0.db2/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/federation2/1.db/.gitignore b/cpp/test/IceStorm/federation2/1.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/federation2/1.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/federation2/1.db2/.gitignore b/cpp/test/IceStorm/federation2/1.db2/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/federation2/1.db2/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/federation2/2.db/.gitignore b/cpp/test/IceStorm/federation2/2.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/federation2/2.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/federation2/2.db2/.gitignore b/cpp/test/IceStorm/federation2/2.db2/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/federation2/2.db2/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/federation2/Makefile b/cpp/test/IceStorm/federation2/Makefile
index 3c3daff5e3e..decde782e42 100644
--- a/cpp/test/IceStorm/federation2/Makefile
+++ b/cpp/test/IceStorm/federation2/Makefile
@@ -42,5 +42,8 @@ $(SUBSCRIBER): $(OBJS) $(SOBJS)
clean::
-rm -f build.txt
-rm -f db/* db2/*
+ -rm -f 0.db/* 0.db2/*
+ -rm -f 1.db/* 1.db2/*
+ -rm -f 2.db/* 2.db2/*
include .depend
diff --git a/cpp/test/IceStorm/federation2/Makefile.mak b/cpp/test/IceStorm/federation2/Makefile.mak
index 84101991865..ddc23c4ef4d 100644
--- a/cpp/test/IceStorm/federation2/Makefile.mak
+++ b/cpp/test/IceStorm/federation2/Makefile.mak
@@ -60,6 +60,12 @@ clean::
del /q build.txt
del /q Event.cpp Event.h
for %f in (db\*) do if not %f == db\.gitignore del /q %f
+ for %f in (0.db\*) do if not %f == 0.db\.gitignore del /q %f
+ for %f in (1.db\*) do if not %f == 1.db\.gitignore del /q %f
+ for %f in (2.db\*) do if not %f == 2.db\.gitignore del /q %f
for %f in (db2\*) do if not %f == db2\.gitignore del /q %f
+ for %f in (0.db2\*) do if not %f == 0.db2\.gitignore del /q %f
+ for %f in (1.db2\*) do if not %f == 1.db2\.gitignore del /q %f
+ for %f in (2.db2\*) do if not %f == 2.db2\.gitignore del /q %f
!include .depend
diff --git a/cpp/test/IceStorm/federation2/Publisher.cpp b/cpp/test/IceStorm/federation2/Publisher.cpp
index c53ce9f1ce9..7a8fdc4b3ba 100644
--- a/cpp/test/IceStorm/federation2/Publisher.cpp
+++ b/cpp/test/IceStorm/federation2/Publisher.cpp
@@ -7,6 +7,8 @@
//
// **********************************************************************
+#include <IceUtil/IceUtil.h>
+#include <IceUtil/Options.h>
#include <Ice/Ice.h>
#include <IceStorm/IceStorm.h>
#include <Event.h>
@@ -19,8 +21,21 @@ using namespace Test;
int
run(int argc, char* argv[], const CommunicatorPtr& communicator)
{
+ IceUtilInternal::Options opts;
+ opts.addOpt("", "count", IceUtilInternal::Options::NeedArg);
+
+ try
+ {
+ opts.parse(argc, (const char**)argv);
+ }
+ catch(const IceUtilInternal::BadOptException& e)
+ {
+ cerr << argv[0] << ": " << e.reason << endl;
+ return EXIT_FAILURE;
+ }
+
PropertiesPtr properties = communicator->getProperties();
- const char* managerProxyProperty = "IceStorm.TopicManager.Proxy";
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
string managerProxy = properties->getProperty(managerProxyProperty);
if(managerProxy.empty())
{
@@ -50,16 +65,32 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
EventPrx eventFed1 = EventPrx::uncheckedCast(fed1->getPublisher()->ice_oneway());
- for(int i = 0; i < 10; ++i)
+ string arg = opts.optArg("count");
+ int count = 1;
+ if(arg.empty())
{
- eventFed1->pub("fed1");
+ count = atoi(arg.c_str());
}
+
+ while(true)
+ {
+ for(int i = 0; i < 10; ++i)
+ {
+ eventFed1->pub("fed1");
+ }
+ //
+ // Before we exit, we ping all proxies as twoway, to make sure
+ // that all oneways are delivered.
+ //
+ EventPrx::uncheckedCast(eventFed1->ice_twoway())->ice_ping();
- //
- // Before we exit, we ping all proxies as twoway, to make sure
- // that all oneways are delivered.
- //
- EventPrx::uncheckedCast(eventFed1->ice_twoway())->ice_ping();
+ if(count == 0)
+ {
+ break;
+ }
+ --count;
+ IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(1));
+ }
return EXIT_SUCCESS;
}
diff --git a/cpp/test/IceStorm/federation2/Subscriber.cpp b/cpp/test/IceStorm/federation2/Subscriber.cpp
index 5846d9903c0..da68ccc5bb5 100644
--- a/cpp/test/IceStorm/federation2/Subscriber.cpp
+++ b/cpp/test/IceStorm/federation2/Subscriber.cpp
@@ -103,7 +103,7 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
}
PropertiesPtr properties = communicator->getProperties();
- const char* managerProxyProperty = "IceStorm.TopicManager.Proxy";
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
string managerProxy = properties->getProperty(managerProxyProperty);
if(managerProxy.empty())
{
diff --git a/cpp/test/IceStorm/federation2/run.py b/cpp/test/IceStorm/federation2/run.py
index 411533e1ff0..a66c664d724 100755
--- a/cpp/test/IceStorm/federation2/run.py
+++ b/cpp/test/IceStorm/federation2/run.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# **********************************************************************
#
-# Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
#
# This copy of Ice is licensed to you under the terms described in the
# ICE_LICENSE file included in this distribution.
@@ -24,45 +24,51 @@ TestUtil.processCmdLine()
name = os.path.join("IceStorm", "federation2")
testdir = os.path.dirname(os.path.abspath(__file__))
-exedir = testdir
+import IceStormUtil
-iceBox = TestUtil.getIceBox(exedir)
-iceBoxAdmin = os.path.join(TestUtil.getBinDir(__file__), "iceboxadmin")
-iceStormAdmin = os.path.join(TestUtil.getBinDir(__file__), "icestormadmin")
+iceBox = TestUtil.getIceBox(testdir)
+iceBoxAdmin = os.path.join(TestUtil.getBinDir(testdir), "iceboxadmin")
+iceStormAdmin = os.path.join(TestUtil.getBinDir(testdir), "icestormadmin")
-iceBoxEndpoints = ' --IceBox.ServiceManager.Endpoints="default -p 12010" --Ice.Default.Locator='
-
-iceStormService = " --IceBox.Service.IceStorm=IceStormService," + TestUtil.getIceSoVersion() + ":createIceStorm" + \
- ' --IceStorm.TopicManager.Endpoints="default -p 12011"' + \
- ' --IceStorm.Publish.Endpoints="default -p 12012"' + \
- ' --IceStorm.InstanceName=TestIceStorm1 ' + \
- ' --IceStorm.Discard.Interval=2' + \
- ' --IceBox.PrintServicesReady=IceStorm' + \
- " --IceBox.InheritProperties=1"
-iceStormReference = ' --IceStorm.TopicManager.Proxy="TestIceStorm1/TopicManager: default -p 12011"'
-
-iceBoxEndpoints2 = ' --IceBox.ServiceManager.Endpoints="default -p 12020" --Ice.Default.Locator='
+publisher = os.path.join(testdir, "publisher")
+subscriber = os.path.join(testdir, "subscriber")
+
+def admin(ref, command):
+ pipe = TestUtil.startClient(iceStormAdmin, ref + r' -e "%s"' % command)
+ all = ""
+ while True:
+ line = pipe.readline();
+ if not line:
+ break
+ all = all + line
+ status = TestUtil.closePipe(pipe)
+ if status:
+ TestUtil.killServers()
+ sys.exit(1)
+ return all
-iceStormService2 = " --IceBox.Service.IceStorm=IceStormService," + TestUtil.getIceSoVersion() + ":createIceStorm" + \
- ' --IceStorm.TopicManager.Endpoints="default -p 12021"' + \
- ' --IceStorm.Publish.Endpoints="default -p 12022"' + \
- ' --IceStorm.InstanceName=TestIceStorm2 ' + \
- ' --IceStorm.Discard.Interval=2' + \
- ' --IceBox.PrintServicesReady=IceStorm' + \
- " --IceBox.InheritProperties=1"
-iceStormReference2 = ' --IceStorm.TopicManager.Proxy="TestIceStorm2/TopicManager: default -p 12021"'
+def printOutput(pipe):
+ try:
+ while True:
+ line = pipe.readline()
+ if not line:
+ break
+ print line,
+ sys.stdout.flush()
+ except IOError:
+ pass
-adminIceStormReference = ' --IceStormAdmin.TopicManager.Proxy="TestIceStorm1/TopicManager: default -p 12011" ' + \
- '--IceStormAdmin.TopicManager.Proxy2="TestIceStorm2/TopicManager: default -p 12021"'
+def runPublisher(icestorm1, opt = ""):
+ publisherPipe = TestUtil.startClient(publisher, opt + icestorm1.reference())
-def doTest(batch, subscriberRef = None):
- global testdir
- global iceStormReference
- global iceStormReference2
+ printOutput(publisherPipe)
- publisher = os.path.join(testdir, "publisher")
- subscriber = os.path.join(testdir, "subscriber")
+ publisherStatus = TestUtil.closePipe(publisherPipe)
+ if publisherStatus:
+ TestUtil.killServers()
+ sys.exit(1)
+def doTest(icestorm1, icestorm2, batch, subscriberRef = None):
if batch:
name = "batch subscriber"
batchOptions = " -b"
@@ -71,10 +77,9 @@ def doTest(batch, subscriberRef = None):
batchOptions = ""
if subscriberRef == None:
- subscriberRef = iceStormReference2
+ subscriberRef = icestorm2.reference()
-
- subscriberPipe = TestUtil.startServer(subscriber, batchOptions + subscriberRef + " 2>&1")
+ subscriberPipe = TestUtil.startServer(subscriber, batchOptions + subscriberRef)
TestUtil.getServerPid(subscriberPipe)
TestUtil.getAdapterReady(subscriberPipe)
@@ -82,56 +87,10 @@ def doTest(batch, subscriberRef = None):
# Start the publisher. This should publish events which eventually
# causes subscriber to terminate.
#
- publisherPipe = TestUtil.startClient(publisher, iceStormReference + " 2>&1")
-
- TestUtil.printOutputFromPipe(publisherPipe)
+ runPublisher(icestorm1)
subscriberStatus = TestUtil.specificServerStatus(subscriberPipe, 30)
- publisherStatus = TestUtil.closePipe(publisherPipe)
-
- return subscriberStatus or publisherStatus
-
-def startServers():
- global iceBox
- global iceBoxEndpoints
- global iceBoxEndpoints2
- global iceStormService
- global iceStormService2
- global iceStormDBEnv
- global iceStormDBEnv2
- iceBoxPipe = TestUtil.startServer(iceBox, iceBoxEndpoints + iceStormService + iceStormDBEnv)
- TestUtil.getServerPid(iceBoxPipe)
- TestUtil.waitServiceReady(iceBoxPipe, "IceStorm")
- iceBoxPipe2 = TestUtil.startServer(iceBox, iceBoxEndpoints2 + iceStormService2 + iceStormDBEnv2)
- TestUtil.getServerPid(iceBoxPipe2)
- TestUtil.waitServiceReady(iceBoxPipe2, "IceStorm")
-
- return iceBoxPipe, iceBoxPipe2
-
-def stopServers(p1, p2 = None):
- global iceBox
- global iceBoxAdmin
- global iceBoxEndpoints
- global iceBoxEndpoints2
- pipe = TestUtil.startClient(iceBoxAdmin, iceBoxEndpoints + r' shutdown' + " 2>&1")
- status = TestUtil.closePipe(pipe)
- if status or TestUtil.specificServerStatus(p1):
- TestUtil.killServers()
- sys.exit(1)
- if p2:
- pipe = TestUtil.startClient(iceBoxAdmin, iceBoxEndpoints2 + r' shutdown' + " 2>&1")
- status = TestUtil.closePipe(pipe)
- if status or TestUtil.specificServerStatus(p2):
- TestUtil.killServers()
- sys.exit(1)
-
-dbHome = os.path.join(testdir, "db")
-TestUtil.cleanDbDir(dbHome)
-iceStormDBEnv=" --Freeze.DbEnv.IceStorm.DbHome=" + dbHome
-
-dbHome2 = os.path.join(testdir, "db2")
-TestUtil.cleanDbDir(dbHome2)
-iceStormDBEnv2=" --Freeze.DbEnv.IceStorm.DbHome=" + dbHome2
+ return subscriberStatus
#
# Test #1:
@@ -139,296 +98,269 @@ iceStormDBEnv2=" --Freeze.DbEnv.IceStorm.DbHome=" + dbHome2
# create a cross service link fed1->fed2 and ensure the events are
# published between them correctly.
#
-print "starting IceStorm services...",
-sys.stdout.flush()
-iceBoxPipe1, iceBoxPipe2 = startServers()
-print "ok"
-
-print "setting up the topics...",
-sys.stdout.flush()
-command = r' -e "create TestIceStorm1/fed1 TestIceStorm2/fed1; link TestIceStorm1/fed1 TestIceStorm2/fed1"'
-iceStormAdminPipe = TestUtil.startClient(iceStormAdmin, adminIceStormReference + command + " 2>&1")
-iceStormAdminStatus = TestUtil.closePipe(iceStormAdminPipe)
-if iceStormAdminStatus:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
+def runtest(type, **args):
+ icestorm1 = IceStormUtil.init(toplevel, testdir, type, additional = '--IceStorm.Discard.Interval=2',
+ dbDir = "db", instanceName = "TestIceStorm1", port = 12000, **args)
+ icestorm1.start()
+ icestorm2 = IceStormUtil.init(toplevel, testdir, type, additional = '--IceStorm.Discard.Interval=2',
+ dbDir = "db2", instanceName = "TestIceStorm2", port = 12500, **args)
+ icestorm2.start()
-#
-# Test oneway subscribers.
-#
-print "testing federation with oneway subscribers...",
-sys.stdout.flush()
-onewayStatus = doTest(0)
-print "ok"
-
-#
-# Test batch oneway subscribers.
-#
-print "testing federation with batch subscribers...",
-sys.stdout.flush()
-batchStatus = doTest(1)
-print "ok"
+ adminIceStormReference = ' --IceStormAdmin.TopicManager.Proxy="%s" --IceStormAdmin.TopicManager.Proxy2="%s"' % (
+ icestorm1.proxy(), icestorm2.proxy())
-if onewayStatus or batchStatus:
- TestUtil.killServers()
- sys.exit(1)
+ print "setting up the topics...",
+ sys.stdout.flush()
+ admin(adminIceStormReference, "create TestIceStorm1/fed1 TestIceStorm2/fed1; link TestIceStorm1/fed1 TestIceStorm2/fed1")
+ print "ok"
-#
-# Test #2:
-#
-# Stop and restart the service and repeat the test. This ensures that
-# the database is correct.
-#
-print "restarting services to ensure that the database content is preserved...",
-sys.stdout.flush()
-
-#
-# Shutdown icestorm.
-#
-stopServers(iceBoxPipe1, iceBoxPipe2)
-
-iceBoxPipe1, iceBoxPipe2 = startServers()
-print "ok"
-
-#
-# Test oneway subscribers.
-#
-print "retesting federation with oneway subscribers... ",
-sys.stdout.flush()
-onewayStatus = doTest(0)
-print "ok"
-
-#
-# Test batch oneway subscribers.
-#
-print "retesting federation with batch subscribers... ",
-sys.stdout.flush()
-batchStatus = doTest(1)
-print "ok"
-
-if onewayStatus or batchStatus:
- TestUtil.killServers()
- sys.exit(1)
-
-#
-# Shutdown icestorm.
-#
-stopServers(iceBoxPipe1, iceBoxPipe2)
+ #
+ # Test oneway subscribers.
+ #
+ print "testing federation with oneway subscribers...",
+ sys.stdout.flush()
+ onewayStatus = doTest(icestorm1, icestorm2, 0)
+ print "ok"
-#
-# This is used by the below test to confirm that the link warning is
-# emitted. This class conforms with the TestUtil.ReaderThread protocol.
-#
-class ExpectorThread(threading.Thread):
- def __init__(self, pipe):
- self.mutex = threading.Lock()
- self.pipe = pipe
- # Suppress "adapter ready" messages. Under windows the eol isn't \n.
- self.re = [ [ re.compile(" ready\r?\n$"), 0 ] ]
- threading.Thread.__init__(self)
-
- def run(self):
- try:
- while 1:
- line = self.pipe.readline()
- if not line: break
- found = False;
- self.mutex.acquire()
- for item in self.re:
- if item[0].search(line):
- found = True
- item[1] = item[1] + 1
- break
- self.mutex.release()
- if not found:
- print line,
- except IOError:
- pass
-
- self.status = TestUtil.closePipe(self.pipe)
-
- # To comply with the ReaderThread protocol.
- def getPipe(self):
- return self.pipe
-
- # To comply with the ReaderThread protocol.
- def getStatus(self):
- return self.status
-
- def matches(self, index):
- self.mutex.acquire()
- m = self.re[index][1]
- self.mutex.release()
- return m
-
- def expect(self, r):
- self.mutex.acquire()
- self.re.append([r, 0])
- l = len(self.re)-1
- self.mutex.release()
- return l
+ #
+ # Test batch oneway subscribers.
+ #
+ print "testing federation with batch subscribers...",
+ sys.stdout.flush()
+ batchStatus = doTest(icestorm1, icestorm2, 1)
+ print "ok"
-#
-# Test #3:
-#
-# Restart the first server and publish some events. Attach a
-# subscriber to the channel and make sure the events are received.
-#
-# Then re-start the linked downstream server and publish the events.
-# Ensure they are received by the linked server.
-#
-print "restarting only one IceStorm server...",
-sys.stdout.flush()
-iceBoxPipe1 = TestUtil.startServer(iceBox, iceBoxEndpoints + iceStormService + iceStormDBEnv + " 2>&1")
-TestUtil.getServerPid(iceBoxPipe1)
-TestUtil.waitServiceReady(iceBoxPipe1, "IceStorm", False)
-expectorThread = ExpectorThread(iceBoxPipe1)
-expectorThread.start()
-global serverThreads
-TestUtil.serverThreads.append(expectorThread)
-index = expectorThread.expect(re.compile("fed1.link.*link offline"))
-expectorThread.expect(re.compile("connection refused"))
-print "ok"
+ if onewayStatus or batchStatus:
+ TestUtil.killServers()
+ sys.exit(1)
-#
-# Test oneway subscribers.
-#
-print "testing that the federation link reports an error...",
-sys.stdout.flush()
-onewayStatus = doTest(0, iceStormReference)
-print "ok"
+ #
+ # Test #2:
+ #
+ # Stop and restart the service and repeat the test. This ensures that
+ # the database is correct.
+ #
+ print "restarting services to ensure that the database content is preserved...",
+ sys.stdout.flush()
-#
-# Give some time for the error to be reported
-#
-time.sleep(2)
+ #
+ # Shutdown icestorm.
+ #
+ icestorm1.stop()
+ icestorm2.stop()
-if onewayStatus or expectorThread.matches(index) != 1:
- TestUtil.killServers()
- sys.exit(1)
+ icestorm1.start(echo=False)
+ icestorm2.start(echo=False)
+ print "ok"
-print "starting downstream icestorm server...",
-sys.stdout.flush()
-iceBoxPipe2 = TestUtil.startServer(iceBox, iceBoxEndpoints2 + iceStormService2 + iceStormDBEnv2 + " 2>&1")
-TestUtil.getServerPid(iceBoxPipe2)
-TestUtil.waitServiceReady(iceBoxPipe2, "IceStorm")
-print "ok"
+ #
+ # Test oneway subscribers.
+ #
+ print "retesting federation with oneway subscribers... ",
+ sys.stdout.flush()
+ onewayStatus = doTest(icestorm1, icestorm2, 0)
+ print "ok"
-#
-# Need to sleep for at least the discard interval.
-#
-time.sleep(3)
+ #
+ # Test batch oneway subscribers.
+ #
+ print "retesting federation with batch subscribers... ",
+ sys.stdout.flush()
+ batchStatus = doTest(icestorm1, icestorm2, 1)
+ print "ok"
-#
-# Test oneway subscribers.
-#
-print "testing link is reestablished...",
-sys.stdout.flush()
-onewayStatus = doTest(0)
-print "ok"
+ if onewayStatus or batchStatus:
+ TestUtil.killServers()
+ sys.exit(1)
-if onewayStatus or expectorThread.matches(index) != 1:
- TestUtil.killServers()
- sys.exit(1)
+ #
+ # Shutdown icestorm.
+ #
+ icestorm1.stop()
+ icestorm2.stop()
-#
-# Test #4:
-#
-# Trash the TestIceStorm2 database. Then restart the servers and
-# verify that the link is removed.
-#
-print "destroying the downstream IceStorm service database...",
-sys.stdout.flush()
-stopServers(iceBoxPipe1, iceBoxPipe2)
-
-TestUtil.cleanDbDir(dbHome2)
-print "ok"
-
-print "restarting IceStorm servers...",
-sys.stdout.flush()
-iceBoxPipe1, iceBoxPipe2 = startServers()
-print "ok"
-
-print "checking link still exists...",
-iceStormAdminPipe = TestUtil.startClient(iceStormAdmin, adminIceStormReference + r' -e "links TestIceStorm1"')
-line = iceStormAdminPipe.readline()
-if not re.compile("fed1 with cost 0").search(line):
- print line
- TestUtil.killServers()
- sys.exit(1)
-iceStormAdminStatus = TestUtil.closePipe(iceStormAdminPipe)
-if iceStormAdminStatus:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-print "publishing some events...",
-sys.stdout.flush()
-publisher = os.path.join(testdir, "publisher")
-publisherPipe = TestUtil.startClient(publisher, iceStormReference + " 2>&1")
+ #
+ # This is used by the below test to confirm that the link warning is
+ # emitted. This class conforms with the TestUtil.ReaderThread protocol.
+ #
+ class ExpectorThread(threading.Thread):
+ def __init__(self, pipe):
+ self.mutex = threading.Lock()
+ self.pipe = pipe
+ # Suppress "adapter ready" messages. Under windows the eol isn't \n.
+ self.re = [ [ re.compile(" ready\r?\n$"), 0 ] ]
+ threading.Thread.__init__(self)
+
+ def run(self):
+ try:
+ while 1:
+ line = self.pipe.readline()
+ if not line: break
+ found = False
+ self.mutex.acquire()
+ for item in self.re:
+ if item[0].search(line):
+ found = True
+ item[1] = item[1] + 1
+ break
+ self.mutex.release()
+ if not found:
+ print line,
+ except IOError:
+ pass
+
+ self.status = TestUtil.closePipe(self.pipe)
+
+ # To comply with the ReaderThread protocol.
+ def getPipe(self):
+ return self.pipe
+
+ # To comply with the ReaderThread protocol.
+ def getStatus(self):
+ return self.status
+
+ def matches(self, index):
+ self.mutex.acquire()
+ m = self.re[index][1]
+ self.mutex.release()
+ return m
+
+ def expect(self, r):
+ self.mutex.acquire()
+ self.re.append([r, 0])
+ l = len(self.re)-1
+ self.mutex.release()
+ return l
-TestUtil.printOutputFromPipe(publisherPipe)
+ #
+ # Test #3:
+ #
+ # Restart the first server and publish some events. Attach a
+ # subscriber to the channel and make sure the events are received.
+ #
+ # Then re-start the linked downstream server and publish the events.
+ # Ensure they are received by the linked server.
+ #
+ if type != "replicated":
+ print "restarting only one IceStorm server...",
+ sys.stdout.flush()
+ pipe = icestorm1.start(echo=False, createThread = False)
+ expectorThread = ExpectorThread(pipe)
+ expectorThread.start()
+ global serverThreads
+
+ TestUtil.serverThreads.append(expectorThread)
+ index = expectorThread.expect(re.compile("topic.fed1.*subscriber offline"))
+ expectorThread.expect(re.compile("connection refused"))
+ print "ok"
+
+ #
+ # Test oneway subscribers.
+ #
+ print "testing that the federation link reports an error...",
+ sys.stdout.flush()
+ onewayStatus = doTest(icestorm1, icestorm2, 0, icestorm1.reference())
+
+ # Give some time for the output to be sent.
+ time.sleep(2)
+
+ if onewayStatus or expectorThread.matches(index) != 1:
+ TestUtil.killServers()
+ sys.exit(1)
+ print "ok"
+
+ print "starting downstream icestorm server...",
+ sys.stdout.flush()
+ icestorm2.start(echo=False)
+ print "ok"
+
+ #
+ # Need to sleep for at least the discard interval.
+ #
+ time.sleep(3)
+
+ #
+ # Test oneway subscribers.
+ #
+ print "testing link is reestablished...",
+ sys.stdout.flush()
+ onewayStatus = doTest(icestorm1, icestorm2, 0)
+ print "ok"
+
+ if onewayStatus or expectorThread.matches(index) != 1:
+ TestUtil.killServers()
+ sys.exit(1)
-publisherStatus = TestUtil.closePipe(publisherPipe)
-if publisherStatus:
- TestUtil.killServers()
- sys.exit(1)
+ icestorm1.stop()
+ icestorm2.stop()
-# The publisher must be run twice because all the events can be sent
-# out in one batch to the linked subscriber which means that the link
-# is not reaped until the next batch is sent.
-time.sleep(1)
-publisher = os.path.join(testdir, "publisher")
-publisherPipe = TestUtil.startClient(publisher, iceStormReference + iceStormReference + " 2>&1")
-print "ok"
-
-TestUtil.printOutputFromPipe(publisherPipe)
-
-publisherStatus = TestUtil.closePipe(publisherPipe)
-if publisherStatus:
- TestUtil.killServers()
- sys.exit(1)
-
-# Verify that the link has disappeared.
-print "verifying that the link has been destroyed...",
-sys.stdout.flush()
-iceStormAdminPipe = TestUtil.startClient(iceStormAdmin, adminIceStormReference + r' -e "links TestIceStorm1"' + " 2>&1")
-line = iceStormAdminPipe.readline()
-try:
- if line and len(line) > 0:
+ #
+ # Test #4:
+ #
+ # Trash the TestIceStorm2 database. Then restart the servers and
+ # verify that the link is removed.
+ #
+ print "destroying the downstream IceStorm service database...",
+ sys.stdout.flush()
+ icestorm2.clean()
+
+ print "ok"
+
+ print "restarting IceStorm servers...",
+ sys.stdout.flush()
+ icestorm1.start(echo = False)
+ icestorm2.start(echo = False)
+ print "ok"
+
+ print "checking link still exists...",
+ line = admin(adminIceStormReference, "links TestIceStorm1")
+ if not re.compile("fed1 with cost 0").search(line):
+ print line
+ TestUtil.killServers()
+ sys.exit(1)
+ print "ok"
+
+ print "publishing some events...",
+ sys.stdout.flush()
+ # The publisher must be run twice because all the events can be
+ # sent out in one batch to the linked subscriber which means that
+ # the link is not reaped until the next batch is
+ # sent. Furthermore, with a replicated IceStorm both sets of
+ # events must be set to the same replica.
+ runPublisher(icestorm1, opt = " --count 2")
+ print "ok"
+
+ # Give the unsubscription time to propagate.
+ time.sleep(1)
+
+ # Verify that the link has disappeared.
+ print "verifying that the link has been destroyed...",
+ sys.stdout.flush()
+ line = admin(adminIceStormReference, "links TestIceStorm1")
+ if len(line) > 0:
+ print line
TestUtil.killServers()
sys.exit(1)
-except IOError:
- pass
-iceStormAdminStatus = TestUtil.closePipe(iceStormAdminPipe)
-if iceStormAdminStatus:
- print iceStormAdminStatus
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
+ print "ok"
-#
-# Destroy the remaining topic.
-#
-print "destroying topics...",
-command = r' -e "destroy TestIceStorm1/fed1"' + " 2>&1"
-iceStormAdminPipe = TestUtil.startClient(iceStormAdmin, adminIceStormReference + command + " 2>&1")
-iceStormAdminStatus = TestUtil.closePipe(iceStormAdminPipe)
-if iceStormAdminStatus:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
+ #
+ # Destroy the remaining topic.
+ #
+ print "destroying topics...",
+ admin(adminIceStormReference, "destroy TestIceStorm1/fed1")
+ print "ok"
-#
-# Shutdown icestorm.
-#
-print "shutting down icestorm services...",
-sys.stdout.flush()
-stopServers(iceBoxPipe1, iceBoxPipe2)
-if TestUtil.serverStatus():
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
+ #
+ # Shutdown icestorm.
+ #
+ print "shutting down icestorm services...",
+ sys.stdout.flush()
+ icestorm1.stop()
+ icestorm2.stop()
+ print "ok"
+
+runtest("persistent")
+runtest("replicated", replicatedPublisher = False)
+runtest("replicated", replicatedPublisher = True)
sys.exit(0)
diff --git a/cpp/test/IceStorm/rep1/.depend b/cpp/test/IceStorm/rep1/.depend
new file mode 100644
index 00000000000..db57f903939
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/.depend
@@ -0,0 +1,6 @@
+Sub$(OBJEXT): Sub.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/IceUtil/Options.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Single.h ../../include/TestCommon.h
+Single$(OBJEXT): Single.cpp Single.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
+Publisher$(OBJEXT): Publisher.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceUtil/Options.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/UUID.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Single.h
+Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/IceUtil/Options.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Single.h ../../include/TestCommon.h
+Single.cpp: Single.ice
+Single.ice: $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/test/IceStorm/rep1/.gitignore b/cpp/test/IceStorm/rep1/.gitignore
new file mode 100644
index 00000000000..a6eaee14920
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/.gitignore
@@ -0,0 +1,12 @@
+// Generated by makegitignore.py
+
+// IMPORTANT: Do not edit this file -- any edits made here will be lost!
+publisher
+subscriber
+sub
+Single.cpp
+Single.h
+build.txt
+0.db/*
+1.db/*
+2.db/*
diff --git a/cpp/test/IceStorm/rep1/0.db/.gitignore b/cpp/test/IceStorm/rep1/0.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/0.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/rep1/1.db/.gitignore b/cpp/test/IceStorm/rep1/1.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/1.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/rep1/2.db/.gitignore b/cpp/test/IceStorm/rep1/2.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/2.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/rep1/Makefile b/cpp/test/IceStorm/rep1/Makefile
new file mode 100644
index 00000000000..e3aea6fb383
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/Makefile
@@ -0,0 +1,56 @@
+# **********************************************************************
+#
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ../../..
+
+PUBLISHER = publisher
+SUBSCRIBER = subscriber
+SUB = sub
+
+TARGETS = $(PUBLISHER) $(SUBSCRIBER) $(SUB)
+
+OBJS = Single.o
+
+POBJS = Publisher.o
+
+SOBJS = Subscriber.o
+
+SUB_OBJS = Sub.o
+
+SRCS = $(SUB_OBJS:.o=.cpp) \
+ $(OBJS:.o=.cpp) \
+ $(POBJS:.o=.cpp) \
+ $(SOBJS:.o=.cpp)
+
+SLICE_SRCS = Single.ice
+
+include $(top_srcdir)/config/Make.rules
+
+CPPFLAGS := -I. -I../../include $(CPPFLAGS)
+LIBS := -lIceStorm $(LIBS)
+
+$(PUBLISHER): $(OBJS) $(POBJS)
+ rm -f $@
+ $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(POBJS) $(LIBS)
+
+$(SUBSCRIBER): $(OBJS) $(SOBJS)
+ rm -f $@
+ $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(SOBJS) $(LIBS)
+
+$(SUB): $(OBJS) $(SUB_OBJS)
+ rm -f $@
+ $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(SUB_OBJS) $(LIBS)
+
+clean::
+ -rm -f build.txt
+ -rm -f 0.db/*
+ -rm -f 1.db/*
+ -rm -f 2.db/*
+
+include .depend
diff --git a/cpp/test/IceStorm/rep1/Makefile.mak b/cpp/test/IceStorm/rep1/Makefile.mak
new file mode 100644
index 00000000000..566c9d4868e
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/Makefile.mak
@@ -0,0 +1,76 @@
+# **********************************************************************
+#
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ..\..\..
+
+PUBLISHER = publisher.exe
+SUBSCRIBER = subscriber.exe
+SUB = sub.exe
+
+TARGETS = $(PUBLISHER) $(SUBSCRIBER) $(SUB)
+
+OBJS = Single.obj
+
+POBJS = Publisher.obj
+
+SOBJS = Subscriber.obj
+
+SUB_OBJS = Sub.obj
+
+SRCS = $(OBJS:.obj=.cpp) \
+ $(POBJS:.obj=.cpp) \
+ $(SOBJS:.obj=.cpp) \
+ $(SUB_OBJS:.obj=.cpp)
+
+!include $(top_srcdir)/config/Make.rules.mak
+
+CPPFLAGS = -I. -I../../include $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN
+LIBS = icestorm$(LIBSUFFIX).lib $(LIBS)
+
+!if "$(CPP_COMPILER)" != "BCC2006" && "$(OPTIMIZE)" != "yes"
+PPDBFLAGS = /pdb:$(PUBLISHER:.exe=.pdb)
+SPDBFLAGS = /pdb:$(SUBSCRIBER:.exe=.pdb)
+SUB_PDBFLAGS = /pdb:$(SUB:.exe=.pdb)
+!endif
+
+$(PUBLISHER): $(OBJS) $(POBJS)
+ $(LINK) $(LD_EXEFLAGS) $(PPDBFLAGS) $(SETARGV) $(OBJS) $(POBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+$(SUBSCRIBER): $(OBJS) $(SOBJS)
+ $(LINK) $(LD_EXEFLAGS) $(SPDBFLAGS) $(SETARGV) $(OBJS) $(SOBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+$(SUB): $(OBJS) $(SUB_OBJS)
+ $(LINK) $(LD_EXEFLAGS) $(SUB_PDBFLAGS) $(SETARGV) $(OBJS) $(SUB_OBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+!if "$(OPTIMIZE)" == "yes"
+
+all::
+ @echo release > build.txt
+
+!else
+
+all::
+ @echo debug > build.txt
+
+!endif
+
+clean::
+ del /q build.txt
+ del /q Single.cpp Single.h
+ for %f in (0.db\*) do if not %f == 0.db\.gitignore del /q %f
+ for %f in (1.db\*) do if not %f == 1.db\.gitignore del /q %f
+ for %f in (2.db\*) do if not %f == 2.db\.gitignore del /q %f
+
+!include .depend
diff --git a/cpp/test/IceStorm/rep1/Publisher.cpp b/cpp/test/IceStorm/rep1/Publisher.cpp
new file mode 100644
index 00000000000..a8be7cd7874
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/Publisher.cpp
@@ -0,0 +1,149 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <Ice/Ice.h>
+#include <IceUtil/Options.h>
+#include <IceUtil/IceUtil.h>
+#include <IceStorm/IceStorm.h>
+#include <Single.h>
+
+using namespace std;
+using namespace Ice;
+using namespace IceStorm;
+using namespace Test;
+
+int
+run(int argc, char* argv[], const CommunicatorPtr& communicator)
+{
+ IceUtilInternal::Options opts;
+ opts.addOpt("", "cycle");
+
+ try
+ {
+ opts.parse(argc, (const char**)argv);
+ }
+ catch(const IceUtilInternal::BadOptException& e)
+ {
+ cerr << argv[0] << ": " << e.reason << endl;
+ return EXIT_FAILURE;
+ }
+
+ PropertiesPtr properties = communicator->getProperties();
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
+ string managerProxy = properties->getProperty(managerProxyProperty);
+ if(managerProxy.empty())
+ {
+ cerr << argv[0] << ": property `" << managerProxyProperty << "' is not set" << endl;
+ return EXIT_FAILURE;
+ }
+
+ IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(
+ communicator->stringToProxy(managerProxy));
+ if(!manager)
+ {
+ cerr << argv[0] << ": `" << managerProxy << "' is not running" << endl;
+ return EXIT_FAILURE;
+ }
+
+ TopicPrx topic;
+ while(true)
+ {
+ try
+ {
+ topic = manager->retrieve("single");
+ break;
+ }
+ // This can happen if the replica group loses the majority
+ // during retrieve. In this case we retry.
+ catch(const Ice::UnknownException&)
+ {
+ continue;
+ }
+ catch(const IceStorm::NoSuchTopic& e)
+ {
+ cerr << argv[0] << ": NoSuchTopic: " << e.name << endl;
+ return EXIT_FAILURE;
+ }
+ }
+ assert(topic);
+
+ //
+ // Get a publisher object, create a twoway proxy and then cast to
+ // a Single object.
+ //
+ if(opts.isSet("cycle"))
+ {
+ Ice::ObjectPrx prx = topic->getPublisher()->ice_twoway();
+ vector<SinglePrx> single;
+ Ice::EndpointSeq endpoints = prx->ice_getEndpoints();
+ for(Ice::EndpointSeq::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p)
+ {
+ if((*p)->toString().substr(0, 3) != "udp")
+ {
+ Ice::EndpointSeq e;
+ e.push_back(*p);
+ single.push_back(SinglePrx::uncheckedCast(prx->ice_endpoints(e)));
+ }
+ }
+ if(single.size() <= 1)
+ {
+ cerr << argv[0] << ": Not enough endpoints in publisher proxy" << endl;
+ return EXIT_FAILURE;
+ }
+ int which = 0;
+ for(int i = 0; i < 1000; ++i)
+ {
+ single[which]->event(i);
+ which = (which + 1) % single.size();
+ }
+ }
+ else
+ {
+ SinglePrx single = SinglePrx::uncheckedCast(topic->getPublisher()->ice_twoway());
+ for(int i = 0; i < 1000; ++i)
+ {
+ single->event(i);
+ }
+ }
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if(communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/cpp/test/IceStorm/rep1/Single.ice b/cpp/test/IceStorm/rep1/Single.ice
new file mode 100644
index 00000000000..ad3d711bb2b
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/Single.ice
@@ -0,0 +1,23 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef SINGLE_ICE
+#define SINGLE_ICE
+
+module Test
+{
+
+interface Single
+{
+ void event(int i);
+};
+
+};
+
+#endif
diff --git a/cpp/test/IceStorm/rep1/Sub.cpp b/cpp/test/IceStorm/rep1/Sub.cpp
new file mode 100644
index 00000000000..e668b0fa50e
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/Sub.cpp
@@ -0,0 +1,124 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceUtil/DisableWarnings.h>
+#include <IceUtil/IceUtil.h>
+#include <IceUtil/Options.h>
+#include <Ice/Ice.h>
+#include <IceStorm/IceStorm.h>
+#include <Single.h>
+#include <TestCommon.h>
+
+using namespace std;
+using namespace Ice;
+using namespace IceStorm;
+using namespace Test;
+
+class SingleI : public Single
+{
+public:
+
+ SingleI() {}
+ virtual void event(int, const Current&) {}
+};
+
+int
+run(int argc, char* argv[], const CommunicatorPtr& communicator)
+{
+ IceUtilInternal::Options opts;
+ opts.addOpt("", "id", IceUtilInternal::Options::NeedArg);
+ opts.addOpt("", "unsub");
+
+ try
+ {
+ opts.parse(argc, (const char**)argv);
+ }
+ catch(const IceUtilInternal::BadOptException& e)
+ {
+ cerr << argv[0] << ": " << e.reason << endl;
+ return EXIT_FAILURE;
+ }
+
+ PropertiesPtr properties = communicator->getProperties();
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
+ string managerProxy = properties->getProperty(managerProxyProperty);
+ if(managerProxy.empty())
+ {
+ cerr << argv[0] << ": property `" << managerProxyProperty << "' is not set" << endl;
+ return EXIT_FAILURE;
+ }
+
+ ObjectPrx base = communicator->stringToProxy(managerProxy);
+ IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(base);
+ if(!manager)
+ {
+ cerr << argv[0] << ": `" << managerProxy << "' is not running" << endl;
+ return EXIT_FAILURE;
+ }
+
+ ObjectAdapterPtr adapter = communicator->createObjectAdapterWithEndpoints("SingleAdapter", "default");
+
+ TopicPrx topic;
+ try
+ {
+ topic = manager->retrieve("single");
+ }
+ catch(const IceStorm::NoSuchTopic& e)
+ {
+ cerr << argv[0] << ": NoSuchTopic: " << e.name << endl;
+ return EXIT_FAILURE;
+ }
+
+ Ice::ObjectPrx prx = adapter->add(new SingleI(), communicator->stringToIdentity(opts.optArg("id")));
+ if(opts.isSet("unsub"))
+ {
+ topic->unsubscribe(prx);
+ }
+ else
+ {
+ IceStorm::QoS qos;
+ qos["persistent"] = "true";
+ topic->subscribeAndGetPublisher(qos, prx);
+ }
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if(communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/cpp/test/IceStorm/rep1/Subscriber.cpp b/cpp/test/IceStorm/rep1/Subscriber.cpp
new file mode 100644
index 00000000000..f3d869c8ac4
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/Subscriber.cpp
@@ -0,0 +1,217 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceUtil/DisableWarnings.h>
+#include <IceUtil/IceUtil.h>
+#include <IceUtil/Options.h>
+#include <Ice/Ice.h>
+#include <IceStorm/IceStorm.h>
+#include <Single.h>
+#include <TestCommon.h>
+
+using namespace std;
+using namespace Ice;
+using namespace IceStorm;
+using namespace Test;
+
+class SingleI : public Single, public IceUtil::Monitor<IceUtil::Mutex>
+{
+public:
+
+ SingleI(const CommunicatorPtr& communicator, const string& name, int max) :
+ _communicator(communicator),
+ _name(name),
+ _max(max),
+ _count(0),
+ _last(0)
+ {
+ }
+
+ virtual void
+ event(int i, const Current& current)
+ {
+ if(_name == "twoway ordered" && i != _last)
+ {
+ cerr << endl << "received unordered event for `" << _name << "': " << i << " " << _last;
+ test(false);
+ }
+ Lock sync(*this);
+ ++_last;
+ if(++_count == _max)
+ {
+ notify();
+ }
+ }
+
+ virtual void
+ waitForEvents()
+ {
+ Lock sync(*this);
+ IceUtil::Time timeout = IceUtil::Time::seconds(20);
+ while(_count < _max)
+ {
+ if(!timedWait(timeout))
+ {
+ test(false);
+ }
+ }
+ }
+
+private:
+
+ CommunicatorPtr _communicator;
+ const string _name;
+ const int _max;
+ int _count;
+ bool _ordered;
+ int _last;
+};
+typedef IceUtil::Handle<SingleI> SingleIPtr;
+
+int
+run(int argc, char* argv[], const CommunicatorPtr& communicator)
+{
+ IceUtilInternal::Options opts;
+ opts.addOpt("", "ordered");
+ opts.addOpt("", "twoway");
+ opts.addOpt("", "events", IceUtilInternal::Options::NeedArg);
+
+ try
+ {
+ opts.parse(argc, (const char**)argv);
+ }
+ catch(const IceUtilInternal::BadOptException& e)
+ {
+ cerr << argv[0] << ": " << e.reason << endl;
+ return EXIT_FAILURE;
+ }
+
+ PropertiesPtr properties = communicator->getProperties();
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
+ string managerProxy = properties->getProperty(managerProxyProperty);
+ if(managerProxy.empty())
+ {
+ cerr << argv[0] << ": property `" << managerProxyProperty << "' is not set" << endl;
+ return EXIT_FAILURE;
+ }
+
+ ObjectPrx base = communicator->stringToProxy(managerProxy);
+ IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(base);
+ if(!manager)
+ {
+ cerr << argv[0] << ": `" << managerProxy << "' is not running" << endl;
+ return EXIT_FAILURE;
+ }
+
+ ObjectAdapterPtr adapter = communicator->createObjectAdapterWithEndpoints("SingleAdapter", "default");
+
+ TopicPrx topic;
+ while(true)
+ {
+ try
+ {
+ topic = manager->retrieve("single");
+ break;
+ }
+ // This can happen if the replica group loses the majority
+ // during retrieve. In this case we retry.
+ catch(const Ice::UnknownException&)
+ {
+ continue;
+ }
+ catch(const IceStorm::NoSuchTopic& e)
+ {
+ cerr << argv[0] << ": NoSuchTopic: " << e.name << endl;
+ return EXIT_FAILURE;
+ }
+ }
+
+ int events = 1000;
+ if(opts.isSet("events"))
+ {
+ events = atoi(opts.optArg("events").c_str());
+ }
+ //
+ // Create subscribers with different QoS.
+ //
+ SingleIPtr sub;
+ IceStorm::QoS qos;
+ if(opts.isSet("ordered"))
+ {
+ sub = new SingleI(communicator, "twoway ordered", events);
+ qos["reliability"] = "ordered";
+ }
+ else
+ {
+ sub = new SingleI(communicator, "twoway", events);
+ }
+
+ Ice::ObjectPrx prx = adapter->addWithUUID(sub);
+
+ while(true)
+ {
+ try
+ {
+ topic->subscribeAndGetPublisher(qos, prx);
+ break;
+ }
+ // If we're already subscribed then we're done (previously we
+ // got an UnknownException which succeeded).
+ catch(const IceStorm::AlreadySubscribed&)
+ {
+ break;
+ }
+ // This can happen if the replica group loses the majority
+ // during subscription. In this case we retry.
+ catch(const Ice::UnknownException&)
+ {
+ }
+ }
+
+ adapter->activate();
+
+ sub->waitForEvents();
+
+ topic->unsubscribe(prx);
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if(communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/cpp/test/IceStorm/rep1/run.py b/cpp/test/IceStorm/rep1/run.py
new file mode 100755
index 00000000000..281c00580f0
--- /dev/null
+++ b/cpp/test/IceStorm/rep1/run.py
@@ -0,0 +1,398 @@
+#!/usr/bin/env python
+# **********************************************************************
+#
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+import os, sys, time, re
+
+for toplevel in [".", "..", "../..", "../../..", "../../../.."]:
+ toplevel = os.path.normpath(toplevel)
+ if os.path.exists(os.path.join(toplevel, "config", "TestUtil.py")):
+ break
+else:
+ raise "can't find toplevel directory!"
+
+sys.path.append(os.path.join(toplevel, "config"))
+import TestUtil
+TestUtil.processCmdLine()
+
+name = os.path.join("IceStorm", "rep1")
+testdir = os.path.dirname(os.path.abspath(__file__))
+publisher = os.path.join(testdir, "publisher")
+subscriber = os.path.join(testdir, "subscriber")
+subscriber2 = os.path.join(testdir, "sub")
+
+def printOutput(pipe):
+ try:
+ while True:
+ line = pipe.readline()
+ if not line:
+ break
+ print line,
+ sys.stdout.flush()
+ except IOError:
+ pass
+
+def captureOutput(pipe):
+ out = ""
+ try:
+ while True:
+ line = pipe.readline()
+ if not line:
+ break
+ out = out + line
+ except IOError:
+ pass
+ return out
+
+def runsub(opt, ref, arg = "", echo=False):
+ qos = ""
+ if opt == "twoway":
+ qos = " --twoway"
+ if opt == "ordered":
+ qos = " --ordered"
+ pipe = TestUtil.startServer(subscriber, ref + arg + qos)
+ TestUtil.getServerPid(pipe)
+ TestUtil.getAdapterReady(pipe, True)
+ return pipe
+
+def runpub(ref, arg = "", echo=False):
+ return TestUtil.startClient(publisher, ref + arg)
+
+def runtest(opt, ref, subopt="", pubopt=""):
+ subscriberPipe = runsub(opt, ref, subopt)
+ publisherPipe = runpub(ref, pubopt)
+ printOutput(publisherPipe)
+ publisherStatus = TestUtil.closePipe(publisherPipe)
+ subscriberStatus = TestUtil.specificServerStatus(subscriberPipe, 30)
+ if subscriberStatus or publisherStatus:
+ print "FAILED!"
+ while True:
+ import time
+ time.sleep(1000)
+ TestUtil.killServers()
+ sys.exit(1)
+
+def runsub2(replica = -1, cmd = "", terminateOnError=True):
+ pipe = TestUtil.startServer(subscriber2, icestorm.reference(replica) + ' --id foo' + cmd)
+ TestUtil.getServerPid(pipe)
+ #TestUtil.getAdapterReady(pipe, True)
+ out = captureOutput(pipe)
+ status = TestUtil.closePipe(pipe)
+ if terminateOnError and status:
+ print "status: %d out: '%s'" % (status, out)
+ TestUtil.killServers()
+ sys.exit(1)
+ return status, out.strip()
+
+def rununsub2(replica = -1, terminateOnError=True):
+ if replica == -1:
+ runsub2(replica, " --unsub", terminateOnError)
+ # Else we first subscribe to this replica, then unsub. We
+ # shouldn't get an AlreadySubscribedException.
+ status, out = runsub2(replica, terminateOnError=terminateOnError)
+ if status:
+ return status, out
+ return runsub2(replica, " --unsub", terminateOnError=terminateOnError)
+
+import IceStormUtil
+
+icestorm = IceStormUtil.init(toplevel, testdir, "replicated", replicatedPublisher=True, additional =
+ ' --Ice.ServerIdleTime=0 ' +
+ ' --IceStorm.Election.MasterTimeout=2' +
+ ' --IceStorm.Election.ElectionTimeout=2' +
+ ' --IceStorm.Election.ResponseTimeout=2')
+icestorm.start()
+
+print "testing topic creation across replicas...",
+sys.stdout.flush()
+icestorm.admin("create single")
+
+for replica in range(0, 3):
+ status, out = icestorm.adminForReplica(replica, "create single", terminateOnError=False)
+ if out != "error: topic `single' exists":
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+print "testing topic destruction across replicas...",
+sys.stdout.flush()
+icestorm.admin("destroy single")
+
+for replica in range(0, 3):
+ status, out = icestorm.adminForReplica(replica, "destroy single", terminateOnError=False)
+ if out != "error: couldn't find topic `single'":
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+print "testing topic creation without replica...",
+sys.stdout.flush()
+
+icestorm.stopReplica(0)
+icestorm.admin("create single")
+
+for replica in range(1, 3):
+ status, out = icestorm.adminForReplica(replica, "create single", terminateOnError=False)
+ if out != "error: topic `single' exists":
+ TestUtil.killServers()
+ sys.exit(1)
+
+status, out = icestorm.adminForReplica(0, "create single", terminateOnError=False)
+if not re.search("ConnectionRefused", out):
+ TestUtil.killServers()
+ sys.exit(1)
+
+icestorm.startReplica(0, echo=False)
+
+status, out = icestorm.adminForReplica(0, "create single", terminateOnError=False)
+if out != "error: topic `single' exists":
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+icestorm.admin("destroy single")
+
+print "testing topic creation without master...",
+sys.stdout.flush()
+icestorm.stopReplica(2)
+
+icestorm.admin("create single")
+
+for replica in range(0, 2):
+ status, out = icestorm.adminForReplica(replica, "create single", terminateOnError=False)
+ if out != "error: topic `single' exists":
+ TestUtil.killServers()
+ sys.exit(1)
+
+status, out = icestorm.adminForReplica(2, "create single", terminateOnError=False)
+if not re.search("ConnectionRefused", out):
+ TestUtil.killServers()
+ sys.exit(1)
+
+icestorm.startReplica(2, echo=False)
+
+status, out = icestorm.adminForReplica(2, "create single", terminateOnError=False)
+if out != "error: topic `single' exists":
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+# All replicas are running
+
+print "testing topic destruction without replica...",
+sys.stdout.flush()
+icestorm.stopReplica(0)
+
+icestorm.admin("destroy single")
+
+for replica in range(1, 3):
+ status, out = icestorm.adminForReplica(replica, "destroy single", terminateOnError=False)
+ if out != "error: couldn't find topic `single'":
+ TestUtil.killServers()
+ sys.exit(1)
+
+status, out = icestorm.adminForReplica(0, "destroy single", terminateOnError=False)
+if not re.search("ConnectionRefused", out):
+ TestUtil.killServers()
+ sys.exit(1)
+
+icestorm.startReplica(0, echo=False)
+
+status, out = icestorm.adminForReplica(0, "destroy single", terminateOnError=False)
+if out != "error: couldn't find topic `single'":
+ print out
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+print "testing topic destruction without master...",
+sys.stdout.flush()
+
+icestorm.admin("create single")
+icestorm.stopReplica(2)
+
+icestorm.admin("destroy single")
+
+for replica in range(0, 2):
+ status, out = icestorm.adminForReplica(replica, "destroy single", terminateOnError=False)
+ if out != "error: couldn't find topic `single'":
+ TestUtil.killServers()
+ sys.exit(1)
+
+status, out = icestorm.adminForReplica(2, "destroy single", terminateOnError=False)
+if not re.search("ConnectionRefused", out):
+ TestUtil.killServers()
+ sys.exit(1)
+
+icestorm.startReplica(2, echo=False)
+
+status, out = icestorm.adminForReplica(2, "destroy single", terminateOnError=False)
+if out != "error: couldn't find topic `single'":
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+# Now test subscription/unsubscription on all replicas.
+
+icestorm.admin("create single")
+
+print "testing subscription across replicas...",
+sys.stdout.flush()
+runsub2()
+
+for replica in range(0, 3):
+ status, out = runsub2(replica, terminateOnError=False)
+ if out != "IceStorm::AlreadySubscribed":
+ print out
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+print "testing unsubscription across replicas...",
+sys.stdout.flush()
+rununsub2()
+
+for replica in range(0, 3):
+ rununsub2(replica, terminateOnError=False)
+print "ok"
+
+print "testing subscription without master...",
+sys.stdout.flush()
+icestorm.stopReplica(2)
+
+runsub2()
+
+for replica in range(0, 2):
+ status, out = runsub2(replica, terminateOnError=False)
+ if out != "IceStorm::AlreadySubscribed":
+ TestUtil.killServers()
+ sys.exit(1)
+
+status, out = runsub2(2, terminateOnError=False)
+if not re.search("ConnectionRefused", out):
+ TestUtil.killServers()
+ sys.exit(1)
+
+icestorm.startReplica(2, echo=False)
+
+status, out = runsub2(2, terminateOnError=False)
+if out != "IceStorm::AlreadySubscribed":
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+print "testing unsubscription without master...",
+sys.stdout.flush()
+icestorm.stopReplica(2)
+
+rununsub2()
+
+for replica in range(0, 2):
+ rununsub2(replica, terminateOnError=False)
+
+status, out = rununsub2(2, terminateOnError=False)
+if not re.search("ConnectionRefused", out):
+ TestUtil.killServers()
+ sys.exit(1)
+
+icestorm.startReplica(2, echo=False)
+
+rununsub2(2)
+print "ok"
+
+print "testing subscription without replica...",
+sys.stdout.flush()
+icestorm.stopReplica(0)
+
+runsub2()
+
+for replica in range(1, 3):
+ status, out = runsub2(replica, terminateOnError=False)
+ if out != "IceStorm::AlreadySubscribed":
+ TestUtil.killServers()
+ sys.exit(1)
+
+status, out = runsub2(0, terminateOnError=False)
+if not re.search("ConnectionRefused", out):
+ TestUtil.killServers()
+ sys.exit(1)
+
+icestorm.startReplica(0, echo=False)
+
+status, out = runsub2(0, terminateOnError=False)
+if out != "IceStorm::AlreadySubscribed":
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+print "testing unsubscription without replica...",
+sys.stdout.flush()
+icestorm.stopReplica(0)
+
+rununsub2()
+
+for replica in range(1, 3):
+ rununsub2(replica, terminateOnError=False)
+
+status, out = rununsub2(0, terminateOnError=False)
+if not re.search("ConnectionRefused", out):
+ TestUtil.killServers()
+ sys.exit(1)
+
+icestorm.startReplica(0, echo=False)
+
+rununsub2(0)
+print "ok"
+
+# All replicas are running
+
+print "running twoway subscription test...",
+sys.stdout.flush()
+runtest("twoway", icestorm.reference())
+print "ok"
+
+print "running ordered subscription test...",
+sys.stdout.flush()
+runtest("ordered", icestorm.reference())
+print "ok"
+
+icestorm.stopReplica(2)
+
+print "running twoway, ordered subscription test without master...",
+sys.stdout.flush()
+runtest("twoway", icestorm.reference())
+runtest("ordered", icestorm.reference())
+print "ok"
+
+icestorm.startReplica(2, echo = False)
+icestorm.stopReplica(0)
+
+print "running twoway, ordered subscription test without replica...",
+sys.stdout.flush()
+runtest("twoway", icestorm.reference())
+runtest("ordered", icestorm.reference())
+print "ok"
+
+icestorm.startReplica(0, echo = False)
+
+print "running cycle publishing test...",
+sys.stdout.flush()
+runtest("twoway", icestorm.reference(), pubopt=" --cycle")
+print "ok"
+
+print "stopping replicas...",
+sys.stdout.flush()
+icestorm.stop()
+print "ok"
+
+if TestUtil.serverStatus():
+ TestUtil.killServers()
+ sys.exit(1)
+
+sys.exit(0)
diff --git a/cpp/test/IceStorm/repgrid/.depend b/cpp/test/IceStorm/repgrid/.depend
new file mode 100644
index 00000000000..2cc42aa7fed
--- /dev/null
+++ b/cpp/test/IceStorm/repgrid/.depend
@@ -0,0 +1,4 @@
+Single$(OBJEXT): Single.cpp Single.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
+Client$(OBJEXT): Client.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Single.h ../../include/TestCommon.h
+Single.cpp: Single.ice
+Single.ice: $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/test/IceStorm/repgrid/.gitignore b/cpp/test/IceStorm/repgrid/.gitignore
new file mode 100644
index 00000000000..34ee77907e3
--- /dev/null
+++ b/cpp/test/IceStorm/repgrid/.gitignore
@@ -0,0 +1,10 @@
+// Generated by makegitignore.py
+
+// IMPORTANT: Do not edit this file -- any edits made here will be lost!
+client
+Single.cpp
+Single.h
+build.txt
+db/node/*
+db/registry/*
+db/replica-1/*
diff --git a/cpp/test/IceStorm/repgrid/Client.cpp b/cpp/test/IceStorm/repgrid/Client.cpp
new file mode 100644
index 00000000000..1eadd23ea07
--- /dev/null
+++ b/cpp/test/IceStorm/repgrid/Client.cpp
@@ -0,0 +1,147 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceUtil/DisableWarnings.h>
+#include <Ice/Ice.h>
+#include <IceStorm/IceStorm.h>
+#include <Single.h>
+#include <TestCommon.h>
+
+using namespace std;
+using namespace Ice;
+using namespace IceStorm;
+using namespace Test;
+
+class SingleI : public Single, public IceUtil::Monitor<IceUtil::Mutex>
+{
+public:
+
+ SingleI() :
+ _count(0)
+ {
+ }
+
+ virtual void
+ event(int, const Current&)
+ {
+ Lock sync(*this);
+ if(++_count == 1000)
+ {
+ notify();
+ }
+ }
+
+ virtual void
+ waitForEvents()
+ {
+ Lock sync(*this);
+ IceUtil::Time timeout = IceUtil::Time::seconds(20);
+ while(_count < 1000)
+ {
+ if(!timedWait(timeout))
+ {
+ test(false);
+ }
+ }
+ }
+
+private:
+
+ int _count;
+};
+typedef IceUtil::Handle<SingleI> SingleIPtr;
+
+int
+run(int argc, char* argv[], const CommunicatorPtr& communicator)
+{
+ ObjectPrx base = communicator->stringToProxy("DemoIceStorm/TopicManager");
+ IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(base);
+ if(!manager)
+ {
+ cerr << argv[0] << ": `DemoIceStorm/TopicManager' is not running" << endl;
+ return EXIT_FAILURE;
+ }
+
+ ObjectAdapterPtr adapter = communicator->createObjectAdapterWithEndpoints("SingleAdapter", "default:udp");
+
+ TopicPrx topic;
+ try
+ {
+ topic = manager->create("single");
+ }
+ catch(const IceStorm::TopicExists& e)
+ {
+ cerr << argv[0] << ": TopicExists: " << e.name << endl;
+ return EXIT_FAILURE;
+ }
+
+ //
+ // Create subscribers with different QoS.
+ //
+ SingleIPtr sub = new SingleI;
+ topic->subscribeAndGetPublisher(IceStorm::QoS(), adapter->addWithUUID(sub));
+
+ adapter->activate();
+
+ // Ensure that getPublisher & getNonReplicatedPublisher work
+ // correctly.
+ Ice::ObjectPrx p1 = topic->getPublisher();
+ Ice::ObjectPrx p2 = topic->getNonReplicatedPublisher();
+ test(p1->ice_getAdapterId() == "DemoIceStorm-PublishReplicaGroup");
+ test(p2->ice_getAdapterId() == "DemoIceStorm-1.IceStormServiceName.IceStormServiceName.Publish" ||
+ p2->ice_getAdapterId() == "DemoIceStorm-2.IceStormServiceName.IceStormServiceName.Publish" ||
+ p2->ice_getAdapterId() == "DemoIceStorm-3.IceStormServiceName.IceStormServiceName.Publish");
+
+ //
+ // Get a publisher object, create a twoway proxy and then cast to
+ // a Single object.
+ //
+ SinglePrx single = SinglePrx::uncheckedCast(topic->getPublisher()->ice_twoway());
+ for(int i = 0; i < 1000; ++i)
+ {
+ single->event(i);
+ }
+
+ sub->waitForEvents();
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if(communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/cpp/test/IceStorm/repgrid/Makefile b/cpp/test/IceStorm/repgrid/Makefile
new file mode 100644
index 00000000000..ad363a9be57
--- /dev/null
+++ b/cpp/test/IceStorm/repgrid/Makefile
@@ -0,0 +1,38 @@
+# **********************************************************************
+#
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ../../..
+
+CLIENT = client
+
+TARGETS = $(CLIENT)
+
+OBJS = Single.o
+
+COBJS = Client.o
+
+SRCS = $(OBJS:.o=.cpp) \
+ $(COBJS:.o=.cpp)
+
+SLICE_SRCS = Single.ice
+
+include $(top_srcdir)/config/Make.rules
+
+CPPFLAGS := -I. -I../../include $(CPPFLAGS)
+LIBS := -lIceStorm $(LIBS)
+
+$(CLIENT): $(OBJS) $(COBJS)
+ rm -f $@
+ $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(COBJS) $(LIBS)
+
+clean::
+ -rm -f build.txt
+ -rm -rf db/node/* db/registry/* db/replica-1/*
+
+include .depend
diff --git a/cpp/test/IceStorm/repgrid/Makefile.mak b/cpp/test/IceStorm/repgrid/Makefile.mak
new file mode 100644
index 00000000000..efc9e82ea1e
--- /dev/null
+++ b/cpp/test/IceStorm/repgrid/Makefile.mak
@@ -0,0 +1,56 @@
+# **********************************************************************
+#
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ..\..\..
+
+CLIENT = client.exe
+
+TARGETS = $(CLIENT)
+
+OBJS = Single.obj
+
+COBJS = Client.obj
+
+SRCS = $(OBJS:.obj=.cpp) \
+ $(COBJS:.obj=.cpp)
+
+!include $(top_srcdir)/config/Make.rules.mak
+
+CPPFLAGS = -I. -I../../include $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN
+LIBS = icestorm$(LIBSUFFIX).lib $(LIBS)
+
+!if "$(CPP_COMPILER)" != "BCC2006" && "$(OPTIMIZE)" != "yes"
+CPDBFLAGS = /pdb:$(CLIENT:.exe=.pdb)
+!endif
+
+$(CLIENT): $(OBJS) $(COBJS)
+ $(LINK) $(LD_EXEFLAGS) $(CPDBFLAGS) $(SETARGV) $(OBJS) $(COBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+!if "$(OPTIMIZE)" == "yes"
+
+all::
+ @echo release > build.txt
+
+!else
+
+all::
+ @echo debug > build.txt
+
+!endif
+
+clean::
+ del /q build.txt
+ del /q Single.cpp Single.h
+ if exist db\node rmdir /s /q db\node
+ if exist db\registry rmdir /s /q db\registry
+ if exist db\replica-1 rmdir /s /q db\replica-1
+
+!include .depend
diff --git a/cpp/test/IceStorm/repgrid/Single.ice b/cpp/test/IceStorm/repgrid/Single.ice
new file mode 100644
index 00000000000..ad3d711bb2b
--- /dev/null
+++ b/cpp/test/IceStorm/repgrid/Single.ice
@@ -0,0 +1,23 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef SINGLE_ICE
+#define SINGLE_ICE
+
+module Test
+{
+
+interface Single
+{
+ void event(int i);
+};
+
+};
+
+#endif
diff --git a/cpp/test/IceStorm/repgrid/application.xml b/cpp/test/IceStorm/repgrid/application.xml
new file mode 100644
index 00000000000..a820d40f836
--- /dev/null
+++ b/cpp/test/IceStorm/repgrid/application.xml
@@ -0,0 +1,54 @@
+<icegrid>
+
+ <application name="Test">
+
+ <server-template id="IceStormTemplate">
+ <parameter name="index"/>
+ <parameter name="topic-manager-endpoints" default="default"/>
+ <parameter name="publish-endpoints" default="default"/>
+ <parameter name="node-endpoints" default="default"/>
+ <parameter name="instance-name"/>
+
+ <icebox id="${instance-name}-${index}" exe="${icebox.exe}" activation="on-demand">
+
+ <service name="IceStormServiceName" entry="IceStormService,33:createIceStorm">
+
+ <dbenv name="${service}"/>
+
+ <adapter name="${service}.TopicManager"
+ endpoints="${topic-manager-endpoints}"
+ replica-group="${instance-name}-TopicManagerReplicaGroup"/>
+
+ <adapter name="${service}.Publish"
+ endpoints="${publish-endpoints}"
+ replica-group="${instance-name}-PublishReplicaGroup"/>
+
+ <adapter name="${service}.Node"
+ endpoints="${node-endpoints}"/>
+
+ <properties>
+ <property name="${service}.InstanceName" value="${instance-name}"/>
+ <property name="${service}.NodeId" value="${index}"/>
+ </properties>
+
+ </service>
+
+ </icebox>
+ </server-template>
+
+ <replica-group id="DemoIceStorm-PublishReplicaGroup">
+ </replica-group>
+
+ <replica-group id="DemoIceStorm-TopicManagerReplicaGroup">
+ <object identity="DemoIceStorm/TopicManager" type="::IceStorm::TopicManager"/>
+ </replica-group>
+
+ <node name="localnode">
+ <server-instance template="IceStormTemplate" index="1" instance-name="DemoIceStorm"/>
+ <server-instance template="IceStormTemplate" index="2" instance-name="DemoIceStorm"/>
+ <server-instance template="IceStormTemplate" index="3" instance-name="DemoIceStorm"/>
+ </node>
+
+ </application>
+
+</icegrid>
diff --git a/cpp/test/IceStorm/repgrid/db/.gitignore b/cpp/test/IceStorm/repgrid/db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/repgrid/db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/repgrid/run.py b/cpp/test/IceStorm/repgrid/run.py
new file mode 100755
index 00000000000..df218ca6791
--- /dev/null
+++ b/cpp/test/IceStorm/repgrid/run.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+# **********************************************************************
+#
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+import os, sys
+
+for toplevel in [".", "..", "../..", "../../..", "../../../.."]:
+ toplevel = os.path.normpath(toplevel)
+ if os.path.exists(os.path.join(toplevel, "config", "TestUtil.py")):
+ break
+else:
+ raise "can't find toplevel directory!"
+
+sys.path.append(os.path.join(toplevel, "config"))
+import TestUtil
+TestUtil.processCmdLine()
+import IceGridAdmin
+
+name = os.path.join("IceStorm", "repgrid")
+testdir = os.path.dirname(os.path.abspath(__file__))
+
+#
+# Test client/server without on demand activation.
+#
+IceGridAdmin.iceGridTest(testdir, name, "application.xml", "", '"icebox.exe=' + TestUtil.getIceBox(testdir) + '"')
+sys.exit(0)
diff --git a/cpp/test/IceStorm/repstress/.depend b/cpp/test/IceStorm/repstress/.depend
new file mode 100644
index 00000000000..860f765dadf
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/.depend
@@ -0,0 +1,10 @@
+Single$(OBJEXT): Single.cpp Single.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
+Controller$(OBJEXT): Controller.cpp Controller.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
+Control$(OBJEXT): Control.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h Controller.h
+Controller$(OBJEXT): Controller.cpp Controller.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
+Publisher$(OBJEXT): Publisher.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/UUID.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Single.h Controller.h
+Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/IceUtil/IceUtil.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/AbstractMutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/IceUtil/Cache.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/CountDownLatch.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/CtrlCHandler.h $(includedir)/IceUtil/Functional.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/RWRecMutex.h $(includedir)/IceUtil/Thread.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/UUID.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/Ice/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Single.h Controller.h ../../include/TestCommon.h
+Single.cpp: Single.ice
+Controller.cpp: Controller.ice
+Single.ice: $(SLICE2CPP) $(SLICEPARSERLIB)
+Controller.ice: $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/test/IceStorm/repstress/.gitignore b/cpp/test/IceStorm/repstress/.gitignore
new file mode 100644
index 00000000000..3326cff4756
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/.gitignore
@@ -0,0 +1,14 @@
+// Generated by makegitignore.py
+
+// IMPORTANT: Do not edit this file -- any edits made here will be lost!
+publisher
+subscriber
+control
+Single.cpp
+Controller.cpp
+Single.h
+Controller.h
+build.txt
+0.db/*
+1.db/*
+2.db/*
diff --git a/cpp/test/IceStorm/repstress/0.db/.gitignore b/cpp/test/IceStorm/repstress/0.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/0.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/repstress/1.db/.gitignore b/cpp/test/IceStorm/repstress/1.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/1.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/repstress/2.db/.gitignore b/cpp/test/IceStorm/repstress/2.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/2.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/repstress/Control.cpp b/cpp/test/IceStorm/repstress/Control.cpp
new file mode 100644
index 00000000000..8234b826f1b
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/Control.cpp
@@ -0,0 +1,63 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <Ice/Ice.h>
+#include <Controller.h>
+
+using namespace std;
+using namespace Ice;
+using namespace Test;
+
+int
+run(int argc, char* argv[], const CommunicatorPtr& communicator)
+{
+ if(argc < 2)
+ {
+ cerr << "Usage: " << argv[0] << " proxy" << endl;
+ return EXIT_FAILURE;
+ }
+
+ ControllerPrx control = ControllerPrx::uncheckedCast(communicator->stringToProxy(argv[1]));
+ control->stop();
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if(communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/cpp/test/IceStorm/repstress/Controller.ice b/cpp/test/IceStorm/repstress/Controller.ice
new file mode 100644
index 00000000000..7af48747597
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/Controller.ice
@@ -0,0 +1,24 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef CONTROLLER_ICE
+#define CONTROLLER_ICE
+
+module Test
+{
+
+interface Controller
+{
+ void stop();
+};
+
+};
+
+#endif
+
diff --git a/cpp/test/IceStorm/repstress/Makefile b/cpp/test/IceStorm/repstress/Makefile
new file mode 100644
index 00000000000..ef545c59e6e
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/Makefile
@@ -0,0 +1,59 @@
+# **********************************************************************
+#
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ../../..
+
+PUBLISHER = publisher
+SUBSCRIBER = subscriber
+CONTROL = control
+
+TARGETS = $(PUBLISHER) $(SUBSCRIBER) $(CONTROL)
+
+OBJS = Single.o \
+ Controller.o
+
+POBJS = Publisher.o
+
+SOBJS = Subscriber.o
+
+COBJS = Control.o \
+ Controller.o
+
+SRCS = $(OBJS:.o=.cpp) \
+ $(COBJS:.o=.cpp) \
+ $(POBJS:.o=.cpp) \
+ $(SOBJS:.o=.cpp)
+
+SLICE_SRCS = Single.ice \
+ Controller.ice
+
+include $(top_srcdir)/config/Make.rules
+
+CPPFLAGS := -I. -I../../include $(CPPFLAGS)
+LIBS := -lIceStorm $(LIBS)
+
+$(PUBLISHER): $(OBJS) $(POBJS)
+ rm -f $@
+ $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(POBJS) $(LIBS)
+
+$(SUBSCRIBER): $(OBJS) $(SOBJS)
+ rm -f $@
+ $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(SOBJS) $(LIBS)
+
+$(CONTROL): $(COBJS)
+ rm -f $@
+ $(CXX) $(LDFLAGS) -o $@ $(COBJS) $(LIBS)
+
+clean::
+ -rm -f build.txt
+ -rm -f 0.db/*
+ -rm -f 1.db/*
+ -rm -f 2.db/*
+
+include .depend
diff --git a/cpp/test/IceStorm/repstress/Makefile.mak b/cpp/test/IceStorm/repstress/Makefile.mak
new file mode 100644
index 00000000000..57024e2910b
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/Makefile.mak
@@ -0,0 +1,78 @@
+# **********************************************************************
+#
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+top_srcdir = ..\..\..
+
+PUBLISHER = publisher.exe
+SUBSCRIBER = subscriber.exe
+CONTROL = control.exe
+
+TARGETS = $(PUBLISHER) $(SUBSCRIBER) $(CONTROL)
+
+OBJS = Single.obj \
+ Controller.obj
+
+POBJS = Publisher.obj
+
+SOBJS = Subscriber.obj
+
+COBJS = Control.obj
+
+SRCS = $(OBJS:.obj=.cpp) \
+ $(POBJS:.obj=.cpp) \
+ $(SOBJS:.obj=.cpp) \
+ $(COBJS:.obj=.cpp)
+
+!include $(top_srcdir)/config/Make.rules.mak
+
+CPPFLAGS = -I. -I../../include $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN
+LIBS = icestorm$(LIBSUFFIX).lib $(LIBS)
+
+!if "$(CPP_COMPILER)" != "BCC2006" && "$(OPTIMIZE)" != "yes"
+PPDBFLAGS = /pdb:$(PUBLISHER:.exe=.pdb)
+SPDBFLAGS = /pdb:$(SUBSCRIBER:.exe=.pdb)
+CPDBFLAGS = /pdb:$(CONTROL:.exe=.pdb)
+!endif
+
+$(PUBLISHER): $(OBJS) $(POBJS)
+ $(LINK) $(LD_EXEFLAGS) $(PPDBFLAGS) $(SETARGV) $(OBJS) $(POBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+$(SUBSCRIBER): $(OBJS) $(SOBJS)
+ $(LINK) $(LD_EXEFLAGS) $(SPDBFLAGS) $(SETARGV) $(OBJS) $(SOBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+$(CONTROL): $(OBJS) $(COBJS)
+ $(LINK) $(LD_EXEFLAGS) $(CPDBFLAGS) $(SETARGV) $(OBJS) $(COBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+!if "$(OPTIMIZE)" == "yes"
+
+all::
+ @echo release > build.txt
+
+!else
+
+all::
+ @echo debug > build.txt
+
+!endif
+
+clean::
+ del /q build.txt
+ del /q Single.cpp Single.h
+ del /q Controller.cpp Controller.h
+ for %f in (0.db\*) do if not %f == 0.db\.gitignore del /q %f
+ for %f in (1.db\*) do if not %f == 1.db\.gitignore del /q %f
+ for %f in (2.db\*) do if not %f == 2.db\.gitignore del /q %f
+
+!include .depend
diff --git a/cpp/test/IceStorm/repstress/Publisher.cpp b/cpp/test/IceStorm/repstress/Publisher.cpp
new file mode 100644
index 00000000000..36f33b04a18
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/Publisher.cpp
@@ -0,0 +1,169 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <Ice/Ice.h>
+#include <IceUtil/IceUtil.h>
+#include <IceStorm/IceStorm.h>
+#include <Single.h>
+#include <Controller.h>
+
+using namespace std;
+using namespace Ice;
+using namespace IceStorm;
+using namespace Test;
+
+class ControllerI : public Controller
+{
+public:
+
+ virtual void stop(const Ice::Current& c)
+ {
+ c.adapter->getCommunicator()->shutdown();
+ }
+};
+
+class PublishThread : public IceUtil::Thread, public IceUtil::Mutex
+{
+public:
+
+ PublishThread(const SinglePrx& single) :
+ _single(single),
+ _published(0),
+ _destroy(false)
+ {
+ }
+
+ virtual void run()
+ {
+ while(true)
+ {
+ {
+ Lock sync(*this);
+ if(_destroy)
+ {
+ cout << _published << endl;
+ break;
+ }
+ }
+ try
+ {
+ _single->event(_published);
+ IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1));
+ }
+ catch(const Ice::UnknownException&)
+ {
+ // This is expected if we publish to a replica that is
+ // going down.
+ continue;
+ }
+ ++_published;
+ }
+ }
+
+ void destroy()
+ {
+ Lock sync(*this);
+ _destroy = true;
+ }
+
+private:
+
+ const SinglePrx _single;
+ int _published;
+ bool _destroy;
+};
+typedef IceUtil::Handle<PublishThread> PublishThreadPtr;
+
+int
+run(int argc, char* argv[], const CommunicatorPtr& communicator)
+{
+ PropertiesPtr properties = communicator->getProperties();
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
+ string managerProxy = properties->getProperty(managerProxyProperty);
+ if(managerProxy.empty())
+ {
+ cerr << argv[0] << ": property `" << managerProxyProperty << "' is not set" << endl;
+ return EXIT_FAILURE;
+ }
+
+ IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(
+ communicator->stringToProxy(managerProxy));
+ if(!manager)
+ {
+ cerr << argv[0] << ": `" << managerProxy << "' is not running" << endl;
+ return EXIT_FAILURE;
+ }
+
+ TopicPrx topic;
+ try
+ {
+ topic = manager->retrieve("single");
+ }
+ catch(const NoSuchTopic& e)
+ {
+ cerr << argv[0] << ": NoSuchTopic: " << e.name << endl;
+ return EXIT_FAILURE;
+
+ }
+ assert(topic);
+
+ //
+ // Get a publisher object, create a twoway proxy, disable
+ // connection caching and then cast to a Single object.
+ //
+ SinglePrx single = SinglePrx::uncheckedCast(topic->getPublisher()->ice_twoway()->ice_connectionCached(false));
+
+ ObjectAdapterPtr adapter = communicator->createObjectAdapterWithEndpoints("ControllerAdapter", "default");
+ Ice::ObjectPrx controller = adapter->addWithUUID(new ControllerI);
+ adapter->activate();
+ cout << communicator->proxyToString(controller) << endl;
+
+ PublishThreadPtr t = new PublishThread(single);
+ t->start();
+
+ communicator->waitForShutdown();
+
+ t->destroy();
+ t->getThreadControl().join();
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if(communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/cpp/test/IceStorm/repstress/Single.ice b/cpp/test/IceStorm/repstress/Single.ice
new file mode 100644
index 00000000000..ad3d711bb2b
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/Single.ice
@@ -0,0 +1,23 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef SINGLE_ICE
+#define SINGLE_ICE
+
+module Test
+{
+
+interface Single
+{
+ void event(int i);
+};
+
+};
+
+#endif
diff --git a/cpp/test/IceStorm/repstress/Subscriber.cpp b/cpp/test/IceStorm/repstress/Subscriber.cpp
new file mode 100644
index 00000000000..1c1d8527ff9
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/Subscriber.cpp
@@ -0,0 +1,162 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceUtil/DisableWarnings.h>
+#include <IceUtil/IceUtil.h>
+#include <Ice/Ice.h>
+#include <IceStorm/IceStorm.h>
+#include <Single.h>
+#include <Controller.h>
+#include <TestCommon.h>
+
+using namespace std;
+using namespace Ice;
+using namespace IceStorm;
+using namespace Test;
+
+class ControllerI : public Controller
+{
+public:
+
+ virtual void stop(const Ice::Current& c)
+ {
+ c.adapter->getCommunicator()->shutdown();
+ }
+};
+
+class SingleI : public Single, public IceUtil::Monitor<IceUtil::Mutex>
+{
+public:
+
+ SingleI() :
+ _nevents(0)
+ {
+ }
+
+ virtual void
+ event(int, const Current& current)
+ {
+ Lock sync(*this);
+ ++_nevents;
+ }
+
+ int
+ nevents() const
+ {
+ Lock sync(*this);
+ return _nevents;
+ }
+
+private:
+
+ int _nevents;
+};
+typedef IceUtil::Handle<SingleI> SingleIPtr;
+
+int
+run(int argc, char* argv[], const CommunicatorPtr& communicator)
+{
+ PropertiesPtr properties = communicator->getProperties();
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
+ string managerProxy = properties->getProperty(managerProxyProperty);
+ if(managerProxy.empty())
+ {
+ cerr << argv[0] << ": property `" << managerProxyProperty << "' is not set" << endl;
+ return EXIT_FAILURE;
+ }
+
+ ObjectPrx base = communicator->stringToProxy(managerProxy);
+ IceStorm::TopicManagerPrx manager = IceStorm::TopicManagerPrx::checkedCast(base);
+ if(!manager)
+ {
+ cerr << argv[0] << ": `" << managerProxy << "' is not running" << endl;
+ return EXIT_FAILURE;
+ }
+
+ ObjectAdapterPtr adapter = communicator->createObjectAdapterWithEndpoints("SingleAdapter", "default");
+
+ TopicPrx topic;
+ try
+ {
+ topic = manager->retrieve("single");
+ }
+ catch(const IceStorm::NoSuchTopic& e)
+ {
+ cerr << argv[0] << ": NoSuchTopic: " << e.name << endl;
+ return EXIT_FAILURE;
+ }
+
+ SingleIPtr sub = new SingleI();
+ Ice::ObjectPrx prx = adapter->addWithUUID(sub);
+ Ice::ObjectPrx control = adapter->addWithUUID(new ControllerI);
+
+ IceStorm::QoS qos;
+
+ while(true)
+ {
+ try
+ {
+ topic->subscribeAndGetPublisher(qos, prx);
+ break;
+ }
+ // If we're already subscribed then we're done (previously we
+ // got an UnknownException which succeeded).
+ catch(const IceStorm::AlreadySubscribed&)
+ {
+ break;
+ }
+ // This can happen if the replica group loses the majority
+ // during subscription. In this case we retry.
+ catch(const Ice::UnknownException&)
+ {
+ }
+ }
+
+ adapter->activate();
+ cout << communicator->proxyToString(control) << endl;
+
+ communicator->waitForShutdown();
+
+ cout << sub->nevents() << endl;
+
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char* argv[])
+{
+ int status;
+ CommunicatorPtr communicator;
+
+ try
+ {
+ communicator = initialize(argc, argv);
+ status = run(argc, argv, communicator);
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+
+ if(communicator)
+ {
+ try
+ {
+ communicator->destroy();
+ }
+ catch(const Exception& ex)
+ {
+ cerr << ex << endl;
+ status = EXIT_FAILURE;
+ }
+ }
+
+ return status;
+}
diff --git a/cpp/test/IceStorm/repstress/run.py b/cpp/test/IceStorm/repstress/run.py
new file mode 100755
index 00000000000..27fe7acc1b6
--- /dev/null
+++ b/cpp/test/IceStorm/repstress/run.py
@@ -0,0 +1,169 @@
+#!/usr/bin/env python
+# **********************************************************************
+#
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+import os, sys, time, re
+
+for toplevel in [".", "..", "../..", "../../..", "../../../.."]:
+ toplevel = os.path.normpath(toplevel)
+ if os.path.exists(os.path.join(toplevel, "config", "TestUtil.py")):
+ break
+else:
+ raise "can't find toplevel directory!"
+
+sys.path.append(os.path.join(toplevel, "config"))
+import TestUtil
+TestUtil.processCmdLine()
+from threading import Thread
+
+name = os.path.join("IceStorm", "repstress")
+testdir = os.path.dirname(os.path.abspath(__file__))
+publisher = os.path.join(testdir, "publisher")
+subscriber = os.path.join(testdir, "subscriber")
+control = os.path.join(testdir, "control")
+
+def printOutput(pipe):
+ try:
+ while True:
+ line = pipe.readline()
+ if not line:
+ break
+ print line,
+ sys.stdout.flush()
+ except IOError:
+ pass
+
+def captureOutput(pipe):
+ out = ""
+ try:
+ while True:
+ line = pipe.readline()
+ if not line:
+ break
+ out = out + line
+ except IOError:
+ pass
+ return out
+
+def runcontrol(proxy):
+ pipe = TestUtil.startClient(control, ' "' + proxy + '"')
+ printOutput(pipe)
+ return TestUtil.closePipe(pipe)
+
+import IceStormUtil
+
+icestorm = IceStormUtil.init(toplevel, testdir, "replicated", replicatedPublisher=True, additional =
+ ' --Ice.ServerIdleTime=0 ' +
+ ' --IceStorm.Election.MasterTimeout=2' +
+ ' --IceStorm.Election.ElectionTimeout=2' +
+ ' --IceStorm.Election.ResponseTimeout=2')
+icestorm.start()
+
+print "creating topic...",
+sys.stdout.flush()
+icestorm.admin("create single")
+print "ok"
+
+print "running subscriber...",
+sys.stdout.flush()
+subscriberPipe = TestUtil.startServer(subscriber, ' --Ice.ServerIdleTime=0 ' + icestorm.reference())
+TestUtil.getServerPid(subscriberPipe)
+TestUtil.getAdapterReady(subscriberPipe, False)
+subControl = subscriberPipe.readline().strip()
+print "ok"
+
+print "running publisher...",
+sys.stdout.flush()
+publisherPipe = TestUtil.startServer(publisher, ' --Ice.ServerIdleTime=0 ' + icestorm.reference())
+TestUtil.getServerPid(publisherPipe)
+TestUtil.getAdapterReady(publisherPipe, False)
+pubControl = publisherPipe.readline().strip()
+print "ok"
+
+time.sleep(2)
+
+for i in range(0, 3):
+ # 0, 1
+ print "stopping replica 2 (0, 1 running)...",
+ sys.stdout.flush()
+ icestorm.stopReplica(2)
+ print "ok"
+ time.sleep(2)
+
+ # 1, 2
+ print "starting 2, stopping 0 (1, 2 running)...",
+ sys.stdout.flush()
+ icestorm.startReplica(2, echo=False)
+ icestorm.stopReplica(0)
+ print "ok"
+ # This waits for the replication to startup
+ #icestorm.admin("list")
+ time.sleep(2)
+
+ # 0, 2
+ print "starting 0, stopping 1 (0, 2 running)...",
+ sys.stdout.flush()
+ icestorm.startReplica(0, echo=False)
+ icestorm.stopReplica(1)
+ print "ok"
+ # This waits for the replication to startup
+ #icestorm.admin("list")
+ time.sleep(2)
+
+ print "starting 1 (all running)...",
+ sys.stdout.flush()
+ icestorm.startReplica(1, echo=False)
+ print "ok"
+ # This waits for the replication to startup
+ #icestorm.admin("list")
+
+ time.sleep(2)
+
+print "stopping publisher...",
+sys.stdout.flush()
+if runcontrol(pubControl):
+ printOutput(publisherPipe)
+ TestUtil.killServers()
+ sys.exit(1)
+publisherCount = publisherPipe.readline().strip()
+if TestUtil.closePipe(publisherPipe):
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+print "stopping replicas...",
+sys.stdout.flush()
+icestorm.stop()
+print "ok"
+
+print "stopping subscriber...",
+sys.stdout.flush()
+if runcontrol(subControl):
+ printOutput(subscriberPipe)
+ TestUtil.killServers()
+ sys.exit(1)
+subscriberCount = subscriberPipe.readline().strip()
+if TestUtil.closePipe(subscriberPipe):
+ TestUtil.killServers()
+ sys.exit(1)
+print "ok"
+
+print "publisher published %s events, subscriber received %s events" % (publisherCount, subscriberCount)
+#print "comparing counts...",
+#sys.stdout.flush()
+#if publisherCount != subscriberCount:
+ #TestUtil.killServers()
+ #sys.exit(1)
+#print "ok"
+
+if TestUtil.serverStatus():
+ TestUtil.killServers()
+ sys.exit(1)
+
+sys.exit(0)
diff --git a/cpp/test/IceStorm/single/.depend b/cpp/test/IceStorm/single/.depend
index e3debe71f99..f224334e1a5 100644
--- a/cpp/test/IceStorm/single/.depend
+++ b/cpp/test/IceStorm/single/.depend
@@ -1,5 +1,5 @@
-Single$(OBJEXT): Single.cpp Single.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
-Publisher$(OBJEXT): Publisher.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Single.h
-Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Single.h ../../include/TestCommon.h
+Single$(OBJEXT): Single.cpp Single.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
+Publisher$(OBJEXT): Publisher.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Single.h
+Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Single.h ../../include/TestCommon.h
Single.cpp: Single.ice
Single.ice: $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/test/IceStorm/single/.gitignore b/cpp/test/IceStorm/single/.gitignore
index e613056da1b..9d7c0709185 100644
--- a/cpp/test/IceStorm/single/.gitignore
+++ b/cpp/test/IceStorm/single/.gitignore
@@ -7,3 +7,6 @@ Single.cpp
Single.h
build.txt
db/*
+0.db/*
+1.db/*
+2.db/*
diff --git a/cpp/test/IceStorm/single/0.db/.gitignore b/cpp/test/IceStorm/single/0.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/single/0.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/single/1.db/.gitignore b/cpp/test/IceStorm/single/1.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/single/1.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/single/2.db/.gitignore b/cpp/test/IceStorm/single/2.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/single/2.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/single/Makefile b/cpp/test/IceStorm/single/Makefile
index 05d3555ad1a..5c8ac4a17fb 100644
--- a/cpp/test/IceStorm/single/Makefile
+++ b/cpp/test/IceStorm/single/Makefile
@@ -42,5 +42,8 @@ $(SUBSCRIBER): $(OBJS) $(SOBJS)
clean::
-rm -f build.txt
-rm -f db/*
+ -rm -f 0.db/*
+ -rm -f 1.db/*
+ -rm -f 2.db/*
include .depend
diff --git a/cpp/test/IceStorm/single/Makefile.mak b/cpp/test/IceStorm/single/Makefile.mak
index 77ef90090b1..86dad95ee73 100644
--- a/cpp/test/IceStorm/single/Makefile.mak
+++ b/cpp/test/IceStorm/single/Makefile.mak
@@ -61,5 +61,8 @@ clean::
del /q build.txt
del /q Single.cpp Single.h
for %f in (db\*) do if not %f == db\.gitignore del /q %f
+ for %f in (0.db\*) do if not %f == 0.db\.gitignore del /q %f
+ for %f in (1.db\*) do if not %f == 1.db\.gitignore del /q %f
+ for %f in (2.db\*) do if not %f == 2.db\.gitignore del /q %f
!include .depend
diff --git a/cpp/test/IceStorm/single/Publisher.cpp b/cpp/test/IceStorm/single/Publisher.cpp
index d02ba062fd3..d42aed7ebcc 100644
--- a/cpp/test/IceStorm/single/Publisher.cpp
+++ b/cpp/test/IceStorm/single/Publisher.cpp
@@ -20,7 +20,7 @@ int
run(int argc, char* argv[], const CommunicatorPtr& communicator)
{
PropertiesPtr properties = communicator->getProperties();
- const char* managerProxyProperty = "IceStorm.TopicManager.Proxy";
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
string managerProxy = properties->getProperty(managerProxyProperty);
if(managerProxy.empty())
{
diff --git a/cpp/test/IceStorm/single/Subscriber.cpp b/cpp/test/IceStorm/single/Subscriber.cpp
index 0c488976433..0fc922b887a 100644
--- a/cpp/test/IceStorm/single/Subscriber.cpp
+++ b/cpp/test/IceStorm/single/Subscriber.cpp
@@ -33,7 +33,6 @@ public:
virtual void
event(int i, const Current& current)
{
-
if((_name == "default" || _name == "oneway" || _name == "batch" || _name == "datagram" ||
_name == "batch datagram") && current.requestId != 0)
{
@@ -108,7 +107,7 @@ int
run(int argc, char* argv[], const CommunicatorPtr& communicator)
{
PropertiesPtr properties = communicator->getProperties();
- const char* managerProxyProperty = "IceStorm.TopicManager.Proxy";
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
string managerProxy = properties->getProperty(managerProxyProperty);
if(managerProxy.empty())
{
@@ -176,7 +175,7 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
// Use a separate adapter to ensure a separate connection is used for the subscriber
// (otherwise, if multiple UDP subscribers use the same connection we might get high
// packet loss, see bug 1784).
- ObjectAdapterPtr adpt = communicator->createObjectAdapterWithEndpoints("UdpAdater1", "udp");
+ ObjectAdapterPtr adpt = communicator->createObjectAdapterWithEndpoints("UdpAdapter1", "udp");
subscribers.push_back(new SingleI(communicator, "datagram"));
IceStorm::QoS qos;
qos["reliability"] = "oneway";
@@ -187,7 +186,7 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
// Use a separate adapter to ensure a separate connection is used for the subscriber
// (otherwise, if multiple UDP subscribers use the same connection we might get high
// packet loss, see bug 1784).
- ObjectAdapterPtr adpt = communicator->createObjectAdapterWithEndpoints("UdpAdater2", "udp");
+ ObjectAdapterPtr adpt = communicator->createObjectAdapterWithEndpoints("UdpAdapter2", "udp");
subscribers.push_back(new SingleI(communicator, "batch datagram"));
IceStorm::QoS qos;
qos["reliability"] = "batch";
@@ -223,7 +222,7 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
// Use a separate adapter to ensure a separate connection is used for the subscriber
// (otherwise, if multiple UDP subscribers use the same connection we might get high
// packet loss, see bug 1784).
- ObjectAdapterPtr adpt = communicator->createObjectAdapterWithEndpoints("UdpAdater3", "udp");
+ ObjectAdapterPtr adpt = communicator->createObjectAdapterWithEndpoints("UdpAdapter3", "udp");
subscribers.push_back(new SingleI(communicator, "datagram"));
topic->subscribeAndGetPublisher(IceStorm::QoS(), adpt->addWithUUID(subscribers.back())->ice_datagram());
adpt->activate();
@@ -232,7 +231,7 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
// Use a separate adapter to ensure a separate connection is used for the subscriber
// (otherwise, if multiple UDP subscribers use the same connection we might get high
// packet loss, see bug 1784).
- ObjectAdapterPtr adpt = communicator->createObjectAdapterWithEndpoints("UdpAdater4", "udp");
+ ObjectAdapterPtr adpt = communicator->createObjectAdapterWithEndpoints("UdpAdapter4", "udp");
subscribers.push_back(new SingleI(communicator, "batch datagram"));
topic->subscribeAndGetPublisher(IceStorm::QoS(), adpt->addWithUUID(subscribers.back())->ice_batchDatagram());
adpt->activate();
diff --git a/cpp/test/IceStorm/single/run.py b/cpp/test/IceStorm/single/run.py
index 01f378c25cf..1370ffe3f18 100755
--- a/cpp/test/IceStorm/single/run.py
+++ b/cpp/test/IceStorm/single/run.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# **********************************************************************
#
-# Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
#
# This copy of Ice is licensed to you under the terms described in the
# ICE_LICENSE file included in this distribution.
@@ -25,83 +25,59 @@ TestUtil.processCmdLine()
name = os.path.join("IceStorm", "single")
testdir = os.path.dirname(os.path.abspath(__file__))
-
-iceBox = TestUtil.getIceBox(testdir)
-iceBoxAdmin = os.path.join(TestUtil.getBinDir(__file__), "iceboxadmin")
-iceStormAdmin = os.path.join(TestUtil.getBinDir(__file__), "icestormadmin")
-
-iceBoxEndpoints = ' --IceBox.ServiceManager.Endpoints="default -p 12010"'
-
-iceStormService = " --IceBox.Service.IceStorm=IceStormService," + TestUtil.getIceSoVersion() + ":createIceStorm" + \
- ' --IceStorm.TopicManager.Endpoints="default -p 12011"' + \
- ' --IceStorm.Publish.Endpoints="default:udp"' + \
- " --IceBox.PrintServicesReady=IceStorm" + \
- " --IceBox.InheritProperties=1"
-iceStormReference = ' --IceStorm.TopicManager.Proxy="IceStorm/TopicManager:default -p 12011"'
-
-dbHome = os.path.join(testdir, "db")
-TestUtil.cleanDbDir(dbHome)
-iceStormDBEnv=" --Freeze.DbEnv.IceStorm.DbHome=" + dbHome
-
-print "starting icestorm service...",
-iceBoxPipe = TestUtil.startServer(iceBox, iceBoxEndpoints + iceStormService + iceStormDBEnv)
-TestUtil.getServerPid(iceBoxPipe)
-TestUtil.waitServiceReady(iceBoxPipe, "IceStorm")
-print "ok"
-
-print "creating topic...",
-iceStormAdminPipe = TestUtil.startClient(iceStormAdmin, iceStormReference + r' -e "create single" 2>&1')
-iceStormAdminStatus = TestUtil.closePipe(iceStormAdminPipe)
-if iceStormAdminStatus:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-publisher = os.path.join(testdir, "publisher")
-subscriber = os.path.join(testdir, "subscriber")
-
-print "starting subscriber...",
-subscriberPipe = TestUtil.startServer(subscriber, iceStormReference + " 2>&1")
-TestUtil.getServerPid(subscriberPipe)
-TestUtil.getAdapterReady(subscriberPipe, True, 5)
-print "ok"
-
-#
-# Start the publisher. This should publish 10 events which eventually
-# causes subscriber to terminate.
-#
-print "starting publisher...",
-publisherPipe = TestUtil.startClient(publisher, iceStormReference + " 2>&1")
-print "ok"
-
-subscriberStatus = TestUtil.specificServerStatus(subscriberPipe, 30)
-publisherStatus = TestUtil.closePipe(publisherPipe)
-
-#
-# Destroy the topic.
-#
-print "destroying topic...",
-iceStormAdminPipe = TestUtil.startClient(iceStormAdmin, iceStormReference + r' -e "destroy single" 2>&1')
-iceStormAdminStatus = TestUtil.closePipe(iceStormAdminPipe)
-if iceStormAdminStatus:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-#
-# Shutdown icestorm.
-#
-print "shutting down icestorm service...",
-iceBoxAdminPipe = TestUtil.startClient(iceBoxAdmin, ' --IceBoxAdmin.ServiceManager.Proxy="IceBox/ServiceManager:default -p 12010"' + \
- r' shutdown 2>&1')
-iceBoxAdminStatus = TestUtil.closePipe(iceBoxAdminPipe)
-if iceBoxAdminStatus:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-if TestUtil.serverStatus() or subscriberStatus or publisherStatus:
- TestUtil.killServers()
- sys.exit(1)
+import IceStormUtil
+
+def dotest(type):
+ icestorm = IceStormUtil.init(toplevel, testdir, type)
+
+ icestorm.start()
+
+ print "creating topic...",
+ sys.stdout.flush()
+ icestorm.admin("create single")
+ print "ok"
+
+ publisher = os.path.join(testdir, "publisher")
+ subscriber = os.path.join(testdir, "subscriber")
+
+ print "starting subscriber...",
+ sys.stdout.flush()
+ subscriberPipe = TestUtil.startServer(subscriber, icestorm.reference())
+ TestUtil.getServerPid(subscriberPipe)
+ TestUtil.getAdapterReady(subscriberPipe, True, 5)
+ print "ok"
+
+ #
+ # Start the publisher. This should publish 10 events which eventually
+ # causes subscriber to terminate.
+ #
+ print "starting publisher...",
+ sys.stdout.flush()
+ publisherPipe = TestUtil.startClient(publisher, icestorm.reference())
+ print "ok"
+
+ subscriberStatus = TestUtil.specificServerStatus(subscriberPipe, 30)
+ publisherStatus = TestUtil.closePipe(publisherPipe)
+
+ #
+ # Destroy the topic.
+ #
+ print "destroy topic...",
+ sys.stdout.flush()
+ icestorm.admin("destroy single")
+ print "ok"
+
+ #
+ # Shutdown icestorm.
+ #
+ icestorm.stop()
+
+ if TestUtil.serverStatus() or subscriberStatus or publisherStatus:
+ TestUtil.killServers()
+ sys.exit(1)
+
+dotest("persistent")
+dotest("transient")
+dotest("replicated")
sys.exit(0)
diff --git a/cpp/test/IceStorm/stress/.depend b/cpp/test/IceStorm/stress/.depend
index 6c657c8fa0b..ab6268fb315 100644
--- a/cpp/test/IceStorm/stress/.depend
+++ b/cpp/test/IceStorm/stress/.depend
@@ -1,5 +1,5 @@
-Event$(OBJEXT): Event.cpp Event.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
-Publisher$(OBJEXT): Publisher.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceUtil/Options.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Event.h
-Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h $(includedir)/IceUtil/Options.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/Random.h Event.h ../../include/TestCommon.h
+Event$(OBJEXT): Event.cpp Event.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h
+Publisher$(OBJEXT): Publisher.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceUtil/Options.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h Event.h
+Subscriber$(OBJEXT): Subscriber.cpp $(includedir)/IceUtil/DisableWarnings.h $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Exception.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/FactoryTableDef.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h $(includedir)/IceStorm/IceStorm.h $(includedir)/Ice/SliceChecksumDict.h $(includedir)/IceUtil/Options.h $(includedir)/IceUtil/RecMutex.h $(includedir)/IceUtil/Random.h Event.h ../../include/TestCommon.h
Event.cpp: Event.ice
Event.ice: $(SLICE2CPP) $(SLICEPARSERLIB)
diff --git a/cpp/test/IceStorm/stress/.gitignore b/cpp/test/IceStorm/stress/.gitignore
index f01afc6f930..1e15a552882 100644
--- a/cpp/test/IceStorm/stress/.gitignore
+++ b/cpp/test/IceStorm/stress/.gitignore
@@ -8,3 +8,9 @@ Event.h
build.txt
db/*
db2/*
+0.db/*
+0.db2/*
+1.db/*
+1.db2/*
+2.db/*
+2.db2/*
diff --git a/cpp/test/IceStorm/stress/0.db/.gitignore b/cpp/test/IceStorm/stress/0.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/stress/0.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/stress/0.db2/.gitignore b/cpp/test/IceStorm/stress/0.db2/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/stress/0.db2/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/stress/1.db/.gitignore b/cpp/test/IceStorm/stress/1.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/stress/1.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/stress/1.db2/.gitignore b/cpp/test/IceStorm/stress/1.db2/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/stress/1.db2/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/stress/2.db/.gitignore b/cpp/test/IceStorm/stress/2.db/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/stress/2.db/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/stress/2.db2/.gitignore b/cpp/test/IceStorm/stress/2.db2/.gitignore
new file mode 100644
index 00000000000..72e8ffc0db8
--- /dev/null
+++ b/cpp/test/IceStorm/stress/2.db2/.gitignore
@@ -0,0 +1 @@
+*
diff --git a/cpp/test/IceStorm/stress/Makefile b/cpp/test/IceStorm/stress/Makefile
index 3c3daff5e3e..decde782e42 100644
--- a/cpp/test/IceStorm/stress/Makefile
+++ b/cpp/test/IceStorm/stress/Makefile
@@ -42,5 +42,8 @@ $(SUBSCRIBER): $(OBJS) $(SOBJS)
clean::
-rm -f build.txt
-rm -f db/* db2/*
+ -rm -f 0.db/* 0.db2/*
+ -rm -f 1.db/* 1.db2/*
+ -rm -f 2.db/* 2.db2/*
include .depend
diff --git a/cpp/test/IceStorm/stress/Makefile.mak b/cpp/test/IceStorm/stress/Makefile.mak
index 84101991865..ddc23c4ef4d 100644
--- a/cpp/test/IceStorm/stress/Makefile.mak
+++ b/cpp/test/IceStorm/stress/Makefile.mak
@@ -60,6 +60,12 @@ clean::
del /q build.txt
del /q Event.cpp Event.h
for %f in (db\*) do if not %f == db\.gitignore del /q %f
+ for %f in (0.db\*) do if not %f == 0.db\.gitignore del /q %f
+ for %f in (1.db\*) do if not %f == 1.db\.gitignore del /q %f
+ for %f in (2.db\*) do if not %f == 2.db\.gitignore del /q %f
for %f in (db2\*) do if not %f == db2\.gitignore del /q %f
+ for %f in (0.db2\*) do if not %f == 0.db2\.gitignore del /q %f
+ for %f in (1.db2\*) do if not %f == 1.db2\.gitignore del /q %f
+ for %f in (2.db2\*) do if not %f == 2.db2\.gitignore del /q %f
!include .depend
diff --git a/cpp/test/IceStorm/stress/Publisher.cpp b/cpp/test/IceStorm/stress/Publisher.cpp
index 716213474cf..371016b4465 100644
--- a/cpp/test/IceStorm/stress/Publisher.cpp
+++ b/cpp/test/IceStorm/stress/Publisher.cpp
@@ -49,7 +49,7 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
bool oneway = opts.isSet("oneway");
PropertiesPtr properties = communicator->getProperties();
- const char* managerProxyProperty = "IceStorm.TopicManager.Proxy";
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
string managerProxy = properties->getProperty(managerProxyProperty);
if(managerProxy.empty())
{
diff --git a/cpp/test/IceStorm/stress/Subscriber.cpp b/cpp/test/IceStorm/stress/Subscriber.cpp
index 89e6febabcf..bab1e53b079 100644
--- a/cpp/test/IceStorm/stress/Subscriber.cpp
+++ b/cpp/test/IceStorm/stress/Subscriber.cpp
@@ -238,7 +238,7 @@ run(int argc, char* argv[], const CommunicatorPtr& communicator)
}
PropertiesPtr properties = communicator->getProperties();
- const char* managerProxyProperty = "IceStorm.TopicManager.Proxy";
+ const char* managerProxyProperty = "IceStormAdmin.TopicManager.Default";
string managerProxy = properties->getProperty(managerProxyProperty);
if(managerProxy.empty())
{
diff --git a/cpp/test/IceStorm/stress/run.py b/cpp/test/IceStorm/stress/run.py
index dacf98b7a2b..4e4a405e053 100755
--- a/cpp/test/IceStorm/stress/run.py
+++ b/cpp/test/IceStorm/stress/run.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python
# **********************************************************************
#
-# Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
+# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
#
# This copy of Ice is licensed to you under the terms described in the
# ICE_LICENSE file included in this distribution.
@@ -23,41 +23,15 @@ TestUtil.processCmdLine()
name = os.path.join("IceStorm", "stress")
testdir = os.path.dirname(os.path.abspath(__file__))
-exedir = testdir
-
-iceBox = TestUtil.getIceBox(exedir)
-iceBoxAdmin = os.path.join(TestUtil.getBinDir(__file__), "iceboxadmin")
-iceStormAdmin = os.path.join(TestUtil.getBinDir(__file__), "icestormadmin")
-
-iceBoxEndpoints = ' --IceBox.ServiceManager.Endpoints="default -p 12010" --Ice.Default.Locator='
-
-iceStormService = " --IceBox.Service.IceStorm=IceStormService," + TestUtil.getIceSoVersion() + ":createIceStorm" + \
- ' --IceStorm.TopicManager.Endpoints="default -p 12011"' + \
- ' --IceStorm.Publish.Endpoints="default -p 12012"' + \
- ' --IceStorm.InstanceName=TestIceStorm1 ' + \
- ' --IceStorm.Discard.Interval=2' + \
- ' --IceBox.PrintServicesReady=IceStorm' + \
- " --IceBox.InheritProperties=1"
-iceStormReference = ' --IceStorm.TopicManager.Proxy="TestIceStorm1/TopicManager: default -p 12011"'
-
-iceBoxEndpoints2 = ' --IceBox.ServiceManager.Endpoints="default -p 12020" --Ice.Default.Locator='
-
-iceStormService2 = " --IceBox.Service.IceStorm=IceStormService," + TestUtil.getIceSoVersion() + ":createIceStorm" + \
- ' --IceStorm.TopicManager.Endpoints="default -p 12021"' + \
- ' --IceStorm.Publish.Endpoints="default -p 12022"' + \
- ' --IceStorm.InstanceName=TestIceStorm2 ' + \
- ' --IceStorm.Discard.Interval=2' + \
- ' --IceBox.PrintServicesReady=IceStorm' + \
- " --IceBox.InheritProperties=1"
-iceStormReference2 = ' --IceStorm.TopicManager.Proxy="TestIceStorm2/TopicManager: default -p 12021"'
-
-adminIceStormReference = ' --IceStormAdmin.TopicManager.Proxy="TestIceStorm1/TopicManager: default -p 12011" ' + \
- '--IceStormAdmin.TopicManager.Proxy2="TestIceStorm2/TopicManager: default -p 12021"'
-
-def doTest(subOpts, pubOpts):
+
+iceBox = TestUtil.getIceBox(testdir)
+iceBoxAdmin = os.path.join(TestUtil.getBinDir(testdir), "iceboxadmin")
+iceStormAdmin = os.path.join(TestUtil.getBinDir(testdir), "icestormadmin")
+
+import IceStormUtil
+
+def doTest(server1, server2, subOpts, pubOpts):
global testdir
- global iceStormReference
- global iceStormReference2
publisher = os.path.join(testdir, "publisher")
subscriber = os.path.join(testdir, "subscriber")
@@ -67,12 +41,12 @@ def doTest(subOpts, pubOpts):
subOpts = [ subOpts ]
for opts in subOpts:
# We don't want the subscribers to time out.
- pipe = TestUtil.startServer(subscriber, r' --Ice.ServerIdleTime=0 ' + opts + " 2>&1")
+ pipe = TestUtil.startServer(subscriber, r' --Ice.ServerIdleTime=0 ' + opts)
TestUtil.getServerPid(pipe)
TestUtil.getAdapterReady(pipe)
subscriberPipes.append(pipe)
- publisherPipe = TestUtil.startClient(publisher, iceStormReference + ' ' + pubOpts + " 2>&1")
+ publisherPipe = TestUtil.startClient(publisher, server1.reference() + r' ' + pubOpts)
TestUtil.printOutputFromPipe(publisherPipe)
@@ -93,197 +67,176 @@ def doTest(subOpts, pubOpts):
return 0
-def startServers(additionalArgs=""):
- global iceBox
- global iceBoxEndpoints
- global iceBoxEndpoints2
- global iceStormService
- global iceStormService2
- global iceStormDBEnv
- global iceStormDBEnv2
+def runAdmin(cmd, desc = None):
+ global iceStormAdmin
+ global iceStormAdminReference
+ if desc:
+ print desc,
+ sys.stdout.flush()
+ pipe = TestUtil.startClient(iceStormAdmin, adminIceStormReference + r' -e "' + cmd + '"')
+ status = TestUtil.closePipe(pipe)
+ if status:
+ TestUtil.killServers()
+ sys.exit(1)
+ if desc:
+ print "ok"
+
+def runtest(type):
+ # Clear the idle timeout otherwise the IceBox ThreadPool will timeout.
+ server1 = IceStormUtil.init(toplevel, testdir, type, additional = '--Ice.ServerIdleTime=0',
+ dbDir = "db", instanceName = "TestIceStorm1", port = 12000)
+ server2 = IceStormUtil.init(toplevel, testdir, type, additional = '--Ice.ServerIdleTime=0',
+ dbDir = "db2", instanceName = "TestIceStorm2", port = 12500)
+ global adminIceStormReference
+ adminIceStormReference = ' --IceStormAdmin.TopicManager.Proxy="%s" --IceStormAdmin.TopicManager.Proxy2="%s"' % (
+ server1.proxy(), server2.proxy())
+
print "starting icestorm services...",
sys.stdout.flush()
- # Clear the idle timeout otherwise the IceBox ThreadPool will timeout.wA
- command = iceBoxEndpoints + iceStormService + iceStormDBEnv + ' --Ice.ServerIdleTime=0' + additionalArgs
- iceBoxPipe = TestUtil.startServer(iceBox, command + " 2>&1")
- TestUtil.getServerPid(iceBoxPipe)
- TestUtil.waitServiceReady(iceBoxPipe, "IceStorm")
- command = iceBoxEndpoints2 + iceStormService2 + iceStormDBEnv2 + ' --Ice.ServerIdleTime=0' + additionalArgs
- iceBoxPipe2 = TestUtil.startServer(iceBox, command + " 2>&1")
- TestUtil.getServerPid(iceBoxPipe2)
- TestUtil.waitServiceReady(iceBoxPipe2, "IceStorm")
+ server1.start(echo=False)
+ server2.start(echo=False)
+ print "ok"
+
+ runAdmin("create TestIceStorm1/fed1 TestIceStorm2/fed1", "setting up the topics...")
+
+ print "Sending 5000 ordered events... ",
+ sys.stdout.flush()
+ status = doTest(server1, server2, '--events 5000 --qos "reliability,ordered" ' + server1.reference(), '--events 5000')
+ if status:
+ print "failed!"
+ TestUtil.killServers()
+ sys.exit(1)
+ print "ok"
+
+ runAdmin("link TestIceStorm1/fed1 TestIceStorm2/fed1")
+ print "Sending 5000 ordered events across a link... ",
+ sys.stdout.flush()
+ status = doTest(server1, server2, '--events 5000 --qos "reliability,ordered" ' + server2.reference(), '--events 5000')
+ if status:
+ TestUtil.killServers()
+ sys.exit(1)
+ print "ok"
+
+ runAdmin("unlink TestIceStorm1/fed1 TestIceStorm2/fed1")
+ print "Sending 20000 unordered events... ",
+ sys.stdout.flush()
+ status = doTest(server1, server2, '--events 20000 ' + server1.reference(), '--events 20000 --oneway')
+ if status:
+ print "failed!"
+ TestUtil.killServers()
+ sys.exit(1)
+ print "ok"
+
+ runAdmin("link TestIceStorm1/fed1 TestIceStorm2/fed1")
+ print "Sending 20000 unordered events across a link... ",
+ sys.stdout.flush()
+ status = doTest(server1, server2, '--events 20000 ' + server2.reference(), '--events 20000 --oneway')
+ if status:
+ TestUtil.killServers()
+ sys.exit(1)
+ print "ok"
+
+ runAdmin("unlink TestIceStorm1/fed1 TestIceStorm2/fed1")
+ print "Sending 20000 unordered batch events... ",
+ sys.stdout.flush()
+ status = doTest(server1, server2, '--events 20000 --qos "reliability,batch" ' + server1.reference(), '--events 20000 --oneway')
+ if status:
+ print "failed!"
+ TestUtil.killServers()
+ sys.exit(1)
+ print "ok"
+
+ runAdmin("link TestIceStorm1/fed1 TestIceStorm2/fed1")
+ print "Sending 20000 unordered batch events across a link... ",
+ sys.stdout.flush()
+ status = doTest(server1, server2, '--events 20000 --qos "reliability,batch" ' + server2.reference(), '--events 20000 --oneway')
+ if status:
+ TestUtil.killServers()
+ sys.exit(1)
+ print "ok"
+
+ runAdmin("unlink TestIceStorm1/fed1 TestIceStorm2/fed1")
+ print "Sending 20000 unordered events with slow subscriber... ",
+ status = doTest(server1, server2, ['--events 2 --slow ' + server1.reference(), '--events 20000 ' + server1.reference()], '--events 20000 --oneway')
+ if status:
+ print "failed!"
+ TestUtil.killServers()
+ sys.exit(1)
+ print "ok"
+
+ runAdmin("link TestIceStorm1/fed1 TestIceStorm2/fed1")
+ print "Sending 20000 unordered events with slow subscriber & link... ",
+ status = doTest(server1, server2, ['--events 2 --slow' + server1.reference(), '--events 20000' + server1.reference(), '--events 2 --slow' + server2.reference(), '--events 20000' + server2.reference()], '--events 20000 --oneway')
+ if status:
+ print "failed!"
+ TestUtil.killServers()
+ sys.exit(1)
print "ok"
- return iceBoxPipe, iceBoxPipe2
-def stopServers(p1, p2 = None):
- global iceBox
- global iceBoxAdmin
- global iceBoxEndpoints
- global iceBoxEndpoints2
print "shutting down icestorm services...",
sys.stdout.flush()
- command = iceBoxEndpoints + r' shutdown'
- pipe = TestUtil.startClient(iceBoxAdmin, command + " 2>&1")
- status = TestUtil.closePipe(pipe)
- if status or TestUtil.specificServerStatus(p1):
+ server1.stop()
+ server2.stop()
+ print "ok"
+
+ print "starting icestorm services...",
+ sys.stdout.flush()
+ #
+ # The erratic tests emit lots of connection warnings so they are
+ # disabled here. The IceStorm servers are stopped and restarted so the
+ # settings will take effect.
+ #
+ server1.start(echo=False, additionalOptions = ' --Ice.Warn.Connections=0')
+ server2.start(echo=False, additionalOptions = ' --Ice.Warn.Connections=0')
+ print "ok"
+
+ runAdmin("unlink TestIceStorm1/fed1 TestIceStorm2/fed1")
+
+ print "Sending 20000 unordered events with erratic subscriber... ",
+ sys.stdout.flush()
+ status = doTest(server1, server2, \
+ [ '--erratic 5 --qos "reliability,ordered" --events 20000' + server1.reference(), \
+ '--erratic 5 --events 20000' + server1.reference(), \
+ '--events 20000' + server1.reference()], \
+ '--events 20000 --oneway')
+ if status:
+ print "failed!"
TestUtil.killServers()
sys.exit(1)
- if p2:
- command = iceBoxEndpoints2 + r' shutdown'
- pipe = TestUtil.startClient(iceBoxAdmin, command + " 2>&1")
- status = TestUtil.closePipe(pipe)
- if status or TestUtil.specificServerStatus(p2):
- TestUtil.killServers()
- sys.exit(1)
print "ok"
-def runAdmin(cmd, desc = None):
- global iceStormAdmin
- global iceStormAdminReference
- if desc:
- print desc,
- sys.stdout.flush()
- command = adminIceStormReference + r' -e "' + cmd + '"'
- pipe = TestUtil.startClient(iceStormAdmin, command + " 2>&1")
- status = TestUtil.closePipe(pipe)
+ runAdmin("link TestIceStorm1/fed1 TestIceStorm2/fed1")
+ print "Sending 20000 unordered events with erratic subscriber across a link... ",
+ sys.stdout.flush()
+ status = doTest(server1, server2, \
+ [ '--events 20000' + server1.reference(), \
+ '--erratic 5 --qos "reliability,ordered" --events 20000 ' + server1.reference(), \
+ '--erratic 5 --events 20000 ' + server1.reference(), \
+ '--events 20000' + server2.reference(), \
+ '--erratic 5 --qos "reliability,ordered" --events 20000 ' + server2.reference(), \
+ '--erratic 5 --events 20000 ' + server2.reference()], \
+ '--events 20000 --oneway ')
if status:
+ print "failed!"
TestUtil.killServers()
sys.exit(1)
- if desc:
- print "ok"
+ print "ok"
-dbHome = os.path.join(testdir, "db")
-TestUtil.cleanDbDir(dbHome)
-iceStormDBEnv=" --Freeze.DbEnv.IceStorm.DbHome=" + dbHome
-
-dbHome2 = os.path.join(testdir, "db2")
-TestUtil.cleanDbDir(dbHome2)
-iceStormDBEnv2=" --Freeze.DbEnv.IceStorm.DbHome=" + dbHome2
-
-server1, server2 = startServers()
-
-runAdmin("create TestIceStorm1/fed1 TestIceStorm2/fed1", "setting up the topics...")
-
-print "Sending 5000 ordered events... ",
-sys.stdout.flush()
-status = doTest('--events 5000 --qos "reliability,ordered" ' + iceStormReference, '--events 5000')
-if status:
- print "failed!"
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-runAdmin("link TestIceStorm1/fed1 TestIceStorm2/fed1")
-print "Sending 5000 ordered events across a link... ",
-sys.stdout.flush()
-status = doTest('--events 5000 --qos "reliability,ordered" ' + iceStormReference2, '--events 5000')
-if status:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-runAdmin("unlink TestIceStorm1/fed1 TestIceStorm2/fed1")
-print "Sending 20000 unordered events... ",
-sys.stdout.flush()
-status = doTest('--events 20000 ' + iceStormReference, '--events 20000 --oneway')
-if status:
- print "failed!"
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-runAdmin("link TestIceStorm1/fed1 TestIceStorm2/fed1")
-print "Sending 20000 unordered events across a link... ",
-sys.stdout.flush()
-status = doTest('--events 20000 ' + iceStormReference2, '--events 20000 --oneway')
-if status:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-runAdmin("unlink TestIceStorm1/fed1 TestIceStorm2/fed1")
-print "Sending 20000 unordered batch events... ",
-sys.stdout.flush()
-status = doTest('--events 20000 --qos "reliability,batch" ' + iceStormReference, '--events 20000 --oneway')
-if status:
- print "failed!"
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-runAdmin("link TestIceStorm1/fed1 TestIceStorm2/fed1")
-print "Sending 20000 unordered batch events across a link... ",
-sys.stdout.flush()
-status = doTest('--events 20000 --qos "reliability,batch" ' + iceStormReference2, '--events 20000 --oneway')
-if status:
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-runAdmin("unlink TestIceStorm1/fed1 TestIceStorm2/fed1")
-print "Sending 20000 unordered events with slow subscriber... ",
-status = doTest(['--events 2 --slow ' + iceStormReference, '--events 20000 ' + iceStormReference], '--events 20000 --oneway')
-if status:
- print "failed!"
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-runAdmin("link TestIceStorm1/fed1 TestIceStorm2/fed1")
-print "Sending 20000 unordered events with slow subscriber & link... ",
-status = doTest(['--events 2 --slow' + iceStormReference, '--events 20000' + iceStormReference, '--events 2 --slow' + iceStormReference2, '--events 20000' + iceStormReference2], '--events 20000 --oneway')
-if status:
- print "failed!"
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
+ #
+ # Shutdown icestorm.
+ #
+ print "shutting down icestorm services...",
+ sys.stdout.flush()
+ server1.stop()
+ server2.stop()
+ print "ok"
-#
-# The erratic tests emit lots of connection warnings so they are
-# disabled here. The IceStorm servers are stopped and restarted so the
-# settings will take effect.
-#
-stopServers(server1, server2)
-server1, server2 = startServers(" --Ice.Warn.Connections=0")
-
-runAdmin("unlink TestIceStorm1/fed1 TestIceStorm2/fed1")
-print "Sending 20000 unordered events with erratic subscriber... ",
-sys.stdout.flush()
-status = doTest(\
- [ '--erratic 5 --qos "reliability,ordered" --events 20000' + iceStormReference, \
- '--erratic 5 --events 20000' + iceStormReference, \
- '--events 20000' + iceStormReference], \
- '--events 20000 --oneway')
-if status:
- print "failed!"
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
-
-runAdmin("link TestIceStorm1/fed1 TestIceStorm2/fed1")
-print "Sending 20000 unordered events with erratic subscriber across a link... ",
-sys.stdout.flush()
-status = doTest( \
- [ '--events 20000' + iceStormReference, \
- '--erratic 5 --qos "reliability,ordered" --events 20000 ' + iceStormReference, \
- '--erratic 5 --events 20000 ' + iceStormReference, \
- '--events 20000' + iceStormReference2, \
- '--erratic 5 --qos "reliability,ordered" --events 20000 ' + iceStormReference2, \
- '--erratic 5 --events 20000 ' + iceStormReference2], \
- '--events 20000 --oneway ')
-if status:
- print "failed!"
- TestUtil.killServers()
- sys.exit(1)
-print "ok"
+ if TestUtil.serverStatus():
+ TestUtil.killServers()
+ sys.exit(1)
-#
-# Shutdown icestorm.
-#
-stopServers(server1, server2)
-if TestUtil.serverStatus():
- TestUtil.killServers()
- sys.exit(1)
+runtest("persistent")
+runtest("replicated")
sys.exit(0)