diff options
Diffstat (limited to 'ACE/TAO/tests/Bug_3553_Regression/Bug_3553_Regression_client.cpp')
-rw-r--r-- | ACE/TAO/tests/Bug_3553_Regression/Bug_3553_Regression_client.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/ACE/TAO/tests/Bug_3553_Regression/Bug_3553_Regression_client.cpp b/ACE/TAO/tests/Bug_3553_Regression/Bug_3553_Regression_client.cpp new file mode 100644 index 00000000000..4e8556742ed --- /dev/null +++ b/ACE/TAO/tests/Bug_3553_Regression/Bug_3553_Regression_client.cpp @@ -0,0 +1,124 @@ +// $Id$ + +#include "TestC.h" +#include "tao/RTCORBA/RTCORBA.h" +#include "tao/Policy_Current.h" +#include "tao/Policy_Current.h" +#include "ace/Get_Opt.h" + +ACE_RCSID(TransportCache, client, "$Id$") + +int cache_size = 512; +int port_nr = 27530; + +int +parse_args (int argc, ACE_TCHAR *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("c:p:")); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'c': + cache_size = ACE_OS::atoi (get_opts.opt_arg ()); + break; + + case 'p': + port_nr = ACE_OS::atoi (get_opts.opt_arg ()); + break; + + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s " + "-c <transport_cache_size>\n" + "-p <server_port_nr>\n", + argv [0]), + -1); + } + // Indicates sucessful parsing of the command line + return 0; +} + +int +ACE_TMAIN(int argc, ACE_TCHAR *argv[]) +{ + try + { + CORBA::ORB_var orb = CORBA::ORB_init (argc, argv); + + if (parse_args(argc, argv) != 0) + return 1; + + // Get the RTORB. + CORBA::Object_var obj = orb->resolve_initial_references ("RTORB"); + RTCORBA::RTORB_var rtorb = RTCORBA::RTORB::_narrow (obj.in()); + //create the private connections policy. This means that every connection + // to the server uses his own socket. + CORBA::PolicyList policies (1); + policies.length (1); + policies[0] = rtorb->create_private_connection_policy (); + + CORBA::Object_var pol_current_object = orb->resolve_initial_references ("PolicyCurrent"); + + CORBA::PolicyCurrent_var policy_current = + CORBA::PolicyCurrent::_narrow (pol_current_object.in ()); + + if (CORBA::is_nil (policy_current.in ())) + { + ACE_ERROR ((LM_ERROR, "ERROR: Nil policy current\n")); + return 1; + } + policy_current->set_policy_overrides (policies, CORBA::ADD_OVERRIDE); + + Test::Hello_var *hello_array = 0; + ACE_NEW_RETURN (hello_array, Test::Hello_var [cache_size], -1); + + int iter = 1; + for (iter = 1; iter <= cache_size; ++iter) + { + char object_string[256]; + char reference_string[256]; + ACE_OS::sprintf (reference_string, "TransportCacheTest%d", iter); + ACE_OS::sprintf (object_string, "corbaloc:iiop:localhost:%d/", port_nr); + ACE_OS::strcat (object_string, reference_string); + + CORBA::Object_var hello_obj = orb->string_to_object (object_string); + orb->register_initial_reference (reference_string, hello_obj.in ()); + + CORBA::String_var ior_string = orb->object_to_string (hello_obj.in()); + ACE_DEBUG((LM_DEBUG, ACE_TEXT("IOR string for reference %d : %C\n"), + iter, ior_string.in ())); + hello_array[iter-1] = Test::Hello::_narrow(hello_obj.in ()); + } + //now we've got the references -> call each and everyone of them + for (iter = 0; iter < cache_size; ++iter) + { + Test::Hello_var hello = hello_array[iter]; + if (CORBA::is_nil (hello.in ())) + { + ACE_ERROR_RETURN ((LM_DEBUG, + ACE_TEXT ("Nil Test::Hello reference\n")), + 1); + } + + CORBA::String_var the_string = hello->get_string (); + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) - string returned <%C> from reference %d\n", + the_string.in (), iter + 1)); + } + //shutdown the server + if (iter >= 0) + hello_array[0]->shutdown (); + + orb->destroy (); + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ("Exception caught:"); + return 1; + } + + return 0; +} |