summaryrefslogtreecommitdiff
path: root/cpp/test/Ice/dispatcher/AllTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/test/Ice/dispatcher/AllTests.cpp')
-rw-r--r--cpp/test/Ice/dispatcher/AllTests.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/cpp/test/Ice/dispatcher/AllTests.cpp b/cpp/test/Ice/dispatcher/AllTests.cpp
new file mode 100644
index 00000000000..80741e951e0
--- /dev/null
+++ b/cpp/test/Ice/dispatcher/AllTests.cpp
@@ -0,0 +1,96 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <Ice/Ice.h>
+#include <IceUtil/Random.h>
+#include <TestCommon.h>
+#include <Test.h>
+#include <Dispatcher.h>
+
+using namespace std;
+
+namespace
+{
+
+class Callback : public IceUtil::Shared
+{
+public:
+
+ void
+ response()
+ {
+ test(Dispatcher::isDispatcherThread());
+ }
+
+ void
+ exception(const Ice::Exception& ex)
+ {
+ test(dynamic_cast<const Ice::NoEndpointException*>(&ex));
+ test(Dispatcher::isDispatcherThread());
+ }
+
+ void
+ sent(bool sentSynchronously)
+ {
+ test(sentSynchronously || Dispatcher::isDispatcherThread());
+ }
+};
+typedef IceUtil::Handle<Callback> CallbackPtr;
+
+}
+
+
+void
+allTests(const Ice::CommunicatorPtr& communicator)
+{
+ string sref = "test:default -p 12010";
+ Ice::ObjectPrx obj = communicator->stringToProxy(sref);
+ test(obj);
+
+ Test::TestIntfPrx p = Test::TestIntfPrx::uncheckedCast(obj);
+
+ sref = "testController:tcp -p 12011";
+ obj = communicator->stringToProxy(sref);
+ test(obj);
+
+ Test::TestIntfControllerPrx testController = Test::TestIntfControllerPrx::uncheckedCast(obj);
+
+ cout << "testing dispatcher... " << flush;
+ {
+ p->op();
+
+ CallbackPtr cb = new Callback();
+ Test::Callback_TestIntf_opPtr callback = Test::newCallback_TestIntf_op(cb,
+ &Callback::response,
+ &Callback::exception);
+ p->begin_op(callback);
+
+ Test::TestIntfPrx i = p->ice_adapterId("dummy");
+ i->begin_op(callback);
+
+ testController->holdAdapter();
+
+ Test::Callback_TestIntf_opWithPayloadPtr callback2 =
+ Test::newCallback_TestIntf_opWithPayload(cb, &Callback::response, &Callback::exception, &Callback::sent);
+
+ Ice::ByteSeq seq;
+ seq.resize(1024); // Make sure the request doesn't compress too well.
+ for(Ice::ByteSeq::iterator q = seq.begin(); q != seq.end(); ++q)
+ {
+ *q = static_cast<Ice::Byte>(IceUtilInternal::random(255));
+ }
+ while(p->begin_opWithPayload(seq, callback2)->sentSynchronously());
+ testController->resumeAdapter();
+ }
+ cout << "ok" << endl;
+
+ p->shutdown();
+}
+
+