diff options
Diffstat (limited to 'cpp/test')
-rw-r--r-- | cpp/test/Ice/Makefile | 3 | ||||
-rw-r--r-- | cpp/test/Ice/Makefile.mak | 1 | ||||
-rw-r--r-- | cpp/test/Ice/plugin/.depend | 1 | ||||
-rw-r--r-- | cpp/test/Ice/plugin/.depend.mak | 1 | ||||
-rw-r--r-- | cpp/test/Ice/plugin/.gitignore | 7 | ||||
-rw-r--r-- | cpp/test/Ice/plugin/Client.cpp | 187 | ||||
-rw-r--r-- | cpp/test/Ice/plugin/Makefile | 51 | ||||
-rw-r--r-- | cpp/test/Ice/plugin/Makefile.mak | 68 | ||||
-rw-r--r-- | cpp/test/Ice/plugin/Plugin.cpp | 404 | ||||
-rw-r--r-- | cpp/test/Ice/plugin/plugins/.gitignore | 0 | ||||
-rwxr-xr-x | cpp/test/Ice/plugin/run.py | 25 | ||||
-rw-r--r-- | cpp/test/WinRT/TestSuite/MainPage.xaml.cpp | 3 |
12 files changed, 749 insertions, 2 deletions
diff --git a/cpp/test/Ice/Makefile b/cpp/test/Ice/Makefile index 15092758312..ea2d27fe5fa 100644 --- a/cpp/test/Ice/Makefile +++ b/cpp/test/Ice/Makefile @@ -42,7 +42,8 @@ SUBDIRS = proxy \ defaultValue \ threadPoolPriority \ invoke \ - properties + properties \ + plugin $(EVERYTHING):: @for subdir in $(SUBDIRS); \ diff --git a/cpp/test/Ice/Makefile.mak b/cpp/test/Ice/Makefile.mak index eaa8112b30a..dfd91c1bda1 100644 --- a/cpp/test/Ice/Makefile.mak +++ b/cpp/test/Ice/Makefile.mak @@ -29,6 +29,7 @@ SUBDIRS = proxy \ retry \
timeout \
udp \
+ plugin \
stream
!if "$(WINRT)" != "yes"
diff --git a/cpp/test/Ice/plugin/.depend b/cpp/test/Ice/plugin/.depend new file mode 100644 index 00000000000..1d479e875ec --- /dev/null +++ b/cpp/test/Ice/plugin/.depend @@ -0,0 +1 @@ +Plugin$(OBJEXT): Plugin.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/ProxyF.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/IceUtil/ScopedArray.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)/IceUtil/MutexProtocol.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/EndpointF.h $(includedir)/Ice/EndpointTypes.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/Dispatcher.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/Stream.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.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/CommunicatorAsync.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/ConnectionAsync.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h ../../include/TestCommon.h diff --git a/cpp/test/Ice/plugin/.depend.mak b/cpp/test/Ice/plugin/.depend.mak new file mode 100644 index 00000000000..e02b2718caf --- /dev/null +++ b/cpp/test/Ice/plugin/.depend.mak @@ -0,0 +1 @@ +Plugin$(OBJEXT): Plugin.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/ProxyF.h" "$(includedir)/Ice/ProxyHandle.h" "$(includedir)/Ice/ObjectF.h" "$(includedir)/Ice/Exception.h" "$(includedir)/Ice/LocalObject.h" "$(includedir)/IceUtil/ScopedArray.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)/IceUtil/MutexProtocol.h" "$(includedir)/Ice/ProxyFactoryF.h" "$(includedir)/Ice/ConnectionIF.h" "$(includedir)/Ice/RequestHandlerF.h" "$(includedir)/Ice/EndpointIF.h" "$(includedir)/Ice/EndpointF.h" "$(includedir)/Ice/EndpointTypes.h" "$(includedir)/Ice/ObjectAdapterF.h" "$(includedir)/Ice/ReferenceF.h" "$(includedir)/Ice/OutgoingAsync.h" "$(includedir)/IceUtil/Monitor.h" "$(includedir)/IceUtil/Cond.h" "$(includedir)/IceUtil/Timer.h" "$(includedir)/IceUtil/Thread.h" "$(includedir)/Ice/OutgoingAsyncF.h" "$(includedir)/Ice/InstanceF.h" "$(includedir)/Ice/Current.h" "$(includedir)/Ice/ConnectionF.h" "$(includedir)/Ice/Identity.h" "$(includedir)/Ice/BasicStream.h" "$(includedir)/Ice/ObjectFactoryF.h" "$(includedir)/Ice/Buffer.h" "$(includedir)/Ice/Protocol.h" "$(includedir)/Ice/StreamF.h" "$(includedir)/Ice/Object.h" "$(includedir)/Ice/GCShared.h" "$(includedir)/Ice/GCCountMap.h" "$(includedir)/Ice/IncomingAsyncF.h" "$(includedir)/Ice/LoggerF.h" "$(includedir)/Ice/StatsF.h" "$(includedir)/Ice/Dispatcher.h" "$(includedir)/Ice/StringConverter.h" "$(includedir)/Ice/Plugin.h" "$(includedir)/Ice/BuiltinSequences.h" "$(includedir)/Ice/Stream.h" "$(includedir)/IceUtil/Unicode.h" "$(includedir)/Ice/LocalException.h" "$(includedir)/Ice/Properties.h" "$(includedir)/Ice/Outgoing.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/CommunicatorAsync.h" "$(includedir)/Ice/ObjectFactory.h" "$(includedir)/Ice/ObjectAdapter.h" "$(includedir)/Ice/FacetMap.h" "$(includedir)/Ice/Endpoint.h" "$(includedir)/Ice/ServantLocator.h" "$(includedir)/Ice/IncomingAsync.h" "$(includedir)/Ice/Process.h" "$(includedir)/Ice/Application.h" "$(includedir)/Ice/Connection.h" "$(includedir)/Ice/ConnectionAsync.h" "$(includedir)/Ice/Functional.h" "$(includedir)/IceUtil/Functional.h" "$(includedir)/Ice/ImplicitContext.h" "$(includedir)/Ice/Locator.h" "$(includedir)/Ice/FactoryTableInit.h" "$(includedir)/Ice/FactoryTable.h" "$(includedir)/Ice/UserExceptionFactory.h" "$(includedir)/Ice/ProcessF.h" "$(includedir)/Ice/Router.h" "$(includedir)/Ice/DispatchInterceptor.h" "$(includedir)/Ice/IconvStringConverter.h" ../../include/TestCommon.h diff --git a/cpp/test/Ice/plugin/.gitignore b/cpp/test/Ice/plugin/.gitignore new file mode 100644 index 00000000000..a86ad423f93 --- /dev/null +++ b/cpp/test/Ice/plugin/.gitignore @@ -0,0 +1,7 @@ +// Generated by makegitignore.py + +// IMPORTANT: Do not edit this file -- any edits made here will be lost! +client +plugins/libTestPlugin.so.3.4.2 +plugins/libTestPlugin.so.34 +plugins/libTestPlugin.so diff --git a/cpp/test/Ice/plugin/Client.cpp b/cpp/test/Ice/plugin/Client.cpp new file mode 100644 index 00000000000..a54ec9e65c2 --- /dev/null +++ b/cpp/test/Ice/plugin/Client.cpp @@ -0,0 +1,187 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2011 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 <TestCommon.h> + +using namespace std; + +DEFINE_TEST("client") + +namespace +{ + +class MyPlugin : public Ice::Plugin +{ + +public: + + MyPlugin() : + _initialized(false), + _destroyed(false) + { + } + + bool + isInitialized() const + { + return _initialized; + } + + bool + isDestroyed() const + { + return _destroyed; + } + + void + initialize() + { + _initialized = true; + } + + void + destroy() + { + _destroyed = true; + } + + ~MyPlugin() + { + test(_initialized); + test(_destroyed); + } + +private: + + const Ice::CommunicatorPtr _communicator; + bool _initialized; + bool _destroyed; +}; +typedef IceUtil::Handle<MyPlugin> MyPluginPtr; + +} + +int +main(int argc, char* argv[]) +{ + int status = EXIT_SUCCESS; + Ice::CommunicatorPtr communicator; + + cout << "testing a simple plug-in... " << flush; + try + { + Ice::InitializationData initData; + initData.properties = Ice::createProperties(argc, argv); + initData.properties->setProperty("Ice.Plugin.Test", + "plugins/TestPlugin:createPlugin 'C:\\Program Files\\' --DatabasePath " + "'C:\\Program Files\\Application\\db'" ); + communicator = Ice::initialize(argc, argv, initData); + communicator->destroy(); + } + catch(const Ice::Exception& ex) + { + cerr << ex << endl; + test(false); + } + cout << "ok" << endl; + + cout << "testing a simple plug-in that fails to initialize... " << flush; + communicator = 0; + try + { + Ice::InitializationData initData; + initData.properties = Ice::createProperties(argc, argv); + initData.properties->setProperty("Ice.Plugin.Test", "plugins/TestPlugin:createPluginInitializeFail"); + communicator = Ice::initialize(argc, argv, initData); + test(false); + } + catch(const std::exception& ex) + { + test(string(ex.what()) == "PluginInitializeFailExeption"); + } + test(!communicator); + cout << "ok" << endl; + + cout << "testing plug-in load order... " << flush; + try + { + Ice::InitializationData initData; + initData.properties = Ice::createProperties(argc, argv); + initData.properties->setProperty("Ice.Plugin.PluginOne", "plugins/TestPlugin:createPluginOne"); + initData.properties->setProperty("Ice.Plugin.PluginTwo", "plugins/TestPlugin:createPluginTwo"); + initData.properties->setProperty("Ice.Plugin.PluginThree", "plugins/TestPlugin:createPluginThree"); + initData.properties->setProperty("Ice.PluginLoadOrder", "PluginOne, PluginTwo"); // Exclude PluginThree + communicator = Ice::initialize(argc, argv, initData); + communicator->destroy(); + } + catch(const Ice::Exception& ex) + { + cerr << ex << endl; + test(false); + } + cout << "ok" << endl; + + cout << "testing plug-in manager... " << flush; + try + { + Ice::InitializationData initData; + initData.properties = Ice::createProperties(argc, argv); + initData.properties->setProperty("Ice.Plugin.PluginOne", "plugins/TestPlugin:createPluginOne"); + initData.properties->setProperty("Ice.Plugin.PluginTwo", "plugins/TestPlugin:createPluginTwo"); + initData.properties->setProperty("Ice.Plugin.PluginThree", "plugins/TestPlugin:createPluginThree"); + initData.properties->setProperty("Ice.PluginLoadOrder", "PluginOne, PluginTwo"); + initData.properties->setProperty("Ice.InitPlugins", "0"); + communicator = Ice::initialize(argc, argv, initData); + + Ice::PluginManagerPtr pm = communicator->getPluginManager(); + test(pm->getPlugin("PluginOne")); + test(pm->getPlugin("PluginTwo")); + test(pm->getPlugin("PluginThree")); + + MyPluginPtr p4 = new MyPlugin; + pm->addPlugin("PluginFour", p4); + test(pm->getPlugin("PluginFour")); + + pm->initializePlugins(); + + test(p4->isInitialized()); + + communicator->destroy(); + + test(p4->isDestroyed()); + } + catch(const Ice::Exception& ex) + { + cerr << ex << endl; + test(false); + } + cout << "ok" << endl; + + cout << "testing destroy when a plug-in fails to initialize... " << flush; + communicator = 0; + try + { + Ice::InitializationData initData; + initData.properties = Ice::createProperties(argc, argv); + initData.properties->setProperty("Ice.Plugin.PluginOneFail", "plugins/TestPlugin:createPluginOneFail"); + initData.properties->setProperty("Ice.Plugin.PluginTwoFail", "plugins/TestPlugin:createPluginTwoFail"); + initData.properties->setProperty("Ice.Plugin.PluginThreeFail", "plugins/TestPlugin:createPluginThreeFail"); + initData.properties->setProperty("Ice.PluginLoadOrder", "PluginOneFail, PluginTwoFail, PluginThreeFail"); + communicator = Ice::initialize(argc, argv, initData); + } + catch(const std::exception& ex) + { + test(string(ex.what()) == "PluginInitializeFailExeption"); + } + test(!communicator); + cout << "ok" << endl; + + return status; +} diff --git a/cpp/test/Ice/plugin/Makefile b/cpp/test/Ice/plugin/Makefile new file mode 100644 index 00000000000..446a4b7c8ac --- /dev/null +++ b/cpp/test/Ice/plugin/Makefile @@ -0,0 +1,51 @@ +# ********************************************************************** +# +# Copyright (c) 2003-2011 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 = ../../.. + +PLUGINLIBFILENAME = $(call mklibfilename,TestPlugin,$(VERSION)) +PLUGINSONAME = $(call mksoname,TestPlugin,$(SOVERSION)) +PLUGINLIBNAME = $(call mklibname,TestPlugin) +CLIENT = client +PLUGINDIR = plugins + +TARGETS = $(CLIENT) $(call mklibtargets,$(PLUGINDIR)/$(PLUGINLIBFILENAME),$(PLUGINDIR)/$(PLUGINSONAME),$(PLUGINDIR)/$(PLUGINLIBNAME)) + +COBJS = Client.o \ + +POBJS = Plugin.o + +SRCS = $(COBJS:.o=.cpp) \ + $(SOBJS:.o=.cpp) \ + $(POBJS:.o=.cpp) + +LINKWITH := -lIceUtil -lIce + +include $(top_srcdir)/config/Make.rules + +CPPFLAGS := -I. -I../../include $(CPPFLAGS) + +$(CLIENT): $(COBJS) + rm -f $@ + $(CXX) $(LDFLAGS) -o $@ $(COBJS) $(LIBS) + +$(PLUGINDIR)/$(PLUGINLIBFILENAME): $(POBJS) + rm -f $@ + $(call mkshlib,$@,$(PLUGINSONAME),$(POBJS),$(LINKWITH)) + +$(PLUGINDIR)/$(PLUGINSONAME): $(PLUGINDIR)/$(PLUGINLIBFILENAME) + rm -f $@ + ln -s $(PLUGINLIBFILENAME) $@ + +$(PLUGINDIR)/$(PLUGINLIBNAME): $(PLUGINDIR)/$(PLUGINSONAME) + rm -f $@ + ln -s $(PLUGINSONAME) $@ + + +include .depend diff --git a/cpp/test/Ice/plugin/Makefile.mak b/cpp/test/Ice/plugin/Makefile.mak new file mode 100644 index 00000000000..c1baf6957f2 --- /dev/null +++ b/cpp/test/Ice/plugin/Makefile.mak @@ -0,0 +1,68 @@ +# **********************************************************************
+#
+# Copyright (c) 2003-2011 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 = ..\..\..
+
+!if "$(WINRT)" != "yes"
+NAME_PREFIX =
+EXT = .exe
+!else
+NAME_PREFIX = Ice_plugin_
+EXT = .dll
+!endif
+
+CLIENT = $(NAME_PREFIX)client
+LIBNAME = TestPlugin$(LIBSUFFIX).lib
+DLLNAME = TestPlugin$(SOVERSION)$(LIBSUFFIX).dll
+PLUGINDIR = plugins
+
+TARGETS = $(CLIENT)$(EXT) $(PLUGINDIR)\$(LIBNAME) $(PLUGINDIR)\$(DLLNAME)
+
+COBJS = Client.obj
+
+POBJS = Plugin.obj
+
+SRCS = $(COBJS:.obj=.cpp) \
+ $(POBJS:.obj=.cpp)
+
+!include $(top_srcdir)/config/Make.rules.mak
+
+CPPFLAGS = -I. -I../../include $(CPPFLAGS) -DWIN32_LEAN_AND_MEAN
+
+!if "$(GENERATE_PDB)" == "yes"
+CPDBFLAGS = /pdb:$(CLIENT).pdb
+PPDBFLAGS = /pdb:$(DLLNAME:.dll=.pdb)
+!endif
+
+!if "$(WINRT)" != "yes"
+LD_TESTFLAGS = $(LD_EXEFLAGS) $(SETARGV)
+!else
+LD_TESTFLAGS = $(LD_DLLFLAGS) /export:dllMain
+!endif
+
+LINKWITH = $(LIBS)
+
+$(PLUGINDIR)\$(LIBNAME): $(PLUGINDIR)\$(DLLNAME)
+
+$(PLUGINDIR)\$(DLLNAME): $(POBJS)
+ $(LINK) $(BASE):0x22000000 $(LD_DLLFLAGS) $(PDBFLAGS) $(POBJS) $(PREOUT)$@ $(PRELIBS)$(LINKWITH)
+ move $(PLUGINDIR)\$(DLLNAME:.dll=.lib) $(PLUGINDIR)\$(LIBNAME)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#2 && del /q $@.manifest
+ @if exist $(PLUGINDIR)\$(DLLNAME:.dll=.exp) del /q $(PLUGINDIR)\$(DLLNAME:.dll=.exp)
+
+$(CLIENT)$(EXT): $(COBJS)
+ $(LINK) $(LD_TESTFLAGS) $(CPDBFLAGS) $(SETARGV) $(COBJS) $(PREOUT)$@ $(PRELIBS)$(LIBS)
+ @if exist $@.manifest echo ^ ^ ^ Embedding manifest using $(MT) && \
+ $(MT) -nologo -manifest $@.manifest -outputresource:$@;#1 && del /q $@.manifest
+
+clean::
+ del /q $(PLUGINDIR)\*.ilk $(PLUGINDIR)\*.pdb
+
+!include .depend.mak
diff --git a/cpp/test/Ice/plugin/Plugin.cpp b/cpp/test/Ice/plugin/Plugin.cpp new file mode 100644 index 00000000000..0fc9cbad24d --- /dev/null +++ b/cpp/test/Ice/plugin/Plugin.cpp @@ -0,0 +1,404 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2011 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 <TestCommon.h> + +using namespace std; + +namespace +{ + +class Plugin : public Ice::Plugin +{ + +public: + + Plugin(const Ice::CommunicatorPtr& communicator, const Ice::StringSeq& args) : + _communicator(communicator), + _args(args), + _initialized(false), + _destroyed(false) + { + } + + void + initialize() + { + _initialized = true; + test(_args.size() == 3); + test(_args[0] == "C:\\Program Files\\"); + test(_args[1] == "--DatabasePath"); + test(_args[2] == "C:\\Program Files\\Application\\db"); + } + + void + destroy() + { + _destroyed = true; + } + + ~Plugin() + { + test(_initialized); + test(_destroyed); + } + +private: + + const Ice::CommunicatorPtr _communicator; + Ice::StringSeq _args; + bool _initialized; + bool _destroyed; +}; + +class PluginInitializeFailExeption : public std::exception +{ + +public: + + PluginInitializeFailExeption() throw() {} + virtual ~PluginInitializeFailExeption() throw() {} + virtual const char* what() const throw() { return "PluginInitializeFailExeption"; } +}; + +class PluginInitializeFail : public Ice::Plugin +{ + +public: + + PluginInitializeFail(const Ice::CommunicatorPtr& communicator) : + _communicator(communicator) + { + } + + void + initialize() + { + throw PluginInitializeFailExeption(); + } + + void + destroy() + { + test(false); + } + +private: + + const Ice::CommunicatorPtr _communicator; +}; + +class BasePlugin; +typedef IceUtil::Handle<BasePlugin> BasePluginPtr; + +class BasePlugin : public Ice::Plugin +{ + +public: + + BasePlugin(const Ice::CommunicatorPtr& communicator) : + _communicator(communicator), + _initialized(false), + _destroyed(false) + { + } + + bool + isInitialized() const + { + return _initialized; + } + + bool + isDestroyed() const + { + return _destroyed; + } + +protected: + + const Ice::CommunicatorPtr _communicator; + bool _initialized; + bool _destroyed; + BasePluginPtr _other; +}; + + +class PluginOne : public BasePlugin +{ + +public: + + PluginOne(const Ice::CommunicatorPtr& communicator) : + BasePlugin(communicator) + { + } + + void + initialize() + { + _other = BasePluginPtr::dynamicCast(_communicator->getPluginManager()->getPlugin("PluginTwo")); + test(!_other->isInitialized()); + _initialized = true; + } + + void + destroy() + { + _destroyed = true; + test(_other->isDestroyed()); + } +}; + +class PluginTwo : public BasePlugin +{ + +public: + + PluginTwo(const Ice::CommunicatorPtr& communicator) : + BasePlugin(communicator) + { + } + + void + initialize() + { + _initialized = true; + _other = BasePluginPtr::dynamicCast(_communicator->getPluginManager()->getPlugin("PluginOne")); + test(_other->isInitialized()); + } + + void + destroy() + { + _destroyed = true; + test(!_other->isDestroyed()); + } +}; + +class PluginThree : public BasePlugin +{ + +public: + + PluginThree(const Ice::CommunicatorPtr& communicator) : + BasePlugin(communicator) + { + } + + void + initialize() + { + _initialized = true; + _other = BasePluginPtr::dynamicCast(_communicator->getPluginManager()->getPlugin("PluginTwo")); + test(_other->isInitialized()); + } + + void + destroy() + { + _destroyed = true; + test(!_other->isDestroyed()); + } +}; + +class BasePluginFail; +typedef IceUtil::Handle<BasePluginFail> BasePluginFailPtr; + +class BasePluginFail : public Ice::Plugin +{ + +public: + + BasePluginFail(const Ice::CommunicatorPtr& communicator) : + _communicator(communicator), + _initialized(false), + _destroyed(false) + { + } + + bool + isInitialized() const + { + return _initialized; + } + + bool + isDestroyed() const + { + return _destroyed; + } + +protected: + + const Ice::CommunicatorPtr _communicator; + bool _initialized; + bool _destroyed; + BasePluginFailPtr _one; + BasePluginFailPtr _two; + BasePluginFailPtr _three; +}; + + +class PluginOneFail : public BasePluginFail +{ + +public: + + PluginOneFail(const Ice::CommunicatorPtr& communicator) : + BasePluginFail(communicator) + { + } + + void + initialize() + { + _two = BasePluginFailPtr::dynamicCast(_communicator->getPluginManager()->getPlugin("PluginTwoFail")); + test(!_two->isInitialized()); + _three = BasePluginFailPtr::dynamicCast(_communicator->getPluginManager()->getPlugin("PluginThreeFail")); + test(!_three->isInitialized()); + _initialized = true; + } + + void + destroy() + { + test(_two->isDestroyed()); + // + // Not destroyed because initialize fails. + // + test(!_three->isDestroyed()); + _destroyed = true; + } + + ~PluginOneFail() + { + test(_initialized); + test(_destroyed); + } +}; + +class PluginTwoFail : public BasePluginFail +{ + +public: + + PluginTwoFail(const Ice::CommunicatorPtr& communicator) : + BasePluginFail(communicator) + { + } + + void + initialize() + { + _initialized = true; + _one = BasePluginFailPtr::dynamicCast(_communicator->getPluginManager()->getPlugin("PluginOneFail")); + test(_one->isInitialized()); + _three = BasePluginFailPtr::dynamicCast(_communicator->getPluginManager()->getPlugin("PluginThreeFail")); + test(!_three->isInitialized()); + } + + void + destroy() + { + _destroyed = true; + test(!_one->isDestroyed()); + } + + ~PluginTwoFail() + { + test(_initialized); + test(_destroyed); + } +}; + +class PluginThreeFail : public BasePluginFail +{ + +public: + + PluginThreeFail(const Ice::CommunicatorPtr& communicator) : + BasePluginFail(communicator) + { + } + + void + initialize() + { + throw PluginInitializeFailExeption(); + } + + void + destroy() + { + test(false); + } + + ~PluginThreeFail() + { + test(!_initialized); + test(!_destroyed); + } +}; + +} + +extern "C" +{ + +ICE_DECLSPEC_EXPORT ::Ice::Plugin* +createPlugin(const Ice::CommunicatorPtr& communicator, const string&, const Ice::StringSeq& args) +{ + return new Plugin(communicator, args); +} + +ICE_DECLSPEC_EXPORT ::Ice::Plugin* +createPluginInitializeFail(const Ice::CommunicatorPtr& communicator, const string&, const Ice::StringSeq&) +{ + return new PluginInitializeFail(communicator); +} + +ICE_DECLSPEC_EXPORT ::Ice::Plugin* +createPluginOne(const Ice::CommunicatorPtr& communicator, const string&, const Ice::StringSeq&) +{ + return new PluginOne(communicator); +} + +ICE_DECLSPEC_EXPORT ::Ice::Plugin* +createPluginTwo(const Ice::CommunicatorPtr& communicator, const string&, const Ice::StringSeq&) +{ + return new PluginTwo(communicator); +} + +ICE_DECLSPEC_EXPORT ::Ice::Plugin* +createPluginThree(const Ice::CommunicatorPtr& communicator, const string&, const Ice::StringSeq&) +{ + return new PluginThree(communicator); +} + +ICE_DECLSPEC_EXPORT ::Ice::Plugin* +createPluginOneFail(const Ice::CommunicatorPtr& communicator, const string&, const Ice::StringSeq&) +{ + return new PluginOneFail(communicator); +} + +ICE_DECLSPEC_EXPORT ::Ice::Plugin* +createPluginTwoFail(const Ice::CommunicatorPtr& communicator, const string&, const Ice::StringSeq&) +{ + return new PluginTwoFail(communicator); +} + +ICE_DECLSPEC_EXPORT ::Ice::Plugin* +createPluginThreeFail(const Ice::CommunicatorPtr& communicator, const string&, const Ice::StringSeq&) +{ + return new PluginThreeFail(communicator); +} + +} diff --git a/cpp/test/Ice/plugin/plugins/.gitignore b/cpp/test/Ice/plugin/plugins/.gitignore new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/cpp/test/Ice/plugin/plugins/.gitignore diff --git a/cpp/test/Ice/plugin/run.py b/cpp/test/Ice/plugin/run.py new file mode 100755 index 00000000000..3c4472ca289 --- /dev/null +++ b/cpp/test/Ice/plugin/run.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# ********************************************************************** +# +# Copyright (c) 2003-2011 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 + +path = [ ".", "..", "../..", "../../..", "../../../.." ] +head = os.path.dirname(sys.argv[0]) +if len(head) > 0: + path = [os.path.join(head, p) for p in path] +path = [os.path.abspath(p) for p in path if os.path.exists(os.path.join(p, "scripts", "TestUtil.py")) ] +if len(path) == 0: + raise "can't find toplevel directory!" +sys.path.append(os.path.join(path[0])) +from scripts import * + +client = os.path.join(os.getcwd(), "client") +TestUtil.simpleTest(client) + diff --git a/cpp/test/WinRT/TestSuite/MainPage.xaml.cpp b/cpp/test/WinRT/TestSuite/MainPage.xaml.cpp index 1b36c721576..becadead55f 100644 --- a/cpp/test/WinRT/TestSuite/MainPage.xaml.cpp +++ b/cpp/test/WinRT/TestSuite/MainPage.xaml.cpp @@ -301,7 +301,8 @@ static const TestCase allTest[] = {"Ice\\stream", "Ice_stream_", "client.dll", 0, 0, 0}, {"Ice\\timeout", "Ice_timeout_", "client.dll", "server.dll", 0, 0 }, {"Ice\\udp", "Ice_udp_", "client.dll", "server.dll", 0, 0 }, - {"Ice\\hash", "Ice_hash_", "client.dll", 0, 0, 0} + {"Ice\\hash", "Ice_hash_", "client.dll", 0, 0, 0}, + {"Ice\\plugin", "Ice_plugin_", "client.dll", 0, 0, 0} }; class TestRunner : public IceUtil::Thread |