diff options
author | Phil Mesnier <mesnier_p@ociweb.com> | 2013-04-19 16:12:01 +0000 |
---|---|---|
committer | Phil Mesnier <mesnier_p@ociweb.com> | 2013-04-19 16:12:01 +0000 |
commit | f0fb87a973d0742046825501b2b28a9e2ddc026e (patch) | |
tree | a1d09c35b9d02a9a478a9259ac72e2a310a913d6 /TAO/tests/IORTable_Locator | |
parent | 72901b25a6e7e3b0838ab42f0a784602d3e2f81e (diff) | |
download | ATCD-f0fb87a973d0742046825501b2b28a9e2ddc026e.tar.gz |
Fri Apr 19 16:08:52 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com>
Diffstat (limited to 'TAO/tests/IORTable_Locator')
-rw-r--r-- | TAO/tests/IORTable_Locator/Test.mpc | 15 | ||||
-rw-r--r-- | TAO/tests/IORTable_Locator/async_server.cpp | 203 | ||||
-rwxr-xr-x | TAO/tests/IORTable_Locator/run_test.pl | 17 |
3 files changed, 233 insertions, 2 deletions
diff --git a/TAO/tests/IORTable_Locator/Test.mpc b/TAO/tests/IORTable_Locator/Test.mpc index 7cd9e7adb76..730fdbd2166 100644 --- a/TAO/tests/IORTable_Locator/Test.mpc +++ b/TAO/tests/IORTable_Locator/Test.mpc @@ -23,6 +23,21 @@ project(*IORTable_Locator_Server): taoserver, iortable { } } +project(*Async_IORTable_Locator_Server): taoserver, async_iortable { + exename = async_server + after += *IORTable_Locator_idl + Source_Files { + simple_test_i.cpp + async_server.cpp + } + Source_Files { + simple_testS.cpp + simple_testC.cpp + } + IDL_Files { + } +} + project(*IORTable_Locator_Client): taoclient { after += *IORTable_Locator_idl exename = client diff --git a/TAO/tests/IORTable_Locator/async_server.cpp b/TAO/tests/IORTable_Locator/async_server.cpp new file mode 100644 index 00000000000..a072e50d91b --- /dev/null +++ b/TAO/tests/IORTable_Locator/async_server.cpp @@ -0,0 +1,203 @@ +// $Id$ + +#include "simple_test_i.h" +#include "ace/OS_NS_stdio.h" +#include "ace/OS_NS_strings.h" + +#include "tao/ORB_Core.h" +#include "tao/Async_IORTable/Async_IORTable.h" +#include "tao/IORTable/IORTable.h" +#include "tao/LocalObject.h" +#include "tao/PortableServer/PortableServer.h" + +CORBA::String_var testIOR; + +ACE_CString ior_table_name = "IORTable"; +bool use_async_locator = false; + +//************************************************************************* +class AsyncLocatorTask + : public virtual IORTable::AsyncLocator, + public virtual CORBA::LocalObject +{ +public: + AsyncLocatorTask (CORBA::ORB_ptr orb); + + void async_locate (IORTable::Locate_ResponseHandler rh, const char *); + char * locate (const char *); + +private: + CORBA::ORB_var orb_; +}; + +void +AsyncLocatorTask::async_locate (IORTable::Locate_ResponseHandler rh, const char * id) +{ + CORBA::Object_var fwdObj = orb_->string_to_object(testIOR.in ()); + CORBA::String_var fwdString = orb_->object_to_string(fwdObj.in ()); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("in async_locate! Forwarding client %C to: %C\n"), + id, fwdString.in ())); + + rh->forward_ior (fwdString._retn(), false); +} + +char * +AsyncLocatorTask::locate (const char * id) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("In async locator::locate, id = %C, throwing\n"), + id)); + throw IORTable::NotFound (); + return 0; +} + + +AsyncLocatorTask::AsyncLocatorTask (CORBA::ORB_ptr orb) + : orb_ (CORBA::ORB::_duplicate (orb)) +{ +} + +//************************************************************************* +class SyncLocatorTask + : public virtual IORTable::Locator, + public virtual CORBA::LocalObject +{ +public: + SyncLocatorTask (CORBA::ORB_ptr orb); + + char * locate (const char *); + +private: + CORBA::ORB_var orb_; +}; + +char * +SyncLocatorTask::locate (const char * id) +{ + CORBA::Object_var fwdObj = orb_->string_to_object(testIOR.in ()); + CORBA::String_var fwdString = orb_->object_to_string(fwdObj.in ()); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("in synch locate: Forwarding client %C to: %C\n"), + id, + fwdString.in ())); + + return fwdString._retn(); +} + +SyncLocatorTask::SyncLocatorTask (CORBA::ORB_ptr orb) + : orb_ (CORBA::ORB::_duplicate (orb)) +{ +} + +int +parse_args (int argc, ACE_TCHAR *argv[]) +{ + for (int c = 1; c < argc; c++) + { + if (ACE_OS::strcasecmp (argv[c], ACE_TEXT ("-aa")) == 0) + { + ior_table_name = "AsyncIORTable"; + use_async_locator = true; + } + else if (ACE_OS::strcasecmp (argv[c], ACE_TEXT ("-as")) == 0) + { + ior_table_name = "AsyncIORTable"; + use_async_locator = false; + } + else + { + return -1; + } + } + 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) == -1) + return -1; + + CORBA::Object_var poa_object = + orb->resolve_initial_references ("RootPOA"); + + PortableServer::POA_var root_poa = + PortableServer::POA::_narrow (poa_object.in ()); + + if (CORBA::is_nil (root_poa.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + " (%P|%t) Panic: nil RootPOA\n"), + 1); + + PortableServer::POAManager_var poa_manager = root_poa->the_POAManager (); + + Simple_Test_i *test_impl = 0; + ACE_NEW_RETURN (test_impl, + Simple_Test_i (orb.in ()), + 1); + PortableServer::ServantBase_var owner_transfer (test_impl); + + PortableServer::ObjectId_var id = + root_poa->activate_object (test_impl); + + CORBA::Object_var object = root_poa->id_to_reference (id.in ()); + + simple::SimpleTest_T_var theServer = + simple::SimpleTest_T::_narrow (object.in ()); + + testIOR = orb->object_to_string (theServer.in ()); + + poa_manager->activate (); + + // Create task. + IORTable::Locator_var iorloc; + if (use_async_locator) + { + ACE_NEW_RETURN (iorloc, + AsyncLocatorTask (orb.in ()), + 1); + } + else + { + ACE_NEW_RETURN (iorloc, + SyncLocatorTask (orb.in ()), + 1); + } + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Server - using ior table object: %C\n"), + ior_table_name.c_str())); + // Resolve the IORTable and set the locator + CORBA::Object_var iorTableObj = + orb->resolve_initial_references(ior_table_name.c_str()); + + IORTable::Table_var local_ior_table = + IORTable::Table::_narrow (iorTableObj.in ()); + + local_ior_table->set_locator (iorloc.in()); + + orb->run (); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Server - event loop finished\n"))); + + root_poa->destroy (1, 1); + + orb->destroy (); + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception (ACE_TEXT ("Server - Exception caught:")); + return 1; + } + + return 0; +} diff --git a/TAO/tests/IORTable_Locator/run_test.pl b/TAO/tests/IORTable_Locator/run_test.pl index 149b4f00d1b..ad6d0854092 100755 --- a/TAO/tests/IORTable_Locator/run_test.pl +++ b/TAO/tests/IORTable_Locator/run_test.pl @@ -10,11 +10,24 @@ use PerlACE::TestTarget; $status = 0; $debug_level = '0'; +$server_name = "server"; +$async_opt = ""; foreach $i (@ARGV) { if ($i eq '-debug') { $debug_level = '10'; } + elsif ($i eq "-async_1") { + $server_name = "async_server"; + } + elsif ($i eq "-async_2") { + $server_name = "async_server"; + $async_opt = "-as"; + } + elsif ($i eq "-async_3") { + $server_name = "async_server"; + $async_opt = "-aa"; + } } my $server = PerlACE::TestTarget::create_target (1) || die "Create failed\n"; @@ -26,12 +39,12 @@ my $port = $client->RandomPort (); $server->DeleteFile($iorbase); $client->DeleteFile($iorbase); -$SV = $server->CreateProcess ("server", "-ORBdebuglevel $debug_level -ORBListenEndpoints iiop://$TARGETHOSTNAME:$port"); +$SV = $server->CreateProcess ($server_name, "$async_opt -ORBdebuglevel $debug_level -ORBListenEndpoints iiop://$TARGETHOSTNAME:$port"); $CL = $client->CreateProcess ("client", "-ORBdebuglevel $debug_level ". "-a corbaloc:iiop:$TARGETHOSTNAME:$port/SIMPLE_TEST_KEY"); -print "Starting Server\n"; +print "Starting $server_name $async_opt\n"; $server_status = $SV->Spawn (); if ($server_status != 0) { |