diff options
Diffstat (limited to 'TAO/orbsvcs/tests/Simple_Naming/client.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/Simple_Naming/client.cpp | 1267 |
1 files changed, 0 insertions, 1267 deletions
diff --git a/TAO/orbsvcs/tests/Simple_Naming/client.cpp b/TAO/orbsvcs/tests/Simple_Naming/client.cpp deleted file mode 100644 index 9233d1c1b04..00000000000 --- a/TAO/orbsvcs/tests/Simple_Naming/client.cpp +++ /dev/null @@ -1,1267 +0,0 @@ -// $Id$ - -// ============================================================================ -// -// = LIBRARY -// TAO/orbsvcs/Naming_Service/ -// -// = FILENAME -// client.cpp -// -// = DESCRIPTION -// This class implements a simple CORBA client for the CosNaming -// example using stubs generated by the TAO ORB IDL compiler. -// -// = AUTHORS -// Sergio Flores-Gaitan <sergio@cs.wustl.edu>, -// Marina Spivak <marina@cs.wustl.edu>, and -// Douglas C. Schmidt <schmidt@cs.wustl.edu> -// ============================================================================ - -#include "client.h" -#include "ace/Get_Opt.h" - -ACE_RCSID(Simple_Naming, client, "$Id$") - -#if defined (_MSC_VER) -# pragma warning (disable : 4250) -#endif /* _MSC_VER */ - -class My_Test_Object : - public virtual PortableServer::RefCountServantBase, - public virtual POA_Test_Object -{ -public: - // = Initialization and termination methods. - My_Test_Object (CORBA::Short id = 0); - // Constructor. - - ~My_Test_Object (void); - // Destructor. - - // = Interface implementation accessor methods. - - void id (CORBA::Short id, CORBA::Environment &ACE_TRY_ENV) - ACE_THROW_SPEC ((CORBA::SystemException)); - // Sets id. - - CORBA::Short id (CORBA::Environment &ACE_TRY_ENV) - ACE_THROW_SPEC ((CORBA::SystemException)); - // Gets id. - -private: - short id_; -}; - -My_Test_Object::My_Test_Object (CORBA::Short id) - : id_ (id) -{ -} - -My_Test_Object::~My_Test_Object (void) -{ -} - -CORBA::Short -My_Test_Object::id (CORBA::Environment &) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - return id_; -} - -void -My_Test_Object::id (CORBA::Short id, CORBA::Environment &) - ACE_THROW_SPEC ((CORBA::SystemException)) -{ - id_ = id; -} - -// Constructor. - -CosNaming_Client::CosNaming_Client (void) - : argc_ (0), - argv_ (0), - test_ (0) -{ -} - -// Parses the command line arguments and returns an error status. - -int -CosNaming_Client::parse_args (void) -{ - ACE_Get_Opt get_opts (argc_, argv_, "p:dstieym:c:"); - int c; - - while ((c = get_opts ()) != -1) - switch (c) - { - case 'd': // debug flag - TAO_debug_level++; - break; - case 's': - if (this->test_ == 0) - ACE_NEW_RETURN (this->test_, - Simple_Test, - -1); - break; - case 'm': - if (this->test_ == 0) - { - int size = ACE_OS::atoi (get_opts.optarg); - if (size <= 0) - size = 10; - - ACE_NEW_RETURN (this->test_, - MT_Test (this->orbmgr_.orb (), size), - -1); - } - - break; - case 't': - if (this->test_ == 0) - ACE_NEW_RETURN (this->test_, - Tree_Test, - -1); - break; - case 'i': - if (this->test_ == 0) - ACE_NEW_RETURN (this->test_, - Iterator_Test, - -1); - break; - case 'e': - if (this->test_ == 0) - ACE_NEW_RETURN (this->test_, - Exceptions_Test, - -1); - break; - case 'y': - if (this->test_ == 0) - ACE_NEW_RETURN (this->test_, - Destroy_Test, - -1); - break; - case 'p': - if (this->test_ == 0) - { - FILE * ior_output_file = - ACE_OS::fopen (get_opts.optarg, "w"); - - if (ior_output_file == 0) - ACE_ERROR_RETURN ((LM_ERROR, - "Unable to open %s for writing: %p\n", - get_opts.optarg), -1); - - ACE_NEW_RETURN (this->test_, - Persistent_Test_Begin (this->orbmgr_.orb (), - ior_output_file), - -1); - } - break; - case 'c': - if (this->test_ == 0) - ACE_NEW_RETURN (this->test_, - Persistent_Test_End (this->orbmgr_.orb (), - get_opts.optarg), - -1); - break; - default: - ACE_ERROR_RETURN ((LM_ERROR, - "Argument %c \n usage: %s" - " [-d]" - " [-s or -e or -t or -i or -y or -p or -c<ior> or -m<size>]" - "\n", - c, - this->argv_ [0]), - -1); - } - - if (this->test_ == 0) - ACE_NEW_RETURN (this->test_, - Simple_Test, - -1); - - // Indicates successful parsing of command line. - return 0; -} - -// Execute client example code. - -int -CosNaming_Client::run (void) -{ - return test_->execute (naming_client_); -} - -CosNaming_Client::~CosNaming_Client (void) -{ - delete test_; -} - -int -CosNaming_Client::init (int argc, char **argv) -{ - this->argc_ = argc; - this->argv_ = argv; - - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // Initialize ORB. - this->orbmgr_.init (this->argc_, - this->argv_, - ACE_TRY_ENV); - ACE_TRY_CHECK; - - this->orbmgr_.activate_poa_manager (ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Parse command line and verify parameters. - if (this->parse_args () == -1) - return -1; - - CORBA::ORB_var orb = this->orbmgr_.orb (); - return this->naming_client_.init (orb.in ()); - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "init"); - // and return -1 below . . . - } - ACE_ENDTRY; - - return -1; -} - -MT_Test::MT_Test (CORBA::ORB_ptr orb, - int size) - :size_ (size), - orb_ (orb), - name_service_ior_ (0) -{ -} - -int -MT_Test::svc (void) -{ - // Obtain object reference to the Naming Service (create new stub.) - - CosNaming::NamingContext_var name_service; - - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY_EX (SETUP) - { - CORBA::Object_var name_service_obj = - orb_->string_to_object (name_service_ior_, ACE_TRY_ENV); - ACE_TRY_CHECK_EX (SETUP); - - name_service = - CosNaming::NamingContext::_narrow (name_service_obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK_EX (SETUP); - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Unexpected exception in MT test"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - // Bind the object. - ACE_TRY_EX (BIND) - { - name_service->bind (test_name_, - test_ref_.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK_EX (BIND); - ACE_DEBUG ((LM_DEBUG, - "Bound name OK in thread %8.8x \n", - ACE_OS::thr_self ())); - } - ACE_CATCH (CosNaming::NamingContext::AlreadyBound, ex) - { - ACE_DEBUG ((LM_DEBUG, - "Unable to bind in thread %8.8x \n", - ACE_OS::thr_self ())); - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Unexpected exception in MT test"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - // Resolve the object from the Naming Context. - ACE_TRY_EX (RESOLVE) - { - CORBA::Object_var result_obj_ref = - name_service->resolve (test_name_, - ACE_TRY_ENV); - ACE_TRY_CHECK_EX (RESOLVE); - - Test_Object_var result_object = - Test_Object::_narrow (result_obj_ref.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK_EX (RESOLVE); - - if (!CORBA::is_nil (result_object.in ())) - { - CORBA::Short id = result_object->id (ACE_TRY_ENV); - ACE_TRY_CHECK_EX (RESOLVE); - - if (id == CosNaming_Client::OBJ1_ID) - ACE_DEBUG ((LM_DEBUG, - "Resolved name OK in thread %8.8x \n", - ACE_OS::thr_self ())); - } - } - ACE_CATCH (CosNaming::NamingContext::NotFound, ex) - { - ACE_DEBUG ((LM_DEBUG, - "Unable to resolve in thread %8.8x \n", - ACE_OS::thr_self ())); - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Unexpected exception in MT test"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - // Unbind the object from the Naming Context. - ACE_TRY_EX (UNBIND) - { - name_service->unbind (test_name_, - ACE_TRY_ENV); - ACE_TRY_CHECK_EX (UNBIND); - ACE_DEBUG ((LM_DEBUG, - "Unbound name OK in thread %8.8x \n", - ACE_OS::thr_self ())); - } - ACE_CATCH (CosNaming::NamingContext::NotFound, ex) - { - ACE_DEBUG ((LM_DEBUG, - "Unable to unbind in thread %8.8x \n", - ACE_OS::thr_self ())); - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Unexpected exception in MT test"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - return 0; -} - -int -MT_Test::execute (TAO_Naming_Client &root_context) -{ - if (CORBA::is_nil (this->orb_.in ())) - return -1; - - // Create data which will be used by all threads. - - // Dummy object instantiation. - My_Test_Object *test_obj_impl = - new My_Test_Object (CosNaming_Client::OBJ1_ID); - - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - test_ref_ = - test_obj_impl->_this (ACE_TRY_ENV); - ACE_TRY_CHECK; - - test_obj_impl->_remove_ref (ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Get the IOR for the Naming Service. Each thread - // can use it in <string_to_object> to create its own stub for - // the Naming Service. This 'trick' is necessary, because - // multiple threads cannot be using the same stub - bad things - // happen... This is just a way to give each thread its own stub. - - name_service_ior_ = - orb_->object_to_string (root_context.get_context (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Unexpected exception while instantiating dummy"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - // Create a name for dummy. - test_name_.length (1); - test_name_[0].id = CORBA::string_dup ("Foo"); - - // Spawn threads, each of which will be executing svc (). - int status = this->activate (THR_NEW_LWP | THR_JOINABLE, - size_); - - if (status == -1) - return -1; - else - return this->wait (); -} - -int -Simple_Test::execute (TAO_Naming_Client &root_context) -{ - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // Dummy object instantiation. - My_Test_Object *test_obj_impl = new My_Test_Object (CosNaming_Client::OBJ1_ID); - Test_Object_var test_obj_ref = - test_obj_impl->_this (ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Give ownership of this object to POA. - test_obj_impl->_remove_ref (ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Bind an object to the Naming Context. - CosNaming::Name test_name; - test_name.length (1); - test_name[0].id = CORBA::string_dup ("Foo"); - root_context->bind (test_name, - test_obj_ref.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - ACE_DEBUG ((LM_DEBUG, - "Bound name OK\n")); - - // Resolve the object from the Naming Context. - CORBA::Object_var result_obj_ref = - root_context->resolve (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - Test_Object_var result_object = - Test_Object::_narrow (result_obj_ref.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - if (!CORBA::is_nil (result_object.in ())) - { - CORBA::Short id = result_object->id (ACE_TRY_ENV); - ACE_TRY_CHECK; - if (id == CosNaming_Client::OBJ1_ID) - ACE_DEBUG ((LM_DEBUG, "Resolved name OK\n")); - } - - // Unbind the object from the Naming Context. - root_context->unbind (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - ACE_DEBUG ((LM_DEBUG, - "Unbound name OK\n")); - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Unexpected exception in Simple test"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - return 0; -} - -int -Tree_Test::execute (TAO_Naming_Client &root_context) -{ - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // Create a tree of contexts: root->level1->level2. Bind object - // foo under context level2. - - // Bind level1 context under root. - CosNaming::Name level1; - level1.length (1); - level1[0].id = CORBA::string_dup ("level1_context"); - CosNaming::NamingContext_var level1_context; - level1_context = root_context->bind_new_context (level1, - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Create a new context. - CosNaming::NamingContext_var level2_context; - level2_context = root_context->new_context (ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Instantiate a dummy object and bind it under the new context. - My_Test_Object *impl1 = - new My_Test_Object (CosNaming_Client::OBJ1_ID); - Test_Object_var obj1 = impl1->_this (ACE_TRY_ENV); - ACE_TRY_CHECK; - impl1->_remove_ref (ACE_TRY_ENV); - ACE_TRY_CHECK; - - CosNaming::Name obj_name; - obj_name.length (1); - obj_name[0].id = CORBA::string_dup ("foo"); - level2_context->bind (obj_name, obj1.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Bind the context we just created under level1. - CosNaming::Name level2 (level1); - level2.length (2); - level2[1].id = CORBA::string_dup ("level2_context"); - root_context->bind_context (level2, - level2_context.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Resolve and unbind level1/level2/foo, and bind it back. - CosNaming::Name test_name (level2); - test_name.length (3); - test_name[2].id = obj_name[0].id; - CORBA::Object_var result_obj_ref = - root_context->resolve (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - Test_Object_var result_object = - Test_Object::_narrow (result_obj_ref.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - if (CORBA::is_nil (result_object.in ())) - ACE_ERROR_RETURN ((LM_ERROR, - "Problems with resolving foo in Tree Test - nil object ref.\n"), - -1); - - CORBA::Short id = result_object->id (ACE_TRY_ENV); - ACE_TRY_CHECK; - - if (id != CosNaming_Client::OBJ1_ID) - ACE_ERROR_RETURN ((LM_ERROR, - "Problems with resolving foo in Tree Test - wrong id.\n"), - -1); - - // Unbind the object from the Naming Context and bind it back - // in. - root_context->unbind (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - root_context->bind (test_name, - obj1.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Create new context and rebind under the name level1/level2. - CosNaming::NamingContext_var new_level2_context; - new_level2_context = - root_context->new_context (ACE_TRY_ENV); - ACE_TRY_CHECK; - root_context->rebind_context (level2, - new_level2_context.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Bind, resolve, rebind, and resolve foo under level1/level2. - root_context->bind (test_name, - obj1.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - result_obj_ref = root_context->resolve (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - result_object = Test_Object::_narrow (result_obj_ref.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - if (CORBA::is_nil (result_object.in ()) - || !(result_object->id (ACE_TRY_ENV) == CosNaming_Client::OBJ1_ID)) - ACE_ERROR_RETURN ((LM_ERROR, - "Problems in the Tree Test\n"), - -1); - ACE_TRY_CHECK; - - My_Test_Object *impl2 = - new My_Test_Object (CosNaming_Client::OBJ2_ID); - Test_Object_var obj2 = impl2->_this (ACE_TRY_ENV); - ACE_TRY_CHECK; - - impl2->_remove_ref (ACE_TRY_ENV); - ACE_TRY_CHECK; - - root_context->rebind (test_name, - obj2.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - result_obj_ref = root_context->resolve (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - result_object = Test_Object::_narrow (result_obj_ref.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - if (CORBA::is_nil (result_object.in ()) - || !(result_object->id (ACE_TRY_ENV) == CosNaming_Client::OBJ2_ID)) - ACE_ERROR_RETURN ((LM_ERROR, - "Problems with rebind in Tree Test\n"), - -1); - ACE_TRY_CHECK; - } - - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Unexpected exception in Tree test"); - return -1; - } - - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - ACE_DEBUG ((LM_DEBUG, - "All functions work properly \n")); - return 0; -} - -int -Exceptions_Test::execute (TAO_Naming_Client &root_context) -{ - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // Set things up. - - // Create a tree of contexts root->level1->level2. - CosNaming::Name context_name; - context_name.length (1); - context_name[0].id = CORBA::string_dup ("level1_context"); - CosNaming::NamingContext_var level1_context; - level1_context = root_context->bind_new_context (context_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - context_name[0].id = CORBA::string_dup ("level2_context"); - CosNaming::NamingContext_var level2_context; - level2_context = level1_context->bind_new_context (context_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Bind a dummy object foo under each context. - My_Test_Object *impl = new My_Test_Object; - Test_Object_var obj = impl->_this (ACE_TRY_ENV); - ACE_TRY_CHECK; - impl->_remove_ref (ACE_TRY_ENV); - ACE_TRY_CHECK; - - CosNaming::Name object_name; - object_name.length (1); - object_name[0].id = CORBA::string_dup ("foo"); - root_context->bind (object_name, - obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - level1_context->bind (object_name, - obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - level2_context->bind (object_name, - obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Run exceptions tests. - invalid_name_test (root_context, - ACE_TRY_ENV); - ACE_TRY_CHECK; - already_bound_test (root_context, - ACE_TRY_ENV); - ACE_TRY_CHECK; - already_bound_test2 (root_context, - ACE_TRY_ENV); - ACE_TRY_CHECK; - not_found_test (root_context, - ACE_TRY_ENV); - ACE_TRY_CHECK; - not_found_test2 (root_context, - ACE_TRY_ENV); - ACE_TRY_CHECK; - not_found_test3 (root_context, - ACE_TRY_ENV); - ACE_TRY_CHECK; - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Unexpected exception in Exceptions test"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - return 0; -} - -void -Exceptions_Test::invalid_name_test (TAO_Naming_Client &root_context, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_TRY - { - CosNaming::Name test_name; - test_name.length (0); - - root_context->resolve (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - ACE_DEBUG ((LM_DEBUG, "Invalid name test failed\n")); - } - ACE_CATCH (CosNaming::NamingContext::InvalidName, ex) - { - ACE_DEBUG ((LM_DEBUG, - "InvalidName exception works properly\n")); - } - ACE_CATCHANY - { - ACE_DEBUG ((LM_DEBUG, "Invalid name test failed\n")); - ACE_RETHROW; - } - ACE_ENDTRY; - ACE_CHECK; -} - -void -Exceptions_Test::already_bound_test (TAO_Naming_Client &root_context, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_TRY - { - CosNaming::Name test_name; - test_name.length (1); - test_name[0].id = CORBA::string_dup ("foo"); - My_Test_Object *impl = new My_Test_Object; - Test_Object_var obj = impl->_this (ACE_TRY_ENV); - ACE_TRY_CHECK; - impl->_remove_ref (ACE_TRY_ENV); - ACE_TRY_CHECK; - - root_context->bind (test_name, - obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - ACE_DEBUG ((LM_DEBUG, "Already bound (case 1) test failed\n")); - } - ACE_CATCH (CosNaming::NamingContext::AlreadyBound, ex) - { - ACE_DEBUG ((LM_DEBUG, - "AlreadyBound exception (case 1) works properly\n")); - } - ACE_CATCHANY - { - ACE_DEBUG ((LM_DEBUG, "Already bound (case 1) test failed\n")); - ACE_RETHROW; - } - - ACE_ENDTRY; - ACE_CHECK; -} - -void -Exceptions_Test::already_bound_test2 (TAO_Naming_Client &root_context, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_TRY - { - CosNaming::Name test_name; - test_name.length (2); - test_name[0].id = CORBA::string_dup ("level1_context"); - test_name[1].id = CORBA::string_dup ("foo"); - My_Test_Object *impl = new My_Test_Object; - Test_Object_var obj = impl->_this (ACE_TRY_ENV); - ACE_TRY_CHECK; - impl->_remove_ref (ACE_TRY_ENV); - ACE_TRY_CHECK; - - root_context->bind (test_name, - obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - ACE_DEBUG ((LM_DEBUG, "Already bound (case 2) test failed\n")); - } - ACE_CATCH (CosNaming::NamingContext::AlreadyBound, ex) - { - ACE_DEBUG ((LM_DEBUG, - "AlreadyBound exception (case 2) works properly\n")); - } - ACE_CATCHANY - { - ACE_DEBUG ((LM_DEBUG, "Already bound (case 2) test failed\n")); - ACE_RETHROW; - } - ACE_ENDTRY; - ACE_CHECK; -} - -void -Exceptions_Test::not_found_test (TAO_Naming_Client &root_context, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_TRY - { - CosNaming::Name test_name; - test_name.length (3); - test_name[0].id = CORBA::string_dup ("level1_context"); - test_name[1].id = CORBA::string_dup ("level2_context"); - test_name[2].id = CORBA::string_dup ("bar"); - - root_context->unbind (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - ACE_DEBUG ((LM_DEBUG, "Not found test failed\n")); - } - ACE_CATCH (CosNaming::NamingContext::NotFound, ex) - { - if (ex.why == CosNaming::NamingContext::missing_node && - ex.rest_of_name.length () == 1 - && ACE_OS::strcmp (ex.rest_of_name[0].id.in (), - "bar") == 0) - ACE_DEBUG ((LM_DEBUG, - "NotFound exception (case 1) works properly\n")); - else - ACE_DEBUG ((LM_DEBUG, - "NotFound exception (case 1)" - " - parameters aren't set correctly\n")); - } - ACE_CATCHANY - { - ACE_DEBUG ((LM_DEBUG, "Not found test failed\n")); - ACE_RETHROW; - } - ACE_ENDTRY; - ACE_CHECK; -} - -void -Exceptions_Test::not_found_test2 (TAO_Naming_Client &root_context, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_TRY - { - CosNaming::Name test_name; - test_name.length (3); - test_name[0].id = CORBA::string_dup ("level1_context"); - test_name[1].id = CORBA::string_dup ("level3_context"); - test_name[2].id = CORBA::string_dup ("foo"); - - root_context->unbind (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - ACE_DEBUG ((LM_DEBUG, "Unbind test failed\n")); - } - ACE_CATCH (CosNaming::NamingContext::NotFound, ex) - { - if (ex.why == CosNaming::NamingContext::missing_node - && ex.rest_of_name.length () == 2 - && ACE_OS::strcmp (ex.rest_of_name[0].id.in (), - "level3_context") == 0 - && ACE_OS::strcmp (ex.rest_of_name[1].id.in (), - "foo") == 0) - ACE_DEBUG ((LM_DEBUG, - "NotFound exception (case 2) works properly\n")); - else - ACE_DEBUG ((LM_DEBUG, - "NotFound exception (case 2)" - " - parameters aren't set correctly\n")); - } - ACE_CATCHANY - { - ACE_DEBUG ((LM_DEBUG, "Unbind test failed\n")); - ACE_RETHROW; - } - - ACE_ENDTRY; - ACE_CHECK; -} - -void -Exceptions_Test::not_found_test3 (TAO_Naming_Client &root_context, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_TRY - { - CosNaming::Name test_name; - test_name.length (3); - test_name[0].id = CORBA::string_dup ("level1_context"); - test_name[1].id = CORBA::string_dup ("foo"); - test_name[2].id = CORBA::string_dup ("foo"); - - root_context->unbind (test_name, ACE_TRY_ENV); - ACE_TRY_CHECK; - ACE_DEBUG ((LM_DEBUG, "Not found (case 3) test failed - no exception was thrown\n")); - } - ACE_CATCH (CosNaming::NamingContext::NotFound, ex) - { - if (ex.why == CosNaming::NamingContext::not_context - && ex.rest_of_name.length () == 2 - && ACE_OS::strcmp (ex.rest_of_name[0].id.in (), - "foo") == 0 - && ACE_OS::strcmp (ex.rest_of_name[1].id.in (), - "foo") == 0) - ACE_DEBUG ((LM_DEBUG, - "NotFound exception (case 3) works properly\n")); - else - ACE_DEBUG ((LM_DEBUG, - "NotFound exception (case 3)" - " - parameters aren't set correctly\n")); - } - ACE_CATCHANY - { - ACE_DEBUG ((LM_DEBUG, "Not found (case 3) test failed\n")); - ACE_RETHROW; - } - ACE_ENDTRY; - ACE_CHECK; -} - -int -Iterator_Test::execute (TAO_Naming_Client &root_context) -{ - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // Instantiate four dummy objects. - My_Test_Object *impl = new My_Test_Object; - Test_Object_var obj = impl->_this (ACE_TRY_ENV); - ACE_TRY_CHECK; - impl->_remove_ref (ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Bind objects to the naming context. - CosNaming::Name name1; - name1.length (1); - name1[0].id = CORBA::string_dup ("foo1"); - CosNaming::Name name2; - name2.length (1); - name2[0].id = CORBA::string_dup ("foo2"); - CosNaming::Name name3; - name3.length (1); - name3[0].id = CORBA::string_dup ("foo3"); - CosNaming::Name name4; - name4.length (1); - name4[0].id = CORBA::string_dup ("foo4"); - root_context->bind (name1, - obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - root_context->bind (name2, - obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - root_context->bind (name3, - obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - root_context->bind (name4, - obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // List the content of the Naming Context. - CosNaming::BindingIterator_var iter; - CosNaming::BindingList_var bindings_list; - root_context->list (1, - bindings_list.out (), - iter.out (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - if (CORBA::is_nil (iter.in ()) - || bindings_list->length () != 1 - || bindings_list[0].binding_type != CosNaming::nobject) - ACE_ERROR_RETURN ((LM_ERROR, - "CosNaming::list does not function properly\n"), - -1); - ACE_DEBUG ((LM_DEBUG, - "First binding: %s\n", - bindings_list[0].binding_name[0].id.in ())); - - // Invoke operations on the iterator. - CosNaming::Binding_var binding; - iter->next_one (binding.out (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - if (binding->binding_type != CosNaming::nobject) - ACE_ERROR_RETURN ((LM_ERROR, - "CosNaming::next_one does not function properly\n"), - -1); - ACE_DEBUG ((LM_DEBUG, - "Second binding: %s\n", - binding->binding_name[0].id.in ())); - - iter->next_n (2, bindings_list.out (), ACE_TRY_ENV); - ACE_TRY_CHECK; - if (bindings_list->length () != 2 - || bindings_list[0].binding_type != CosNaming::nobject - || bindings_list[1].binding_type != CosNaming::nobject) - ACE_ERROR_RETURN ((LM_ERROR, - "CosNaming::BindingIterator does not function properly\n"), - -1); - ACE_DEBUG ((LM_DEBUG, - "Third binding: %s\n" - "Fourth binding: %s\n", - bindings_list[0].binding_name[0].id.in (), - bindings_list[1].binding_name[0].id.in ())); - - // We already iterated over all the bindings, so the following - // should return false. - CORBA::Boolean result = iter->next_one (binding.out (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - if (result) - ACE_ERROR_RETURN ((LM_ERROR, - "CosNaming::BindingIterator does not function properly\n"), - -1); - iter->destroy (ACE_TRY_ENV); - ACE_TRY_CHECK; - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Unexpected exception in Iterator test"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - return 0; -} - -int -Destroy_Test::execute (TAO_Naming_Client &root_context) -{ - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // Create a context and bind an object under it. - - CosNaming::NamingContext_var my_context; - my_context = root_context->new_context (ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Bind a dummy object foo under my_context. - My_Test_Object *impl = new My_Test_Object; - Test_Object_var obj = impl->_this (ACE_TRY_ENV); - ACE_TRY_CHECK; - impl->_remove_ref (ACE_TRY_ENV); - ACE_TRY_CHECK; - - CosNaming::Name object_name; - object_name.length (1); - object_name[0].id = CORBA::string_dup ("foo"); - my_context->bind (object_name, - obj.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Do the testing. - not_empty_test (my_context, - ACE_TRY_ENV); - ACE_TRY_CHECK; - - my_context->unbind (object_name, ACE_TRY_ENV); - ACE_TRY_CHECK; - my_context->destroy (ACE_TRY_ENV); - ACE_TRY_CHECK; - - not_exist_test (my_context, - ACE_TRY_ENV); - ACE_TRY_CHECK; - } - - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Unexpected exception in Destroy test"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - return 0; -} - -void -Destroy_Test::not_empty_test (CosNaming::NamingContext_var &ref, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_TRY - { - ref->destroy (ACE_TRY_ENV); - ACE_TRY_CHECK; - } - - ACE_CATCH (CosNaming::NamingContext::NotEmpty, ex) - { - ACE_DEBUG ((LM_DEBUG, - "NotEmpty exception works properly\n")); - } - ACE_ENDTRY; - ACE_CHECK; -} - -void -Destroy_Test::not_exist_test (CosNaming::NamingContext_var &ref, - CORBA::Environment &ACE_TRY_ENV) -{ - ACE_TRY - { - ref->destroy (ACE_TRY_ENV); - ACE_TRY_CHECK; - } - - ACE_CATCH (CORBA::OBJECT_NOT_EXIST, ex) - { - ACE_DEBUG ((LM_DEBUG, - "Destroy works properly\n")); - } - ACE_ENDTRY; - ACE_CHECK; -} - -Persistent_Test_Begin::Persistent_Test_Begin (CORBA::ORB_ptr orb, - FILE * ior_output_file) - : orb_ (orb), - file_ (ior_output_file) -{ -} - -Persistent_Test_Begin::~Persistent_Test_Begin (void) -{ -} - -int -Persistent_Test_Begin::execute (TAO_Naming_Client &root_context) -{ - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // Create a name structure we will reuse. - CosNaming::Name test_name; - test_name.length (1); - test_name[0].id = CORBA::string_dup ("level1"); - - // Create and bind a naming context under the <root> context. - CosNaming::NamingContext_var level1_context = - root_context->bind_new_context (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Create and bind a naming context under <level1> context. - test_name[0].id = CORBA::string_dup ("level2"); - CosNaming::NamingContext_var level2_context = - level1_context->bind_new_context (test_name, - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Log the ior of <level1_context> for use by <Persistent_Test_End>. - CORBA::String_var ior = - orb_->object_to_string (level1_context.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - ACE_OS::fprintf (this->file_, - "%s", - ior.in ()); - ACE_OS::fclose (this->file_); - - ACE_DEBUG ((LM_DEBUG, "Persistent Naming test (part 1) OK.\n")); - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, - "Unexpected exception in Persistent Test (part 1)"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - return 0; -} - -Persistent_Test_End::Persistent_Test_End (CORBA::ORB_ptr orb, - const char *ior) - : orb_ (orb), - ior_ (ior) -{ -} - -Persistent_Test_End::~Persistent_Test_End (void) -{ -} - -int -Persistent_Test_End::execute (TAO_Naming_Client &root_context) -{ - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - // Create a name structure we will reuse. - CosNaming::Name test_name; - test_name.length (1); - test_name[0].id = CORBA::string_dup ("level2"); - - // Convert stringified ior we got from <Persistent_Test_Begin> - // for <level1> Naming Context to Naming Context reference. - CORBA::Object_var obj = - orb_->string_to_object (ior_, ACE_TRY_ENV); - ACE_TRY_CHECK; - - CosNaming::NamingContext_var level1_context = - CosNaming::NamingContext::_narrow (obj.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - if (CORBA::is_nil (level1_context.in ())) - ACE_ERROR_RETURN ((LM_ERROR, - "Cannot narrow object to Naming Context\n"), - -1); - - // Resolve for <level2> context through the persistent ior we - // got from part 1 of this test. - obj = level1_context->resolve (test_name, ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Now, resolve for <level2> context using the <root> context - // reference which we obtained through <resolve_initial_references>. - test_name.length (2); - test_name[0].id = CORBA::string_dup ("level1"); - test_name[1].id = CORBA::string_dup ("level2"); - CORBA::Object_var obj2 = - root_context->resolve (test_name, ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Make sure we got the same answer through both methods. - if (obj2->_is_equivalent (obj.in ())) - ACE_DEBUG ((LM_DEBUG, "Persistent Naming test (part 2) OK.\n")); - } - ACE_CATCHANY - { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, - "Unexpected exception in Persistent Test (part 2)"); - return -1; - } - ACE_ENDTRY; - ACE_CHECK_RETURN (-1); - - return 0; -} - -// This function runs the test. - -int -main (int argc, char **argv) -{ - CosNaming_Client cosnaming_client; - - if (cosnaming_client.init (argc, argv) == -1) - return 1; - - return cosnaming_client.run (); -} |