void allTestsWithTarget(const Ice::CommunicatorPtr& comm) { RegistryPrx registry = IceGrid::RegistryPrx::checkedCast( comm->stringToProxy(comm->getDefaultLocator()->ice_getIdentity().category + "/Registry")); test(registry); AdminSessionPrx session = registry->createAdminSession("foo", "bar"); session->ice_getConnection()->setACM(registry->getACMTimeout(), IceUtil::None, Ice::HeartbeatOnIdle); AdminPrx admin = session->getAdmin(); test(admin); cout << "testing targets... " << flush; TestIntfPrx obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); test(obj->getProperty("TargetProp") == "1"); cout << "ok" << endl; session->destroy(); }
int run(int, char**, const Ice::CommunicatorPtr& communicator) { TestIntfPrx allTests(const Ice::CommunicatorPtr&); TestIntfPrx t = allTests(communicator); t->shutdown(); return EXIT_SUCCESS; }
int run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator) { TestIntfPrx allTests(const Ice::CommunicatorPtr&); TestIntfPrx Test = allTests(communicator); Test->shutdown(); return EXIT_SUCCESS; }
virtual void runTestCase(const RemoteObjectAdapterPrx& adapter, const TestIntfPrx& proxy) { proxy->sleep(2); Lock sync(*this); test(_heartbeat >= 2); }
virtual void runTestCase(const RemoteObjectAdapterPrx& adapter, const TestIntfPrx& proxy) { try { // When the OA is put on hold, connections shouldn't // send heartbeats, the invocation should therefore // fail. proxy->sleepAndHold(10); test(false); } catch(const Ice::ConnectionTimeoutException&) { adapter->activate(); proxy->interruptSleep(); waitForClosed(); } }
virtual void runTestCase(const RemoteObjectAdapterPrx& adapter, const TestIntfPrx& proxy) { // No close on invocation, the call should succeed this // time. proxy->sleep(2); Lock sync(*this); test(_heartbeat == 0); test(!_closed); }
virtual void runTestCase(const RemoteObjectAdapterPrx& adapter, const TestIntfPrx& proxy) { try { // Heartbeats are disabled on the server, the // invocation should fail since heartbeats are // expected. proxy->sleep(10); test(false); } catch(const Ice::ConnectionTimeoutException&) { proxy->interruptSleep(); waitForClosed(); Lock sync(*this); test(_heartbeat == 0); } }
virtual void runTestCase(const RemoteObjectAdapterPrx& adapter, const TestIntfPrx& proxy) { Ice::ACM acm; acm = proxy->ice_getCachedConnection()->getACM(); test(acm.timeout == 15); test(acm.close == Ice::CloseOnIdleForceful); test(acm.heartbeat == Ice::HeartbeatOnIdle); proxy->ice_getCachedConnection()->setACM(IceUtil::None, IceUtil::None, IceUtil::None); acm = proxy->ice_getCachedConnection()->getACM(); test(acm.timeout == 15); test(acm.close == Ice::CloseOnIdleForceful); test(acm.heartbeat == Ice::HeartbeatOnIdle); proxy->ice_getCachedConnection()->setACM(20, Ice::CloseOnInvocationAndIdle, Ice::HeartbeatOnInvocation); acm = proxy->ice_getCachedConnection()->getACM(); test(acm.timeout == 20); test(acm.close == Ice::CloseOnInvocationAndIdle); test(acm.heartbeat == Ice::HeartbeatOnInvocation); }
virtual void runTestCase(const RemoteObjectAdapterPrx& adapter, const TestIntfPrx& proxy) { for(int i = 0; i < 12; ++i) { proxy->ice_ping(); IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(200)); } Lock sync(*this); test(_heartbeat >= 3); }
void allTests(const Ice::CommunicatorPtr& communicator) { cout << "testing stringToProxy... " << flush; Ice::ObjectPrx base = communicator->stringToProxy("test @ TestAdapter"); test(base); cout << "ok" << endl; cout << "testing checked cast... " << flush; TestIntfPrx obj = TestIntfPrx::checkedCast(base); test(obj); test(obj == base); cout << "ok" << endl; cout << "pinging server... " << flush; obj->ice_ping(); cout << "ok" << endl; cout << "shutting down server... " << flush; obj->shutdown(); cout << "ok" << endl; }
void allTests(const Ice::CommunicatorPtr& comm) { IceGrid::RegistryPrx registry = IceGrid::RegistryPrx::checkedCast( comm->stringToProxy(comm->getDefaultLocator()->ice_getIdentity().category + "/Registry")); test(registry); IceGrid::QueryPrx query = IceGrid::QueryPrx::checkedCast( comm->stringToProxy(comm->getDefaultLocator()->ice_getIdentity().category + "/Query")); test(query); AdminSessionPrx session = registry->createAdminSession("foo", "bar"); session->ice_getConnection()->setACM(registry->getACMTimeout(), IceUtil::None, Ice::HeartbeatAlways); AdminPrx admin = session->getAdmin(); test(admin); 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"); cout << "testing Query::findAllReplicas... " << flush; { map<string, string> params; params["replicaGroup"] = "RoundRobin"; params["id"] = "Server1"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server3"; instantiateServer(admin, "Server", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("dummy@RoundRobin")); Ice::ObjectProxySeq objs = query->findAllReplicas(obj); test(objs.size() == 3); test(serverReplicaIds.find(objs[0]->ice_getAdapterId()) != serverReplicaIds.end()); test(serverReplicaIds.find(objs[1]->ice_getAdapterId()) != serverReplicaIds.end()); test(serverReplicaIds.find(objs[2]->ice_getAdapterId()) != serverReplicaIds.end()); obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("RoundRobin")); objs = query->findAllReplicas(obj); test(objs.size() == 3); test(serverReplicaIds.find(objs[0]->ice_getAdapterId()) != serverReplicaIds.end()); test(serverReplicaIds.find(objs[1]->ice_getAdapterId()) != serverReplicaIds.end()); test(serverReplicaIds.find(objs[2]->ice_getAdapterId()) != serverReplicaIds.end()); obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("dummy@dummy")); objs = query->findAllReplicas(obj); test(objs.empty()); obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("*****@*****.**")); objs = query->findAllReplicas(obj); test(objs.empty()); obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("dummy:tcp")); objs = query->findAllReplicas(obj); test(objs.empty()); obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("dummy@Ordered")); objs = query->findAllReplicas(obj); test(objs.empty()); removeServer(admin, "Server1"); removeServer(admin, "Server2"); removeServer(admin, "Server3"); } cout << "ok" << endl; cout << "testing replication with round-robin load balancing... " << flush; { map<string, string> params; params["replicaGroup"] = "RoundRobin"; params["id"] = "Server1"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server3"; instantiateServer(admin, "Server", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("RoundRobin")); obj = TestIntfPrx::uncheckedCast(obj->ice_locatorCacheTimeout(0)); obj = TestIntfPrx::uncheckedCast(obj->ice_connectionCached(false)); try { test(obj->getReplicaIdAndShutdown() == "Server1.ReplicatedAdapter"); test(obj->getReplicaIdAndShutdown() == "Server2.ReplicatedAdapter"); test(obj->getReplicaIdAndShutdown() == "Server3.ReplicatedAdapter"); admin->enableServer("Server1", false); admin->enableServer("Server2", false); admin->enableServer("Server3", false); try { obj->getReplicaId(); test(false); } catch(const Ice::NoEndpointException&) { } admin->enableServer("Server1", true); admin->enableServer("Server2", true); admin->enableServer("Server3", true); set<string> adapterIds; string previousId; while(adapterIds.size() != 3) { string id = obj->getReplicaId(); adapterIds.insert(id); if(adapterIds.size() == 1) { previousId = id; } else { test(previousId != id); previousId = id; } } int i; for(i = 0; i < 3; i++) { if(obj->getReplicaId() == "Server3.ReplicatedAdapter") { break; } } test(i != 3); test(obj->getReplicaId() == "Server1.ReplicatedAdapter"); test(obj->getReplicaId() == "Server2.ReplicatedAdapter"); test(obj->getReplicaId() == "Server3.ReplicatedAdapter"); test(obj->getReplicaIdAndShutdown() == "Server1.ReplicatedAdapter"); test(obj->getReplicaIdAndShutdown() == "Server2.ReplicatedAdapter"); test(obj->getReplicaIdAndShutdown() == "Server3.ReplicatedAdapter"); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } removeServer(admin, "Server1"); removeServer(admin, "Server2"); removeServer(admin, "Server3"); } { map<string, string> params; params["replicaGroup"] = "RoundRobin"; params["id"] = "IceBox1"; instantiateServer(admin, "IceBox", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("RoundRobin")); try { test(obj->getReplicaIdAndShutdown() == "IceBox1.Service1.Service1"); test(obj->getReplicaIdAndShutdown() == "IceBox1.Service2.Service2"); test(obj->getReplicaIdAndShutdown() == "IceBox1.Service3.Service3"); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } removeServer(admin, "IceBox1"); } cout << "ok" << endl; cout << "testing replication with ordered load balancing... " << flush; { map<string, string> params; params["replicaGroup"] = "Ordered"; params["id"] = "Server1"; params["priority"] = "3"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server2"; params["priority"] = "1"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server3"; params["priority"] = "2"; instantiateServer(admin, "Server", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Ordered")); try { test(obj->getReplicaIdAndShutdown() == "Server2.ReplicatedAdapter"); admin->enableServer("Server2", false); test(obj->getReplicaIdAndShutdown() == "Server3.ReplicatedAdapter"); admin->enableServer("Server3", false); test(obj->getReplicaIdAndShutdown() == "Server1.ReplicatedAdapter"); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } removeServer(admin, "Server1"); removeServer(admin, "Server2"); removeServer(admin, "Server3"); } { map<string, string> params; params["replicaGroup"] = "Ordered"; params["id"] = "IceBox1"; instantiateServer(admin, "IceBox", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Ordered")); try { test(obj->getReplicaIdAndShutdown() == "IceBox1.Service3.Service3"); test(obj->getReplicaIdAndShutdown() == "IceBox1.Service2.Service2"); test(obj->getReplicaIdAndShutdown() == "IceBox1.Service1.Service1"); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } removeServer(admin, "IceBox1"); } cout << "ok" << endl; cout << "testing replication with random load balancing... " << flush; { map<string, string> params; params["replicaGroup"] = "Random"; params["id"] = "Server1"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server3"; instantiateServer(admin, "Server", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Random")); obj = TestIntfPrx::uncheckedCast(obj->ice_locatorCacheTimeout(0)); obj = TestIntfPrx::uncheckedCast(obj->ice_connectionCached(false)); set<string> replicaIds = serverReplicaIds; while(!replicaIds.empty()) { try { replicaIds.erase(obj->getReplicaId()); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } } admin->stopServer("Server1"); admin->stopServer("Server2"); admin->stopServer("Server3"); admin->enableServer("Server1", false); admin->enableServer("Server2", false); admin->enableServer("Server3", false); try { obj->getReplicaId(); test(false); } catch(const Ice::NoEndpointException&) { } admin->enableServer("Server1", true); admin->enableServer("Server2", true); admin->enableServer("Server3", true); replicaIds = serverReplicaIds; while(!replicaIds.empty()) { try { replicaIds.erase(obj->getReplicaIdAndShutdown()); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } } removeServer(admin, "Server1"); removeServer(admin, "Server2"); removeServer(admin, "Server3"); } { map<string, string> params; params["replicaGroup"] = "Random"; params["id"] = "IceBox1"; instantiateServer(admin, "IceBox", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Random")); obj = TestIntfPrx::uncheckedCast(obj->ice_locatorCacheTimeout(0)); obj = TestIntfPrx::uncheckedCast(obj->ice_connectionCached(false)); set<string> replicaIds = svcReplicaIds; while(!replicaIds.empty()) { try { replicaIds.erase(obj->getReplicaId()); } catch(const Ice::ConnectionRefusedException&) { } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } } removeServer(admin, "IceBox1"); } cout << "ok" << endl; cout << "testing replication with adaptive load balancing... " << flush; { map<string, string> params; params["replicaGroup"] = "Adaptive"; params["id"] = "Server1"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server3"; instantiateServer(admin, "Server", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Adaptive")); obj = TestIntfPrx::uncheckedCast(obj->ice_locatorCacheTimeout(0)); obj = TestIntfPrx::uncheckedCast(obj->ice_connectionCached(false)); set<string> replicaIds = serverReplicaIds; while(!replicaIds.empty()) { try { replicaIds.erase(obj->getReplicaId()); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } } removeServer(admin, "Server1"); removeServer(admin, "Server2"); removeServer(admin, "Server3"); } { map<string, string> params; params["replicaGroup"] = "Adaptive"; params["id"] = "IceBox1"; instantiateServer(admin, "IceBox", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Adaptive")); obj = TestIntfPrx::uncheckedCast(obj->ice_locatorCacheTimeout(0)); obj = TestIntfPrx::uncheckedCast(obj->ice_connectionCached(false)); set<string> replicaIds = svcReplicaIds; while(!replicaIds.empty()) { try { replicaIds.erase(obj->getReplicaId()); } catch(const Ice::ConnectionRefusedException&) { } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } } removeServer(admin, "IceBox1"); } cout << "ok" << endl; cout << "testing filters... " << flush; { map<string, string> params; params["replicaGroup"] = "Ordered-Filtered"; params["id"] = "Server1"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server3"; instantiateServer(admin, "IceBox1", "localnode", params); Ice::LocatorPrx locator = comm->getDefaultLocator(); Ice::Context ctx; ctx["server"] = "Server3"; locator->ice_context(ctx); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Ordered-Filtered")); obj = TestIntfPrx::uncheckedCast(obj->ice_locatorCacheTimeout(0)); obj = TestIntfPrx::uncheckedCast(obj->ice_connectionCached(false)); try { ctx["server"] = "Server3"; test(obj->ice_locator(locator->ice_context(ctx))->getReplicaId() == "Server3.Service.Service"); ctx["server"] = "Server1"; test(obj->ice_locator(locator->ice_context(ctx))->getReplicaId() == "Server1.ReplicatedAdapter"); ctx["server"] = "Server2"; test(obj->ice_locator(locator->ice_context(ctx))->getReplicaId() == "Server2.ReplicatedAdapter"); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } try { ctx["server"] = "Server3"; test(query->ice_context(ctx)->findAllReplicas(obj)[0]->ice_getAdapterId() == "Server3.Service.Service"); ctx["server"] = "Server1"; test(query->ice_context(ctx)->findAllReplicas(obj)[0]->ice_getAdapterId() == "Server1.ReplicatedAdapter"); ctx["server"] = "Server2"; test(query->ice_context(ctx)->findAllReplicas(obj)[0]->ice_getAdapterId() == "Server2.ReplicatedAdapter"); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } try { ctx["server"] = "Server3"; test(query->ice_context(ctx)->findObjectByType("::Test::TestIntf2")->ice_getAdapterId() == "Server3.Service.Service"); ctx["server"] = "Server1"; test(query->ice_context(ctx)->findObjectByType("::Test::TestIntf2")->ice_getAdapterId() == "Server1.ReplicatedAdapter"); ctx["server"] = "Server2"; test(query->ice_context(ctx)->findObjectByType("::Test::TestIntf2")->ice_getAdapterId() == "Server2.ReplicatedAdapter"); ctx["server"] = "Server3"; test(query->ice_context(ctx)->findObjectByTypeOnLeastLoadedNode( "::Test::TestIntf2", LoadSample5)->ice_getAdapterId() == "Server3.Service.Service"); ctx["server"] = "Server1"; test(query->ice_context(ctx)->findObjectByTypeOnLeastLoadedNode( "::Test::TestIntf2", LoadSample5)->ice_getAdapterId() == "Server1.ReplicatedAdapter"); ctx["server"] = "Server2"; test(query->ice_context(ctx)->findObjectByTypeOnLeastLoadedNode( "::Test::TestIntf2", LoadSample5)->ice_getAdapterId() == "Server2.ReplicatedAdapter"); ctx["server"] = "Server3"; test(query->ice_context(ctx)->findAllObjectsByType("::Test::TestIntf2")[0]->ice_getAdapterId() == "Server3.Service.Service"); ctx["server"] = "Server1"; test(query->ice_context(ctx)->findAllObjectsByType("::Test::TestIntf2")[0]->ice_getAdapterId() == "Server1.ReplicatedAdapter"); ctx["server"] = "Server2"; test(query->ice_context(ctx)->findAllObjectsByType("::Test::TestIntf2")[0]->ice_getAdapterId() == "Server2.ReplicatedAdapter"); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } removeServer(admin, "Server1"); removeServer(admin, "Server2"); removeServer(admin, "Server3"); } { map<string, string> params; params["replicaGroup"] = "Unknown"; params["id"] = "UnknownServer"; instantiateServer(admin, "Server", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Unknown")); obj->getReplicaId(); removeServer(admin, "UnknownServer"); } { map<string, string> params; params["replicaGroup"] = "Exclude"; params["id"] = "ExcludeServer"; instantiateServer(admin, "Server", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Exclude")); obj = TestIntfPrx::uncheckedCast(obj->ice_locatorCacheTimeout(0)); obj = TestIntfPrx::uncheckedCast(obj->ice_connectionCached(false)); try { obj->getReplicaId(); test(false); } catch(const Ice::NoEndpointException&) { } Ice::LocatorPrx locator = comm->getDefaultLocator(); try { Ice::Context ctx; ctx["server"] = "Server2"; obj->ice_locator(locator->ice_context(ctx))->getReplicaId(); test(false); } catch(const Ice::NoEndpointException&) { } try { Ice::Context ctx; ctx["server"] = "Server3"; obj->ice_locator(locator->ice_context(ctx))->getReplicaId(); test(false); } catch(const Ice::NoEndpointException&) { } Ice::Context ctx; ctx["server"] = "Server1"; string id = obj->ice_locator(locator->ice_context(ctx))->getReplicaId(); removeServer(admin, "ExcludeServer"); } cout << "ok" << endl; cout << "testing load balancing n-replicas... " << flush; { TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("RoundRobin-2")); obj = TestIntfPrx::uncheckedCast(obj->ice_locatorCacheTimeout(-1)); obj = TestIntfPrx::uncheckedCast(obj->ice_connectionCached(false)); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } map<string, string> params; params["replicaGroup"] = "RoundRobin-2"; params["id"] = "Server1"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server3"; instantiateServer(admin, "Server", "localnode", params); try { set<string> replicaIds; set<string> expected; replicaIds.insert("Server1.ReplicatedAdapter"); replicaIds.insert("Server2.ReplicatedAdapter"); expected = replicaIds; while(!replicaIds.empty()) { string replicaId = obj->getReplicaId(); test(expected.find(replicaId) != expected.end()); replicaIds.erase(replicaId); } obj->ice_locatorCacheTimeout(0)->ice_ping(); replicaIds.insert("Server2.ReplicatedAdapter"); replicaIds.insert("Server3.ReplicatedAdapter"); expected = replicaIds; while(!replicaIds.empty()) { string replicaId = obj->getReplicaId(); test(expected.find(replicaId) != expected.end()); replicaIds.erase(replicaId); } obj->ice_locatorCacheTimeout(0)->ice_ping(); replicaIds.insert("Server3.ReplicatedAdapter"); replicaIds.insert("Server1.ReplicatedAdapter"); expected = replicaIds; while(!replicaIds.empty()) { string replicaId = obj->getReplicaId(); test(expected.find(replicaId) != expected.end()); replicaIds.erase(replicaId); } admin->stopServer("Server1"); admin->stopServer("Server2"); admin->stopServer("Server3"); obj->ice_locatorCacheTimeout(0)->ice_ping(); int nRetry = 500; while(replicaIds.size() != 2 && --nRetry > 0) { replicaIds.insert(obj->getReplicaId()); } test(replicaIds.size() == 2); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } removeServer(admin, "Server1"); removeServer(admin, "Server2"); removeServer(admin, "Server3"); } { TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("RoundRobin-All")); obj = TestIntfPrx::uncheckedCast(obj->ice_locatorCacheTimeout(-1)); obj = TestIntfPrx::uncheckedCast(obj->ice_connectionCached(false)); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } map<string, string> params; params["replicaGroup"] = "RoundRobin-All"; params["id"] = "Server1"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server3"; instantiateServer(admin, "Server", "localnode", params); try { set<string> replicaIds; set<string> expected; replicaIds.insert("Server1.ReplicatedAdapter"); replicaIds.insert("Server2.ReplicatedAdapter"); replicaIds.insert("Server3.ReplicatedAdapter"); expected = replicaIds; while(!replicaIds.empty()) { string replicaId = obj->getReplicaId(); test(expected.find(replicaId) != expected.end()); replicaIds.erase(replicaId); } obj->ice_locatorCacheTimeout(0)->ice_ping(); replicaIds.insert("Server1.ReplicatedAdapter"); replicaIds.insert("Server2.ReplicatedAdapter"); replicaIds.insert("Server3.ReplicatedAdapter"); expected = replicaIds; while(!replicaIds.empty()) { string replicaId = obj->getReplicaId(); test(expected.find(replicaId) != expected.end()); replicaIds.erase(replicaId); } } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } removeServer(admin, "Server1"); removeServer(admin, "Server2"); removeServer(admin, "Server3"); } cout << "ok" << endl; cout << "testing replication with inactive nodes... " << flush; { map<string, string> params; params["replicaGroup"] = "Random"; params["id"] = "Server1"; instantiateServer(admin, "Server", "inactivenode", params); params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Random")); test(obj->getReplicaId() == "Server2.ReplicatedAdapter"); // // Also make sure that findObjectByTypeOnLeastLoadedNode still work. // obj = TestIntfPrx::uncheckedCast(query->findObjectByTypeOnLeastLoadedNode("::Test::TestIntf", LoadSample1)); test(obj->getReplicaId() == "Server2.ReplicatedAdapter"); removeServer(admin, "Server1"); removeServer(admin, "Server2"); params["replicaGroup"] = "RoundRobin"; params["id"] = "Server1"; instantiateServer(admin, "Server", "inactivenode", params); params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params); obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("RoundRobin")); test(obj->getReplicaId() == "Server2.ReplicatedAdapter"); removeServer(admin, "Server1"); removeServer(admin, "Server2"); params["replicaGroup"] = "Adaptive"; params["id"] = "Server1"; instantiateServer(admin, "Server", "inactivenode", params); params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params); obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Adaptive")); test(obj->getReplicaId() == "Server2.ReplicatedAdapter"); removeServer(admin, "Server1"); removeServer(admin, "Server2"); params["replicaGroup"] = "Random"; params["id"] = "IceBox1"; instantiateServer(admin, "IceBox", "localnode", params); params["id"] = "Server1"; instantiateServer(admin, "Server", "inactivenode", params); obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Random")); test(svcReplicaIds.find(obj->getReplicaId()) != svcReplicaIds.end()); removeServer(admin, "IceBox1"); removeServer(admin, "Server1"); }; cout << "ok" << endl; cout << "testing replica group from different applications... " << flush; { map<string, string> params; params["replicaGroup"] = "Random"; params["id"] = "Server1"; instantiateServer(admin, "Server", "localnode", params); ApplicationUpdateDescriptor update; update.name = "Test"; update.removeReplicaGroups.push_back("Random"); try { admin->updateApplication(update); test(false); } catch(const DeploymentException&) { // The Random replica goup is used by Server1! } // // Add an application Test1 without replica groups and a // server that uses the Random replica group. // ApplicationInfo app = admin->getApplicationInfo("Test"); app.descriptor.name = "Test1"; app.descriptor.replicaGroups.clear(); app.descriptor.nodes.clear(); try { admin->addApplication(app.descriptor); } catch(const DeploymentException& ex) { cerr << ex << endl; test(false); } params["id"] = "Server2"; instantiateServer(admin, "Server", "localnode", params, "Test1"); try { admin->removeApplication("Test"); test(false); } catch(const DeploymentException&) { // Test has a replica group referenced by the Test1 application. } TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy("Random")); obj = TestIntfPrx::uncheckedCast(obj->ice_locatorCacheTimeout(0)); obj = TestIntfPrx::uncheckedCast(obj->ice_connectionCached(false)); set<string> replicaIds; replicaIds.insert("Server1.ReplicatedAdapter"); replicaIds.insert("Server2.ReplicatedAdapter"); while(!replicaIds.empty()) { try { replicaIds.erase(obj->getReplicaId()); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } } removeServer(admin, "Server2"); removeServer(admin, "Server1"); ReplicaGroupDescriptor replicaGroup; replicaGroup.id = "ReplicatedAdapterFromTest1"; replicaGroup.loadBalancing = new RandomLoadBalancingPolicy(); replicaGroup.loadBalancing->nReplicas = "0"; update = ApplicationUpdateDescriptor(); update.name = "Test1"; update.replicaGroups.push_back(replicaGroup); try { admin->updateApplication(update); } catch(const DeploymentException& ex) { cerr << ex.reason << endl; test(false); } params["replicaGroup"] = "ReplicatedAdapterFromTest1"; params["id"] = "Server1"; instantiateServer(admin, "Server", "localnode", params); try { admin->removeApplication("Test1"); test(false); } catch(const DeploymentException&) { // ReplicatedAdapterFromTest1 used by server from Test } update = ApplicationUpdateDescriptor(); update.name = "Test1"; update.removeReplicaGroups.push_back("ReplicatedAdapterFromTest1"); try { admin->updateApplication(update); test(false); } catch(const DeploymentException&) { // ReplicatedAdapterFromTest1 used by server from Test } removeServer(admin, "Server1"); try { admin->updateApplication(update); } catch(const DeploymentException& ex) { cerr << ex << endl; test(false); } admin->removeApplication("Test1"); }; cout << "ok" << endl; cout << "testing replica group with different server encoding support... " << flush; { vector<string> loadBalancings; loadBalancings.push_back("Random"); loadBalancings.push_back("RoundRobin"); loadBalancings.push_back("RoundRobin-All"); for(vector<string>::const_iterator p = loadBalancings.begin(); p != loadBalancings.end(); ++p) { map<string, string> params; params["replicaGroup"] = *p; params["id"] = "Server1"; params["encoding"] = "1.0"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server2"; params["encoding"] = "1.1"; instantiateServer(admin, "Server", "localnode", params); params["id"] = "Server3"; params["encoding"] = "1.0"; instantiateServer(admin, "Server", "localnode", params); TestIntfPrx obj = TestIntfPrx::uncheckedCast(comm->stringToProxy(*p)); obj = obj->ice_locatorCacheTimeout(0); obj = obj->ice_connectionCached(false); for(int i = 0; i < 30; ++i) { test(obj->getReplicaId() == "Server2.ReplicatedAdapter"); } obj = obj->ice_encodingVersion(Ice::Encoding_1_0); set<string> replicaIds = serverReplicaIds; while(!replicaIds.empty()) { try { replicaIds.erase(obj->getReplicaId()); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } } removeServer(admin, "Server1"); removeServer(admin, "Server2"); removeServer(admin, "Server3"); } }; cout << "ok" << endl; session->destroy(); }
TestIntfPrx allTests(const Ice::CommunicatorPtr& communicator) { string ref = "test:default -p 12010"; Ice::ObjectPrx obj = communicator->stringToProxy(ref); test(obj); TestIntfPrx proxy = TestIntfPrx::checkedCast(obj); test(proxy); cout << "testing enum values... " << flush; test(static_cast<int>(benum1) == 0); test(static_cast<int>(benum2) == 1); test(static_cast<int>(benum3) == ByteConst1); test(static_cast<int>(benum4) == ByteConst1 + 1); test(static_cast<int>(benum5) == ShortConst1); test(static_cast<int>(benum6) == ShortConst1 + 1); test(static_cast<int>(benum7) == IntConst1); test(static_cast<int>(benum8) == IntConst1 + 1); test(static_cast<int>(benum9) == LongConst1); test(static_cast<int>(benum10) == LongConst1 + 1); test(static_cast<int>(benum11) == ByteConst2); test(static_cast<int>(senum1) == 3); test(static_cast<int>(senum2) == 4); test(static_cast<int>(senum3) == ByteConst1); test(static_cast<int>(senum4) == ByteConst1 + 1); test(static_cast<int>(senum5) == ShortConst1); test(static_cast<int>(senum6) == ShortConst1 + 1); test(static_cast<int>(senum7) == IntConst1); test(static_cast<int>(senum8) == IntConst1 + 1); test(static_cast<int>(senum9) == LongConst1); test(static_cast<int>(senum10) == LongConst1 + 1); test(static_cast<int>(senum11) == ShortConst2); test(static_cast<int>(ienum1) == 0); test(static_cast<int>(ienum2) == 1); test(static_cast<int>(ienum3) == ByteConst1); test(static_cast<int>(ienum4) == ByteConst1 + 1); test(static_cast<int>(ienum5) == ShortConst1); test(static_cast<int>(ienum6) == ShortConst1 + 1); test(static_cast<int>(ienum7) == IntConst1); test(static_cast<int>(ienum8) == IntConst1 + 1); test(static_cast<int>(ienum9) == LongConst1); test(static_cast<int>(ienum10) == LongConst1 + 1); test(static_cast<int>(ienum11) == IntConst2); test(static_cast<int>(ienum12) == LongConst2); test(static_cast<int>(red) == 0); test(static_cast<int>(green) == 1); test(static_cast<int>(blue) == 2); cout << "ok" << endl; cout << "testing enum streaming... " << flush; Ice::OutputStreamPtr out; Ice::ByteSeq bytes; const bool encoding_1_0 = communicator->getProperties()->getProperty("Ice.Default.EncodingVersion") == "1.0"; out = Ice::createOutputStream(communicator); out->write(benum11); out->finished(bytes); test(bytes.size() == 1); // ByteEnum should require one byte out = Ice::createOutputStream(communicator); out->write(senum11); out->finished(bytes); test(bytes.size() == (encoding_1_0 ? 2 : 5)); out = Ice::createOutputStream(communicator); out->write(ienum11); out->finished(bytes); test(bytes.size() == (encoding_1_0 ? 4 : 5)); out = Ice::createOutputStream(communicator); out->write(blue); out->finished(bytes); test(bytes.size() == 1); // SimpleEnum should require one byte cout << "ok" << endl; cout << "testing enum operations... " << flush; ByteEnum byteEnum; test(proxy->opByte(benum1, byteEnum) == benum1); test(byteEnum == benum1); test(proxy->opByte(benum11, byteEnum) == benum11); test(byteEnum == benum11); ShortEnum shortEnum; test(proxy->opShort(senum1, shortEnum) == senum1); test(shortEnum == senum1); test(proxy->opShort(senum11, shortEnum) == senum11); test(shortEnum == senum11); IntEnum intEnum; test(proxy->opInt(ienum1, intEnum) == ienum1); test(intEnum == ienum1); test(proxy->opInt(ienum11, intEnum) == ienum11); test(intEnum == ienum11); test(proxy->opInt(ienum12, intEnum) == ienum12); test(intEnum == ienum12); SimpleEnum s; test(proxy->opSimple(green, s) == green); test(s == green); cout << "ok" << endl; cout << "testing enum exceptions... " << flush; try { proxy->opByte(static_cast<ByteEnum>(-1), byteEnum); // Negative enumerators are not supported test(false); } catch(const Ice::MarshalException&) { } try { proxy->opByte(static_cast<ByteEnum>(127), byteEnum); // Invalid enumerator test(false); } catch(const Ice::MarshalException&) { } try { proxy->opShort(static_cast<ShortEnum>(-1), shortEnum); // Negative enumerators are not supported test(false); } catch(const Ice::MarshalException&) { } try { proxy->opShort(static_cast<ShortEnum>(0), shortEnum); // Invalid enumerator test(false); } catch(const Ice::MarshalException&) { } try { proxy->opShort(static_cast<ShortEnum>(32767), shortEnum); // Invalid enumerator test(false); } catch(const Ice::MarshalException&) { } try { proxy->opInt(static_cast<IntEnum>(-1), intEnum); // Negative enumerators are not supported test(false); } catch(const Ice::MarshalException&) { } cout << "ok" << endl; return proxy; }
void allTests(const Ice::CommunicatorPtr& communicator) { cout << "testing proxy endpoint information... " << flush; { Ice::ObjectPrx p1 = communicator->stringToProxy("test -t:default -h tcphost -p 10000 -t 1200 -z --sourceAddress 10.10.10.10:" "udp -h udphost -p 10001 --interface eth0 --ttl 5 --sourceAddress 10.10.10.10:" "opaque -e 1.8 -t 100 -v ABCD"); Ice::EndpointSeq endps = p1->ice_getEndpoints(); Ice::IPEndpointInfoPtr ipEndpoint = Ice::IPEndpointInfoPtr::dynamicCast(endps[0]->getInfo()); test(ipEndpoint); test(ipEndpoint->host == "tcphost"); test(ipEndpoint->port == 10000); test(ipEndpoint->timeout == 1200); #if !defined(ICE_OS_WINRT) test(ipEndpoint->sourceAddress == "10.10.10.10"); #endif test(ipEndpoint->compress); test(!ipEndpoint->datagram()); test((ipEndpoint->type() == Ice::TCPEndpointType && !ipEndpoint->secure()) || (ipEndpoint->type() == IceSSL::EndpointType && ipEndpoint->secure()) || (ipEndpoint->type() == Ice::WSEndpointType && !ipEndpoint->secure()) || (ipEndpoint->type() == Ice::WSSEndpointType && ipEndpoint->secure())); test((ipEndpoint->type() == Ice::TCPEndpointType && Ice::TCPEndpointInfoPtr::dynamicCast(ipEndpoint)) || (ipEndpoint->type() == IceSSL::EndpointType && IceSSL::EndpointInfoPtr::dynamicCast(ipEndpoint)) || (ipEndpoint->type() == Ice::WSEndpointType && Ice::EndpointInfoPtr::dynamicCast(ipEndpoint)) || (ipEndpoint->type() == Ice::WSSEndpointType && Ice::EndpointInfoPtr::dynamicCast(ipEndpoint))); Ice::UDPEndpointInfoPtr udpEndpoint = Ice::UDPEndpointInfoPtr::dynamicCast(endps[1]->getInfo()); test(udpEndpoint); test(udpEndpoint->host == "udphost"); test(udpEndpoint->port == 10001); #if !defined(ICE_OS_WINRT) test(udpEndpoint->sourceAddress == "10.10.10.10"); #endif test(udpEndpoint->mcastInterface == "eth0"); test(udpEndpoint->mcastTtl == 5); test(udpEndpoint->timeout == -1); test(!udpEndpoint->compress); test(!udpEndpoint->secure()); test(udpEndpoint->datagram()); test(udpEndpoint->type() == Ice::UDPEndpointType); Ice::OpaqueEndpointInfoPtr opaqueEndpoint = Ice::OpaqueEndpointInfoPtr::dynamicCast(endps[2]->getInfo()); test(opaqueEndpoint); Ice::EncodingVersion rev; rev.major = 1; rev.minor = 8; test(opaqueEndpoint->rawEncoding == rev); } cout << "ok" << endl; string defaultHost = communicator->getProperties()->getProperty("Ice.Default.Host"); cout << "test object adapter endpoint information... " << flush; { communicator->getProperties()->setProperty("TestAdapter.Endpoints", "default -t 15000:udp"); Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("TestAdapter"); Ice::EndpointSeq endpoints = adapter->getEndpoints(); test(endpoints.size() == 2); Ice::EndpointSeq publishedEndpoints = adapter->getPublishedEndpoints(); test(endpoints == publishedEndpoints); Ice::IPEndpointInfoPtr ipEndpoint = Ice::IPEndpointInfoPtr::dynamicCast(endpoints[0]->getInfo()); test(ipEndpoint); test(ipEndpoint->type() == Ice::TCPEndpointType || ipEndpoint->type() == IceSSL::EndpointType || ipEndpoint->type() == Ice::WSEndpointType || ipEndpoint->type() == Ice::WSSEndpointType); test(ipEndpoint->host == defaultHost); test(ipEndpoint->port > 0); test(ipEndpoint->timeout == 15000); Ice::UDPEndpointInfoPtr udpEndpoint = Ice::UDPEndpointInfoPtr::dynamicCast(endpoints[1]->getInfo()); test(udpEndpoint); test(udpEndpoint->host == defaultHost); test(udpEndpoint->datagram()); test(udpEndpoint->port > 0); adapter->destroy(); communicator->getProperties()->setProperty("TestAdapter.Endpoints", "default -h * -p 12020"); communicator->getProperties()->setProperty("TestAdapter.PublishedEndpoints", "default -h 127.0.0.1 -p 12020"); adapter = communicator->createObjectAdapter("TestAdapter"); endpoints = adapter->getEndpoints(); test(endpoints.size() >= 1); publishedEndpoints = adapter->getPublishedEndpoints(); test(publishedEndpoints.size() == 1); for(Ice::EndpointSeq::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p) { ipEndpoint = Ice::IPEndpointInfoPtr::dynamicCast((*p)->getInfo()); test(ipEndpoint->port == 12020); } ipEndpoint = Ice::IPEndpointInfoPtr::dynamicCast(publishedEndpoints[0]->getInfo()); test(ipEndpoint->host == "127.0.0.1"); test(ipEndpoint->port == 12020); adapter->destroy(); } cout << "ok" << endl; Ice::ObjectPrx base = communicator->stringToProxy("test:default -p 12010:udp -p 12010 -c"); TestIntfPrx testIntf = TestIntfPrx::checkedCast(base); cout << "test connection endpoint information... " << flush; { Ice::EndpointInfoPtr info = base->ice_getConnection()->getEndpoint()->getInfo(); Ice::IPEndpointInfoPtr ipinfo = Ice::IPEndpointInfoPtr::dynamicCast(info); test(ipinfo->port == 12010); test(!ipinfo->compress); test(ipinfo->host == defaultHost); ostringstream os; Ice::Context ctx = testIntf->getEndpointInfoAsContext(); test(ctx["host"] == ipinfo->host); test(ctx["compress"] == "false"); istringstream is(ctx["port"]); int port; is >> port; test(port > 0); info = base->ice_datagram()->ice_getConnection()->getEndpoint()->getInfo(); Ice::UDPEndpointInfoPtr udp = Ice::UDPEndpointInfoPtr::dynamicCast(info); test(udp); test(udp->port == 12010); test(udp->host == defaultHost); } cout << "ok" << endl; cout << "testing connection information... " << flush; { Ice::IPConnectionInfoPtr info = Ice::IPConnectionInfoPtr::dynamicCast(base->ice_getConnection()->getInfo()); test(info); test(!info->incoming); test(info->adapterName.empty()); test(info->localPort > 0); test(info->remotePort == 12010); if(defaultHost == "127.0.0.1") { test(info->remoteAddress == defaultHost); test(info->localAddress == defaultHost); } ostringstream os; Ice::Context ctx = testIntf->getConnectionInfoAsContext(); test(ctx["incoming"] == "true"); test(ctx["adapterName"] == "TestAdapter"); test(ctx["remoteAddress"] == info->localAddress); test(ctx["localAddress"] == info->remoteAddress); os.str(""); os << info->localPort; test(ctx["remotePort"] == os.str()); os.str(""); os << info->remotePort; test(ctx["localPort"] == os.str()); info = Ice::IPConnectionInfoPtr::dynamicCast(base->ice_datagram()->ice_getConnection()->getInfo()); test(!info->incoming); test(info->adapterName.empty()); test(info->localPort > 0); test(info->remotePort == 12010); if(defaultHost == "127.0.0.1") { test(info->remoteAddress == defaultHost); test(info->localAddress == defaultHost); } } cout << "ok" << endl; testIntf->shutdown(); communicator->shutdown(); communicator->waitForShutdown(); }
void allTests(const Ice::CommunicatorPtr& comm) { IceGrid::RegistryPrx registry = IceGrid::RegistryPrx::checkedCast( comm->stringToProxy(comm->getDefaultLocator()->ice_getIdentity().category + "/Registry")); test(registry); IceGrid::QueryPrx query = IceGrid::QueryPrx::checkedCast( comm->stringToProxy(comm->getDefaultLocator()->ice_getIdentity().category + "/Query")); test(query); AdminSessionPrx session = registry->createAdminSession("foo", "bar"); session->ice_getConnection()->setACM(registry->getACMTimeout(), IceUtil::None, Ice::HeartbeatAlways); AdminPrx admin = session->getAdmin(); test(admin); cout << "testing server registration... " << flush; Ice::StringSeq serverIds = admin->getAllServerIds(); test(find(serverIds.begin(), serverIds.end(), "Server1") != serverIds.end()); test(find(serverIds.begin(), serverIds.end(), "Server2") != serverIds.end()); test(find(serverIds.begin(), serverIds.end(), "IceBox1") != serverIds.end()); test(find(serverIds.begin(), serverIds.end(), "IceBox2") != serverIds.end()); test(find(serverIds.begin(), serverIds.end(), "SimpleServer") != serverIds.end()); test(find(serverIds.begin(), serverIds.end(), "SimpleIceBox") != serverIds.end()); cout << "ok" << endl; cout << "testing adapter registration... " << flush; Ice::StringSeq adapterIds = admin->getAllAdapterIds(); test(find(adapterIds.begin(), adapterIds.end(), "Server1.Server") != adapterIds.end()); test(find(adapterIds.begin(), adapterIds.end(), "Server2.Server") != adapterIds.end()); test(find(adapterIds.begin(), adapterIds.end(), "SimpleServer.Server") != adapterIds.end()); test(find(adapterIds.begin(), adapterIds.end(), "IceBox1.Service1.Service1") != adapterIds.end()); test(find(adapterIds.begin(), adapterIds.end(), "IceBox1Service2Adapter") != adapterIds.end()); test(find(adapterIds.begin(), adapterIds.end(), "IceBox2.Service1.Service1") != adapterIds.end()); test(find(adapterIds.begin(), adapterIds.end(), "IceBox2Service2Adapter") != adapterIds.end()); test(find(adapterIds.begin(), adapterIds.end(), "SimpleIceBox.SimpleService.SimpleService") != adapterIds.end()); test(find(adapterIds.begin(), adapterIds.end(), "ReplicatedAdapter") != adapterIds.end()); cout << "ok" << endl; cout << "testing object registration... " << flush; Ice::ObjectProxySeq objs = query->findAllObjectsByType("::Test"); test(find_if(objs.begin(), objs.end(), bind2nd(ProxyIdentityEqual(comm),"Server1")) != objs.end()); test(find_if(objs.begin(), objs.end(), bind2nd(ProxyIdentityEqual(comm),"Server2")) != objs.end()); test(find_if(objs.begin(), objs.end(), bind2nd(ProxyIdentityEqual(comm),"SimpleServer")) != objs.end()); test(find_if(objs.begin(), objs.end(), bind2nd(ProxyIdentityEqual(comm),"IceBox1-Service1")) != objs.end()); test(find_if(objs.begin(), objs.end(), bind2nd(ProxyIdentityEqual(comm),"IceBox1-Service2")) != objs.end()); test(find_if(objs.begin(), objs.end(), bind2nd(ProxyIdentityEqual(comm),"IceBox2-Service1")) != objs.end()); test(find_if(objs.begin(), objs.end(), bind2nd(ProxyIdentityEqual(comm),"IceBox2-Service2")) != objs.end()); test(find_if(objs.begin(), objs.end(), bind2nd(ProxyIdentityEqual(comm),"SimpleIceBox-SimpleService")) != objs.end()); test(find_if(objs.begin(), objs.end(), bind2nd(ProxyIdentityEqual(comm),"ReplicatedObject")) != objs.end()); { test(identityToString(query->findObjectByType("::TestId1")->ice_getIdentity()) == "cat/name1"); test(identityToString(query->findObjectByType("::TestId2")->ice_getIdentity()) == "cat1/name1"); test(identityToString(query->findObjectByType("::TestId3")->ice_getIdentity()) == "cat1/name1-bis"); test(identityToString(query->findObjectByType("::TestId4")->ice_getIdentity()) == "c2\\/c2/n2\\/n2"); test(identityToString(query->findObjectByType("::TestId5")->ice_getIdentity()) == "n2\\/n2"); } { Ice::ObjectPrx obj = query->findObjectByType("::Test"); string id = identityToString(obj->ice_getIdentity()); test(id == "Server1" || id == "Server2" || id == "SimpleServer" || id == "IceBox1-Service1" || id == "IceBox1-Service2" || id == "IceBox2-Service1" || id == "IceBox2-Service2" || id == "SimpleIceBox-SimpleService" || "ReplicatedObject"); } { Ice::ObjectPrx obj = query->findObjectByTypeOnLeastLoadedNode("::Test", LoadSample5); string id = identityToString(obj->ice_getIdentity()); test(id == "Server1" || id == "Server2" || id == "SimpleServer" || id == "IceBox1-Service1" || id == "IceBox1-Service2" || id == "IceBox2-Service1" || id == "IceBox2-Service2" || id == "SimpleIceBox-SimpleService" || "ReplicatedObject"); } { Ice::ObjectPrx obj = query->findObjectByType("::Foo"); test(!obj); obj = query->findObjectByTypeOnLeastLoadedNode("::Foo", LoadSample15); test(!obj); } Ice::Identity encoding10_oneway; encoding10_oneway.name = "encoding10-oneway"; test(query->findObjectById(encoding10_oneway)->ice_getEncodingVersion() == Ice::Encoding_1_0); test(query->findObjectById(encoding10_oneway)->ice_isOneway()); Ice::Identity encoding10_secure; encoding10_secure.name = "encoding10-secure"; test(query->findObjectById(encoding10_secure)->ice_getEncodingVersion() == Ice::Encoding_1_0); test(query->findObjectById(encoding10_secure)->ice_isSecure()); Ice::Identity oaoptions; oaoptions.name = "oaoptions"; test(query->findObjectById(oaoptions)->ice_getEncodingVersion() == Ice::stringToEncodingVersion("1.2")); test(query->findObjectById(oaoptions)->ice_isTwoway()); Ice::Identity comoptions; comoptions.name = "communicatoroptions"; test(query->findObjectById(comoptions)->ice_getEncodingVersion() == Ice::stringToEncodingVersion("1.3")); test(query->findObjectById(comoptions)->ice_isTwoway()); Ice::Identity options34; options34.name = "34options"; test(query->findObjectById(options34)->ice_getEncodingVersion() == Ice::Encoding_1_0); Ice::Identity simpleServer; simpleServer.name = "SimpleServer"; test(query->findObjectById(simpleServer)->ice_getEncodingVersion() == Ice::Encoding_1_1); Ice::Identity replicated15; replicated15.name = "ReplicatedObject15"; test(query->findObjectById(replicated15)->ice_getEncodingVersion() == Ice::stringToEncodingVersion("1.5")); Ice::Identity replicated14; replicated14.name = "ReplicatedObject14"; test(query->findObjectById(replicated14)->ice_getEncodingVersion() == Ice::stringToEncodingVersion("1.4")); Ice::LocatorPrx locator = comm->getDefaultLocator(); test(query->findObjectById(encoding10_oneway) == locator->findObjectById(encoding10_oneway)); test(query->findObjectById(encoding10_secure) == locator->findObjectById(encoding10_secure)); test(query->findObjectById(oaoptions) == locator->findObjectById(oaoptions)); test(query->findObjectById(comoptions) == locator->findObjectById(comoptions)); test(query->findObjectById(options34) == locator->findObjectById(options34)); test(query->findObjectById(simpleServer) == locator->findObjectById(simpleServer)); test(query->findObjectById(replicated15) == locator->findObjectById(replicated15)); test(query->findObjectById(replicated14) == locator->findObjectById(replicated14)); cout << "ok" << endl; // // Ensure that all server and service objects are reachable. // // The identity for the test object in deployed server or services // is the name of the service or server. The object adapter name // is Adapter prefixed with the name of the service or // server. Ensure we can reach each object. // cout << "pinging server objects... " << flush; TestIntfPrx obj; obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); obj = TestIntfPrx::checkedCast(comm->stringToProxy("IceBox1-Service2@IceBox1Service2Adapter")); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); obj = TestIntfPrx::checkedCast(comm->stringToProxy("IceBox2-Service2@IceBox2Service2Adapter")); obj = TestIntfPrx::checkedCast( comm->stringToProxy("*****@*****.**")); cout << "ok" << endl; cout << "testing server configuration... " << flush; obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); test(obj->getProperty("Type") == "Server"); test(obj->getProperty("Name") == "Server1"); test(obj->getProperty("NameName") == "Server1Server1"); test(obj->getProperty("NameEscaped") == "${name}"); test(obj->getProperty("NameEscapeEscaped") == "$Server1"); test(obj->getProperty("NameEscapedEscapeEscaped") == "$${name}"); test(obj->getProperty("ManyEscape") == "$$$${name}"); test(obj->getProperty("TestServer1Identity") == "Server1"); test(obj->getProperty("LogFilePath") == "test-Server1.log"); test(obj->getProperty("LogFilePath-Server1") == "test.log"); test(obj->getProperty("PropertyWithSpaces") == " test "); // \ is escaped in C++ string literals test(obj->getProperty("WindowsPath") == "C:\\Program Files (x86)\\ZeroC\\"); test(obj->getProperty("UNCPath") == "\\\\server\\foo bar\\file"); test(obj->getProperty("PropertyWith=") == "foo=bar"); test(obj->getProperty("PropertyWithHash") == "foo#bar"); test(obj->getProperty("PropertyWithTab") == "foo\tbar"); test(obj->getProperty("PropertyWithEscapeSpace") == "foo\\ "); test(obj->getProperty("PropertyWithProperty") == "Plugin.EntryPoint=foo:bar --Ice.Config=\\\\\\server\\foo bar\\file.cfg"); cout << "ok" << endl; cout << "testing service configuration... " << flush; obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); test(obj->getProperty("Service1.Type") == "standard"); test(obj->getProperty("Service1.ServiceName") == "Service1"); test(obj->getProperty("TestService1Identity") == "IceBox1-Service1"); test(obj->getProperty("LogFilePath") == "test-Service1.log"); test(obj->getProperty("LogFilePath-Service1") == "test.log"); test(obj->getProperty("PropertyWithSpaces") == " test "); // \ is escaped in C++ string literals test(obj->getProperty("WindowsPath") == "C:\\Program Files (x86)\\ZeroC\\"); test(obj->getProperty("UNCPath") == "\\\\server\\foo bar\\file"); test(obj->getProperty("PropertyWith=") == "foo=bar"); test(obj->getProperty("PropertyWithHash") == "foo#bar"); test(obj->getProperty("PropertyWithTab") == "foo\tbar"); test(obj->getProperty("PropertyWithEscapeSpace") == "foo\\ "); test(obj->getProperty("PropertyWithProperty") == "Plugin.EntryPoint=foo:bar --Ice.Config=\\\\\\server\\foo bar\\file.cfg"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("IceBox2-Service2@IceBox2Service2Adapter")); test(obj->getProperty("Service2.Type") == "nonstandard"); test(obj->getProperty("Service2.ServiceName") == "Service2"); test(obj->getProperty("Service2.DebugProperty") == ""); test(obj->getProperty("Service1.DebugProperty") == ""); cout << "ok" << endl; cout << "testing server options... " << flush; obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); test(obj->getProperty("Test.Test") == "2"); test(obj->getProperty("Test.Test1") == "0"); cout << "ok" << endl; cout << "testing variables... " << flush; vector<TestIntfPrx> proxies; obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); proxies.push_back(obj); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); proxies.push_back(obj); obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); proxies.push_back(obj); obj = TestIntfPrx::checkedCast( comm->stringToProxy("*****@*****.**")); proxies.push_back(obj); for(vector<TestIntfPrx>::const_iterator p = proxies.begin(); p != proxies.end(); ++p) { test((*p)->getProperty("AppVarProp") == "AppVar"); test((*p)->getProperty("NodeVarProp") == "NodeVar"); test((*p)->getProperty("RecursiveAppVarProp") == "Test"); test((*p)->getProperty("AppVarOverridedProp") == "OverridedInNode"); test((*p)->getProperty("AppVarDefinedInNodeProp") == "localnode"); test((*p)->getProperty("EscapedAppVarProp") == "${escaped}"); test((*p)->getProperty("RecursiveEscapedAppVarProp") == "${escaped}"); test((*p)->getProperty("Recursive2EscapedAppVarProp") == "${escaped}"); test((*p)->getProperty("RecursiveNodeVarProp") == "localnode"); test((*p)->getProperty("TestDirProp") != "NotThisValue"); } cout << "ok" << endl; cout << "testing parameters... " << flush; obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); test(obj->getProperty("Param1Prop") == "Param1"); test(obj->getProperty("Param2Prop") == "AppVar"); test(obj->getProperty("ParamEscapedProp") == "${escaped}"); test(obj->getProperty("ParamDoubleEscapedProp") == "$escapedvalue"); test(obj->getProperty("AppVarOverridedByParamProp") == "Overrided"); test(obj->getProperty("NodeVarOverridedByParamProp") == "Test"); test(obj->getProperty("DefaultParamProp") == "VALUE"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); test(obj->getProperty("Param1Prop") == "Param12"); test(obj->getProperty("Param2Prop") == "OverridedInNode"); test(obj->getProperty("ParamEscapedProp") == "${escaped}"); test(obj->getProperty("ParamDoubleEscapedProp") == "$escapedvalue"); test(obj->getProperty("AppVarOverridedByParamProp") == "Overrided"); test(obj->getProperty("NodeVarOverridedByParamProp") == "Test"); test(obj->getProperty("DefaultParamProp") == "OTHERVALUE"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); test(obj->getProperty("AppVarOverridedByParamProp") == "Test"); test(obj->getProperty("NodeVarOverridedByParamProp") == "Overrided"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("IceBox1-Service2@IceBox1Service2Adapter")); test(obj->getProperty("AppVarOverridedByParamProp") == "Test"); test(obj->getProperty("NodeVarOverridedByParamProp") == "Test"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); test(obj->getProperty("AppVarOverridedByParamProp") == "Test"); test(obj->getProperty("NodeVarOverridedByParamProp") == "Overrided"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("IceBox2-Service2@IceBox2Service2Adapter")); test(obj->getProperty("AppVarOverridedByParamProp") == "Test"); test(obj->getProperty("NodeVarOverridedByParamProp") == "Test"); cout << "ok" << endl; cout << "testing descriptions... " << flush; // // NOTE: We can't test the following since // getApplicationDescriptor doesn't return the instantiated // application descriptor... // // ApplicationDescriptor desc = admin->getApplicationDescriptor("test"); // test(desc.description == "APP AppVar"); // test(desc.nodes["localnode"].description == "NODE NodeVar"); // test(desc.replicaGroups[0].description == "REPLICA GROUP AppVar"); // test(desc.nodes["localnode"].servers.size() == 2); // const int idx = desc.nodes["localnode"].servers[0]->id == "SimpleServer" ? 0 : 1; ServerInfo info = admin->getServerInfo("SimpleServer"); test(info.descriptor->id == "SimpleServer"); test(info.descriptor->description == "SERVER NodeVar"); test(info.descriptor->adapters[0].description == "ADAPTER NodeVar"); test(info.descriptor->dbEnvs[0].description == "DBENV NodeVar"); cout << "ok" << endl; cout << "testing property sets..." << flush; obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); test(obj->getProperty("AppProperty") == "AppVar"); test(obj->getProperty("AppProperty2") == "OverrideMe"); test(obj->getProperty("AppProperty21") == "Override"); test(obj->getProperty("NodeProperty") == "NodeVar"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); test(obj->getProperty("AppProperty") == "AppVar"); test(obj->getProperty("AppProperty2") == "OverrideMe"); test(obj->getProperty("AppProperty21") == "Override"); test(obj->getProperty("NodeProperty") == "NodeVar"); test(obj->getProperty("ServerInstanceProperty") == "Server2"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); test(obj->getProperty("AppProperty") == ""); // IceBox server properties aren't inherited for IceBox1 test(obj->getProperty("AppProperty2") == ""); test(obj->getProperty("AppProperty21") == ""); test(obj->getProperty("NodeProperty") == ""); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); test(obj->getProperty("AppProperty") == "AppVar"); test(obj->getProperty("AppProperty2") == "OverrideMe"); test(obj->getProperty("AppProperty21") == "Override"); test(obj->getProperty("NodeProperty") == "NodeVar"); test(obj->getProperty("IceBoxInstanceProperty") == "IceBox2"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("IceBox2-Service2@IceBox2Service2Adapter")); test(obj->getProperty("AppProperty") == "AppVar"); test(obj->getProperty("AppProperty2") == "OverrideMe"); test(obj->getProperty("AppProperty21") == "Override"); test(obj->getProperty("NodeProperty") == "NodeVar"); test(obj->getProperty("IceBoxInstanceProperty") == "IceBox2"); test(obj->getProperty("ServiceInstanceProperty") == "Service2"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("*****@*****.**")); test(obj->getProperty("AppProperty") == "AppVar"); test(obj->getProperty("AppProperty2") == "OverrideMe"); test(obj->getProperty("AppProperty21") == "Override"); test(obj->getProperty("NodeProperty") == "NodeVar"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); test(obj->getProperty("ServerInstanceServiceProperty") == "service1"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); test(obj->getProperty("ServerInstanceServiceProperty") == "service4"); obj = TestIntfPrx::checkedCast(comm->stringToProxy("[email protected]")); test(obj->getProperty("IceBoxInstanceProperty") == "overriden"); cout << "ok" << endl; cout << "testing validation... " << flush; TemplateDescriptor templ; templ.parameters.push_back("name"); templ.parameters.push_back("nam3"); templ.parameters.push_back("nam2"); templ.parameters.push_back("nam3"); templ.descriptor = new ServerDescriptor(); ServerDescriptorPtr server = ServerDescriptorPtr::dynamicCast(templ.descriptor); server->id = "test"; server->exe = "${test.dir}/server"; server->applicationDistrib = false; server->allocatable = false; ApplicationDescriptor desc; desc.name = "App"; desc.serverTemplates["ServerTemplate"] = templ; try { admin->addApplication(desc); test(false); } catch(const DeploymentException& ex) { test(ex.reason.find("duplicate parameters") != string::npos); } catch(const Ice::Exception& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; logTests(comm, session); session->destroy(); }
TestIntfPrx allTests(const Ice::CommunicatorPtr& communicator) { Ice::ObjectPrx obj = communicator->stringToProxy("Test:default -p 12010"); TestIntfPrx test = TestIntfPrx::checkedCast(obj); tprintf("base as Object... "); { Ice::ObjectPtr o; try { o = test->SBaseAsObject(); test(o); test(o->ice_id() == "::Test::SBase"); } catch(...) { test(0); } SBasePtr sb = SBasePtr::dynamicCast(o); test(sb); test(sb->sb == "SBase.sb"); } tprintf("ok\n"); tprintf("base as base... "); { SBasePtr sb; try { sb = test->SBaseAsSBase(); test(sb->sb == "SBase.sb"); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("base with known derived as base... "); { SBasePtr sb; try { sb = test->SBSKnownDerivedAsSBase(); test(sb->sb == "SBSKnownDerived.sb"); } catch(...) { test(0); } SBSKnownDerivedPtr sbskd = SBSKnownDerivedPtr::dynamicCast(sb); test(sbskd); test(sbskd->sbskd == "SBSKnownDerived.sbskd"); } tprintf("ok\n"); tprintf("base with known derived as known derived... "); { SBSKnownDerivedPtr sbskd; try { sbskd = test->SBSKnownDerivedAsSBSKnownDerived(); test(sbskd->sbskd == "SBSKnownDerived.sbskd"); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("base with unknown derived as base... "); { SBasePtr sb; try { sb = test->SBSUnknownDerivedAsSBase(); test(sb->sb == "SBSUnknownDerived.sb"); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("unknown with Object as Object... "); { Ice::ObjectPtr o; try { o = test->SUnknownAsObject(); test(0); } catch(const Ice::MarshalException&) { } catch(...) { test(0); } } tprintf("ok\n"); tprintf("one-element cycle... "); { try { BPtr b = test->oneElementCycle(); test(b); test(b->ice_id() == "::Test::B"); test(b->sb == "B1.sb"); test(b->pb == b); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("two-element cycle... "); { try { BPtr b1 = test->twoElementCycle(); test(b1); test(b1->ice_id() == "::Test::B"); test(b1->sb == "B1.sb"); BPtr b2 = b1->pb; test(b2); test(b2->ice_id() == "::Test::B"); test(b2->sb == "B2.sb"); test(b2->pb == b1); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("known derived pointer slicing as base... "); { try { BPtr b1; b1 = test->D1AsB(); test(b1); test(b1->ice_id() == "::Test::D1"); test(b1->sb == "D1.sb"); test(b1->pb); test(b1->pb != b1); D1Ptr d1 = D1Ptr::dynamicCast(b1); test(d1); test(d1->sd1 == "D1.sd1"); test(d1->pd1); test(d1->pd1 != b1); test(b1->pb == d1->pd1); BPtr b2 = b1->pb; test(b2); test(b2->pb == b1); test(b2->sb == "D2.sb"); test(b2->ice_id() == "::Test::B"); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("known derived pointer slicing as derived... "); { try { D1Ptr d1; d1 = test->D1AsD1(); test(d1); test(d1->ice_id() == "::Test::D1"); test(d1->sb == "D1.sb"); test(d1->pb); test(d1->pb != d1); BPtr b2 = d1->pb; test(b2); test(b2->ice_id() == "::Test::B"); test(b2->sb == "D2.sb"); test(b2->pb == d1); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("unknown derived pointer slicing as base... "); { try { BPtr b2; b2 = test->D2AsB(); test(b2); test(b2->ice_id() == "::Test::B"); test(b2->sb == "D2.sb"); test(b2->pb); test(b2->pb != b2); BPtr b1 = b2->pb; test(b1); test(b1->ice_id() == "::Test::D1"); test(b1->sb == "D1.sb"); test(b1->pb == b2); D1Ptr d1 = D1Ptr::dynamicCast(b1); test(d1); test(d1->sd1 == "D1.sd1"); test(d1->pd1 == b2); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("param ptr slicing with known first... "); { try { BPtr b1; BPtr b2; test->paramTest1(b1, b2); test(b1); test(b1->ice_id() == "::Test::D1"); test(b1->sb == "D1.sb"); test(b1->pb == b2); D1Ptr d1 = D1Ptr::dynamicCast(b1); test(d1); test(d1->sd1 == "D1.sd1"); test(d1->pd1 == b2); test(b2); test(b2->ice_id() == "::Test::B"); // No factory, must be sliced test(b2->sb == "D2.sb"); test(b2->pb == b1); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("param ptr slicing with unknown first... "); { try { BPtr b2; BPtr b1; test->paramTest2(b2, b1); test(b1); test(b1->ice_id() == "::Test::D1"); test(b1->sb == "D1.sb"); test(b1->pb == b2); D1Ptr d1 = D1Ptr::dynamicCast(b1); test(d1); test(d1->sd1 == "D1.sd1"); test(d1->pd1 == b2); test(b2); test(b2->ice_id() == "::Test::B"); // No factory, must be sliced test(b2->sb == "D2.sb"); test(b2->pb == b1); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("return value identity with known first... "); { try { BPtr p1; BPtr p2; BPtr r = test->returnTest1(p1, p2); test(r == p1); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("return value identity with unknown first... "); { try { BPtr p1; BPtr p2; BPtr r = test->returnTest2(p1, p2); test(r == p1); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("return value identity for input params known first... "); { try { D1Ptr d1 = new D1; d1->sb = "D1.sb"; d1->sd1 = "D1.sd1"; D3Ptr d3 = new D3; d3->pb = d1; d3->sb = "D3.sb"; d3->sd3 = "D3.sd3"; d3->pd3 = d1; d1->pb = d3; d1->pd1 = d3; BPtr b1 = test->returnTest3(d1, d3); test(b1); test(b1->sb == "D1.sb"); test(b1->ice_id() == "::Test::D1"); D1Ptr p1 = D1Ptr::dynamicCast(b1); test(p1); test(p1->sd1 == "D1.sd1"); test(p1->pd1 == b1->pb); BPtr b2 = b1->pb; test(b2); test(b2->sb == "D3.sb"); test(b2->ice_id() == "::Test::B"); // Sliced by server test(b2->pb == b1); D3Ptr p3 = D3Ptr::dynamicCast(b2); test(!p3); test(b1 != d1); test(b1 != d3); test(b2 != d1); test(b2 != d3); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("return value identity for input params unknown first... "); { try { D1Ptr d1 = new D1; d1->sb = "D1.sb"; d1->sd1 = "D1.sd1"; D3Ptr d3 = new D3; d3->pb = d1; d3->sb = "D3.sb"; d3->sd3 = "D3.sd3"; d3->pd3 = d1; d1->pb = d3; d1->pd1 = d3; BPtr b1 = test->returnTest3(d3, d1); test(b1); test(b1->sb == "D3.sb"); test(b1->ice_id() == "::Test::B"); // Sliced by server D3Ptr p1 = D3Ptr::dynamicCast(b1); test(!p1); BPtr b2 = b1->pb; test(b2); test(b2->sb == "D1.sb"); test(b2->ice_id() == "::Test::D1"); test(b2->pb == b1); D1Ptr p3 = D1Ptr::dynamicCast(b2); test(p3); test(p3->sd1 == "D1.sd1"); test(p3->pd1 == b1); test(b1 != d1); test(b1 != d3); test(b2 != d1); test(b2 != d3); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("remainder unmarshaling (3 instances)... "); { try { BPtr p1; BPtr p2; BPtr ret = test->paramTest3(p1, p2); test(p1); test(p1->sb == "D2.sb (p1 1)"); test(p1->pb == 0); test(p1->ice_id() == "::Test::B"); test(p2); test(p2->sb == "D2.sb (p2 1)"); test(p2->pb == 0); test(p2->ice_id() == "::Test::B"); test(ret); test(ret->sb == "D1.sb (p2 2)"); test(ret->pb == 0); test(ret->ice_id() == "::Test::D1"); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("remainder unmarshaling (4 instances)... "); { try { BPtr b; BPtr ret = test->paramTest4(b); test(b); test(b->sb == "D4.sb (1)"); test(b->pb == 0); test(b->ice_id() == "::Test::B"); test(ret); test(ret->sb == "B.sb (2)"); test(ret->pb == 0); test(ret->ice_id() == "::Test::B"); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("param ptr slicing, instance marshaled in unknown derived as base... "); { try { BPtr b1 = new B; b1->sb = "B.sb(1)"; b1->pb = b1; D3Ptr d3 = new D3; d3->sb = "D3.sb"; d3->pb = d3; d3->sd3 = "D3.sd3"; d3->pd3 = b1; BPtr b2 = new B; b2->sb = "B.sb(2)"; b2->pb = b1; BPtr r = test->returnTest3(d3, b2); test(r); test(r->ice_id() == "::Test::B"); test(r->sb == "D3.sb"); test(r->pb == r); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("param ptr slicing, instance marshaled in unknown derived as derived... " ); { try { D1Ptr d11 = new D1; d11->sb = "D1.sb(1)"; d11->pb = d11; d11->sd1 = "D1.sd1(1)"; D3Ptr d3 = new D3; d3->sb = "D3.sb"; d3->pb = d3; d3->sd3 = "D3.sd3"; d3->pd3 = d11; D1Ptr d12 = new D1; d12->sb = "D1.sb(2)"; d12->pb = d12; d12->sd1 = "D1.sd1(2)"; d12->pd1 = d11; BPtr r = test->returnTest3(d3, d12); test(r); test(r->ice_id() == "::Test::B"); test(r->sb == "D3.sb"); test(r->pb == r); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("sequence slicing... "); { try { SS ss; { BPtr ss1b = new B; ss1b->sb = "B.sb"; ss1b->pb = ss1b; D1Ptr ss1d1 = new D1; ss1d1->sb = "D1.sb"; ss1d1->sd1 = "D1.sd1"; ss1d1->pb = ss1b; D3Ptr ss1d3 = new D3; ss1d3->sb = "D3.sb"; ss1d3->sd3 = "D3.sd3"; ss1d3->pb = ss1b; BPtr ss2b = new B; ss2b->sb = "B.sb"; ss2b->pb = ss1b; D1Ptr ss2d1 = new D1; ss2d1->sb = "D1.sb"; ss2d1->sd1 = "D1.sd1"; ss2d1->pb = ss2b; D3Ptr ss2d3 = new D3; ss2d3->sb = "D3.sb"; ss2d3->sd3 = "D3.sd3"; ss2d3->pb = ss2b; ss1d1->pd1 = ss2b; ss1d3->pd3 = ss2d1; ss2d1->pd1 = ss1d3; ss2d3->pd3 = ss1d1; SS1Ptr ss1 = new SS1; ss1->s.push_back(ss1b); ss1->s.push_back(ss1d1); ss1->s.push_back(ss1d3); SS2Ptr ss2 = new SS2; ss2->s.push_back(ss2b); ss2->s.push_back(ss2d1); ss2->s.push_back(ss2d3); ss = test->sequenceTest(ss1, ss2); } test(ss.c1); BPtr ss1b = ss.c1->s[0]; BPtr ss1d1 = ss.c1->s[1]; test(ss.c2); BPtr ss1d3 = ss.c1->s[2]; test(ss.c2); BPtr ss2b = ss.c2->s[0]; BPtr ss2d1 = ss.c2->s[1]; BPtr ss2d3 = ss.c2->s[2]; test(ss1b->pb == ss1b); test(ss1d1->pb == ss1b); test(ss1d3->pb == ss1b); test(ss2b->pb == ss1b); test(ss2d1->pb == ss2b); test(ss2d3->pb == ss2b); test(ss1b->ice_id() == "::Test::B"); test(ss1d1->ice_id() == "::Test::D1"); test(ss1d3->ice_id() == "::Test::B"); test(ss2b->ice_id() == "::Test::B"); test(ss2d1->ice_id() == "::Test::D1"); test(ss2d3->ice_id() == "::Test::B"); } catch(const ::Ice::Exception&) { test(0); } } tprintf("ok\n"); tprintf("dictionary slicing... "); { try { BDict bin; BDict bout; BDict r; int i; for(i = 0; i < 10; ++i) { string s = Ice::printfToString("D1.%d", i); D1Ptr d1 = new D1; d1->sb = s; d1->pb = d1; d1->sd1 = s; bin[i] = d1; } r = test->dictionaryTest(bin, bout); test(bout.size() == 10); for(i = 0; i < 10; ++i) { BPtr b = bout.find(i * 10)->second; test(b); string s = Ice::printfToString("D1.%d", i); test(b->sb == s); test(b->pb); test(b->pb != b); test(b->pb->sb == s); test(b->pb->pb == b->pb); } test(r.size() == 10); for(i = 0; i < 10; ++i) { BPtr b = r.find(i * 20)->second; test(b); string s = Ice::printfToString("D1.%d", i * 20); test(b->sb == s); test(b->pb == (i == 0 ? BPtr(0) : r.find((i - 1) * 20)->second)); D1Ptr d1 = D1Ptr::dynamicCast(b); test(d1); test(d1->sd1 == s); test(d1->pd1 == d1); } } catch(const ::Ice::Exception&) { test(0); } } tprintf("ok\n"); tprintf("base exception thrown as base exception... "); { try { test->throwBaseAsBase(); test(0); } catch(const BaseException& e) { test(e.ice_name() == "Test::BaseException"); test(e.sbe == "sbe"); test(e.pb); test(e.pb->sb == "sb"); test(e.pb->pb == e.pb); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("derived exception thrown as base exception... "); { try { test->throwDerivedAsBase(); test(0); } catch(const DerivedException& e) { test(e.ice_name() == "Test::DerivedException"); test(e.sbe == "sbe"); test(e.pb); test(e.pb->sb == "sb1"); test(e.pb->pb == e.pb); test(e.sde == "sde1"); test(e.pd1); test(e.pd1->sb == "sb2"); test(e.pd1->pb == e.pd1); test(e.pd1->sd1 == "sd2"); test(e.pd1->pd1 == e.pd1); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("derived exception thrown as derived exception... "); { try { test->throwDerivedAsDerived(); test(0); } catch(const DerivedException& e) { test(e.ice_name() == "Test::DerivedException"); test(e.sbe == "sbe"); test(e.pb); test(e.pb->sb == "sb1"); test(e.pb->pb == e.pb); test(e.sde == "sde1"); test(e.pd1); test(e.pd1->sb == "sb2"); test(e.pd1->pb == e.pd1); test(e.pd1->sd1 == "sd2"); test(e.pd1->pd1 == e.pd1); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("unknown derived exception thrown as base exception... "); { try { test->throwUnknownDerivedAsBase(); test(0); } catch(const BaseException& e) { test(e.ice_name() == "Test::BaseException"); test(e.sbe == "sbe"); test(e.pb); test(e.pb->sb == "sb d2"); test(e.pb->pb == e.pb); } catch(...) { test(0); } } tprintf("ok\n"); tprintf("forward-declared class... "); { try { ForwardPtr f; test->useForward(f); test(f); } catch(...) { test(0); } } tprintf("ok\n"); return test; }
void allTestsWithDeploy(const Ice::CommunicatorPtr& communicator) { cout << "testing stringToProxy... " << flush; Ice::ObjectPrx base = communicator->stringToProxy("test @ TestAdapter"); test(base); Ice::ObjectPrx base2 = communicator->stringToProxy("test"); test(base2); cout << "ok" << endl; cout << "testing checked cast... " << flush; TestIntfPrx obj = TestIntfPrx::checkedCast(base); test(obj); test(obj == base); TestIntfPrx obj2 = TestIntfPrx::checkedCast(base2); test(obj2); test(obj2 == base2); cout << "ok" << endl; cout << "pinging server... " << flush; obj->ice_ping(); obj2->ice_ping(); cout << "ok" << endl; cout << "testing encoding versioning... " << flush; Ice::ObjectPrx base10 = communicator->stringToProxy("test10 @ TestAdapter10"); test(base10); Ice::ObjectPrx base102 = communicator->stringToProxy("test10"); test(base102); try { base10->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } try { base102->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } base10 = base10->ice_encodingVersion(Ice::Encoding_1_0); base102 = base102->ice_encodingVersion(Ice::Encoding_1_0); base10->ice_ping(); base102->ice_ping(); cout << "ok" << endl; cout << "testing reference with unknown identity... " << flush; try { communicator->stringToProxy("unknown/unknown")->ice_ping(); test(false); } catch (const Ice::NotRegisteredException& ex) { test(ex.kindOfObject == "object"); test(ex.id == "unknown/unknown"); } cout << "ok" << endl; cout << "testing reference with unknown adapter... " << flush; try { communicator->stringToProxy("test @ TestAdapterUnknown")->ice_ping(); test(false); } catch (const Ice::NotRegisteredException& ex) { test(ex.kindOfObject == "object adapter"); test(ex.id == "TestAdapterUnknown"); } cout << "ok" << endl; IceGrid::RegistryPrx registry = IceGrid::RegistryPrx::checkedCast( communicator->stringToProxy(communicator->getDefaultLocator()->ice_getIdentity().category + "/Registry")); test(registry); IceGrid::AdminSessionPrx session = registry->createAdminSession("foo", "bar"); session->ice_getConnection()->setACM(registry->getACMTimeout(), IceUtil::None, Ice::HeartbeatAlways); IceGrid::AdminPrx admin = session->getAdmin(); test(admin); admin->enableServer("server", false); admin->stopServer("server"); cout << "testing whether server is still reachable... " << flush; try { obj = TestIntfPrx::checkedCast(base); test(false); } catch(const Ice::NoEndpointException&) { } try { obj2 = TestIntfPrx::checkedCast(base2); test(false); } catch(const Ice::NoEndpointException&) { } admin->enableServer("server", true); try { obj = TestIntfPrx::checkedCast(base); } catch(const Ice::NoEndpointException&) { test(false); } try { obj2 = TestIntfPrx::checkedCast(base2); } catch(const Ice::NoEndpointException&) { test(false); } cout << "ok" << endl; admin->stopServer("server"); session->destroy(); }
void allTestsWithDeploy(const Ice::CommunicatorPtr& communicator) { cout << "testing stringToProxy... " << flush; Ice::ObjectPrx base = communicator->stringToProxy("test @ TestAdapter"); test(base); Ice::ObjectPrx base2 = communicator->stringToProxy("test"); test(base2); cout << "ok" << endl; cout << "testing checked cast... " << flush; TestIntfPrx obj = TestIntfPrx::checkedCast(base); test(obj); test(obj == base); TestIntfPrx obj2 = TestIntfPrx::checkedCast(base2); test(obj2); test(obj2 == base2); cout << "ok" << endl; cout << "pinging server... " << flush; obj->ice_ping(); obj2->ice_ping(); cout << "ok" << endl; cout << "testing reference with unknown identity... " << flush; try { communicator->stringToProxy("unknown/unknown")->ice_ping(); test(false); } catch (const Ice::NotRegisteredException& ex) { test(ex.kindOfObject == "object"); test(ex.id == "unknown/unknown"); } cout << "ok" << endl; cout << "testing reference with unknown adapter... " << flush; try { communicator->stringToProxy("test @ TestAdapterUnknown")->ice_ping(); test(false); } catch (const Ice::NotRegisteredException& ex) { test(ex.kindOfObject == "object adapter"); test(ex.id == "TestAdapterUnknown"); } cout << "ok" << endl; IceGrid::RegistryPrx registry = IceGrid::RegistryPrx::checkedCast( communicator->stringToProxy("IceGrid/Registry")); test(registry); IceGrid::AdminSessionPrx session = registry->createAdminSession("foo", "bar"); SessionKeepAliveThreadPtr keepAlive = new SessionKeepAliveThread(session, registry->getSessionTimeout()/2); keepAlive->start(); IceGrid::AdminPrx admin = session->getAdmin(); test(admin); admin->enableServer("server", false); admin->stopServer("server"); cout << "testing whether server is still reachable... " << flush; try { obj = TestIntfPrx::checkedCast(base); test(false); } catch(const Ice::NoEndpointException&) { } try { obj2 = TestIntfPrx::checkedCast(base2); test(false); } catch(const Ice::NoEndpointException&) { } admin->enableServer("server", true); try { obj = TestIntfPrx::checkedCast(base); } catch(const Ice::NoEndpointException&) { test(false); } try { obj2 = TestIntfPrx::checkedCast(base2); } catch(const Ice::NoEndpointException&) { test(false); } cout << "ok" << endl; admin->stopServer("server"); keepAlive->destroy(); keepAlive->getThreadControl().join(); keepAlive = 0; session->destroy(); }
TestIntfPrx allTests(const CommunicatorPtr& communicator) { cout << "testing stringToProxy... " << flush; ObjectPrx base = communicator->stringToProxy("test:default -p 12010"); test(base); cout << "ok" << endl; cout << "testing checked cast... " << flush; TestIntfPrx obj = TestIntfPrx::checkedCast(base); test(obj); test(obj == base); cout << "ok" << endl; { cout << "creating/destroying/recreating object adapter... " << flush; ObjectAdapterPtr adapter = communicator->createObjectAdapterWithEndpoints("TransientTestAdapter", "default"); try { communicator->createObjectAdapterWithEndpoints("TransientTestAdapter", "default"); test(false); } catch(const AlreadyRegisteredException&) { } adapter->destroy(); // // Use a different port than the first adapter to avoid an "address already in use" error. // adapter = communicator->createObjectAdapterWithEndpoints("TransientTestAdapter", "default"); adapter->destroy(); cout << "ok" << endl; } cout << "creating/activating/deactivating object adapter in one operation... " << flush; obj->transient(); cout << "ok" << endl; { cout << "testing connection closure... " << flush; for(int i = 0; i < 10; ++i) { Ice::InitializationData initData; initData.properties = communicator->getProperties()->clone(); Ice::CommunicatorPtr comm = Ice::initialize(initData); comm->stringToProxy("test:default -p 12010")->begin_ice_ping(); comm->destroy(); } cout << "ok" << endl; } cout << "deactivating object adapter in the server... " << flush; obj->deactivate(); cout << "ok" << endl; cout << "testing whether server is gone... " << flush; try { obj->ice_ping(); test(false); } catch(const LocalException&) { cout << "ok" << endl; } return obj; }
void allTests(const Ice::CommunicatorPtr& communicator, const string& ref) { ServerManagerPrx manager = ServerManagerPrx::checkedCast(communicator->stringToProxy(ref)); TestLocatorPrx locator = TestLocatorPrx::uncheckedCast(communicator->getDefaultLocator()); test(manager); TestLocatorRegistryPrx registry = TestLocatorRegistryPrx::checkedCast(locator->getRegistry()); test(registry); cout << "testing stringToProxy... " << flush; Ice::ObjectPrx base = communicator->stringToProxy("test @ TestAdapter"); Ice::ObjectPrx base2 = communicator->stringToProxy("test @ TestAdapter"); Ice::ObjectPrx base3 = communicator->stringToProxy("test"); Ice::ObjectPrx base4 = communicator->stringToProxy("ServerManager"); Ice::ObjectPrx base5 = communicator->stringToProxy("test2"); Ice::ObjectPrx base6 = communicator->stringToProxy("test @ ReplicatedAdapter"); cout << "ok" << endl; cout << "testing ice_locator and ice_getLocator... " << flush; test(Ice::proxyIdentityEqual(base->ice_getLocator(), communicator->getDefaultLocator())); Ice::LocatorPrx anotherLocator = Ice::LocatorPrx::uncheckedCast(communicator->stringToProxy("anotherLocator")); base = base->ice_locator(anotherLocator); test(Ice::proxyIdentityEqual(base->ice_getLocator(), anotherLocator)); communicator->setDefaultLocator(0); base = communicator->stringToProxy("test @ TestAdapter"); test(!base->ice_getLocator()); base = base->ice_locator(anotherLocator); test(Ice::proxyIdentityEqual(base->ice_getLocator(), anotherLocator)); communicator->setDefaultLocator(locator); base = communicator->stringToProxy("test @ TestAdapter"); test(Ice::proxyIdentityEqual(base->ice_getLocator(), communicator->getDefaultLocator())); // // We also test ice_router/ice_getRouter (perhaps we should add a // test/Ice/router test?) // test(!base->ice_getRouter()); Ice::RouterPrx anotherRouter = Ice::RouterPrx::uncheckedCast(communicator->stringToProxy("anotherRouter")); base = base->ice_router(anotherRouter); test(Ice::proxyIdentityEqual(base->ice_getRouter(), anotherRouter)); Ice::RouterPrx router = Ice::RouterPrx::uncheckedCast(communicator->stringToProxy("dummyrouter")); communicator->setDefaultRouter(router); base = communicator->stringToProxy("test @ TestAdapter"); test(Ice::proxyIdentityEqual(base->ice_getRouter(), communicator->getDefaultRouter())); communicator->setDefaultRouter(0); base = communicator->stringToProxy("test @ TestAdapter"); test(!base->ice_getRouter()); cout << "ok" << endl; cout << "starting server... " << flush; manager->startServer(); cout << "ok" << endl; cout << "testing checked cast... " << flush; TestIntfPrx obj = TestIntfPrx::checkedCast(base); test(obj); TestIntfPrx obj2 = TestIntfPrx::checkedCast(base2); test(obj2); TestIntfPrx obj3 = TestIntfPrx::checkedCast(base3); test(obj3); ServerManagerPrx obj4 = ServerManagerPrx::checkedCast(base4); test(obj4); TestIntfPrx obj5 = TestIntfPrx::checkedCast(base5); test(obj5); TestIntfPrx obj6 = TestIntfPrx::checkedCast(base6); test(obj6); cout << "ok" << endl; cout << "testing id@AdapterId indirect proxy... " << flush; obj->shutdown(); manager->startServer(); try { obj2->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing id@ReplicaGroupId indirect proxy... " << flush; obj->shutdown(); manager->startServer(); try { obj6->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing identity indirect proxy... " << flush; obj->shutdown(); manager->startServer(); try { obj3->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } try { obj2->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } obj->shutdown(); manager->startServer(); try { obj2->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } try { obj3->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } obj->shutdown(); manager->startServer(); try { obj2->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } obj->shutdown(); manager->startServer(); try { obj3->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } obj->shutdown(); manager->startServer(); try { obj2->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } obj->shutdown(); manager->startServer(); try { obj5->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing proxy with unknown identity... " << flush; try { base = communicator->stringToProxy("unknown/unknown"); base->ice_ping(); test(false); } catch (const Ice::NotRegisteredException& ex) { test(ex.kindOfObject == "object"); test(ex.id == "unknown/unknown"); } cout << "ok" << endl; cout << "testing proxy with unknown adapter... " << flush; try { base = communicator->stringToProxy("test @ TestAdapterUnknown"); base->ice_ping(); test(false); } catch (const Ice::NotRegisteredException& ex) { test(ex.kindOfObject == "object adapter"); test(ex.id == "TestAdapterUnknown"); } cout << "ok" << endl; cout << "testing locator cache timeout... " << flush; int count = locator->getRequestCount(); communicator->stringToProxy("test@TestAdapter")->ice_locatorCacheTimeout(0)->ice_ping(); // No locator cache. test(++count == locator->getRequestCount()); communicator->stringToProxy("test@TestAdapter")->ice_locatorCacheTimeout(0)->ice_ping(); // No locator cache. test(++count == locator->getRequestCount()); communicator->stringToProxy("test@TestAdapter")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout. test(count == locator->getRequestCount()); IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1300)); communicator->stringToProxy("test@TestAdapter")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout. test(++count == locator->getRequestCount()); communicator->stringToProxy("test")->ice_locatorCacheTimeout(0)->ice_ping(); // No locator cache. count += 2; test(count == locator->getRequestCount()); communicator->stringToProxy("test")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout test(count == locator->getRequestCount()); IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1300)); communicator->stringToProxy("test")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout count += 2; test(count == locator->getRequestCount()); communicator->stringToProxy("test@TestAdapter")->ice_locatorCacheTimeout(-1)->ice_ping(); test(count == locator->getRequestCount()); communicator->stringToProxy("test")->ice_locatorCacheTimeout(-1)->ice_ping(); test(count == locator->getRequestCount()); communicator->stringToProxy("test@TestAdapter")->ice_ping(); test(count == locator->getRequestCount()); communicator->stringToProxy("test")->ice_ping(); test(count == locator->getRequestCount()); test(communicator->stringToProxy("test")->ice_locatorCacheTimeout(99)->ice_getLocatorCacheTimeout() == 99); cout << "ok" << endl; cout << "testing proxy from server... " << flush; obj = TestIntfPrx::checkedCast(communicator->stringToProxy("test@TestAdapter")); HelloPrx hello = obj->getHello(); test(hello->ice_getAdapterId() == "TestAdapter"); hello->sayHello(); hello = obj->getReplicatedHello(); test(hello->ice_getAdapterId() == "ReplicatedAdapter"); hello->sayHello(); cout << "ok" << endl; cout << "testing locator request queuing... " << flush; hello = obj->getReplicatedHello()->ice_locatorCacheTimeout(0)->ice_connectionCached(false); count = locator->getRequestCount(); hello->ice_ping(); test(++count == locator->getRequestCount()); int i; list<Ice::AsyncResultPtr> results; AMICallbackPtr cb = new AMICallback; for(i = 0; i < 1000; i++) { Ice::AsyncResultPtr result = hello->begin_sayHello( newCallback_Hello_sayHello(cb, &AMICallback::response1, &AMICallback::exception1)); results.push_back(result); } while(!results.empty()) { Ice::AsyncResultPtr result = results.front(); results.pop_front(); result->waitForCompleted(); } test(locator->getRequestCount() > count && locator->getRequestCount() < count + 999); if(locator->getRequestCount() > count + 800) { cout << "queuing = " << locator->getRequestCount() - count; } count = locator->getRequestCount(); hello = hello->ice_adapterId("unknown"); for(i = 0; i < 1000; i++) { Ice::AsyncResultPtr result = hello->begin_sayHello( newCallback_Hello_sayHello(cb, &AMICallback::response2, &AMICallback::exception2)); results.push_back(result); } while(!results.empty()) { Ice::AsyncResultPtr result = results.front(); results.pop_front(); result->waitForCompleted(); } // Take into account the retries. test(locator->getRequestCount() > count && locator->getRequestCount() < count + 1999); if(locator->getRequestCount() > count + 800) { cout << "queuing = " << locator->getRequestCount() - count; } cout << "ok" << endl; cout << "testing adapter locator cache... " << flush; try { communicator->stringToProxy("test@TestAdapter3")->ice_ping(); test(false); } catch(const Ice::NotRegisteredException& ex) { test(ex.kindOfObject == "object adapter"); test(ex.id == "TestAdapter3"); } registry->setAdapterDirectProxy("TestAdapter3", locator->findAdapterById("TestAdapter")); try { communicator->stringToProxy("test@TestAdapter3")->ice_ping(); registry->setAdapterDirectProxy("TestAdapter3", communicator->stringToProxy("dummy:tcp")); communicator->stringToProxy("test@TestAdapter3")->ice_ping(); } catch(const Ice::LocalException&) { test(false); } try { communicator->stringToProxy("test@TestAdapter3")->ice_locatorCacheTimeout(0)->ice_ping(); test(false); } catch(const Ice::LocalException&) { } try { communicator->stringToProxy("test@TestAdapter3")->ice_ping(); test(false); } catch(const Ice::LocalException&) { } registry->setAdapterDirectProxy("TestAdapter3", locator->findAdapterById("TestAdapter")); try { communicator->stringToProxy("test@TestAdapter3")->ice_ping(); } catch(const Ice::LocalException&) { test(false); } cout << "ok" <<endl; cout << "testing well-known object locator cache... " << flush; registry->addObject(communicator->stringToProxy("test3@TestUnknown")); try { communicator->stringToProxy("test3")->ice_ping(); test(false); } catch(const Ice::NotRegisteredException& ex) { test(ex.kindOfObject == "object adapter"); test(ex.id == "TestUnknown"); } registry->addObject(communicator->stringToProxy("test3@TestAdapter4")); // Update registry->setAdapterDirectProxy("TestAdapter4", communicator->stringToProxy("dummy:tcp")); try { communicator->stringToProxy("test3")->ice_ping(); test(false); } catch(const Ice::LocalException&) { } registry->setAdapterDirectProxy("TestAdapter4", locator->findAdapterById("TestAdapter")); try { communicator->stringToProxy("test3")->ice_ping(); } catch(const Ice::LocalException&) { test(false); } registry->setAdapterDirectProxy("TestAdapter4", communicator->stringToProxy("dummy:tcp")); try { communicator->stringToProxy("test3")->ice_ping(); } catch(const Ice::LocalException&) { test(false); } try { communicator->stringToProxy("test@TestAdapter4")->ice_locatorCacheTimeout(0)->ice_ping(); test(false); } catch(const Ice::LocalException&) { } try { communicator->stringToProxy("test@TestAdapter4")->ice_ping(); test(false); } catch(const Ice::LocalException&) { } try { communicator->stringToProxy("test3")->ice_ping(); test(false); } catch(const Ice::LocalException&) { } registry->addObject(communicator->stringToProxy("test3@TestAdapter")); try { communicator->stringToProxy("test3")->ice_ping(); } catch(const Ice::LocalException&) { test(false); } registry->addObject(communicator->stringToProxy("test4")); try { communicator->stringToProxy("test4")->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } cout << "ok" << endl; cout << "testing locator cache background updates... " << flush; { Ice::InitializationData initData; initData.properties = communicator->getProperties()->clone(); initData.properties->setProperty("Ice.BackgroundLocatorCacheUpdates", "1"); Ice::CommunicatorPtr ic = Ice::initialize(initData); registry->setAdapterDirectProxy("TestAdapter5", locator->findAdapterById("TestAdapter")); registry->addObject(communicator->stringToProxy("test3@TestAdapter")); int count = locator->getRequestCount(); ic->stringToProxy("test@TestAdapter5")->ice_locatorCacheTimeout(0)->ice_ping(); // No locator cache. ic->stringToProxy("test3")->ice_locatorCacheTimeout(0)->ice_ping(); // No locator cache. count += 3; test(count == locator->getRequestCount()); registry->setAdapterDirectProxy("TestAdapter5", 0); registry->addObject(communicator->stringToProxy("test3:tcp")); ic->stringToProxy("test@TestAdapter5")->ice_locatorCacheTimeout(10)->ice_ping(); // 10s timeout. ic->stringToProxy("test3")->ice_locatorCacheTimeout(10)->ice_ping(); // 10s timeout. test(count == locator->getRequestCount()); IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1200)); // The following request should trigger the background updates but still use the cached endpoints // and therefore succeed. ic->stringToProxy("test@TestAdapter5")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout. ic->stringToProxy("test3")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout. try { while(true) { ic->stringToProxy("test@TestAdapter5")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout. IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(10)); } } catch(const Ice::LocalException&) { // Expected to fail once they endpoints have been updated in the background. } try { while(true) { ic->stringToProxy("test3")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout. IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(10)); } } catch(const Ice::LocalException&) { // Expected to fail once they endpoints have been updated in the background. } ic->destroy(); } cout << "ok" << endl; cout << "testing proxy from server after shutdown... " << flush; hello = obj->getReplicatedHello(); obj->shutdown(); manager->startServer(); hello->sayHello(); cout << "ok" << endl; cout << "testing object migration... " << flush; hello = HelloPrx::checkedCast(communicator->stringToProxy("hello")); obj->migrateHello(); // TODO: enable after fixing ICE-5489 //hello->ice_getConnection()->close(false); hello->sayHello(); obj->migrateHello(); hello->sayHello(); obj->migrateHello(); hello->sayHello(); cout << "ok" << endl; cout << "testing locator encoding resolution... " << flush; hello = HelloPrx::checkedCast(communicator->stringToProxy("hello")); count = locator->getRequestCount(); communicator->stringToProxy("test@TestAdapter")->ice_encodingVersion(Ice::Encoding_1_1)->ice_ping(); test(count == locator->getRequestCount()); communicator->stringToProxy("test@TestAdapter10")->ice_encodingVersion(Ice::Encoding_1_0)->ice_ping(); test(++count == locator->getRequestCount()); communicator->stringToProxy("test -e 1.0@TestAdapter10-2")->ice_ping(); test(++count == locator->getRequestCount()); cout << "ok" << endl; cout << "shutdown server... " << flush; obj->shutdown(); cout << "ok" << endl; cout << "testing whether server is gone... " << flush; try { obj2->ice_ping(); test(false); } catch(const Ice::LocalException&) { } try { obj3->ice_ping(); test(false); } catch(const Ice::LocalException&) { } try { obj5->ice_ping(); test(false); } catch(const Ice::LocalException&) { } cout << "ok" << endl; cout << "testing indirect proxies to collocated objects... " << flush; // // Set up test for calling a collocated object through an indirect, adapterless reference. // Ice::PropertiesPtr properties = communicator->getProperties(); properties->setProperty("Ice.PrintAdapterReady", "0"); Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapterWithEndpoints("Hello", "default"); adapter->setLocator(locator); Ice::Identity id; id.name = IceUtil::generateUUID(); registry->addObject(adapter->add(new HelloI, id)); adapter->activate(); try { HelloPrx helloPrx = HelloPrx::checkedCast(communicator->stringToProxy(communicator->identityToString(id))); Ice::ConnectionPtr connection = helloPrx->ice_getConnection(); test(false); } catch(const Ice::CollocationOptimizationException&) { } adapter->deactivate(); cout << "ok" << endl; cout << "shutdown server manager... " << flush; manager->shutdown(); cout << "ok" << endl; }
void allTests(const Ice::CommunicatorPtr& communicator) { cout << "testing stringToProxy... " << flush; Ice::ObjectPrx base = communicator->stringToProxy("test @ TestAdapter"); test(base); cout << "ok" << endl; cout << "testing IceGrid.Locator is present... " << flush; IceGrid::LocatorPrx locator = IceGrid::LocatorPrx::uncheckedCast(base); test(locator); cout << "ok" << endl; cout << "testing checked cast... " << flush; TestIntfPrx obj = TestIntfPrx::checkedCast(base); test(obj); test(obj == base); cout << "ok" << endl; cout << "pinging server... " << flush; obj->ice_ping(); cout << "ok" << endl; cout << "testing locator finder... " << flush; Ice::Identity finderId; finderId.category = "Ice"; finderId.name = "LocatorFinder"; Ice::LocatorFinderPrx finder = Ice::LocatorFinderPrx::checkedCast( communicator->getDefaultLocator()->ice_identity(finderId)); test(finder->getLocator()); cout << "ok" << endl; cout << "testing discovery... " << flush; { // Add test well-known object IceGrid::RegistryPrx registry = IceGrid::RegistryPrx::checkedCast( communicator->stringToProxy(communicator->getDefaultLocator()->ice_getIdentity().category + "/Registry")); test(registry); IceGrid::AdminSessionPrx session = registry->createAdminSession("foo", "bar"); session->getAdmin()->addObjectWithType(base, "::Test"); session->destroy(); // // Ensure the IceGrid discovery locator can discover the // registries and make sure locator requests are forwarded. // Ice::InitializationData initData; initData.properties = communicator->getProperties()->clone(); initData.properties->setProperty("Ice.Default.Locator", ""); initData.properties->setProperty("Ice.Plugin.IceLocatorDiscovery", "IceLocatorDiscovery:createIceLocatorDiscovery"); #ifdef __APPLE__ if(initData.properties->getPropertyAsInt("Ice.PreferIPv6Address") > 0) { initData.properties->setProperty("IceLocatorDiscovery.Interface", "::1"); } #endif initData.properties->setProperty("AdapterForDiscoveryTest.AdapterId", "discoveryAdapter"); initData.properties->setProperty("AdapterForDiscoveryTest.Endpoints", "default"); Ice::CommunicatorPtr com = Ice::initialize(initData); test(com->getDefaultLocator()); com->stringToProxy("test @ TestAdapter")->ice_ping(); com->stringToProxy("test")->ice_ping(); test(com->getDefaultLocator()->getRegistry()); test(IceGrid::LocatorPrx::checkedCast(com->getDefaultLocator())); test(IceGrid::LocatorPrx::uncheckedCast(com->getDefaultLocator())->getLocalRegistry()); test(IceGrid::LocatorPrx::uncheckedCast(com->getDefaultLocator())->getLocalQuery()); Ice::ObjectAdapterPtr adapter = com->createObjectAdapter("AdapterForDiscoveryTest"); adapter->activate(); adapter->deactivate(); com->destroy(); // // Now, ensure that the IceGrid discovery locator correctly // handles failure to find a locator. Also test // Ice::registerIceLocatorDiscovery() // Ice::registerIceLocatorDiscovery(); initData.properties->setProperty("Ice.Plugin.IceLocatorDiscovery", ""); initData.properties->setProperty("IceLocatorDiscovery.InstanceName", "unknown"); initData.properties->setProperty("IceLocatorDiscovery.RetryCount", "1"); initData.properties->setProperty("IceLocatorDiscovery.Timeout", "100"); com = Ice::initialize(initData); test(com->getDefaultLocator()); try { com->stringToProxy("test @ TestAdapter")->ice_ping(); } catch(const Ice::NoEndpointException&) { } try { com->stringToProxy("test")->ice_ping(); } catch(const Ice::NoEndpointException&) { } test(!com->getDefaultLocator()->getRegistry()); test(!IceGrid::LocatorPrx::checkedCast(com->getDefaultLocator())); try { test(IceGrid::LocatorPrx::uncheckedCast(com->getDefaultLocator())->getLocalQuery()); } catch(const Ice::OperationNotExistException&) { } adapter = com->createObjectAdapter("AdapterForDiscoveryTest"); adapter->activate(); adapter->deactivate(); com->destroy(); } cout << "ok" << endl; cout << "shutting down server... " << flush; obj->shutdown(); cout << "ok" << endl; }
void allTests(const CommunicatorPtr& communicator, int num) { vector<ControllerPrx> proxies; vector<ControllerPrx> indirectProxies; for(int i = 0; i < num; ++i) { { ostringstream os; os << "controller" << i; proxies.push_back(ControllerPrx::uncheckedCast(communicator->stringToProxy(os.str()))); } { ostringstream os; os << "controller" << i << "@control" << i; indirectProxies.push_back(ControllerPrx::uncheckedCast(communicator->stringToProxy(os.str()))); } } cout << "testing indirect proxies... " << flush; { for(vector<ControllerPrx>::const_iterator p = indirectProxies.begin(); p != indirectProxies.end(); ++p) { (*p)->ice_ping(); } } cout << "ok" << endl; cout << "testing well-known proxies... " << flush; { for(vector<ControllerPrx>::const_iterator p = proxies.begin(); p != proxies.end(); ++p) { (*p)->ice_ping(); } } cout << "ok" << endl; cout << "testing object adapter registration... " << flush; { try { communicator->stringToProxy("object @ oa1")->ice_ping(); } catch(const Ice::NoEndpointException&) { } proxies[0]->activateObjectAdapter("oa", "oa1", ""); try { communicator->stringToProxy("object @ oa1")->ice_ping(); } catch(const Ice::ObjectNotExistException&) { } proxies[0]->deactivateObjectAdapter("oa"); try { communicator->stringToProxy("object @ oa1")->ice_ping(); } catch(const Ice::NoEndpointException&) { } } cout << "ok" << endl; cout << "testing object adapter migration..." << flush; { proxies[0]->activateObjectAdapter("oa", "oa1", ""); proxies[0]->addObject("oa", "object"); communicator->stringToProxy("object @ oa1")->ice_ping(); proxies[0]->removeObject("oa", "object"); proxies[0]->deactivateObjectAdapter("oa"); proxies[1]->activateObjectAdapter("oa", "oa1", ""); proxies[1]->addObject("oa", "object"); communicator->stringToProxy("object @ oa1")->ice_ping(); proxies[1]->removeObject("oa", "object"); proxies[1]->deactivateObjectAdapter("oa"); } cout << "ok" << endl; cout << "testing object migration..." << flush; { proxies[0]->activateObjectAdapter("oa", "oa1", ""); proxies[1]->activateObjectAdapter("oa", "oa2", ""); proxies[0]->addObject("oa", "object"); communicator->stringToProxy("object @ oa1")->ice_ping(); communicator->stringToProxy("object")->ice_ping(); proxies[0]->removeObject("oa", "object"); proxies[1]->addObject("oa", "object"); communicator->stringToProxy("object @ oa2")->ice_ping(); communicator->stringToProxy("object")->ice_ping(); proxies[1]->removeObject("oa", "object"); try { communicator->stringToProxy("object @ oa1")->ice_ping(); } catch(const Ice::ObjectNotExistException&) { } try { communicator->stringToProxy("object @ oa2")->ice_ping(); } catch(const Ice::ObjectNotExistException&) { } proxies[0]->deactivateObjectAdapter("oa"); proxies[1]->deactivateObjectAdapter("oa"); } cout << "ok" << endl; cout << "testing replica groups..." << flush; { proxies[0]->activateObjectAdapter("oa", "oa1", "rg"); proxies[1]->activateObjectAdapter("oa", "oa2", "rg"); proxies[2]->activateObjectAdapter("oa", "oa3", "rg"); proxies[0]->addObject("oa", "object"); proxies[1]->addObject("oa", "object"); proxies[2]->addObject("oa", "object"); communicator->stringToProxy("object @ oa1")->ice_ping(); communicator->stringToProxy("object @ oa2")->ice_ping(); communicator->stringToProxy("object @ oa3")->ice_ping(); communicator->stringToProxy("object @ rg")->ice_ping(); set<string> adapterIds; adapterIds.insert("oa1"); adapterIds.insert("oa2"); adapterIds.insert("oa3"); TestIntfPrx intf = TestIntfPrx::uncheckedCast(communicator->stringToProxy("object")); intf = intf->ice_connectionCached(false)->ice_locatorCacheTimeout(0); while(!adapterIds.empty()) { adapterIds.erase(intf->getAdapterId()); } while(true) { adapterIds.insert("oa1"); adapterIds.insert("oa2"); adapterIds.insert("oa3"); intf = TestIntfPrx::uncheckedCast(communicator->stringToProxy("object @ rg"))->ice_connectionCached(false); int nRetry = 100; while(!adapterIds.empty() && --nRetry > 0) { adapterIds.erase(intf->getAdapterId()); } if(nRetry > 0) { break; } // The previous locator lookup probably didn't return all the replicas... try again. communicator->stringToProxy("object @ rg")->ice_locatorCacheTimeout(0)->ice_ping(); } proxies[0]->deactivateObjectAdapter("oa"); proxies[1]->deactivateObjectAdapter("oa"); test(TestIntfPrx::uncheckedCast(communicator->stringToProxy("object @ rg"))->getAdapterId() == "oa3"); proxies[2]->deactivateObjectAdapter("oa"); proxies[0]->activateObjectAdapter("oa", "oa1", "rg"); proxies[0]->addObject("oa", "object"); test(TestIntfPrx::uncheckedCast(communicator->stringToProxy("object @ rg"))->getAdapterId() == "oa1"); proxies[0]->deactivateObjectAdapter("oa"); } cout << "ok" << endl; cout << "shutting down... " << flush; for(vector<ControllerPrx>::const_iterator p = proxies.begin(); p != proxies.end(); ++p) { (*p)->shutdown(); } cout << "ok" << endl; }
void allTests(const Ice::CommunicatorPtr& communicator) { IceGrid::RegistryPrx registry = IceGrid::RegistryPrx::checkedCast( communicator->stringToProxy(communicator->getDefaultLocator()->ice_getIdentity().category + "/Registry")); test(registry); IceGrid::AdminSessionPrx session = registry->createAdminSession("foo", "bar"); session->ice_getConnection()->setACM(registry->getACMTimeout(), IceUtil::None, Ice::HeartbeatAlways); IceGrid::AdminPrx admin = session->getAdmin(); test(admin); admin->startServer("node-1"); admin->startServer("node-2"); int nRetry = 0; while(!admin->pingNode("node-1") && nRetry < 15) { IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(200)); ++nRetry; } nRetry = 0; while(!admin->pingNode("node-2") && nRetry < 15) { IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(200)); ++nRetry; } cout << "testing on-demand activation... " << flush; try { test(admin->getServerState("server") == IceGrid::Inactive); TestIntfPrx obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server")); waitForServerState(admin, "server", IceGrid::Active); obj->shutdown(); waitForServerState(admin, "server", IceGrid::Inactive); nRetry = 4; while(--nRetry > 0) { obj->shutdown(); } waitForServerState(admin, "server", IceGrid::Inactive); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing manual activation... " << flush; try { test(admin->getServerState("server-manual") == IceGrid::Inactive); TestIntfPrx obj; try { obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server-manual")); test(false); } catch(const Ice::NoEndpointException&) { } test(admin->getServerState("server-manual") == IceGrid::Inactive); admin->startServer("server-manual"); test(admin->getServerState("server-manual") == IceGrid::Active); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server-manual")); test(admin->getServerState("server-manual") == IceGrid::Active); obj->shutdown(); waitForServerState(admin, "server-manual", IceGrid::Inactive); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing always activation... " << flush; try { waitForServerState(admin, "server-always", IceGrid::Active); TestIntfPrx obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server-always")); admin->stopServer("server-always"); waitForServerState(admin, "server-always", IceGrid::Active); obj->shutdown(); waitForServerState(admin, "server-always", IceGrid::Active); nRetry = 4; while(--nRetry > 0) { obj->shutdown(); } waitForServerState(admin, "server-always", IceGrid::Active); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing session activation... " << flush; try { IceGrid::SessionPrx session = registry->createSession("test", ""); test(admin->getServerState("server-session") == IceGrid::Inactive); TestIntfPrx obj = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-session")); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } session->allocateObjectById(obj->ice_getIdentity()); obj->ice_ping(); waitForServerState(admin, "server-session", IceGrid::Active); obj->shutdown(); waitForServerState(admin, "server-session", IceGrid::Inactive); obj->ice_ping(); waitForServerState(admin, "server-session", IceGrid::Active); nRetry = 4; while(--nRetry > 0) { obj->shutdown(); } obj->ice_ping(); waitForServerState(admin, "server-session", IceGrid::Active); session->releaseObject(obj->ice_getIdentity()); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } waitForServerState(admin, "server-session", IceGrid::Inactive); session->allocateObjectById(obj->ice_getIdentity()); obj->ice_ping(); waitForServerState(admin, "server-session", IceGrid::Active); session->destroy(); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } waitForServerState(admin, "server-session", IceGrid::Inactive); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing server disable... " << flush; try { test(admin->getServerState("server") == IceGrid::Inactive); admin->enableServer("server", false); try { communicator->stringToProxy("server")->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } try { admin->startServer("server"); test(false); } catch(const IceGrid::ServerStartException&) { } test(admin->getServerState("server") == IceGrid::Inactive); test(admin->getServerState("server-manual") == IceGrid::Inactive); admin->enableServer("server-manual", false); try { communicator->stringToProxy("server-manual")->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } try { admin->startServer("server-manual"); test(false); } catch(const IceGrid::ServerStartException&) { } test(admin->getServerState("server-manual") == IceGrid::Inactive); test(admin->getServerState("server-always") == IceGrid::Active); admin->enableServer("server-always", false); admin->stopServer("server-always"); test(admin->getServerState("server-always") == IceGrid::Inactive); try { communicator->stringToProxy("server-always")->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } try { admin->startServer("server-always"); test(false); } catch(const IceGrid::ServerStartException&) { } test(admin->getServerState("server-always") == IceGrid::Inactive); test(admin->getServerState("server") == IceGrid::Inactive); admin->enableServer("server", true); communicator->stringToProxy("server")->ice_locatorCacheTimeout(0)->ice_ping(); int pid = admin->getServerPid("server"); admin->enableServer("server", false); test(admin->getServerState("server") == IceGrid::Active); try { communicator->stringToProxy("server")->ice_locatorCacheTimeout(0)->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } admin->enableServer("server", true); communicator->stringToProxy("server")->ice_locatorCacheTimeout(0)->ice_ping(); test(admin->getServerPid("server") == pid); admin->stopServer("server"); test(admin->getServerState("server") == IceGrid::Inactive); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing server enable... " << flush; try { test(admin->getServerState("server") == IceGrid::Inactive); admin->enableServer("server", true); communicator->stringToProxy("server")->ice_ping(); admin->stopServer("server"); test(admin->getServerState("server") == IceGrid::Inactive); admin->startServer("server"); test(admin->getServerState("server") == IceGrid::Active); admin->stopServer("server"); test(admin->getServerState("server") == IceGrid::Inactive); test(admin->getServerState("server-manual") == IceGrid::Inactive); admin->enableServer("server-manual", true); try { communicator->stringToProxy("server-manual")->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } test(admin->getServerState("server-manual") == IceGrid::Inactive); admin->startServer("server-manual"); test(admin->getServerState("server-manual") == IceGrid::Active); admin->stopServer("server-manual"); test(admin->getServerState("server-manual") == IceGrid::Inactive); test(admin->getServerState("server-always") == IceGrid::Inactive); admin->enableServer("server-always", true); waitForServerState(admin, "server-always", IceGrid::Active); admin->stopServer("server-always"); try { admin->startServer("server-always"); // test(false); } catch(const IceGrid::ServerStartException&) { } test(admin->getServerState("server-always") == IceGrid::Active); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing activation failure... " << flush; try { int i; const int nThreads = 3; Ice::ObjectPrx invalid = communicator->stringToProxy("invalid-exe"); vector<PingThreadPtr> threads; threads.reserve(nThreads); vector<PingThreadPtr>::const_iterator p; for(i = 0; i < nThreads; i++) { threads.push_back(new PingThread(invalid, 10)); } for(p = threads.begin(); p != threads.end(); ++p) { (*p)->start(); } for(p = threads.begin(); p != threads.end(); ++p) { IceUtil::UniquePtr<Ice::LocalException> ex((*p)->waitUntilFinished()); test(dynamic_cast<Ice::NoEndpointException*>(ex.get())); } threads.resize(0); invalid = communicator->stringToProxy("invalid-pwd"); for(i = 0; i < nThreads; i++) { threads.push_back(new PingThread(invalid, 10)); } for(p = threads.begin(); p != threads.end(); ++p) { (*p)->start(); } for(p = threads.begin(); p != threads.end(); ++p) { IceUtil::UniquePtr<Ice::LocalException> ex((*p)->waitUntilFinished()); test(dynamic_cast<Ice::NoEndpointException*>(ex.get())); } threads.resize(0); invalid = communicator->stringToProxy("fail-on-startup"); for(i = 0; i < nThreads; i++) { threads.push_back(new PingThread(invalid, 5)); } for(p = threads.begin(); p != threads.end(); ++p) { (*p)->start(); } for(p = threads.begin(); p != threads.end(); ++p) { IceUtil::UniquePtr<Ice::LocalException> ex((*p)->waitUntilFinished()); test(dynamic_cast<Ice::NoEndpointException*>(ex.get())); } threads.resize(0); try { admin->startServer("invalid-pwd-no-oa"); test(false); } catch(const IceGrid::ServerStartException& ex) { test(!ex.reason.empty()); } try { admin->startServer("invalid-exe-no-oa"); test(false); } catch(const IceGrid::ServerStartException& ex) { test(!ex.reason.empty()); } } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing activation timeout... " << flush; try { test(admin->getServerState("server-activation-timeout") == IceGrid::Inactive); const int nThreads = 5; Ice::ObjectPrx proxy = communicator->stringToProxy("server-activation-timeout"); vector<PingThreadPtr> threads; threads.reserve(nThreads); vector<PingThreadPtr>::const_iterator p; int i; for(i = 0; i < nThreads; i++) { threads.push_back(new PingThread(proxy, 1)); } for(p = threads.begin(); p != threads.end(); ++p) { (*p)->start(); } for(p = threads.begin(); p != threads.end(); ++p) { IceUtil::UniquePtr<Ice::LocalException> ex((*p)->waitUntilFinished()); test(dynamic_cast<Ice::NoEndpointException*>(ex.get())); } admin->stopServer("server-activation-timeout"); } catch(const IceGrid::ServerStopException& ex) { cerr << ex << ": " << ex.reason << endl; test(false); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing deactivation timeout... " << flush; try { test(admin->getServerState("server-deactivation-timeout") == IceGrid::Inactive); communicator->stringToProxy("server-deactivation-timeout")->ice_ping(); admin->stopServer("server-deactivation-timeout"); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing permanent disable on failure... " << flush; try { test(admin->getServerState("server1") == IceGrid::Inactive); TestIntfPrx obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server1")); waitForServerState(admin, "server1", IceGrid::Active); obj->fail(); waitForServerState(admin, "server1", IceGrid::Inactive); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } test(!admin->isServerEnabled("server1")); test(admin->getServerState("server1-manual") == IceGrid::Inactive); admin->startServer("server1-manual"); test(admin->getServerState("server1-manual") == IceGrid::Active); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server1-manual")); test(admin->getServerState("server1-manual") == IceGrid::Active); obj->fail(); waitForServerState(admin, "server1-manual", IceGrid::Inactive); test(!admin->isServerEnabled("server1-manual")); test(admin->getServerState("server1-always") == IceGrid::Active); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server1-always")); obj->fail(); waitForServerState(admin, "server1-always", IceGrid::Inactive); test(!admin->isServerEnabled("server1-always")); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing temporary disable on failure... " << flush; try { test(admin->getServerState("server2") == IceGrid::Inactive); TestIntfPrx obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server2")); waitForServerState(admin, "server2", IceGrid::Active); obj->fail(); waitForServerState(admin, "server2", IceGrid::Inactive); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } test(!admin->isServerEnabled("server2")); nRetry = 0; while(!admin->isServerEnabled("server2") && nRetry < 15) { IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(500)); ++nRetry; try { obj->ice_ping(); } catch(const Ice::NoEndpointException&) { } } test(admin->isServerEnabled("server2")); waitForServerState(admin, "server2", IceGrid::Active); obj->ice_ping(); admin->stopServer("server2"); test(admin->getServerState("server2-manual") == IceGrid::Inactive); admin->startServer("server2-manual"); test(admin->getServerState("server2-manual") == IceGrid::Active); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server2-manual")); obj->fail(); waitForServerState(admin, "server2-manual", IceGrid::Inactive); test(!admin->isServerEnabled("server2-manual")); admin->startServer("server2-manual"); test(admin->isServerEnabled("server2-manual")); test(admin->getServerState("server2-manual") == IceGrid::Active); admin->stopServer("server2-manual"); test(admin->getServerState("server2-always") == IceGrid::Active); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server2-always")); obj->fail(); waitForServerState(admin, "server2-always", IceGrid::Inactive); test(!admin->isServerEnabled("server2-always")); nRetry = 0; while((!admin->isServerEnabled("server2-always") || admin->getServerState("server2-always") != IceGrid::Active) && nRetry < 15) { IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(500)); ++nRetry; } test(admin->isServerEnabled("server2-always") && admin->getServerState("server2-always") == IceGrid::Active); obj->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing large number of servers... " << flush; { IceGrid::ApplicationInfo info = admin->getApplicationInfo("Test"); IceGrid::ApplicationDescriptor testApp; testApp.name = "TestApp"; testApp.serverTemplates = info.descriptor.serverTemplates; testApp.variables = info.descriptor.variables; const int nServers = 75; for(int i = 0; i < nServers; ++i) { ostringstream id; id << "server-" << i; IceGrid::ServerInstanceDescriptor server; server._cpp_template = "Server"; server.parameterValues["id"] = id.str(); testApp.nodes["localnode"].serverInstances.push_back(server); } try { admin->addApplication(testApp); } catch(const IceGrid::DeploymentException& ex) { cerr << ex.reason << endl; test(false); } for(int i = 0; i < nServers; ++i) { ostringstream id; id << "server-" << i; admin->startServer(id.str()); } for(int i = 0; i < nServers; ++i) { ostringstream id; id << "server-" << i; admin->stopServer(id.str()); } admin->removeApplication("TestApp"); } cout << "ok" << endl; admin->stopServer("node-1"); admin->stopServer("node-2"); session->destroy(); }
void allTests(const CommunicatorPtr& communicator) { communicator->getProperties()->setProperty("ReplyAdapter.Endpoints", "udp -p 12030"); Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapter("ReplyAdapter"); PingReplyIPtr replyI = new PingReplyI; PingReplyPrx reply = PingReplyPrx::uncheckedCast(adapter->addWithUUID(replyI))->ice_datagram(); adapter->activate(); cout << "testing udp... " << flush; ObjectPrx base = communicator->stringToProxy("test -d:udp -p 12010"); TestIntfPrx obj = TestIntfPrx::uncheckedCast(base); int nRetry = 5; bool ret; while(nRetry-- > 0) { replyI->reset(); obj->ping(reply); obj->ping(reply); obj->ping(reply); ret = replyI->waitReply(3, IceUtil::Time::seconds(2)); if(ret) { break; // Success } // If the 3 datagrams were not received within the 2 seconds, we try again to // receive 3 new datagrams using a new object. We give up after 5 retries. replyI = new PingReplyI; reply = PingReplyPrx::uncheckedCast(adapter->addWithUUID(replyI))->ice_datagram(); } test(ret); if(communicator->getProperties()->getPropertyAsInt("Ice.Override.Compress") == 0) { // // Only run this test if compression is disabled, the test expect fixed message size // to be sent over the wire. // Test::ByteSeq seq; try { seq.resize(1024); while(true) { seq.resize(seq.size() * 2 + 10); replyI->reset(); obj->sendByteSeq(seq, reply); replyI->waitReply(1, IceUtil::Time::seconds(10)); } } catch(const DatagramLimitException&) { test(seq.size() > 16384); } obj->ice_getConnection()->close(false); communicator->getProperties()->setProperty("Ice.UDP.SndSize", "64000"); seq.resize(50000); try { replyI->reset(); obj->sendByteSeq(seq, reply); test(!replyI->waitReply(1, IceUtil::Time::milliSeconds(500))); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } } cout << "ok" << endl; string endpoint; if(communicator->getProperties()->getProperty("Ice.IPv6") == "1") { #ifdef __APPLE__ endpoint = "udp -h \"ff15::1:1\" -p 12020 --interface \"::1\""; #else endpoint = "udp -h \"ff15::1:1\" -p 12020"; #endif } else { endpoint = "udp -h 239.255.1.1 -p 12020"; } base = communicator->stringToProxy("test -d:" + endpoint); TestIntfPrx objMcast = TestIntfPrx::uncheckedCast(base); #if !defined(ICE_OS_WINRT) && (!defined(__APPLE__) || (defined(__APPLE__) && !TARGET_OS_IPHONE)) cout << "testing udp multicast... " << flush; nRetry = 5; while(nRetry-- > 0) { replyI->reset(); objMcast->ping(reply); ret = replyI->waitReply(5, IceUtil::Time::seconds(2)); if(ret) { break; // Success } replyI = new PingReplyI; reply = PingReplyPrx::uncheckedCast(adapter->addWithUUID(replyI))->ice_datagram(); } if(!ret) { cout << "failed (is a firewall enabled?)" << endl; } else { cout << "ok" << endl; } #endif cout << "testing udp bi-dir connection... " << flush; obj->ice_getConnection()->setAdapter(adapter); objMcast->ice_getConnection()->setAdapter(adapter); nRetry = 5; while(nRetry-- > 0) { replyI->reset(); obj->pingBiDir(reply->ice_getIdentity()); obj->pingBiDir(reply->ice_getIdentity()); obj->pingBiDir(reply->ice_getIdentity()); ret = replyI->waitReply(3, IceUtil::Time::seconds(2)); if(ret) { break; // Success } // If the 3 datagrams were not received within the 2 seconds, we try again to // receive 3 new datagrams using a new object. We give up after 5 retries. replyI = new PingReplyI; reply = PingReplyPrx::uncheckedCast(adapter->addWithUUID(replyI))->ice_datagram(); } test(ret); cout << "ok" << endl; // // Sending the replies back on the multicast UDP connection doesn't work for most // platform (it works for OS X Leopard but not Snow Leopard, doesn't work on SLES, // Windows...). For Windows, see UdpTransceiver constructor for the details. So // we don't run this test. // // cout << "testing udp bi-dir connection... " << flush; // nRetry = 5; // while(nRetry-- > 0) // { // replyI->reset(); // objMcast->pingBiDir(reply->ice_getIdentity()); // ret = replyI->waitReply(5, IceUtil::Time::seconds(2)); // if(ret) // { // break; // Success // } // replyI = new PingReplyI; // reply = PingReplyPrx::uncheckedCast(adapter->addWithUUID(replyI))->ice_datagram(); // } // if(!ret) // { // cout << "failed (is a firewall enabled?)" << endl; // } // else // { // cout << "ok" << endl; // } }
void allTests(const Ice::CommunicatorPtr& communicator) { RegistryPrx registry = IceGrid::RegistryPrx::checkedCast(communicator->stringToProxy("IceGrid/Registry")); test(registry); AdminSessionPrx session = registry->createAdminSession("foo", "bar"); SessionKeepAliveThreadPtr keepAlive = new SessionKeepAliveThread(session, registry->getSessionTimeout()/2); keepAlive->start(); AdminPrx admin = session->getAdmin(); test(admin); cout << "testing distributions... " << flush; { admin->startServer("Test.IcePatch2"); admin->startServer("IcePatch2-Direct"); TestIntfPrx test; test = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-all")); test(test->getServerFile("rootfile") == ""); try { admin->patchServer("server-all", true); } catch(const PatchException& ex) { copy(ex.reasons.begin(), ex.reasons.end(), ostream_iterator<string>(cerr, "\n")); test(false); } test(test->getServerFile("rootfile") == "rootfile"); test(test->getServerFile("dir1/file1") == "dummy-file1"); test(test->getServerFile("dir1/file2") == "dummy-file2"); test(test->getServerFile("dir2/file3") == "dummy-file3"); test(test->getApplicationFile("rootfile") == ""); test(test->getApplicationFile("dir1/file1") == ""); test(test->getApplicationFile("dir1/file2") == ""); test(test->getApplicationFile("dir2/file3") == "dummy-file3"); test = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-all-direct")); test(test->getServerFile("rootfile") == ""); test(test->getServerFile("dir1/file1") == ""); test(test->getServerFile("dir1/file2") == ""); test(test->getServerFile("dir2/file3") == ""); test(test->getApplicationFile("rootfile") == ""); test(test->getApplicationFile("dir1/file1") == ""); test(test->getApplicationFile("dir1/file2") == ""); test(test->getApplicationFile("dir2/file3") == "dummy-file3"); try { admin->patchServer("server-all-direct", true); } catch(const PatchException& ex) { copy(ex.reasons.begin(), ex.reasons.end(), ostream_iterator<string>(cerr, "\n")); test(false); } test(test->getServerFile("rootfile") == "rootfile"); test(test->getServerFile("dir1/file1") == "dummy-file1"); test(test->getServerFile("dir1/file2") == "dummy-file2"); test(test->getServerFile("dir2/file3") == "dummy-file3"); test(test->getApplicationFile("rootfile") == ""); test(test->getApplicationFile("dir1/file1") == ""); test(test->getApplicationFile("dir1/file2") == ""); test(test->getApplicationFile("dir2/file3") == "dummy-file3"); try { admin->patchApplication("Test", true); } catch(const PatchException& ex) { copy(ex.reasons.begin(), ex.reasons.end(), ostream_iterator<string>(cerr, "\n")); test(false); } test = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-dir1")); test(test->getServerFile("rootfile") == ""); test(test->getServerFile("dir1/file1") == "dummy-file1"); test(test->getServerFile("dir1/file2") == "dummy-file2"); test(test->getServerFile("dir2/file3") == ""); test(test->getApplicationFile("rootfile") == ""); test(test->getApplicationFile("dir1/file1") == ""); test(test->getApplicationFile("dir1/file2") == ""); test(test->getApplicationFile("dir2/file3") == "dummy-file3"); admin->stopServer("Test.IcePatch2"); admin->stopServer("IcePatch2-Direct"); } cout << "ok" << endl; cout << "testing distributions after update... " << flush; { ApplicationUpdateDescriptor update; update.name = "Test"; update.variables["icepatch.directory"] = "${test.dir}/data/updated"; admin->updateApplication(update); admin->startServer("Test.IcePatch2"); admin->startServer("IcePatch2-Direct"); TestIntfPrx test; test = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-all")); test(test->getServerFile("rootfile") == "rootfile"); try { admin->patchServer("server-all", true); } catch(const PatchException& ex) { copy(ex.reasons.begin(), ex.reasons.end(), ostream_iterator<string>(cerr, "\n")); test(false); } test(test->getServerFile("rootfile") == "rootfile-updated!"); test(test->getServerFile("dir1/file1") == ""); test(test->getServerFile("dir1/file2") == "dummy-file2-updated!"); test(test->getServerFile("dir2/file3") == "dummy-file3"); test(test->getServerFile("dir2/file4") == "dummy-file4"); test(test->getApplicationFile("rootfile") == ""); test(test->getApplicationFile("dir1/file1") == ""); test(test->getApplicationFile("dir1/file2") == ""); test(test->getApplicationFile("dir2/file3") == "dummy-file3"); test(test->getApplicationFile("dir2/file4") == "dummy-file4"); try { admin->patchServer("server-all-direct", true); } catch(const PatchException& ex) { copy(ex.reasons.begin(), ex.reasons.end(), ostream_iterator<string>(cerr, "\n")); test(false); } test = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-all-direct")); test(test->getServerFile("rootfile") == "rootfile-updated!"); test(test->getServerFile("dir1/file1") == ""); test(test->getServerFile("dir1/file2") == "dummy-file2-updated!"); test(test->getServerFile("dir2/file3") == "dummy-file3"); test(test->getServerFile("dir2/file4") == "dummy-file4"); test(test->getApplicationFile("rootfile") == ""); test(test->getApplicationFile("dir1/file1") == ""); test(test->getApplicationFile("dir1/file2") == ""); test(test->getApplicationFile("dir2/file3") == "dummy-file3"); test(test->getApplicationFile("dir2/file4") == "dummy-file4"); try { admin->patchApplication("Test", true); } catch(const PatchException& ex) { copy(ex.reasons.begin(), ex.reasons.end(), ostream_iterator<string>(cerr, "\n")); test(false); } test = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-dir1")); test(test->getServerFile("rootfile") == ""); test(test->getServerFile("dir1/file1") == ""); test(test->getServerFile("dir1/file2") == "dummy-file2-updated!"); test(test->getServerFile("dir2/file3") == ""); test(test->getServerFile("dir2/file4") == ""); test(test->getApplicationFile("rootfile") == ""); test(test->getApplicationFile("dir1/file1") == ""); test(test->getApplicationFile("dir1/file2") == ""); test(test->getApplicationFile("dir2/file3") == "dummy-file3"); test(test->getApplicationFile("dir2/file4") == "dummy-file4"); admin->stopServer("Test.IcePatch2"); admin->stopServer("IcePatch2-Direct"); } cout << "ok" << endl; cout << "testing application distrib configuration... " << flush; try { ApplicationDescriptor app = admin->getApplicationInfo("Test").descriptor; admin->removeApplication("Test"); app.variables["icepatch.directory"] = "${test.dir}/data/original"; test(app.nodes["localnode"].servers[2]->id == "server-dir1"); app.nodes["localnode"].servers[2]->applicationDistrib = false; admin->addApplication(app); admin->startServer("Test.IcePatch2"); try { admin->patchServer("server-dir1", true); } catch(const PatchException& ex) { copy(ex.reasons.begin(), ex.reasons.end(), ostream_iterator<string>(cerr, "\n")); test(false); } TestIntfPrx test = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-dir1")); test(test->getServerFile("rootfile") == ""); test(test->getServerFile("dir1/file1") == "dummy-file1"); test(test->getServerFile("dir1/file2") == "dummy-file2"); test(test->getServerFile("dir2/file3") == ""); test(test->getApplicationFile("rootfile") == ""); test(test->getApplicationFile("dir1/file1") == ""); test(test->getApplicationFile("dir1/file2") == ""); test(test->getApplicationFile("dir2/file3") == ""); admin->removeApplication("Test"); admin->addApplication(app); admin->startServer("Test.IcePatch2"); admin->startServer("IcePatch2-Direct"); try { admin->patchApplication("Test", true); } catch(const PatchException& ex) { copy(ex.reasons.begin(), ex.reasons.end(), ostream_iterator<string>(cerr, "\n")); test(false); } test = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-dir1")); test(test->getServerFile("rootfile") == ""); test(test->getServerFile("dir1/file1") == "dummy-file1"); test(test->getServerFile("dir1/file2") == "dummy-file2"); test(test->getServerFile("dir2/file3") == ""); test(test->getApplicationFile("rootfile") == ""); test(test->getApplicationFile("dir1/file1") == ""); test(test->getApplicationFile("dir1/file2") == ""); test(test->getApplicationFile("dir2/file3") == "dummy-file3"); admin->removeApplication("Test"); app.distrib.icepatch = ""; admin->addApplication(app); admin->startServer("Test.IcePatch2"); admin->startServer("IcePatch2-Direct"); try { admin->patchServer("server-dir1", true); } catch(const PatchException& ex) { copy(ex.reasons.begin(), ex.reasons.end(), ostream_iterator<string>(cerr, "\n")); test(false); } test = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-dir1")); test(test->getServerFile("rootfile") == ""); test(test->getServerFile("dir1/file1") == "dummy-file1"); test(test->getServerFile("dir1/file2") == "dummy-file2"); test(test->getServerFile("dir2/file3") == ""); test(test->getApplicationFile("rootfile") == ""); test(test->getApplicationFile("dir1/file1") == ""); test(test->getApplicationFile("dir1/file2") == ""); test(test->getApplicationFile("dir2/file3") == ""); test = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-all")); test(test->getServerFile("rootfile") == ""); test(test->getServerFile("dir1/file1") == ""); test(test->getServerFile("dir1/file2") == ""); test(test->getServerFile("dir2/file3") == ""); try { admin->patchApplication("Test", true); } catch(const PatchException& ex) { copy(ex.reasons.begin(), ex.reasons.end(), ostream_iterator<string>(cerr, "\n")); test(false); } test(test->getServerFile("rootfile") == "rootfile"); test(test->getServerFile("dir1/file1") == "dummy-file1"); test(test->getServerFile("dir1/file2") == "dummy-file2"); test(test->getServerFile("dir2/file3") == "dummy-file3"); } catch(const DeploymentException& ex) { cerr << ex << ":\n" << ex.reason << endl; test(false); } cout << "ok" << endl; keepAlive->destroy(); keepAlive->getThreadControl().join(); keepAlive = 0; session->destroy(); }
void allTests(const Ice::CommunicatorPtr& communicator, const vector<int>& ports) { cout << "testing stringToProxy... " << flush; ostringstream ref; ref << "test"; for(vector<int>::const_iterator p = ports.begin(); p != ports.end(); ++p) { ref << ":default -p " << *p; } Ice::ObjectPrx base = communicator->stringToProxy(ref.str()); test(base); cout << "ok" << endl; cout << "testing checked cast... " << flush; TestIntfPrx obj = TestIntfPrx::checkedCast(base); test(obj); test(obj == base); cout << "ok" << endl; int oldPid = 0; bool ami = false; for(unsigned int i = 1, j = 0; i <= ports.size(); ++i, ++j) { if(j > 3) { j = 0; ami = !ami; } if(!ami) { cout << "testing server #" << i << "... " << flush; int pid = obj->pid(); test(pid != oldPid); cout << "ok" << endl; oldPid = pid; } else { cout << "testing server #" << i << " with AMI... " << flush; CallbackPtr cb = new Callback(); obj->begin_pid(newCallback_TestIntf_pid(cb, &Callback::opPidI, &Callback::exception)); cb->check(); int pid = cb->pid(); test(pid != oldPid); cout << "ok" << endl; oldPid = pid; } if(j == 0) { if(!ami) { cout << "shutting down server #" << i << "... " << flush; obj->shutdown(); cout << "ok" << endl; } else { cout << "shutting down server #" << i << " with AMI... " << flush; CallbackPtr cb = new Callback; obj->begin_shutdown(newCallback_TestIntf_shutdown(cb, &Callback::opShutdownI, &Callback::exception)); cb->check(); cout << "ok" << endl; } } else if(j == 1 || i + 1 > ports.size()) { if(!ami) { cout << "aborting server #" << i << "... " << flush; try { obj->abort(); test(false); } catch(const Ice::ConnectionLostException&) { cout << "ok" << endl; } catch(const Ice::ConnectFailedException&) { cout << "ok" << endl; } } else { cout << "aborting server #" << i << " with AMI... " << flush; CallbackPtr cb = new Callback; obj->begin_abort(newCallback_TestIntf_abort(cb, &Callback::response, &Callback::exceptAbortI)); cb->check(); cout << "ok" << endl; } } else if(j == 2 || j == 3) { if(!ami) { cout << "aborting server #" << i << " and #" << i + 1 << " with idempotent call... " << flush; try { obj->idempotentAbort(); test(false); } catch(const Ice::ConnectionLostException&) { cout << "ok" << endl; } catch(const Ice::ConnectFailedException&) { cout << "ok" << endl; } } else { cout << "aborting server #" << i << " and #" << i + 1 << " with idempotent AMI call... " << flush; CallbackPtr cb = new Callback; obj->begin_idempotentAbort(newCallback_TestIntf_idempotentAbort(cb, &Callback::response, &Callback::exceptAbortI)); cb->check(); cout << "ok" << endl; } ++i; } else { assert(false); } } cout << "testing whether all servers are gone... " << flush; try { obj->ice_ping(); test(false); } catch(const Ice::LocalException&) { cout << "ok" << endl; } }
void allTests(const Ice::CommunicatorPtr& communicator) { IceGrid::RegistryPrx registry = IceGrid::RegistryPrx::checkedCast(communicator->stringToProxy("IceGrid/Registry")); test(registry); IceGrid::AdminSessionPrx session = registry->createAdminSession("foo", "bar"); SessionKeepAliveThreadPtr keepAlive = new SessionKeepAliveThread(session, registry->getSessionTimeout()/2); keepAlive->start(); IceGrid::AdminPrx admin = session->getAdmin(); test(admin); admin->startServer("node-1"); admin->startServer("node-2"); int nRetry = 0; while(!admin->pingNode("node-1") && nRetry < 15) { IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(200)); ++nRetry; } nRetry = 0; while(!admin->pingNode("node-2") && nRetry < 15) { IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(200)); ++nRetry; } cout << "testing on-demand activation... " << flush; try { test(admin->getServerState("server") == IceGrid::Inactive); TestIntfPrx obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server")); waitForServerState(admin, "server", IceGrid::Active); obj->shutdown(); waitForServerState(admin, "server", IceGrid::Inactive); nRetry = 4; while(--nRetry > 0) { obj->shutdown(); } waitForServerState(admin, "server", IceGrid::Inactive); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing manual activation... " << flush; try { test(admin->getServerState("server-manual") == IceGrid::Inactive); TestIntfPrx obj; try { obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server-manual")); test(false); } catch(const Ice::NoEndpointException&) { } test(admin->getServerState("server-manual") == IceGrid::Inactive); admin->startServer("server-manual"); test(admin->getServerState("server-manual") == IceGrid::Active); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server-manual")); test(admin->getServerState("server-manual") == IceGrid::Active); obj->shutdown(); waitForServerState(admin, "server-manual", IceGrid::Inactive); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing always activation... " << flush; try { waitForServerState(admin, "server-always", IceGrid::Active); TestIntfPrx obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server-always")); admin->stopServer("server-always"); waitForServerState(admin, "server-always", IceGrid::Active); obj->shutdown(); waitForServerState(admin, "server-always", IceGrid::Active); nRetry = 4; while(--nRetry > 0) { obj->shutdown(); } waitForServerState(admin, "server-always", IceGrid::Active); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing session activation... " << flush; try { IceGrid::SessionPrx session = registry->createSession("test", ""); test(admin->getServerState("server-session") == IceGrid::Inactive); TestIntfPrx obj = TestIntfPrx::uncheckedCast(communicator->stringToProxy("server-session")); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } session->allocateObjectById(obj->ice_getIdentity()); obj->ice_ping(); waitForServerState(admin, "server-session", IceGrid::Active); obj->shutdown(); waitForServerState(admin, "server-session", IceGrid::Inactive); obj->ice_ping(); waitForServerState(admin, "server-session", IceGrid::Active); nRetry = 4; while(--nRetry > 0) { obj->shutdown(); } obj->ice_ping(); waitForServerState(admin, "server-session", IceGrid::Active); session->releaseObject(obj->ice_getIdentity()); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } waitForServerState(admin, "server-session", IceGrid::Inactive); session->allocateObjectById(obj->ice_getIdentity()); obj->ice_ping(); waitForServerState(admin, "server-session", IceGrid::Active); session->destroy(); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } waitForServerState(admin, "server-session", IceGrid::Inactive); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing server disable... " << flush; try { test(admin->getServerState("server") == IceGrid::Inactive); admin->enableServer("server", false); try { communicator->stringToProxy("server")->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } try { admin->startServer("server"); test(false); } catch(const IceGrid::ServerStartException&) { } test(admin->getServerState("server") == IceGrid::Inactive); test(admin->getServerState("server-manual") == IceGrid::Inactive); admin->enableServer("server-manual", false); try { communicator->stringToProxy("server-manual")->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } try { admin->startServer("server-manual"); test(false); } catch(const IceGrid::ServerStartException&) { } test(admin->getServerState("server-manual") == IceGrid::Inactive); test(admin->getServerState("server-always") == IceGrid::Active); admin->enableServer("server-always", false); admin->stopServer("server-always"); test(admin->getServerState("server-always") == IceGrid::Inactive); try { communicator->stringToProxy("server-always")->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } try { admin->startServer("server-always"); test(false); } catch(const IceGrid::ServerStartException&) { } test(admin->getServerState("server-always") == IceGrid::Inactive); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing server enable... " << flush; try { test(admin->getServerState("server") == IceGrid::Inactive); admin->enableServer("server", true); communicator->stringToProxy("server")->ice_ping(); admin->stopServer("server"); test(admin->getServerState("server") == IceGrid::Inactive); admin->startServer("server"); test(admin->getServerState("server") == IceGrid::Active); admin->stopServer("server"); test(admin->getServerState("server") == IceGrid::Inactive); test(admin->getServerState("server-manual") == IceGrid::Inactive); admin->enableServer("server-manual", true); try { communicator->stringToProxy("server-manual")->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } test(admin->getServerState("server-manual") == IceGrid::Inactive); admin->startServer("server-manual"); test(admin->getServerState("server-manual") == IceGrid::Active); admin->stopServer("server-manual"); test(admin->getServerState("server-manual") == IceGrid::Inactive); test(admin->getServerState("server-always") == IceGrid::Inactive); admin->enableServer("server-always", true); waitForServerState(admin, "server-always", IceGrid::Active); admin->stopServer("server-always"); try { admin->startServer("server-always"); // test(false); } catch(const IceGrid::ServerStartException&) { } test(admin->getServerState("server-always") == IceGrid::Active); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing activation failure... " << flush; try { int i; const int nThreads = 3; Ice::ObjectPrx invalid = communicator->stringToProxy("invalid-exe"); vector<PingThreadPtr> threads; threads.reserve(nThreads); vector<PingThreadPtr>::const_iterator p; for(i = 0; i < nThreads; i++) { threads.push_back(new PingThread(invalid, 10)); } for(p = threads.begin(); p != threads.end(); ++p) { (*p)->start(); } for(p = threads.begin(); p != threads.end(); ++p) { auto_ptr<Ice::LocalException> ex((*p)->waitUntilFinished()); test(dynamic_cast<Ice::NoEndpointException*>(ex.get())); } threads.resize(0); invalid = communicator->stringToProxy("invalid-pwd"); for(i = 0; i < nThreads; i++) { threads.push_back(new PingThread(invalid, 10)); } for(p = threads.begin(); p != threads.end(); ++p) { (*p)->start(); } for(p = threads.begin(); p != threads.end(); ++p) { auto_ptr<Ice::LocalException> ex((*p)->waitUntilFinished()); test(dynamic_cast<Ice::NoEndpointException*>(ex.get())); } threads.resize(0); invalid = communicator->stringToProxy("fail-on-startup"); for(i = 0; i < nThreads; i++) { threads.push_back(new PingThread(invalid, 5)); } for(p = threads.begin(); p != threads.end(); ++p) { (*p)->start(); } for(p = threads.begin(); p != threads.end(); ++p) { auto_ptr<Ice::LocalException> ex((*p)->waitUntilFinished()); test(dynamic_cast<Ice::NoEndpointException*>(ex.get())); } threads.resize(0); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing activation timeout... " << flush; try { test(admin->getServerState("server-activation-timeout") == IceGrid::Inactive); const int nThreads = 5; Ice::ObjectPrx proxy = communicator->stringToProxy("server-activation-timeout"); vector<PingThreadPtr> threads; threads.reserve(nThreads); vector<PingThreadPtr>::const_iterator p; int i; for(i = 0; i < nThreads; i++) { threads.push_back(new PingThread(proxy, 1)); } for(p = threads.begin(); p != threads.end(); ++p) { (*p)->start(); } for(p = threads.begin(); p != threads.end(); ++p) { auto_ptr<Ice::LocalException> ex((*p)->waitUntilFinished()); test(dynamic_cast<Ice::NoEndpointException*>(ex.get())); } admin->stopServer("server-activation-timeout"); } catch(const IceGrid::ServerStopException& ex) { cerr << ex << ": " << ex.reason << endl; test(false); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing deactivation timeout... " << flush; try { test(admin->getServerState("server-deactivation-timeout") == IceGrid::Inactive); communicator->stringToProxy("server-deactivation-timeout")->ice_ping(); admin->stopServer("server-deactivation-timeout"); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing permanent disable on failure... " << flush; try { test(admin->getServerState("server1") == IceGrid::Inactive); TestIntfPrx obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server1")); waitForServerState(admin, "server1", IceGrid::Active); obj->fail(); waitForServerState(admin, "server1", IceGrid::Inactive); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } test(!admin->isServerEnabled("server1")); test(admin->getServerState("server1-manual") == IceGrid::Inactive); admin->startServer("server1-manual"); test(admin->getServerState("server1-manual") == IceGrid::Active); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server1-manual")); test(admin->getServerState("server1-manual") == IceGrid::Active); obj->fail(); waitForServerState(admin, "server1-manual", IceGrid::Inactive); test(!admin->isServerEnabled("server1-manual")); test(admin->getServerState("server1-always") == IceGrid::Active); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server1-always")); obj->fail(); waitForServerState(admin, "server1-always", IceGrid::Inactive); test(!admin->isServerEnabled("server1-always")); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing temporary disable on failure... " << flush; try { test(admin->getServerState("server2") == IceGrid::Inactive); TestIntfPrx obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server2")); waitForServerState(admin, "server2", IceGrid::Active); obj->fail(); waitForServerState(admin, "server2", IceGrid::Inactive); try { obj->ice_ping(); test(false); } catch(const Ice::NoEndpointException&) { } test(!admin->isServerEnabled("server2")); nRetry = 0; while(!admin->isServerEnabled("server2") && nRetry < 15) { IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(500)); ++nRetry; try { obj->ice_ping(); } catch(const Ice::NoEndpointException&) { } } test(admin->isServerEnabled("server2")); waitForServerState(admin, "server2", IceGrid::Active); obj->ice_ping(); admin->stopServer("server2"); test(admin->getServerState("server2-manual") == IceGrid::Inactive); admin->startServer("server2-manual"); test(admin->getServerState("server2-manual") == IceGrid::Active); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server2-manual")); obj->fail(); waitForServerState(admin, "server2-manual", IceGrid::Inactive); test(!admin->isServerEnabled("server2-manual")); admin->startServer("server2-manual"); test(admin->isServerEnabled("server2-manual")); test(admin->getServerState("server2-manual") == IceGrid::Active); admin->stopServer("server2-manual"); test(admin->getServerState("server2-always") == IceGrid::Active); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("server2-always")); obj->fail(); waitForServerState(admin, "server2-always", IceGrid::Inactive); test(!admin->isServerEnabled("server2-always")); nRetry = 0; while((!admin->isServerEnabled("server2-always") || admin->getServerState("server2-always") != IceGrid::Active) && nRetry < 15) { IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(500)); ++nRetry; } test(admin->isServerEnabled("server2-always") && admin->getServerState("server2-always") == IceGrid::Active); obj->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; admin->stopServer("node-1"); admin->stopServer("node-2"); keepAlive->destroy(); keepAlive->getThreadControl().join(); keepAlive = 0; session->destroy(); }
void allTests(const Ice::CommunicatorPtr& communicator, const string& ref) { ServerManagerPrx manager = ServerManagerPrx::checkedCast(communicator->stringToProxy(ref)); TestLocatorPrx locator = TestLocatorPrx::uncheckedCast(communicator->getDefaultLocator()); test(manager); cout << "testing stringToProxy... " << flush; Ice::ObjectPrx base = communicator->stringToProxy("test @ TestAdapter"); Ice::ObjectPrx base2 = communicator->stringToProxy("test @ TestAdapter"); Ice::ObjectPrx base3 = communicator->stringToProxy("test"); Ice::ObjectPrx base4 = communicator->stringToProxy("ServerManager"); Ice::ObjectPrx base5 = communicator->stringToProxy("test2"); Ice::ObjectPrx base6 = communicator->stringToProxy("test @ ReplicatedAdapter"); cout << "ok" << endl; cout << "testing ice_locator and ice_getLocator... " << flush; test(Ice::proxyIdentityEqual(base->ice_getLocator(), communicator->getDefaultLocator())); Ice::LocatorPrx anotherLocator = Ice::LocatorPrx::uncheckedCast(communicator->stringToProxy("anotherLocator")); base = base->ice_locator(anotherLocator); test(Ice::proxyIdentityEqual(base->ice_getLocator(), anotherLocator)); communicator->setDefaultLocator(0); base = communicator->stringToProxy("test @ TestAdapter"); test(!base->ice_getLocator()); base = base->ice_locator(anotherLocator); test(Ice::proxyIdentityEqual(base->ice_getLocator(), anotherLocator)); communicator->setDefaultLocator(locator); base = communicator->stringToProxy("test @ TestAdapter"); test(Ice::proxyIdentityEqual(base->ice_getLocator(), communicator->getDefaultLocator())); // // We also test ice_router/ice_getRouter (perhaps we should add a // test/Ice/router test?) // test(!base->ice_getRouter()); Ice::RouterPrx anotherRouter = Ice::RouterPrx::uncheckedCast(communicator->stringToProxy("anotherRouter")); base = base->ice_router(anotherRouter); test(Ice::proxyIdentityEqual(base->ice_getRouter(), anotherRouter)); Ice::RouterPrx router = Ice::RouterPrx::uncheckedCast(communicator->stringToProxy("dummyrouter")); communicator->setDefaultRouter(router); base = communicator->stringToProxy("test @ TestAdapter"); test(Ice::proxyIdentityEqual(base->ice_getRouter(), communicator->getDefaultRouter())); communicator->setDefaultRouter(0); base = communicator->stringToProxy("test @ TestAdapter"); test(!base->ice_getRouter()); cout << "ok" << endl; cout << "starting server... " << flush; manager->startServer(); cout << "ok" << endl; cout << "testing checked cast... " << flush; TestIntfPrx obj = TestIntfPrx::checkedCast(base); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("test@TestAdapter")); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("test @TestAdapter")); obj = TestIntfPrx::checkedCast(communicator->stringToProxy("test@ TestAdapter")); test(obj); TestIntfPrx obj2 = TestIntfPrx::checkedCast(base2); test(obj2); TestIntfPrx obj3 = TestIntfPrx::checkedCast(base3); test(obj3); ServerManagerPrx obj4 = ServerManagerPrx::checkedCast(base4); test(obj4); TestIntfPrx obj5 = TestIntfPrx::checkedCast(base5); test(obj5); TestIntfPrx obj6 = TestIntfPrx::checkedCast(base6); test(obj6); cout << "ok" << endl; cout << "testing id@AdapterId indirect proxy... " << flush; obj->shutdown(); manager->startServer(); try { obj2 = TestIntfPrx::checkedCast(base2); obj2->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing id@ReplicaGroupId indirect proxy... " << flush; obj->shutdown(); manager->startServer(); try { obj6 = TestIntfPrx::checkedCast(base6); obj6->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing identity indirect proxy... " << flush; obj->shutdown(); manager->startServer(); try { obj3 = TestIntfPrx::checkedCast(base3); obj3->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } try { obj2 = TestIntfPrx::checkedCast(base2); obj2->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } obj->shutdown(); manager->startServer(); try { obj2 = TestIntfPrx::checkedCast(base2); obj2->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } try { obj3 = TestIntfPrx::checkedCast(base3); obj3->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } obj->shutdown(); manager->startServer(); try { obj2 = TestIntfPrx::checkedCast(base2); obj2->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } obj->shutdown(); manager->startServer(); try { obj3 = TestIntfPrx::checkedCast(base3); obj3->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } obj->shutdown(); manager->startServer(); try { obj2 = TestIntfPrx::checkedCast(base2); obj2->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } obj->shutdown(); manager->startServer(); try { obj5 = TestIntfPrx::checkedCast(base5); obj5->ice_ping(); } catch(const Ice::LocalException& ex) { cerr << ex << endl; test(false); } cout << "ok" << endl; cout << "testing proxy with unknown identity... " << flush; try { base = communicator->stringToProxy("unknown/unknown"); base->ice_ping(); test(false); } catch (const Ice::NotRegisteredException& ex) { test(ex.kindOfObject == "object"); test(ex.id == "unknown/unknown"); } cout << "ok" << endl; cout << "testing proxy with unknown adapter... " << flush; try { base = communicator->stringToProxy("test @ TestAdapterUnknown"); base->ice_ping(); test(false); } catch (const Ice::NotRegisteredException& ex) { test(ex.kindOfObject == "object adapter"); test(ex.id == "TestAdapterUnknown"); } cout << "ok" << endl; cout << "testing locator cache timeout... " << flush; int count = locator->getRequestCount(); communicator->stringToProxy("test@TestAdapter")->ice_locatorCacheTimeout(0)->ice_ping(); // No locator cache. test(++count == locator->getRequestCount()); communicator->stringToProxy("test@TestAdapter")->ice_locatorCacheTimeout(0)->ice_ping(); // No locator cache. test(++count == locator->getRequestCount()); communicator->stringToProxy("test@TestAdapter")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout. test(count == locator->getRequestCount()); IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1200)); communicator->stringToProxy("test@TestAdapter")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout. test(++count == locator->getRequestCount()); communicator->stringToProxy("test")->ice_locatorCacheTimeout(0)->ice_ping(); // No locator cache. count += 2; test(count == locator->getRequestCount()); communicator->stringToProxy("test")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout test(count == locator->getRequestCount()); IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1200)); communicator->stringToProxy("test")->ice_locatorCacheTimeout(1)->ice_ping(); // 1s timeout count += 2; test(count == locator->getRequestCount()); communicator->stringToProxy("test@TestAdapter")->ice_locatorCacheTimeout(-1)->ice_ping(); test(count == locator->getRequestCount()); communicator->stringToProxy("test")->ice_locatorCacheTimeout(-1)->ice_ping(); test(count == locator->getRequestCount()); communicator->stringToProxy("test@TestAdapter")->ice_ping(); test(count == locator->getRequestCount()); communicator->stringToProxy("test")->ice_ping(); test(count == locator->getRequestCount()); test(communicator->stringToProxy("test")->ice_locatorCacheTimeout(99)->ice_getLocatorCacheTimeout() == 99); cout << "ok" << endl; cout << "testing proxy from server... " << flush; HelloPrx hello = obj->getHello(); test(hello->ice_getAdapterId() == "TestAdapter"); hello->sayHello(); hello = obj->getReplicatedHello(); test(hello->ice_getAdapterId() == "ReplicatedAdapter"); hello->sayHello(); cout << "ok" << endl; cout << "testing proxy from server after shutdown... " << flush; obj->shutdown(); manager->startServer(); hello->sayHello(); cout << "ok" << endl; cout << "testing object migration... " << flush; hello = HelloPrx::checkedCast(communicator->stringToProxy("hello")); obj->migrateHello(); hello->sayHello(); obj->migrateHello(); hello->sayHello(); obj->migrateHello(); hello->sayHello(); cout << "ok" << endl; cout << "shutdown server... " << flush; obj->shutdown(); cout << "ok" << endl; cout << "testing whether server is gone... " << flush; try { obj2->ice_ping(); test(false); } catch(const Ice::LocalException&) { } try { obj3->ice_ping(); test(false); } catch(const Ice::LocalException&) { } try { obj5->ice_ping(); test(false); } catch(const Ice::LocalException&) { } cout << "ok" << endl; cout << "testing indirect proxies to collocated objects... " << flush; // // Set up test for calling a collocated object through an indirect, adapterless reference. // Ice::PropertiesPtr properties = communicator->getProperties(); properties->setProperty("Ice.PrintAdapterReady", "0"); Ice::ObjectAdapterPtr adapter = communicator->createObjectAdapterWithEndpoints("Hello", "default"); adapter->setLocator(locator); TestLocatorRegistryPrx registry = TestLocatorRegistryPrx::checkedCast(locator->getRegistry()); test(registry); Ice::Identity id; id.name = IceUtil::generateUUID(); registry->addObject(adapter->add(new HelloI, id)); adapter->activate(); try { HelloPrx helloPrx = HelloPrx::checkedCast(communicator->stringToProxy(communicator->identityToString(id))); Ice::ConnectionPtr connection = helloPrx->ice_getConnection(); test(false); } catch(const Ice::CollocationOptimizationException&) { } adapter->deactivate(); cout << "ok" << endl; cout << "shutdown server manager... " << flush; manager->shutdown(); cout << "ok" << endl; }