diff options
Diffstat (limited to 'TAO/tests/Bug_2134_Regression/Hello.cpp')
-rw-r--r-- | TAO/tests/Bug_2134_Regression/Hello.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/TAO/tests/Bug_2134_Regression/Hello.cpp b/TAO/tests/Bug_2134_Regression/Hello.cpp new file mode 100644 index 00000000000..1c4929b1e18 --- /dev/null +++ b/TAO/tests/Bug_2134_Regression/Hello.cpp @@ -0,0 +1,124 @@ +// $Id$ + +#include "tao/corba.h" +#include "tao/IORTable/IORTable.h" +#include "tao/Messaging/Messaging.h" +#include "tao/AnyTypeCode/Any.h" +#include "ace/OS_NS_string.h" +#include "ace/SString.h" + +#include "HelloS.h" + +namespace Test +{ +class Hello_impl: virtual public POA_Test::Hello +{ +public: + void say_hello() + { + }; +}; +} + +int main(int argc, char* argv[]) +{ + int status = 0; + CORBA::ORB_var orb = CORBA::ORB::_nil(); + + try + { + // Initialize the ORB + orb = CORBA::ORB_init (argc, argv); + + // create Hello object + Test::Hello_impl hello_i; + + // Get the root POA + CORBA::Object_var obj_root = orb->resolve_initial_references ("RootPOA"); + + PortableServer::POA_var rootPOA = PortableServer::POA::_narrow (obj_root.in ()); + + PortableServer::ObjectId_var id = + rootPOA->activate_object (&hello_i); + + CORBA::Object_var object = rootPOA->id_to_reference (id.in ()); + + Test::Hello_var hello = Test::Hello::_narrow (object.in ()); + + // give our object a friendly name + CORBA::Object_var iorTableObj = + orb->resolve_initial_references ("IORTable"); + + IORTable::Table_var iorTable + = IORTable::Table::_narrow (iorTableObj.in ()); + + CORBA::String_var ior_string = orb->object_to_string (hello.in ()); + + iorTable->bind("hello", ior_string.in ()); + + ACE_DEBUG ((LM_DEBUG, "Created binding of name 'hello' in IOR table for IOR:\n%s\n", ior_string.in ())); + + // Activate the POA manager + PortableServer::POAManager_var poaManager = rootPOA->the_POAManager (); + + poaManager->activate (); + + // try and access the object with its friendly name + ACE_CString full_corbaloc (ior_string.in (), 0, 1); + + CORBA::ULong first_slash = full_corbaloc.find ("/", 0); + + ACE_CString friendly_corbaloc = + full_corbaloc.substring (0, + first_slash); + + friendly_corbaloc += "/hello"; + + ACE_DEBUG ((LM_DEBUG, "Trying to access object with object ref:\n%s\n", friendly_corbaloc.c_str ())); + + CORBA::Object_var obj = orb->string_to_object (friendly_corbaloc.c_str ()); + + TimeBase::TimeT timeout = 10000000; + + CORBA::Any timeout_any; + timeout_any <<= timeout; + + CORBA::PolicyList policy_list (1); + policy_list.length (1); + + policy_list[0] = orb->create_policy ( + Messaging::RELATIVE_RT_TIMEOUT_POLICY_TYPE, + timeout_any); + + CORBA::Object_var rtt_obj = obj->_set_policy_overrides ( + policy_list, + CORBA::SET_OVERRIDE); + + policy_list[0]->destroy(); + + Test::Hello_var hello2 = Test::Hello::_narrow (rtt_obj.in ()); + + if (CORBA::is_nil (hello2.in ())) + { + ACE_ERROR ((LM_ERROR, + "Unable to narrow from " + "corbaloc with policy override\n")); + status = 1; + } + else + { + hello2->say_hello (); + + ACE_DEBUG ((LM_DEBUG, "Test succeeded !!!\n")); + } + + orb->destroy(); + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ("Error - test failed - exception caught:"); + status = 1; + } + + return status; +} |