diff options
Diffstat (limited to 'cpp/test')
-rw-r--r-- | cpp/test/Ice/objects/AllTests.cpp | 20 | ||||
-rw-r--r-- | cpp/test/Ice/objects/Client.cpp | 2 | ||||
-rw-r--r-- | cpp/test/Ice/objects/Collocated.cpp | 1 | ||||
-rw-r--r-- | cpp/test/Ice/objects/Test.ice | 3 | ||||
-rw-r--r-- | cpp/test/Ice/objects/TestI.cpp | 14 | ||||
-rw-r--r-- | cpp/test/Ice/objects/TestI.h | 3 | ||||
-rw-r--r-- | cpp/test/Ice/optional/AllTests.cpp | 1 | ||||
-rw-r--r-- | cpp/test/Ice/optional/Client.cpp | 1 | ||||
-rw-r--r-- | cpp/test/Ice/optional/Server.cpp | 1 | ||||
-rw-r--r-- | cpp/test/Ice/optional/ServerAMD.cpp | 1 | ||||
-rw-r--r-- | cpp/test/Ice/slicing/objects/Client.cpp | 1 | ||||
-rw-r--r-- | cpp/test/Ice/slicing/objects/Server.cpp | 1 | ||||
-rw-r--r-- | cpp/test/Ice/slicing/objects/ServerAMD.cpp | 1 | ||||
-rw-r--r-- | cpp/test/Ice/stream/Client.cpp | 4 |
14 files changed, 52 insertions, 2 deletions
diff --git a/cpp/test/Ice/objects/AllTests.cpp b/cpp/test/Ice/objects/AllTests.cpp index 65134a2c49e..c84b73d51a9 100644 --- a/cpp/test/Ice/objects/AllTests.cpp +++ b/cpp/test/Ice/objects/AllTests.cpp @@ -604,5 +604,25 @@ allTests(Test::TestHelper* helper) } cout << "ok" << endl; + cout << "testing sending class cycle... " << flush; + { + RecursivePtr rec = ICE_MAKE_SHARED(Recursive); + rec->v = rec; + bool acceptsCycles = initial->acceptsClassCycles(); + try + { + initial->setCycle(rec); + test(acceptsCycles); + } + catch(const Ice::UnknownLocalException&) + { + // expected when the remote server does not accept cycles + // and throws a MarshalException + test(!acceptsCycles); + } + rec->v = ICE_NULLPTR; + } + cout << "ok" << endl; + return initial; } diff --git a/cpp/test/Ice/objects/Client.cpp b/cpp/test/Ice/objects/Client.cpp index 4d5dc868b83..a27c51e17f6 100644 --- a/cpp/test/Ice/objects/Client.cpp +++ b/cpp/test/Ice/objects/Client.cpp @@ -118,7 +118,7 @@ void Client::run(int argc, char** argv) { Ice::PropertiesPtr properties = createTestProperties(argc, argv); - + properties->setProperty("Ice.AcceptClassCycles", "1"); #ifndef ICE_CPP11_MAPPING properties->setProperty("Ice.CollectObjects", "1"); #endif diff --git a/cpp/test/Ice/objects/Collocated.cpp b/cpp/test/Ice/objects/Collocated.cpp index eb4434fbe39..0633cfa5d13 100644 --- a/cpp/test/Ice/objects/Collocated.cpp +++ b/cpp/test/Ice/objects/Collocated.cpp @@ -110,6 +110,7 @@ void Collocated::run(int argc, char** argv) { Ice::PropertiesPtr properties = createTestProperties(argc, argv); + properties->setProperty("Ice.AcceptClassCycles", "1"); #ifndef ICE_CPP11_MAPPING properties->setProperty("Ice.CollectObjects", "1"); #endif diff --git a/cpp/test/Ice/objects/Test.ice b/cpp/test/Ice/objects/Test.ice index 38214e39951..a89b9beb0e8 100644 --- a/cpp/test/Ice/objects/Test.ice +++ b/cpp/test/Ice/objects/Test.ice @@ -222,6 +222,9 @@ interface Initial void setRecursive(Recursive p); bool supportsClassGraphDepthMax(); + void setCycle(Recursive r); + bool acceptsClassCycles(); + ["marshaled-result"] B getMB(); ["amd", "marshaled-result"] B getAMDMB(); diff --git a/cpp/test/Ice/objects/TestI.cpp b/cpp/test/Ice/objects/TestI.cpp index 9cfd4c395eb..abf4154e59e 100644 --- a/cpp/test/Ice/objects/TestI.cpp +++ b/cpp/test/Ice/objects/TestI.cpp @@ -187,6 +187,20 @@ InitialI::supportsClassGraphDepthMax(const Ice::Current&) return true; } +void +InitialI::setCycle(ICE_IN(RecursivePtr) r, const Ice::Current&) +{ + // break the cycle + assert(r); + r->v = ICE_NULLPTR; +} + +bool +InitialI::acceptsClassCycles(const Ice::Current& c) +{ + return c.adapter->getCommunicator()->getProperties()->getPropertyAsInt("Ice.AcceptClassCycles") > 0; +} + #ifdef ICE_CPP11_MAPPING InitialI::GetMBMarshaledResult InitialI::getMB(const Ice::Current& current) diff --git a/cpp/test/Ice/objects/TestI.h b/cpp/test/Ice/objects/TestI.h index 3b265a19664..78874dbb91b 100644 --- a/cpp/test/Ice/objects/TestI.h +++ b/cpp/test/Ice/objects/TestI.h @@ -93,6 +93,9 @@ public: virtual void setRecursive(ICE_IN(Test::RecursivePtr), const Ice::Current&); virtual bool supportsClassGraphDepthMax(const Ice::Current&); + virtual void setCycle(ICE_IN(Test::RecursivePtr), const Ice::Current&); + virtual bool acceptsClassCycles(const Ice::Current&); + #ifdef ICE_CPP11_MAPPING virtual GetMBMarshaledResult getMB(const Ice::Current&); virtual void getAMDMBAsync(std::function<void(const GetAMDMBMarshaledResult&)>, diff --git a/cpp/test/Ice/optional/AllTests.cpp b/cpp/test/Ice/optional/AllTests.cpp index 7b00e0a421c..369d2228cc6 100644 --- a/cpp/test/Ice/optional/AllTests.cpp +++ b/cpp/test/Ice/optional/AllTests.cpp @@ -587,6 +587,7 @@ allTests(Test::TestHelper* helper, bool) mo1->k = mo1; MultiOptionalPtr mo5 = ICE_DYNAMIC_CAST(MultiOptional, initial->pingPong(mo1)); + test(mo5->a == mo1->a); test(mo5->b == mo1->b); test(mo5->c == mo1->c); diff --git a/cpp/test/Ice/optional/Client.cpp b/cpp/test/Ice/optional/Client.cpp index 1f2bb2edb45..4806e2f02cf 100644 --- a/cpp/test/Ice/optional/Client.cpp +++ b/cpp/test/Ice/optional/Client.cpp @@ -20,6 +20,7 @@ void Client::run(int argc, char** argv) { Ice::PropertiesPtr properties = createTestProperties(argc, argv); + properties->setProperty("Ice.AcceptClassCycles", "1"); #ifndef ICE_CPP11_MAPPING properties->setProperty("Ice.CollectObjects", "1"); #endif diff --git a/cpp/test/Ice/optional/Server.cpp b/cpp/test/Ice/optional/Server.cpp index f526d0355d9..a84d6694b7e 100644 --- a/cpp/test/Ice/optional/Server.cpp +++ b/cpp/test/Ice/optional/Server.cpp @@ -20,6 +20,7 @@ void Server::run(int argc, char** argv) { Ice::PropertiesPtr properties = createTestProperties(argc, argv); + properties->setProperty("Ice.AcceptClassCycles", "1"); #ifndef ICE_CPP11_MAPPING properties->setProperty("Ice.CollectObjects", "1"); #endif diff --git a/cpp/test/Ice/optional/ServerAMD.cpp b/cpp/test/Ice/optional/ServerAMD.cpp index bdc012694ce..f9d16fed20f 100644 --- a/cpp/test/Ice/optional/ServerAMD.cpp +++ b/cpp/test/Ice/optional/ServerAMD.cpp @@ -19,6 +19,7 @@ void ServerAMD::run(int argc, char** argv) { Ice::PropertiesPtr properties = createTestProperties(argc, argv); + properties->setProperty("Ice.AcceptClassCycles", "1"); #ifndef ICE_CPP11_MAPPING properties->setProperty("Ice.CollectObjects", "1"); #endif diff --git a/cpp/test/Ice/slicing/objects/Client.cpp b/cpp/test/Ice/slicing/objects/Client.cpp index 537d7e9d216..b9f217e495d 100644 --- a/cpp/test/Ice/slicing/objects/Client.cpp +++ b/cpp/test/Ice/slicing/objects/Client.cpp @@ -23,6 +23,7 @@ Client::run(int argc, char** argv) // // For this test, we enable object collection. // + properties->setProperty("Ice.AcceptClassCycles", "1"); properties->setProperty("Ice.CollectObjects", "1"); Ice::CommunicatorHolder communicator = initialize(argc, argv, properties); diff --git a/cpp/test/Ice/slicing/objects/Server.cpp b/cpp/test/Ice/slicing/objects/Server.cpp index f1cd93e6ae3..b7ca13be31b 100644 --- a/cpp/test/Ice/slicing/objects/Server.cpp +++ b/cpp/test/Ice/slicing/objects/Server.cpp @@ -19,6 +19,7 @@ void Server::run(int argc, char** argv) { Ice::PropertiesPtr properties = createTestProperties(argc, argv); + properties->setProperty("Ice.AcceptClassCycles", "1"); #ifndef ICE_CPP11_MAPPING properties->setProperty("Ice.CollectObjects", "1"); #endif diff --git a/cpp/test/Ice/slicing/objects/ServerAMD.cpp b/cpp/test/Ice/slicing/objects/ServerAMD.cpp index ab4df8a0f5e..e7e60f6998f 100644 --- a/cpp/test/Ice/slicing/objects/ServerAMD.cpp +++ b/cpp/test/Ice/slicing/objects/ServerAMD.cpp @@ -19,6 +19,7 @@ void ServerAMD::run(int argc, char** argv) { Ice::PropertiesPtr properties = createTestProperties(argc, argv); + properties->setProperty("Ice.AcceptClassCycles", "1"); #ifndef ICE_CPP11_MAPPING properties->setProperty("Ice.CollectObjects", "1"); #endif diff --git a/cpp/test/Ice/stream/Client.cpp b/cpp/test/Ice/stream/Client.cpp index 23a2be692df..879b93ffb61 100644 --- a/cpp/test/Ice/stream/Client.cpp +++ b/cpp/test/Ice/stream/Client.cpp @@ -1365,7 +1365,9 @@ public: void Client::run(int argc, char** argv) { - Ice::CommunicatorHolder communicator = initialize(argc, argv); + Ice::PropertiesPtr properties = createTestProperties(argc, argv); + properties->setProperty("Ice.AcceptClassCycles", "1"); + Ice::CommunicatorHolder communicator = initialize(argc, argv, properties); void allTests(Test::TestHelper*); allTests(this); } |