summaryrefslogtreecommitdiff
path: root/TAO/tests/IORTable_Locator
diff options
context:
space:
mode:
authorPhil Mesnier <mesnier_p@ociweb.com>2013-04-19 16:12:01 +0000
committerPhil Mesnier <mesnier_p@ociweb.com>2013-04-19 16:12:01 +0000
commitf0fb87a973d0742046825501b2b28a9e2ddc026e (patch)
treea1d09c35b9d02a9a478a9259ac72e2a310a913d6 /TAO/tests/IORTable_Locator
parent72901b25a6e7e3b0838ab42f0a784602d3e2f81e (diff)
downloadATCD-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.mpc15
-rw-r--r--TAO/tests/IORTable_Locator/async_server.cpp203
-rwxr-xr-xTAO/tests/IORTable_Locator/run_test.pl17
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) {