summaryrefslogtreecommitdiff
path: root/cpp/test
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/test')
-rw-r--r--cpp/test/IceGrid/Makefile2
-rw-r--r--cpp/test/IceGrid/deployer/application.xml4
-rw-r--r--cpp/test/IceGrid/deployer/server.xml2
-rw-r--r--cpp/test/IceGrid/replication/AllTests.cpp151
-rw-r--r--cpp/test/IceGrid/replication/Server.cpp2
-rw-r--r--cpp/test/IceGrid/replication/Service.cpp2
-rw-r--r--cpp/test/IceGrid/replication/TestI.cpp2
-rw-r--r--cpp/test/IceGrid/replication/application.xml50
-rwxr-xr-xcpp/test/IceGrid/replication/run.py12
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()