diff options
Diffstat (limited to 'cpp/test/Glacier2/router/Client.cpp')
-rw-r--r-- | cpp/test/Glacier2/router/Client.cpp | 1252 |
1 files changed, 626 insertions, 626 deletions
diff --git a/cpp/test/Glacier2/router/Client.cpp b/cpp/test/Glacier2/router/Client.cpp index a423212e8af..686752a79d1 100644 --- a/cpp/test/Glacier2/router/Client.cpp +++ b/cpp/test/Glacier2/router/Client.cpp @@ -21,49 +21,49 @@ using namespace Test; static Ice::InitializationData initData; class AMI_Callback_initiateConcurrentCallbackI : public AMI_Callback_initiateConcurrentCallback, - public IceUtil::Monitor<IceUtil::Mutex> + public IceUtil::Monitor<IceUtil::Mutex> { public: AMI_Callback_initiateConcurrentCallbackI() : - _haveResponse(false) + _haveResponse(false) { } virtual void ice_response(Int response) { - Lock sync(*this); - _haveResponse = true; - _response = response; - notify(); + Lock sync(*this); + _haveResponse = true; + _response = response; + notify(); } virtual void ice_exception(const Exception& e) { - Lock sync(*this); - _haveResponse = true; - _ex.reset(e.ice_clone()); - notify(); + Lock sync(*this); + _haveResponse = true; + _ex.reset(e.ice_clone()); + notify(); } int waitResponse() const { - Lock sync(*this); - while(!_haveResponse) - { - if(!timedWait(IceUtil::Time::milliSeconds(5000))) - { - throw TimeoutException(__FILE__, __LINE__); - } - } - if(_ex.get()) - { - _ex->ice_throw(); - } - return _response; + Lock sync(*this); + while(!_haveResponse) + { + if(!timedWait(IceUtil::Time::milliSeconds(5000))) + { + throw TimeoutException(__FILE__, __LINE__); + } + } + if(_ex.get()) + { + _ex->ice_throw(); + } + return _response; } private: @@ -85,92 +85,92 @@ public: virtual void run() { - CommunicatorPtr communicator = initialize(initData); - ObjectPrx routerBase = communicator->stringToProxy("Glacier2/router:default -p 12347 -t 10000"); - Glacier2::RouterPrx router = Glacier2::RouterPrx::checkedCast(routerBase); - communicator->setDefaultRouter(router); - - ostringstream os; - os << "userid-" << _id; - Glacier2::SessionPrx session = router->createSession(os.str(), "abc123"); - communicator->getProperties()->setProperty("Ice.PrintAdapterReady", ""); - ObjectAdapterPtr adapter = communicator->createObjectAdapterWithRouter("CallbackReceiverAdapter", router); - adapter->activate(); - - string category = router->getCategoryForClient(); - { - Lock sync(*this); - _callbackReceiver = new CallbackReceiverI; - notify(); - } - - Identity ident; - ident.name = "callbackReceiver"; - ident.category = category; - CallbackReceiverPrx receiver = CallbackReceiverPrx::uncheckedCast(adapter->add(_callbackReceiver, ident)); - - ObjectPrx base = communicator->stringToProxy("c1/callback:tcp -p 12010 -t 10000"); - base = base->ice_oneway(); - CallbackPrx callback = CallbackPrx::uncheckedCast(base); - - - // - // Block the CallbackReceiver in wait() to prevent the client from - // processing other incoming calls and wait to receive the callback. - // - callback->initiateWaitCallback(receiver); - test(_callbackReceiver->waitCallbackOK()); - - // - // Notify the main thread that the callback was received. - // - { - Lock sync(*this); - _callback = true; - notify(); - } - - // - // Callback the client with a large payload. This should cause - // the Glacier2 request queue thread to block trying to send the - // callback to the client because the client is currently blocked - // in CallbackReceiverI::waitCallback() and can't process more - // requests. - // - callback->initiateCallbackWithPayload(receiver); - test(_callbackReceiver->callbackWithPayloadOK()); - - try - { - router->destroySession(); - test(false); - } - catch(const Ice::ConnectionLostException&) - { - } - catch(const Ice::LocalException&) - { - test(false); - } - communicator->destroy(); + CommunicatorPtr communicator = initialize(initData); + ObjectPrx routerBase = communicator->stringToProxy("Glacier2/router:default -p 12347 -t 10000"); + Glacier2::RouterPrx router = Glacier2::RouterPrx::checkedCast(routerBase); + communicator->setDefaultRouter(router); + + ostringstream os; + os << "userid-" << _id; + Glacier2::SessionPrx session = router->createSession(os.str(), "abc123"); + communicator->getProperties()->setProperty("Ice.PrintAdapterReady", ""); + ObjectAdapterPtr adapter = communicator->createObjectAdapterWithRouter("CallbackReceiverAdapter", router); + adapter->activate(); + + string category = router->getCategoryForClient(); + { + Lock sync(*this); + _callbackReceiver = new CallbackReceiverI; + notify(); + } + + Identity ident; + ident.name = "callbackReceiver"; + ident.category = category; + CallbackReceiverPrx receiver = CallbackReceiverPrx::uncheckedCast(adapter->add(_callbackReceiver, ident)); + + ObjectPrx base = communicator->stringToProxy("c1/callback:tcp -p 12010 -t 10000"); + base = base->ice_oneway(); + CallbackPrx callback = CallbackPrx::uncheckedCast(base); + + + // + // Block the CallbackReceiver in wait() to prevent the client from + // processing other incoming calls and wait to receive the callback. + // + callback->initiateWaitCallback(receiver); + test(_callbackReceiver->waitCallbackOK()); + + // + // Notify the main thread that the callback was received. + // + { + Lock sync(*this); + _callback = true; + notify(); + } + + // + // Callback the client with a large payload. This should cause + // the Glacier2 request queue thread to block trying to send the + // callback to the client because the client is currently blocked + // in CallbackReceiverI::waitCallback() and can't process more + // requests. + // + callback->initiateCallbackWithPayload(receiver); + test(_callbackReceiver->callbackWithPayloadOK()); + + try + { + router->destroySession(); + test(false); + } + catch(const Ice::ConnectionLostException&) + { + } + catch(const Ice::LocalException&) + { + test(false); + } + communicator->destroy(); } void notifyWaitCallback() { - _callbackReceiver->notifyWaitCallback(); + _callbackReceiver->notifyWaitCallback(); } void waitForCallback() { - { - Lock sync(*this); - while(!_callback) - { - wait(); - } - } + { + Lock sync(*this); + while(!_callback) + { + wait(); + } + } } private: @@ -192,47 +192,47 @@ public: virtual void run() { - CommunicatorPtr communicator = initialize(initData); - ObjectPrx routerBase = communicator->stringToProxy("Glacier2/router:default -p 12347 -t 30000"); - _router = Glacier2::RouterPrx::checkedCast(routerBase); - communicator->setDefaultRouter(_router); - - ostringstream os; - os << "userid-" << _id; - Glacier2::SessionPrx session = _router->createSession(os.str(), "abc123"); - communicator->getProperties()->setProperty("Ice.PrintAdapterReady", ""); - ObjectAdapterPtr adapter = communicator->createObjectAdapterWithRouter("CallbackReceiverAdapter", _router); - adapter->activate(); - - string category = _router->getCategoryForClient(); - _callbackReceiver = new CallbackReceiverI; - Identity ident; - ident.name = "callbackReceiver"; - ident.category = category; - CallbackReceiverPrx receiver = CallbackReceiverPrx::uncheckedCast(adapter->add(_callbackReceiver, ident)); - - ObjectPrx base = communicator->stringToProxy("c1/callback:tcp -p 12010 -t 10000"); - base = base->ice_oneway(); - CallbackPrx callback = CallbackPrx::uncheckedCast(base); - - { - Lock sync(*this); - _initialized = true; - notifyAll(); - } - { - Lock sync(*this); - while(!_notified) - { - wait(); - } - } - - // - // Stress the router until the connection is closed. - // - stress(callback, receiver); - communicator->destroy(); + CommunicatorPtr communicator = initialize(initData); + ObjectPrx routerBase = communicator->stringToProxy("Glacier2/router:default -p 12347 -t 30000"); + _router = Glacier2::RouterPrx::checkedCast(routerBase); + communicator->setDefaultRouter(_router); + + ostringstream os; + os << "userid-" << _id; + Glacier2::SessionPrx session = _router->createSession(os.str(), "abc123"); + communicator->getProperties()->setProperty("Ice.PrintAdapterReady", ""); + ObjectAdapterPtr adapter = communicator->createObjectAdapterWithRouter("CallbackReceiverAdapter", _router); + adapter->activate(); + + string category = _router->getCategoryForClient(); + _callbackReceiver = new CallbackReceiverI; + Identity ident; + ident.name = "callbackReceiver"; + ident.category = category; + CallbackReceiverPrx receiver = CallbackReceiverPrx::uncheckedCast(adapter->add(_callbackReceiver, ident)); + + ObjectPrx base = communicator->stringToProxy("c1/callback:tcp -p 12010 -t 10000"); + base = base->ice_oneway(); + CallbackPrx callback = CallbackPrx::uncheckedCast(base); + + { + Lock sync(*this); + _initialized = true; + notifyAll(); + } + { + Lock sync(*this); + while(!_notified) + { + wait(); + } + } + + // + // Stress the router until the connection is closed. + // + stress(callback, receiver); + communicator->destroy(); } virtual void stress(const CallbackPrx& callback, const CallbackReceiverPrx&) = 0; @@ -240,39 +240,39 @@ public: void notifyThread() { - { - Lock sync(*this); - while(!_initialized) - { - wait(); - } - } - { - Lock sync(*this); - _notified = true; - notify(); - } + { + Lock sync(*this); + while(!_initialized) + { + wait(); + } + } + { + Lock sync(*this); + _notified = true; + notify(); + } } void kill() { - try - { - _router->destroySession(); - test(false); - } - catch(const Ice::ConnectionLostException&) - { - } - catch(const Ice::CommunicatorDestroyedException&) - { - } - catch(const Ice::LocalException& ex) - { - cerr << ex << endl; - test(false); - } + try + { + _router->destroySession(); + test(false); + } + catch(const Ice::ConnectionLostException&) + { + } + catch(const Ice::CommunicatorDestroyedException&) + { + } + catch(const Ice::LocalException& ex) + { + cerr << ex << endl; + test(false); + } } protected: @@ -296,28 +296,28 @@ public: virtual void stress(const CallbackPrx& callback, const CallbackReceiverPrx&) { - try - { - CallbackPrx cb = CallbackPrx::uncheckedCast(callback->ice_twoway()); - Context context; - context["_fwd"] = "t"; - while(true) - { - cb->ice_ping(context); - IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1)); - } - } - catch(const Ice::ConnectionLostException&) - { - } - catch(const Ice::CommunicatorDestroyedException&) - { - } - catch(const Ice::Exception& ex) - { - cerr << ex << endl; - test(false); - } + try + { + CallbackPrx cb = CallbackPrx::uncheckedCast(callback->ice_twoway()); + Context context; + context["_fwd"] = "t"; + while(true) + { + cb->ice_ping(context); + IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1)); + } + } + catch(const Ice::ConnectionLostException&) + { + } + catch(const Ice::CommunicatorDestroyedException&) + { + } + catch(const Ice::Exception& ex) + { + cerr << ex << endl; + test(false); + } } }; @@ -332,36 +332,36 @@ public: virtual void stress(const CallbackPrx& callback, const CallbackReceiverPrx& receiver) { - try - { - CallbackPrx cb = CallbackPrx::uncheckedCast(callback->ice_twoway()); - Context context; - context["_fwd"] = "t"; - while(true) - { - cb->initiateCallback(receiver, context); - test(_callbackReceiver->callbackOK()); - IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1)); - } - } - catch(const Ice::ConnectionLostException&) - { - // Session was destroyed. - } - catch(const Ice::ObjectNotExistException&) - { - // This might be raised by the CallbackI implementation if it can't invoke on the - // callback receiver because the session is being destroyed concurrently. - } - catch(const Ice::CommunicatorDestroyedException&) - { - // This might happen if the retry fails because the communicator is destroyed. - } - catch(const Ice::Exception& ex) - { - cerr << ex << endl; - test(false); - } + try + { + CallbackPrx cb = CallbackPrx::uncheckedCast(callback->ice_twoway()); + Context context; + context["_fwd"] = "t"; + while(true) + { + cb->initiateCallback(receiver, context); + test(_callbackReceiver->callbackOK()); + IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(1)); + } + } + catch(const Ice::ConnectionLostException&) + { + // Session was destroyed. + } + catch(const Ice::ObjectNotExistException&) + { + // This might be raised by the CallbackI implementation if it can't invoke on the + // callback receiver because the session is being destroyed concurrently. + } + catch(const Ice::CommunicatorDestroyedException&) + { + // This might happen if the retry fails because the communicator is destroyed. + } + catch(const Ice::Exception& ex) + { + cerr << ex << endl; + test(false); + } } }; @@ -376,36 +376,36 @@ public: virtual void stress(const CallbackPrx& callback, const CallbackReceiverPrx& receiver) { - try - { - CallbackPrx cb = CallbackPrx::uncheckedCast(callback->ice_twoway()); - Context context; - context["_fwd"] = "t"; - while(true) - { - cb->initiateCallbackWithPayload(receiver, context); - test(_callbackReceiver->callbackWithPayloadOK()); - IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(10)); - } - } - catch(const Ice::ConnectionLostException&) - { - // Session was destroyed. - } - catch(const Ice::ObjectNotExistException&) - { - // This might be raised by the CallbackI implementation if it can't invoke on the - // callback receiver because the session is being destroyed concurrently. - } - catch(const Ice::CommunicatorDestroyedException&) - { - // This might happen if the retry fails because the communicator is destroyed. - } - catch(const Ice::Exception& ex) - { - cerr << ex << endl; - test(false); - } + try + { + CallbackPrx cb = CallbackPrx::uncheckedCast(callback->ice_twoway()); + Context context; + context["_fwd"] = "t"; + while(true) + { + cb->initiateCallbackWithPayload(receiver, context); + test(_callbackReceiver->callbackWithPayloadOK()); + IceUtil::ThreadControl::sleep(IceUtil::Time::milliSeconds(10)); + } + } + catch(const Ice::ConnectionLostException&) + { + // Session was destroyed. + } + catch(const Ice::ObjectNotExistException&) + { + // This might be raised by the CallbackI implementation if it can't invoke on the + // callback receiver because the session is being destroyed concurrently. + } + catch(const Ice::CommunicatorDestroyedException&) + { + // This might happen if the retry fails because the communicator is destroyed. + } + catch(const Ice::Exception& ex) + { + cerr << ex << endl; + test(false); + } } }; @@ -437,132 +437,132 @@ CallbackClient::run(int argc, char* argv[]) ObjectPrx routerBase; { - cout << "testing stringToProxy for router... " << flush; - routerBase = communicator()->stringToProxy("Glacier2/router:default -p 12347 -t 10000"); - cout << "ok" << endl; + cout << "testing stringToProxy for router... " << flush; + routerBase = communicator()->stringToProxy("Glacier2/router:default -p 12347 -t 10000"); + cout << "ok" << endl; } Glacier2::RouterPrx router; { - cout << "testing checked cast for router... " << flush; - router = Glacier2::RouterPrx::checkedCast(routerBase); - test(router); - cout << "ok" << endl; + cout << "testing checked cast for router... " << flush; + router = Glacier2::RouterPrx::checkedCast(routerBase); + test(router); + cout << "ok" << endl; } { - cout << "installing router with communicator... " << flush; - communicator()->setDefaultRouter(router); - cout << "ok" << endl; + cout << "installing router with communicator... " << flush; + communicator()->setDefaultRouter(router); + cout << "ok" << endl; } { - cout << "getting the session timeout... " << flush; - Ice::Long timeout = router->getSessionTimeout(); - test(timeout == 30); - cout << "ok" << endl; + cout << "getting the session timeout... " << flush; + Ice::Long timeout = router->getSessionTimeout(); + test(timeout == 30); + cout << "ok" << endl; } ObjectPrx base; { - cout << "testing stringToProxy for server object... " << flush; - base = communicator()->stringToProxy("c1/callback:tcp -p 12010 -t 10000"); - cout << "ok" << endl; + cout << "testing stringToProxy for server object... " << flush; + base = communicator()->stringToProxy("c1/callback:tcp -p 12010 -t 10000"); + cout << "ok" << endl; } - + { - cout << "trying to ping server before session creation... " << flush; - try - { - base->ice_ping(); - test(false); - } - catch(const ConnectionLostException&) - { - cout << "ok" << endl; - } + cout << "trying to ping server before session creation... " << flush; + try + { + base->ice_ping(); + test(false); + } + catch(const ConnectionLostException&) + { + cout << "ok" << endl; + } } Glacier2::SessionPrx session; { - cout << "trying to create session with wrong password... " << flush; - try - { - session = router->createSession("userid", "xxx"); - test(false); - } - catch(const Glacier2::PermissionDeniedException&) - { - cout << "ok" << endl; - } + cout << "trying to create session with wrong password... " << flush; + try + { + session = router->createSession("userid", "xxx"); + test(false); + } + catch(const Glacier2::PermissionDeniedException&) + { + cout << "ok" << endl; + } } { - cout << "trying to destroy non-existing session... " << flush; - try - { - router->destroySession(); - test(false); - } - catch(const Glacier2::SessionNotExistException&) - { - cout << "ok" << endl; - } + cout << "trying to destroy non-existing session... " << flush; + try + { + router->destroySession(); + test(false); + } + catch(const Glacier2::SessionNotExistException&) + { + cout << "ok" << endl; + } } { - cout << "creating session with correct password... " << flush; - session = router->createSession("userid", "abc123"); - cout << "ok" << endl; + cout << "creating session with correct password... " << flush; + session = router->createSession("userid", "abc123"); + cout << "ok" << endl; } { - cout << "trying to create a second session... " << flush; - try - { - router->createSession("userid", "abc123"); - test(false); - } - catch(const Glacier2::CannotCreateSessionException&) - { - cout << "ok" << endl; - } + cout << "trying to create a second session... " << flush; + try + { + router->createSession("userid", "abc123"); + test(false); + } + catch(const Glacier2::CannotCreateSessionException&) + { + cout << "ok" << endl; + } } { - cout << "pinging server after session creation... " << flush; - base->ice_ping(); - cout << "ok" << endl; + cout << "pinging server after session creation... " << flush; + base->ice_ping(); + cout << "ok" << endl; } CallbackPrx twoway; { - cout << "testing checked cast for server object... " << flush; - twoway = CallbackPrx::checkedCast(base); - test(twoway); - cout << "ok" << endl; + cout << "testing checked cast for server object... " << flush; + twoway = CallbackPrx::checkedCast(base); + test(twoway); + cout << "ok" << endl; } ObjectAdapterPtr adapter; { - cout << "creating and activating callback receiver adapter with router... " << flush; - communicator()->getProperties()->setProperty("Ice.PrintAdapterReady", "0"); - adapter = communicator()->createObjectAdapterWithRouter("CallbackReceiverAdapter", router); - adapter->activate(); - cout << "ok" << endl; + cout << "creating and activating callback receiver adapter with router... " << flush; + communicator()->getProperties()->setProperty("Ice.PrintAdapterReady", "0"); + adapter = communicator()->createObjectAdapterWithRouter("CallbackReceiverAdapter", router); + adapter->activate(); + cout << "ok" << endl; } string category; { - cout << "getting category from router... " << flush; - category = router->getCategoryForClient(); - cout << "ok" << endl; + cout << "getting category from router... " << flush; + category = router->getCategoryForClient(); + cout << "ok" << endl; } CallbackReceiverI* callbackReceiverImpl; @@ -571,38 +571,38 @@ CallbackClient::run(int argc, char* argv[]) CallbackReceiverPrx fakeTwowayR; { - cout << "creating and adding callback receiver object... " << flush; - callbackReceiverImpl = new CallbackReceiverI; - callbackReceiver = callbackReceiverImpl; - Identity callbackReceiverIdent; - callbackReceiverIdent.name = "callbackReceiver"; - callbackReceiverIdent.category = category; - twowayR = CallbackReceiverPrx::uncheckedCast(adapter->add(callbackReceiver, callbackReceiverIdent)); - Identity fakeCallbackReceiverIdent; - fakeCallbackReceiverIdent.name = "callbackReceiver"; - fakeCallbackReceiverIdent.category = "dummy"; - fakeTwowayR = CallbackReceiverPrx::uncheckedCast(adapter->add(callbackReceiver, fakeCallbackReceiverIdent)); - cout << "ok" << endl; + cout << "creating and adding callback receiver object... " << flush; + callbackReceiverImpl = new CallbackReceiverI; + callbackReceiver = callbackReceiverImpl; + Identity callbackReceiverIdent; + callbackReceiverIdent.name = "callbackReceiver"; + callbackReceiverIdent.category = category; + twowayR = CallbackReceiverPrx::uncheckedCast(adapter->add(callbackReceiver, callbackReceiverIdent)); + Identity fakeCallbackReceiverIdent; + fakeCallbackReceiverIdent.name = "callbackReceiver"; + fakeCallbackReceiverIdent.category = "dummy"; + fakeTwowayR = CallbackReceiverPrx::uncheckedCast(adapter->add(callbackReceiver, fakeCallbackReceiverIdent)); + cout << "ok" << endl; } { - cout << "testing oneway callback... " << flush; - CallbackPrx oneway = CallbackPrx::uncheckedCast(twoway->ice_oneway()); - CallbackReceiverPrx onewayR = CallbackReceiverPrx::uncheckedCast(twowayR->ice_oneway()); - Context context; - context["_fwd"] = "o"; - oneway->initiateCallback(onewayR, context); - test(callbackReceiverImpl->callbackOK()); - cout << "ok" << endl; + cout << "testing oneway callback... " << flush; + CallbackPrx oneway = CallbackPrx::uncheckedCast(twoway->ice_oneway()); + CallbackReceiverPrx onewayR = CallbackReceiverPrx::uncheckedCast(twowayR->ice_oneway()); + Context context; + context["_fwd"] = "o"; + oneway->initiateCallback(onewayR, context); + test(callbackReceiverImpl->callbackOK()); + cout << "ok" << endl; } { - cout << "testing twoway callback... " << flush; - Context context; - context["_fwd"] = "t"; - twoway->initiateCallback(twowayR, context); - test(callbackReceiverImpl->callbackOK()); - cout << "ok" << endl; + cout << "testing twoway callback... " << flush; + Context context; + context["_fwd"] = "t"; + twoway->initiateCallback(twowayR, context); + test(callbackReceiverImpl->callbackOK()); + cout << "ok" << endl; } // @@ -612,292 +612,292 @@ CallbackClient::run(int argc, char* argv[]) // twoway requests (see bug 337 for more information). // { - cout << "testing concurrent twoway callback... " << flush; - Context context; - context["_fwd"] = "t"; - AMI_Callback_initiateConcurrentCallbackIPtr cb0 = new AMI_Callback_initiateConcurrentCallbackI(); - twoway->initiateConcurrentCallback_async(cb0, 0, twowayR, context); - AMI_Callback_initiateConcurrentCallbackIPtr cb1 = new AMI_Callback_initiateConcurrentCallbackI(); - twoway->initiateConcurrentCallback_async(cb1, 1, twowayR, context); - AMI_Callback_initiateConcurrentCallbackIPtr cb2 = new AMI_Callback_initiateConcurrentCallbackI(); - twoway->initiateConcurrentCallback_async(cb2, 2, twowayR, context); - test(callbackReceiverImpl->answerConcurrentCallbacks(3)); - test(cb0->waitResponse() == 0); - test(cb1->waitResponse() == 1); - test(cb2->waitResponse() == 2); - cout << "ok" << endl; - } - - { - cout << "ditto, but with user exception... " << flush; - Context context; - context["_fwd"] = "t"; - try - { - twoway->initiateCallbackEx(twowayR, context); - test(false); - } - catch(const CallbackException& ex) - { - test(ex.someValue == 3.14); - test(ex.someString == "3.14"); - } - test(callbackReceiverImpl->callbackOK()); - cout << "ok" << endl; - } - - { - cout << "trying twoway callback with fake category... " << flush; - Context context; - context["_fwd"] = "t"; - try - { - twoway->initiateCallback(fakeTwowayR, context); - test(false); - } - catch(const ObjectNotExistException&) - { - cout << "ok" << endl; - } - } - - { - cout << "testing whether other allowed category is accepted... " << flush; - Context context; - context["_fwd"] = "t"; - CallbackPrx otherCategoryTwoway = CallbackPrx::uncheckedCast( - twoway->ice_identity(communicator()->stringToIdentity("c2/callback"))); - otherCategoryTwoway->initiateCallback(twowayR, context); - test(callbackReceiverImpl->callbackOK()); - cout << "ok" << endl; - } - - { - cout << "testing whether disallowed category gets rejected... " << flush; - Context context; - context["_fwd"] = "t"; - try - { - CallbackPrx otherCategoryTwoway = CallbackPrx::uncheckedCast( - twoway->ice_identity(communicator()->stringToIdentity("c3/callback"))); - otherCategoryTwoway->initiateCallback(twowayR, context); - test(false); - } - catch(const ObjectNotExistException&) - { - cout << "ok" << endl; - } - } - - { - cout << "testing whether user-id as category is accepted... " << flush; - Context context; - context["_fwd"] = "t"; - CallbackPrx otherCategoryTwoway = CallbackPrx::uncheckedCast( - twoway->ice_identity(communicator()->stringToIdentity("_userid/callback"))); - otherCategoryTwoway->initiateCallback(twowayR, context); - test(callbackReceiverImpl->callbackOK()); - cout << "ok" << endl; - } - - { - cout << "testing buffered mode... " << flush; - - // - // Start 3 misbehaving clients. - // - const int nClients = 3; // Passwords need to be added to the password file if more clients are needed. - int i; - vector<MisbehavedClientPtr> clients; - for(i = 0; i < nClients; ++i) - { - clients.push_back(new MisbehavedClient(i)); - clients.back()->start(); - clients.back()->waitForCallback(); - } - - // - // Sleep for one second to make sure the router starts sending - // the callback with the payload to the clients. - // - IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(1)); - - // - // Initiate few callbacks with a large payload. Because of - // the buffered mode, this shouldn't block even though the - // misbehaved client are not answering their callback - // requests. - // - Context context; - context["_fwd"] = "t"; - twoway->initiateCallbackWithPayload(twowayR, context); - test(callbackReceiverImpl->callbackWithPayloadOK()); - twoway->initiateCallbackWithPayload(twowayR, context); - test(callbackReceiverImpl->callbackWithPayloadOK()); - twoway->initiateCallbackWithPayload(twowayR, context); - test(callbackReceiverImpl->callbackWithPayloadOK()); - twoway->initiateCallbackWithPayload(twowayR, context); - test(callbackReceiverImpl->callbackWithPayloadOK()); - - for(vector<MisbehavedClientPtr>::const_iterator p = clients.begin(); p != clients.end(); ++p) - { - (*p)->notifyWaitCallback(); - (*p)->getThreadControl().join(); - } - - cout << "ok" << endl; - } - - { - cout << "stress test... " << flush; - const int nClients = 3; // Passwords need to be added to the password file if more clients are needed. - int i; - vector<StressClientPtr> clients; - for(i = 0; i < nClients; ++i) - { - switch(IceUtil::random(3)) - { - case 0: - clients.push_back(new PingStressClient(i)); - break; - case 1: - clients.push_back(new CallbackStressClient(i)); - break; - case 2: - clients.push_back(new CallbackWithPayloadStressClient(i)); - break; - default: - assert(false); - break; - } - clients.back()->start(); - } - for(vector<StressClientPtr>::const_iterator p = clients.begin(); p != clients.end(); ++p) - { - (*p)->notifyThread(); - } - - // - // Let the stress client run for a bit. - // - IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(3)); - - // - // Send some callbacks. - // - Context context; - context["_fwd"] = "t"; - twoway->initiateCallback(twowayR); - test(callbackReceiverImpl->callbackOK()); - - // - // Kill the stress clients. - // - for(vector<StressClientPtr>::const_iterator q = clients.begin(); q != clients.end(); ++q) - { - (*q)->kill(); - (*q)->getThreadControl().join(); - } - - - cout << "ok" << endl; - } - - { - cout << "testing server shutdown... " << flush; - twoway->shutdown(); - // No ping, otherwise the router prints a warning message if it's - // started with --Ice.Warn.Connections. - cout << "ok" << endl; - /* - try - { - base->ice_ping(); - test(false); - } - // If we use the glacier router, the exact exception reason gets - // lost. - catch(const UnknownLocalException&) - { - cout << "ok" << endl; - } - */ + cout << "testing concurrent twoway callback... " << flush; + Context context; + context["_fwd"] = "t"; + AMI_Callback_initiateConcurrentCallbackIPtr cb0 = new AMI_Callback_initiateConcurrentCallbackI(); + twoway->initiateConcurrentCallback_async(cb0, 0, twowayR, context); + AMI_Callback_initiateConcurrentCallbackIPtr cb1 = new AMI_Callback_initiateConcurrentCallbackI(); + twoway->initiateConcurrentCallback_async(cb1, 1, twowayR, context); + AMI_Callback_initiateConcurrentCallbackIPtr cb2 = new AMI_Callback_initiateConcurrentCallbackI(); + twoway->initiateConcurrentCallback_async(cb2, 2, twowayR, context); + test(callbackReceiverImpl->answerConcurrentCallbacks(3)); + test(cb0->waitResponse() == 0); + test(cb1->waitResponse() == 1); + test(cb2->waitResponse() == 2); + cout << "ok" << endl; + } + + { + cout << "ditto, but with user exception... " << flush; + Context context; + context["_fwd"] = "t"; + try + { + twoway->initiateCallbackEx(twowayR, context); + test(false); + } + catch(const CallbackException& ex) + { + test(ex.someValue == 3.14); + test(ex.someString == "3.14"); + } + test(callbackReceiverImpl->callbackOK()); + cout << "ok" << endl; + } + + { + cout << "trying twoway callback with fake category... " << flush; + Context context; + context["_fwd"] = "t"; + try + { + twoway->initiateCallback(fakeTwowayR, context); + test(false); + } + catch(const ObjectNotExistException&) + { + cout << "ok" << endl; + } + } + + { + cout << "testing whether other allowed category is accepted... " << flush; + Context context; + context["_fwd"] = "t"; + CallbackPrx otherCategoryTwoway = CallbackPrx::uncheckedCast( + twoway->ice_identity(communicator()->stringToIdentity("c2/callback"))); + otherCategoryTwoway->initiateCallback(twowayR, context); + test(callbackReceiverImpl->callbackOK()); + cout << "ok" << endl; + } + + { + cout << "testing whether disallowed category gets rejected... " << flush; + Context context; + context["_fwd"] = "t"; + try + { + CallbackPrx otherCategoryTwoway = CallbackPrx::uncheckedCast( + twoway->ice_identity(communicator()->stringToIdentity("c3/callback"))); + otherCategoryTwoway->initiateCallback(twowayR, context); + test(false); + } + catch(const ObjectNotExistException&) + { + cout << "ok" << endl; + } + } + + { + cout << "testing whether user-id as category is accepted... " << flush; + Context context; + context["_fwd"] = "t"; + CallbackPrx otherCategoryTwoway = CallbackPrx::uncheckedCast( + twoway->ice_identity(communicator()->stringToIdentity("_userid/callback"))); + otherCategoryTwoway->initiateCallback(twowayR, context); + test(callbackReceiverImpl->callbackOK()); + cout << "ok" << endl; + } + + { + cout << "testing buffered mode... " << flush; + + // + // Start 3 misbehaving clients. + // + const int nClients = 3; // Passwords need to be added to the password file if more clients are needed. + int i; + vector<MisbehavedClientPtr> clients; + for(i = 0; i < nClients; ++i) + { + clients.push_back(new MisbehavedClient(i)); + clients.back()->start(); + clients.back()->waitForCallback(); + } + + // + // Sleep for one second to make sure the router starts sending + // the callback with the payload to the clients. + // + IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(1)); + + // + // Initiate few callbacks with a large payload. Because of + // the buffered mode, this shouldn't block even though the + // misbehaved client are not answering their callback + // requests. + // + Context context; + context["_fwd"] = "t"; + twoway->initiateCallbackWithPayload(twowayR, context); + test(callbackReceiverImpl->callbackWithPayloadOK()); + twoway->initiateCallbackWithPayload(twowayR, context); + test(callbackReceiverImpl->callbackWithPayloadOK()); + twoway->initiateCallbackWithPayload(twowayR, context); + test(callbackReceiverImpl->callbackWithPayloadOK()); + twoway->initiateCallbackWithPayload(twowayR, context); + test(callbackReceiverImpl->callbackWithPayloadOK()); + + for(vector<MisbehavedClientPtr>::const_iterator p = clients.begin(); p != clients.end(); ++p) + { + (*p)->notifyWaitCallback(); + (*p)->getThreadControl().join(); + } + + cout << "ok" << endl; + } + + { + cout << "stress test... " << flush; + const int nClients = 3; // Passwords need to be added to the password file if more clients are needed. + int i; + vector<StressClientPtr> clients; + for(i = 0; i < nClients; ++i) + { + switch(IceUtil::random(3)) + { + case 0: + clients.push_back(new PingStressClient(i)); + break; + case 1: + clients.push_back(new CallbackStressClient(i)); + break; + case 2: + clients.push_back(new CallbackWithPayloadStressClient(i)); + break; + default: + assert(false); + break; + } + clients.back()->start(); + } + for(vector<StressClientPtr>::const_iterator p = clients.begin(); p != clients.end(); ++p) + { + (*p)->notifyThread(); + } + + // + // Let the stress client run for a bit. + // + IceUtil::ThreadControl::sleep(IceUtil::Time::seconds(3)); + + // + // Send some callbacks. + // + Context context; + context["_fwd"] = "t"; + twoway->initiateCallback(twowayR); + test(callbackReceiverImpl->callbackOK()); + + // + // Kill the stress clients. + // + for(vector<StressClientPtr>::const_iterator q = clients.begin(); q != clients.end(); ++q) + { + (*q)->kill(); + (*q)->getThreadControl().join(); + } + + + cout << "ok" << endl; + } + + { + cout << "testing server shutdown... " << flush; + twoway->shutdown(); + // No ping, otherwise the router prints a warning message if it's + // started with --Ice.Warn.Connections. + cout << "ok" << endl; + /* + try + { + base->ice_ping(); + test(false); + } + // If we use the glacier router, the exact exception reason gets + // lost. + catch(const UnknownLocalException&) + { + cout << "ok" << endl; + } + */ } { - cout << "destroying session... " << flush; - try - { - router->destroySession(); - test(false); - } - catch(const Ice::ConnectionLostException&) - { - } - catch(const Ice::LocalException&) - { - test(false); - } - cout << "ok" << endl; - } - - { - cout << "trying to ping server after session destruction... " << flush; - try - { - base->ice_ping(); - test(false); - } - catch(const ConnectionLostException&) - { - cout << "ok" << endl; - } + cout << "destroying session... " << flush; + try + { + router->destroySession(); + test(false); + } + catch(const Ice::ConnectionLostException&) + { + } + catch(const Ice::LocalException&) + { + test(false); + } + cout << "ok" << endl; + } + + { + cout << "trying to ping server after session destruction... " << flush; + try + { + base->ice_ping(); + test(false); + } + catch(const ConnectionLostException&) + { + cout << "ok" << endl; + } } if(argc >= 2 && strcmp(argv[1], "--shutdown") == 0) { - { - cout << "uninstalling router with communicator... " << flush; - communicator()->setDefaultRouter(0); - cout << "ok" << endl; - } + { + cout << "uninstalling router with communicator... " << flush; + communicator()->setDefaultRouter(0); + cout << "ok" << endl; + } - ObjectPrx adminBase; + ObjectPrx adminBase; - { - cout << "testing stringToProxy for admin object... " << flush; - adminBase = communicator()->stringToProxy("Glacier2/admin:tcp -h 127.0.0.1 -p 12348 -t 10000"); - cout << "ok" << endl; - } - + { + cout << "testing stringToProxy for admin object... " << flush; + adminBase = communicator()->stringToProxy("Glacier2/admin:tcp -h 127.0.0.1 -p 12348 -t 10000"); + cout << "ok" << endl; + } + /* - { - cout << "uninstalling router with admin object... " << flush; - adminBase->ice_router(0); - cout << "ok" << endl; - } + { + cout << "uninstalling router with admin object... " << flush; + adminBase->ice_router(0); + cout << "ok" << endl; + } */ - Glacier2::AdminPrx admin; - - { - cout << "testing checked cast for admin object... " << flush; - admin = Glacier2::AdminPrx::checkedCast(adminBase); - test(admin); - cout << "ok" << endl; - } - - cout << "testing Glacier2 shutdown... " << flush; - admin->shutdown(); - try - { - admin->ice_ping(); - test(false); - } - catch(const Ice::LocalException&) - { - cout << "ok" << endl; - } + Glacier2::AdminPrx admin; + + { + cout << "testing checked cast for admin object... " << flush; + admin = Glacier2::AdminPrx::checkedCast(adminBase); + test(admin); + cout << "ok" << endl; + } + + cout << "testing Glacier2 shutdown... " << flush; + admin->shutdown(); + try + { + admin->ice_ping(); + test(false); + } + catch(const Ice::LocalException&) + { + cout << "ok" << endl; + } } return EXIT_SUCCESS; |