diff options
Diffstat (limited to 'cpp/test')
-rw-r--r-- | cpp/test/IceGrid/Makefile | 2 | ||||
-rw-r--r-- | cpp/test/IceGrid/deployer/application.xml | 4 | ||||
-rw-r--r-- | cpp/test/IceGrid/deployer/server.xml | 2 | ||||
-rw-r--r-- | cpp/test/IceGrid/replication/AllTests.cpp | 151 | ||||
-rw-r--r-- | cpp/test/IceGrid/replication/Server.cpp | 2 | ||||
-rw-r--r-- | cpp/test/IceGrid/replication/Service.cpp | 2 | ||||
-rw-r--r-- | cpp/test/IceGrid/replication/TestI.cpp | 2 | ||||
-rw-r--r-- | cpp/test/IceGrid/replication/application.xml | 50 | ||||
-rwxr-xr-x | cpp/test/IceGrid/replication/run.py | 12 |
9 files changed, 140 insertions, 87 deletions
diff --git a/cpp/test/IceGrid/Makefile b/cpp/test/IceGrid/Makefile index 0a7e623a488..1776a2c7e87 100644 --- a/cpp/test/IceGrid/Makefile +++ b/cpp/test/IceGrid/Makefile @@ -12,7 +12,7 @@ top_srcdir = ../.. include $(top_srcdir)/config/Make.rules -SUBDIRS = perf simple deployer session update +SUBDIRS = perf simple deployer session update replication $(EVERYTHING):: @for subdir in $(SUBDIRS); \ diff --git a/cpp/test/IceGrid/deployer/application.xml b/cpp/test/IceGrid/deployer/application.xml index 0c75c9dc4c1..155cc83cf24 100644 --- a/cpp/test/IceGrid/deployer/application.xml +++ b/cpp/test/IceGrid/deployer/application.xml @@ -6,9 +6,9 @@ <include descriptor="icebox.xml"/> <include descriptor="server.xml"/> - <replicated-adapter id="ReplicatedAdapter"> + <replica-group id="ReplicatedAdapter"> <object identity="ReplicatedObject" type="::Test"/> - </replicated-adapter> + </replica-group> <!-- Variables for variable test --> <variable name="AppVar" value="AppVar"/> diff --git a/cpp/test/IceGrid/deployer/server.xml b/cpp/test/IceGrid/deployer/server.xml index f0aa4075962..c819a500e60 100644 --- a/cpp/test/IceGrid/deployer/server.xml +++ b/cpp/test/IceGrid/deployer/server.xml @@ -18,7 +18,7 @@ <adapter name="Server" endpoints="default"> <object identity="${server}" type="::Test"/> </adapter> - <adapter name="ReplicatedAdapter" endpoints="default" id="ReplicatedAdapter"/> + <adapter name="ReplicatedAdapter" endpoints="default" replica-group="ReplicatedAdapter"/> <property name="Type" value="Server"/> <property name="Name" value="${name}"/> diff --git a/cpp/test/IceGrid/replication/AllTests.cpp b/cpp/test/IceGrid/replication/AllTests.cpp index 0e65933ecf4..038ae7e98bc 100644 --- a/cpp/test/IceGrid/replication/AllTests.cpp +++ b/cpp/test/IceGrid/replication/AllTests.cpp @@ -68,104 +68,145 @@ allTests(const Ice::CommunicatorPtr& comm) AdminPrx admin = AdminPrx::checkedCast(comm->stringToProxy("IceGrid/Admin")); test(admin); - TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("test")); + set<string> serverReplicaIds; + serverReplicaIds.insert("Server1.ReplicatedAdapter"); + serverReplicaIds.insert("Server2.ReplicatedAdapter"); + serverReplicaIds.insert("Server3.ReplicatedAdapter"); + set<string> svcReplicaIds; + svcReplicaIds.insert("IceBox1.Service1.Service1"); + svcReplicaIds.insert("IceBox1.Service2.Service2"); + svcReplicaIds.insert("IceBox1.Service3.Service3"); - // - // Test default replica id for a server and service - // - cout << "testing default replica id... " << flush; + cout << "testing replication without load balancing... " << flush; { map<string, string> params; + params["replicaGroup"] = "Default"; params["id"] = "Server1"; - params["replicaId"] = ""; instantiateServer(admin, "Server", params); - test(obj->getReplicaIdAndShutdown() == "Server1"); + params["id"] = "Server2"; + instantiateServer(admin, "Server", params); + params["id"] = "Server3"; + instantiateServer(admin, "Server", params); + set<string> replicaIds = serverReplicaIds; + TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Default")); + test(replicaIds.erase(obj->getReplicaIdAndShutdown()) == 1); + test(replicaIds.erase(obj->getReplicaIdAndShutdown()) == 1); + test(replicaIds.erase(obj->getReplicaIdAndShutdown()) == 1); removeServer(admin, "Server1"); - + removeServer(admin, "Server2"); + removeServer(admin, "Server3"); + } + { + map<string, string> params; + params["replicaGroup"] = "Default"; params["id"] = "IceBox1"; - params["replicaId"] = ""; - instantiateServer(admin, "IceBox1", params); - test(obj->getReplicaIdAndShutdown() == "IceBox1.Service1"); + instantiateServer(admin, "IceBox", params); + set<string> replicaIds = svcReplicaIds; + TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Default")); + test(replicaIds.erase(obj->getReplicaIdAndShutdown()) == 1); + test(replicaIds.erase(obj->getReplicaIdAndShutdown()) == 1); + test(replicaIds.erase(obj->getReplicaIdAndShutdown()) == 1); removeServer(admin, "IceBox1"); } cout << "ok" << endl; - // - // Test replica id for a server and service - // - cout << "testing replica id... " << flush; + cout << "testing replication with round-robin load balancing... " << flush; { map<string, string> params; + params["replicaGroup"] = "RoundRobin"; params["id"] = "Server1"; - params["replicaId"] = "Replica1"; instantiateServer(admin, "Server", params); - test(obj->getReplicaIdAndShutdown() == "Replica1"); + params["id"] = "Server2"; + instantiateServer(admin, "Server", params); + params["id"] = "Server3"; + instantiateServer(admin, "Server", params); + TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("RoundRobin")); + test(obj->getReplicaIdAndShutdown() == "Server1.ReplicatedAdapter"); + test(obj->getReplicaIdAndShutdown() == "Server2.ReplicatedAdapter"); + test(obj->getReplicaIdAndShutdown() == "Server3.ReplicatedAdapter"); removeServer(admin, "Server1"); - + removeServer(admin, "Server2"); + removeServer(admin, "Server3"); + } + { + map<string, string> params; + params["replicaGroup"] = "RoundRobin"; params["id"] = "IceBox1"; - params["replicaId"] = "Replica1"; - instantiateServer(admin, "IceBox1", params); - test(obj->getReplicaIdAndShutdown() == "Replica1"); + instantiateServer(admin, "IceBox", params); + TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("RoundRobin")); + test(obj->getReplicaIdAndShutdown() == "IceBox1.Service1.Service1"); + test(obj->getReplicaIdAndShutdown() == "IceBox1.Service2.Service2"); + test(obj->getReplicaIdAndShutdown() == "IceBox1.Service3.Service3"); removeServer(admin, "IceBox1"); } cout << "ok" << endl; - cout << "testing replication... " << flush; + cout << "testing replication with random load balancing... " << flush; { map<string, string> params; - params["replicaId"] = ""; - + params["replicaGroup"] = "Random"; params["id"] = "Server1"; instantiateServer(admin, "Server", params); params["id"] = "Server2"; instantiateServer(admin, "Server", params); params["id"] = "Server3"; instantiateServer(admin, "Server", params); - params["id"] = "Server4"; - instantiateServer(admin, "Server", params); - params["id"] = "Server5"; - instantiateServer(admin, "Server", params); - - test(obj->getReplicaIdAndShutdown() == "Server1"); - test(obj->getReplicaIdAndShutdown() == "Server2"); - test(obj->getReplicaIdAndShutdown() == "Server3"); - test(obj->getReplicaIdAndShutdown() == "Server4"); - test(obj->getReplicaIdAndShutdown() == "Server5"); - + TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Random")); + set<string> replicaIds = serverReplicaIds; + while(!replicaIds.empty()) + { + replicaIds.erase(obj->getReplicaIdAndShutdown()); + } removeServer(admin, "Server1"); removeServer(admin, "Server2"); removeServer(admin, "Server3"); - removeServer(admin, "Server4"); - removeServer(admin, "Server5"); } - cout << "ok" << endl; - - cout << "testing default replica id with multiple replicas... " << flush; { map<string, string> params; + params["replicaGroup"] = "Random"; params["id"] = "IceBox1"; - params["replicaId1"] = ""; - params["replicaId2"] = ""; - params["replicaId3"] = ""; - instantiateServer(admin, "IceBox3", params); - test(obj->getReplicaIdAndShutdown() == "IceBox1.Service1"); - test(obj->getReplicaIdAndShutdown() == "IceBox1.Service2"); - test(obj->getReplicaIdAndShutdown() == "IceBox1.Service3"); + instantiateServer(admin, "IceBox", params); + TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Random")); + set<string> replicaIds = svcReplicaIds; + while(!replicaIds.empty()) + { + replicaIds.erase(obj->getReplicaIdAndShutdown()); + } removeServer(admin, "IceBox1"); } cout << "ok" << endl; - cout << "testing replica id with multiple replicas... " << flush; + cout << "testing replication with adaptive load balancing... " << flush; + { + map<string, string> params; + params["replicaGroup"] = "Adaptive"; + params["id"] = "Server1"; + instantiateServer(admin, "Server", params); + params["id"] = "Server2"; + instantiateServer(admin, "Server", params); + params["id"] = "Server3"; + instantiateServer(admin, "Server", params); + TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Adaptive")); + set<string> replicaIds = serverReplicaIds; + while(!replicaIds.empty()) + { + replicaIds.erase(obj->getReplicaIdAndShutdown()); + } + removeServer(admin, "Server1"); + removeServer(admin, "Server2"); + removeServer(admin, "Server3"); + } { map<string, string> params; + params["replicaGroup"] = "Adaptive"; params["id"] = "IceBox1"; - params["replicaId1"] = "Replica1"; - params["replicaId2"] = "Replica2"; - params["replicaId3"] = "Replica3"; - instantiateServer(admin, "IceBox3", params); - test(obj->getReplicaIdAndShutdown() == "Replica1"); - test(obj->getReplicaIdAndShutdown() == "Replica2"); - test(obj->getReplicaIdAndShutdown() == "Replica3"); + instantiateServer(admin, "IceBox", params); + TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Adaptive")); + set<string> replicaIds = svcReplicaIds; + while(!replicaIds.empty()) + { + replicaIds.erase(obj->getReplicaIdAndShutdown()); + } removeServer(admin, "IceBox1"); } cout << "ok" << endl; diff --git a/cpp/test/IceGrid/replication/Server.cpp b/cpp/test/IceGrid/replication/Server.cpp index 58bf4642fcf..493b130fbde 100644 --- a/cpp/test/IceGrid/replication/Server.cpp +++ b/cpp/test/IceGrid/replication/Server.cpp @@ -25,7 +25,7 @@ Server::run(int argc, char* argv[]) { Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("ReplicatedAdapter"); Ice::ObjectPtr object = new TestI(adapter, communicator()->getProperties()); - adapter->add(object, Ice::stringToIdentity("test")); + adapter->add(object, Ice::stringToIdentity(communicator()->getProperties()->getProperty("Identity"))); shutdownOnInterrupt(); try { diff --git a/cpp/test/IceGrid/replication/Service.cpp b/cpp/test/IceGrid/replication/Service.cpp index 3ca3038b031..d8f5195566a 100644 --- a/cpp/test/IceGrid/replication/Service.cpp +++ b/cpp/test/IceGrid/replication/Service.cpp @@ -62,7 +62,7 @@ ServiceI::start(const string& name, { Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter(name); Ice::ObjectPtr object = new TestI(adapter, communicator->getProperties()); - adapter->add(object, Ice::stringToIdentity("test")); + adapter->add(object, Ice::stringToIdentity(communicator->getProperties()->getProperty("Identity"))); adapter->activate(); } diff --git a/cpp/test/IceGrid/replication/TestI.cpp b/cpp/test/IceGrid/replication/TestI.cpp index cfbc4b76a1b..3ee1beb6088 100644 --- a/cpp/test/IceGrid/replication/TestI.cpp +++ b/cpp/test/IceGrid/replication/TestI.cpp @@ -20,5 +20,5 @@ std::string TestI::getReplicaIdAndShutdown(const Ice::Current&) { _adapter->getCommunicator()->shutdown(); - return _properties->getProperty(_adapter->getName() + ".ReplicaId"); + return _properties->getProperty(_adapter->getName() + ".AdapterId"); } diff --git a/cpp/test/IceGrid/replication/application.xml b/cpp/test/IceGrid/replication/application.xml index 5ba7459c6be..6bad9e920aa 100644 --- a/cpp/test/IceGrid/replication/application.xml +++ b/cpp/test/IceGrid/replication/application.xml @@ -2,44 +2,50 @@ <application name="test"> - <replicated-adapter id="ReplicatedAdapter"> + <replica-group id="Default"> + <object identity="Default" type="::Test::TestIntf"/> + </replica-group> + + <replica-group id="RoundRobin"> <load-balancing type="round-robin" n-replicas="1"/> - <object identity="test" type="::Test::TestIntf"/> - </replicated-adapter> + <object identity="RoundRobin" type="::Test::TestIntf"/> + </replica-group> + + <replica-group id="Adaptive"> + <load-balancing type="adaptive" n-replicas="1"/> + <object identity="Adaptive" type="::Test::TestIntf"/> + </replica-group> + + <replica-group id="Random"> + <load-balancing type="random" n-replicas="1"/> + <object identity="Random" type="::Test::TestIntf"/> + </replica-group> <server-template id="Server"> <parameter name="id"/> - <parameter name="replicaId"/> + <parameter name="replicaGroup"/> <server id="${id}" exe="${test.dir}/server" activation="on-demand" pwd="."> - <adapter name="ReplicatedAdapter" endpoints="default" id="ReplicatedAdapter" replica-id="${replicaId}"/> + <adapter name="ReplicatedAdapter" endpoints="default" replica-group="${replicaGroup}"/> + <property name="Identity" value="${replicaGroup}"/> </server> </server-template> <service-template id="Service"> <parameter name="name"/> - <parameter name="replicaId"/> + <parameter name="replicaGroup"/> <service name="${name}" entry="TestService:create"> - <adapter name="${service}" endpoints="default" id="ReplicatedAdapter" replica-id="${replicaId}"/> + <adapter name="${service}" endpoints="default" replica-group="${replicaGroup}"/> + <property name="Identity" value="${replicaGroup}"/> </service> </service-template> - <server-template id="IceBox1"> - <parameter name="id"/> - <parameter name="replicaId"/> - <icebox id="${id}" endpoints="default" exe="${ice.dir}/bin/icebox" activation="on-demand" pwd="."> - <service-instance template="Service" name="Service1" replicaId="${replicaId}"/> - </icebox> - </server-template> - - <server-template id="IceBox3"> + <server-template id="IceBox"> <parameter name="id"/> - <parameter name="replicaId1"/> - <parameter name="replicaId2"/> - <parameter name="replicaId3"/> + <parameter name="replicaGroup"/> <icebox id="${id}" endpoints="default" exe="${ice.dir}/bin/icebox" activation="on-demand" pwd="."> - <service-instance template="Service" name="Service1" replicaId="${replicaId1}"/> - <service-instance template="Service" name="Service2" replicaId="${replicaId2}"/> - <service-instance template="Service" name="Service3" replicaId="${replicaId3}"/> + <service-instance template="Service" name="Service1" replicaGroup="${replicaGroup}"/> + <service-instance template="Service" name="Service2" replicaGroup="${replicaGroup}"/> + <service-instance template="Service" name="Service3" replicaGroup="${replicaGroup}"/> </icebox> </server-template> diff --git a/cpp/test/IceGrid/replication/run.py b/cpp/test/IceGrid/replication/run.py index d6b5483107d..039f31b9264 100755 --- a/cpp/test/IceGrid/replication/run.py +++ b/cpp/test/IceGrid/replication/run.py @@ -37,8 +37,14 @@ else: # Add locator options for the client and server. Since the server # invokes on the locator it's also considered to be a client. # -additionalOptions = " --Ice.Default.Locator=\"IceGrid/Locator:default -p 12345\" " + \ - "--Ice.PrintAdapterReady=0 --Ice.PrintProcessId=0 --IceDir=\"" + toplevel + "\" --TestDir=\"" + testdir + "\"" +# NOTE: We also set the retry intervals to retry several times. This +# is necessary for the test to work. The tests invoke successively on +# the same proxy and shutdown the server on each invocation. It takes +# a bit of time for the IceGrid node to detect that the server is down +# and to return a direct proxy from an active server. +# +additionalOptions = " --Ice.Default.Locator=\"IceGrid/Locator:default -p 12345\"" + \ + " --Ice.PrintAdapterReady=0 --Ice.PrintProcessId=0 --Ice.RetryIntervals=\"0 10 20 30 40 50\"" IceGridAdmin.cleanDbDir(os.path.join(testdir, "db")) iceGridRegistryThread = IceGridAdmin.startIceGridRegistry("12345", testdir) @@ -61,7 +67,7 @@ except: clientStatus = clientPipe.close() print "unregister application with icegrid...", -#IceGridAdmin.removeApplication("test"); +IceGridAdmin.removeApplication("test"); print "ok" IceGridAdmin.shutdownIceGridNode() |