summaryrefslogtreecommitdiff
path: root/cpp/test/Ice/operations/TwowaysAMI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/test/Ice/operations/TwowaysAMI.cpp')
-rw-r--r--cpp/test/Ice/operations/TwowaysAMI.cpp76
1 files changed, 74 insertions, 2 deletions
diff --git a/cpp/test/Ice/operations/TwowaysAMI.cpp b/cpp/test/Ice/operations/TwowaysAMI.cpp
index 7993d4fb497..36262a2fbd9 100644
--- a/cpp/test/Ice/operations/TwowaysAMI.cpp
+++ b/cpp/test/Ice/operations/TwowaysAMI.cpp
@@ -872,8 +872,7 @@ public:
typedef IceUtil::Handle<AMI_MyClass_opDoubleMarshalingI> AMI_MyClass_opDoubleMarshalingIPtr;
void
-twowaysAMI(const Ice::CommunicatorPtr& communicator,
- const Ice::InitializationData& initializationData, const Test::MyClassPrx& p)
+twowaysAMI(const Ice::CommunicatorPtr& communicator, const Test::MyClassPrx& p)
{
{
// Check that a call to a void operation raises TwowayOnlyException
@@ -1322,6 +1321,79 @@ twowaysAMI(const Ice::CommunicatorPtr& communicator,
communicator->setDefaultContext(Ice::Context());
}
+
+ {
+ //
+ // Test implicit context propagation
+ //
+
+ string impls[] = {"Shared", "SharedWithoutLocking", "PerThread"};
+ for(int i = 0; i < 3; i++)
+ {
+ Ice::InitializationData initData;
+ initData.properties = Ice::createProperties();
+ initData.properties->setProperty("Ice.ImplicitContext", impls[i]);
+
+ Ice::CommunicatorPtr ic = Ice::initialize(initData);
+
+ Ice::Context ctx;
+ ctx["one"] = "ONE";
+ ctx["two"] = "TWO";
+ ctx["three"] = "THREE";
+
+
+ Test::MyClassPrx p = Test::MyClassPrx::uncheckedCast(
+ ic->stringToProxy("test:default -p 12010 -t 10000"));
+
+
+ ic->getImplicitContext()->setContext(ctx);
+ test(ic->getImplicitContext()->getContext() == ctx);
+ {
+ AMI_MyClass_opContextEqualIPtr cb = new AMI_MyClass_opContextEqualI(ctx);
+ p->opContext_async(cb);
+ test(cb->check());
+ }
+
+ ic->getImplicitContext()->set("zero", "ZERO");
+ test(ic->getImplicitContext()->get("zero") == "ZERO");
+ test(ic->getImplicitContext()->getWithDefault("foobar", "foo") == "foo");
+
+ ctx = ic->getImplicitContext()->getContext();
+ {
+ AMI_MyClass_opContextEqualIPtr cb = new AMI_MyClass_opContextEqualI(ctx);
+ p->opContext_async(cb);
+ test(cb->check());
+ }
+
+ Ice::Context prxContext;
+ prxContext["one"] = "UN";
+ prxContext["four"] = "QUATRE";
+
+ Ice::Context combined = prxContext;
+ combined.insert(ctx.begin(), ctx.end());
+ test(combined["one"] == "UN");
+
+ p = Test::MyClassPrx::uncheckedCast(p->ice_context(prxContext));
+
+ ic->getImplicitContext()->setContext(Ice::Context());
+ {
+ AMI_MyClass_opContextEqualIPtr cb = new AMI_MyClass_opContextEqualI(prxContext);
+ p->opContext_async(cb);
+ test(cb->check());
+ }
+
+ ic->getImplicitContext()->setContext(ctx);
+ {
+ AMI_MyClass_opContextEqualIPtr cb = new AMI_MyClass_opContextEqualI(combined);
+ p->opContext_async(cb);
+ test(cb->check());
+ }
+
+ ic->destroy();
+ }
+ }
+
+
}
{