summaryrefslogtreecommitdiff
path: root/cpp/test
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/test')
-rw-r--r--cpp/test/Ice/Makefile3
-rw-r--r--cpp/test/Ice/Makefile.mak1
-rw-r--r--cpp/test/Ice/plugin/.depend1
-rw-r--r--cpp/test/Ice/plugin/.depend.mak1
-rw-r--r--cpp/test/Ice/plugin/.gitignore7
-rw-r--r--cpp/test/Ice/plugin/Client.cpp187
-rw-r--r--cpp/test/Ice/plugin/Makefile51
-rw-r--r--cpp/test/Ice/plugin/Makefile.mak68
-rw-r--r--cpp/test/Ice/plugin/Plugin.cpp404
-rw-r--r--cpp/test/Ice/plugin/plugins/.gitignore0
-rwxr-xr-xcpp/test/Ice/plugin/run.py25
-rw-r--r--cpp/test/WinRT/TestSuite/MainPage.xaml.cpp3
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