summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriliyan <iliyan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2007-01-04 04:19:49 +0000
committeriliyan <iliyan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2007-01-04 04:19:49 +0000
commitfb8beece146cdc92a1e75139f1f22b7989aef4d5 (patch)
tree178609c656de61dcfe819221732875e62fca2552
parent1eb2cd7af4556c39dcd17045f05cd18279bfa4cb (diff)
downloadATCD-fb8beece146cdc92a1e75139f1f22b7989aef4d5.tar.gz
ChangeLogTag: Thu Jan 4 04:11:02 UTC 2007 Iliyan Jeliazkov <iliyan@ociweb.com>
-rw-r--r--TAO/ChangeLog40
-rw-r--r--TAO/tests/TransportCurrent/Framework/Framework.mpc32
-rwxr-xr-xTAO/tests/TransportCurrent/Framework/run_test.pl17
-rw-r--r--TAO/tests/TransportCurrent/IIOP/Current_Test_Impl.cpp2
-rw-r--r--TAO/tests/TransportCurrent/IIOP/IIOP.mpc53
-rw-r--r--TAO/tests/TransportCurrent/IIOP/IIOP_Server_Request_Interceptor.h2
-rw-r--r--TAO/tests/TransportCurrent/IIOP/client.cpp303
-rwxr-xr-xTAO/tests/TransportCurrent/IIOP/run_test.pl17
-rw-r--r--TAO/tests/TransportCurrent/IIOP/server.cpp242
-rw-r--r--TAO/tests/TransportCurrent/lib/Client_Request_Interceptor.cpp (renamed from TAO/tests/TransportCurrent/Framework/Client_Request_Interceptor.cpp)0
-rw-r--r--TAO/tests/TransportCurrent/lib/Client_Request_Interceptor.h (renamed from TAO/tests/TransportCurrent/Framework/Client_Request_Interceptor.h)5
-rw-r--r--TAO/tests/TransportCurrent/lib/Current_Test.idl (renamed from TAO/tests/TransportCurrent/Framework/Current_Test.idl)0
-rw-r--r--TAO/tests/TransportCurrent/lib/Current_Test_Export.h58
-rw-r--r--TAO/tests/TransportCurrent/lib/Current_Test_Impl.h (renamed from TAO/tests/TransportCurrent/Framework/Current_Test_Impl.h)0
-rw-r--r--TAO/tests/TransportCurrent/lib/Current_Test_Lib.mpc65
-rw-r--r--TAO/tests/TransportCurrent/lib/ORBInitializer_T.cpp (renamed from TAO/tests/TransportCurrent/Framework/ORBInitializer_T.cpp)0
-rw-r--r--TAO/tests/TransportCurrent/lib/ORBInitializer_T.h (renamed from TAO/tests/TransportCurrent/Framework/ORBInitializer_T.h)6
-rw-r--r--TAO/tests/TransportCurrent/lib/Server_Request_Interceptor.cpp (renamed from TAO/tests/TransportCurrent/Framework/Server_Request_Interceptor.cpp)0
-rw-r--r--TAO/tests/TransportCurrent/lib/Server_Request_Interceptor.h (renamed from TAO/tests/TransportCurrent/Framework/Server_Request_Interceptor.h)5
19 files changed, 774 insertions, 73 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 251734d2932..a63d7a4e13d 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,43 @@
+Thu Jan 4 04:11:02 UTC 2007 Iliyan Jeliazkov <iliyan@ociweb.com>
+
+ * tests/TransportCurrent/Framework/Framework.mpc:
+ * tests/TransportCurrent/Framework/run_test.pl:
+ * tests/TransportCurrent/IIOP/Current_Test_Impl.cpp:
+ * tests/TransportCurrent/IIOP/IIOP.mpc:
+ * tests/TransportCurrent/IIOP/IIOP_Server_Request_Interceptor.h:
+ * tests/TransportCurrent/IIOP/client.cpp:
+ * tests/TransportCurrent/IIOP/run_test.pl:
+ * tests/TransportCurrent/IIOP/server.cpp:
+ * tests/TransportCurrent/lib:
+ * tests/TransportCurrent/lib/Client_Request_Interceptor.h:
+ * tests/TransportCurrent/lib/Client_Request_Interceptor.cpp:
+ * tests/TransportCurrent/lib/Current_Test.idl:
+ * tests/TransportCurrent/lib/Current_Test_Export.h:
+ * tests/TransportCurrent/lib/Current_Test_Impl.h:
+ * tests/TransportCurrent/lib/Current_Test_Lib.mpc:
+ * tests/TransportCurrent/lib/ORBInitializer_T.h:
+ * tests/TransportCurrent/lib/ORBInitializer_T.cpp:
+ * tests/TransportCurrent/lib/Server_Request_Interceptor.h:
+ * tests/TransportCurrent/lib/Server_Request_Interceptor.cpp:
+
+ Split off the IDL and the common stuff fro the two tests into a
+ lib directory and adjusted the references. This will hopefully
+ deal with the build dependency issues we have been seeing
+ recently and will eliminate the cases of duplicate compilation
+ of the IDL. Thanks to Johnny Willemsen and J.T. Conklin for the
+ ideas.
+
+ * tests/TransportCurrent/Framework/Client_Request_Interceptor.h:
+ * tests/TransportCurrent/Framework/Client_Request_Interceptor.cpp:
+ * tests/TransportCurrent/Framework/Current_Test.idl:
+ * tests/TransportCurrent/Framework/Current_Test_Impl.h:
+ * tests/TransportCurrent/Framework/ORBInitializer_T.h:
+ * tests/TransportCurrent/Framework/ORBInitializer_T.cpp:
+ * tests/TransportCurrent/Framework/Server_Request_Interceptor.h:
+ * tests/TransportCurrent/Framework/Server_Request_Interceptor.cpp:
+
+ Moved these files to lib directory.
+
Wed Jan 3 22:23:57 UTC 2007 Phil Mesnier <mesnier_p@ociweb.com>
* tao/Profile_Transport_Resolver.cpp:
diff --git a/TAO/tests/TransportCurrent/Framework/Framework.mpc b/TAO/tests/TransportCurrent/Framework/Framework.mpc
index d5ed3a99985..c2077db199e 100644
--- a/TAO/tests/TransportCurrent/Framework/Framework.mpc
+++ b/TAO/tests/TransportCurrent/Framework/Framework.mpc
@@ -1,33 +1,21 @@
// -*- MPC -*-
// $Id$
-project(*idl): taoidldefaults {
-
- IDL_Files {
- Current_Test.idl
- }
-
- custom_only = 1
-}
-
project(*Server): taoserver, tc, interceptors, pi_server {
- after += *idl
+ after += Curren_Test_Lib_Client Current_Test_Lib_Server
includes += .
+ includes += ../lib
+ libs += Current_Test_Lib_Client Current_Test_Lib_Server
+ libpaths += ../lib
Source_Files {
server.cpp
Current_Test_Impl.cpp
- Server_Request_Interceptor.cpp
Tester.cpp
Server_Main.cpp
}
- Source_Files {
- Current_TestC.cpp
- Current_TestS.cpp
- }
-
IDL_Files {
}
@@ -35,20 +23,16 @@ project(*Server): taoserver, tc, interceptors, pi_server {
project(*Client): taoclient, tc, interceptors, pi, dynamicinterface {
- after += *idl
- after += *Server
- includes += .
+ after += *Server Current_Test_Lib_Client Current_Test_Lib_Server
+ includes += . ../lib
+ libs += Current_Test_Lib_Client Current_Test_Lib_Server
+ libpaths += ../lib
Source_Files {
- Client_Request_Interceptor.cpp
client.cpp
Tester.cpp
}
- Source_Files {
- Current_TestC.cpp
- }
-
IDL_Files {
}
diff --git a/TAO/tests/TransportCurrent/Framework/run_test.pl b/TAO/tests/TransportCurrent/Framework/run_test.pl
index 182fa250db0..278f652e875 100755
--- a/TAO/tests/TransportCurrent/Framework/run_test.pl
+++ b/TAO/tests/TransportCurrent/Framework/run_test.pl
@@ -8,6 +8,23 @@ eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
use lib "$ENV{ACE_ROOT}/bin";
use PerlACE::Run_Test;
+sub add_path {
+ my($name) = shift;
+ my($value) = shift;
+ if (defined $ENV{$name}) {
+ $ENV{$name} .= ':' . $value
+ }
+ else {
+ $ENV{$name} = $value;
+ }
+}
+
+# Set the library path for the client to be able to load
+# the commom library.
+add_path('LD_LIBRARY_PATH', '../lib');
+add_path('LIBPATH', '../lib');
+add_path('SHLIB_PATH', '../lib');
+
my $status = 0;
my $confmod = "";
diff --git a/TAO/tests/TransportCurrent/IIOP/Current_Test_Impl.cpp b/TAO/tests/TransportCurrent/IIOP/Current_Test_Impl.cpp
index e80298d2bde..8687263dbc3 100644
--- a/TAO/tests/TransportCurrent/IIOP/Current_Test_Impl.cpp
+++ b/TAO/tests/TransportCurrent/IIOP/Current_Test_Impl.cpp
@@ -3,7 +3,7 @@
#include "tao/TransportCurrent/TC_IIOPC.h"
#include "tao/TransportCurrent/TCC.h"
-#include "tests/TransportCurrent/Framework/Current_Test_Impl.h"
+#include "Current_Test_Impl.h"
ACE_RCSID (Transport_Current,
Current_Test_Impl,
diff --git a/TAO/tests/TransportCurrent/IIOP/IIOP.mpc b/TAO/tests/TransportCurrent/IIOP/IIOP.mpc
index 37ab11369e8..34b326bf227 100644
--- a/TAO/tests/TransportCurrent/IIOP/IIOP.mpc
+++ b/TAO/tests/TransportCurrent/IIOP/IIOP.mpc
@@ -1,67 +1,40 @@
// -*- MPC -*-
// $Id$
-project(*idl): taoidldefaults {
- after += Framework_IDL
-
- idlflags += -o ../Framework
-
- IDL_Files {
- ../Framework/Current_Test.idl
- }
- custom_only = 1
-}
-
project(*Server): taoserver, tc_iiop, interceptors, pi_server {
- after += *idl
- after += Framework_Server
-
- includes += ../Framework
+ after += Curren_Test_Lib_Client Current_Test_Lib_Server
+ includes += .
+ includes += ../lib
+ libs += Current_Test_Lib_Client Current_Test_Lib_Server
+ libpaths += ../lib
Source_Files {
- ../Framework/server.cpp
- ../Framework/Server_Request_Interceptor.cpp
+ server.cpp
+// Server_Request_Interceptor.cpp
Current_Test_Impl.cpp
IIOP_Server_Request_Interceptor.cpp
IIOP_Server_Main.cpp
IIOP_Tester.cpp
}
- Source_Files {
- ../Framework/Current_TestC.cpp
- ../Framework/Current_TestS.cpp
- }
-
- Template_Files {
- ../Framework/ORBInitializer_T.cpp
- }
-
IDL_Files {
}
}
project(*Client): taoclient, tc_iiop, interceptors, pi, dynamicinterface {
- after += *idl
- after += *Server
-
- includes += ../Framework
+ after += *Server Current_Test_Lib_Client Current_Test_Lib_Server
+ includes += . ../lib
+ libs += Current_Test_Lib_Client Current_Test_Lib_Server
+ libpaths += ../lib
Source_Files {
- ../Framework/Client_Request_Interceptor.cpp
- ../Framework/client.cpp
+// Client_Request_Interceptor.cpp
+ client.cpp
IIOP_Tester.cpp
}
- Source_Files {
- ../Framework/Current_TestC.cpp
- }
-
- Template_Files {
- ../Framework/ORBInitializer_T.cpp
- }
-
IDL_Files {
}
}
diff --git a/TAO/tests/TransportCurrent/IIOP/IIOP_Server_Request_Interceptor.h b/TAO/tests/TransportCurrent/IIOP/IIOP_Server_Request_Interceptor.h
index 77a04c0f5ad..00cd81bdb31 100644
--- a/TAO/tests/TransportCurrent/IIOP/IIOP_Server_Request_Interceptor.h
+++ b/TAO/tests/TransportCurrent/IIOP/IIOP_Server_Request_Interceptor.h
@@ -25,7 +25,7 @@
#include "tao/TransportCurrent/IIOP_Transport_Current.h"
-#include "tests/TransportCurrent/Framework/Server_Request_Interceptor.h"
+#include "Server_Request_Interceptor.h"
namespace Test
{
diff --git a/TAO/tests/TransportCurrent/IIOP/client.cpp b/TAO/tests/TransportCurrent/IIOP/client.cpp
new file mode 100644
index 00000000000..f910a35d8e2
--- /dev/null
+++ b/TAO/tests/TransportCurrent/IIOP/client.cpp
@@ -0,0 +1,303 @@
+// -*- C++ -*-
+
+#include "ace/Get_Opt.h"
+#include "ace/Task.h"
+
+#include "tao/DynamicInterface/Request.h"
+#include "tao/ORBInitializer_Registry.h"
+
+#include "tao/TransportCurrent/Transport_Current.h"
+
+#include "Client_Request_Interceptor.h"
+#include "Current_TestC.h"
+
+#include "ORBInitializer_T.h"
+
+ACE_RCSID (PICurrent,
+ client,
+ "$Id$")
+
+// Prototype
+
+int
+test_transport_current (CORBA::ORB_ptr
+ ACE_ENV_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException,
+ CORBA::UserException));
+
+using namespace TAO;
+
+const ACE_TCHAR* CLIENT_ORB_ID = ACE_TEXT ("client orb");
+const ACE_TCHAR* ior = "file://server.ior";
+
+int nthreads = 1;
+int niterations = 1;
+int use_dii = 1;
+
+
+int
+parse_args (int argc, ACE_TCHAR *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "yt:n:k:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'y':
+ use_dii = 0; // Do not use DII
+ break;
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+ case 't':
+ nthreads = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+ case 'n':
+ niterations = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Usage: %s "
+ "-k IOR "
+ "-t threads "
+ "-n iterations "
+ "-y "
+ "\n",
+ argv[0]),
+ -1);
+ }
+ return 0;
+}
+
+
+/// A helper class to encapsulate a task
+
+class Worker : public ACE_Task_Base
+{
+public:
+ Worker (Test::Transport::CurrentTest_ptr server, int niterations, int use_dii_too);
+ virtual int svc (void);
+
+private:
+ // The server.
+ Test::Transport::CurrentTest_var server_;
+
+ // The number of iterations on each client thread.
+ int niterations_;
+
+ // Whether to use DII in addition to SII
+ int use_dii_too_;
+};
+
+
+/// Ctor
+
+Worker::Worker (Test::Transport::CurrentTest_ptr server,
+ int niterations,
+ int use_dii_too)
+ : server_ (Test::Transport::CurrentTest::_duplicate (server))
+ , niterations_ (niterations)
+ , use_dii_too_ (use_dii_too)
+{
+}
+
+
+/// Test referencing the TC data *inside* the context of a client-side
+/// interceptor
+
+int
+Worker::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+
+ for (int i = 0; i < this->niterations_; ++i)
+ {
+
+ // Minimum CORBA does not define Object::_request, so we're just
+ // skipping the DII part in those cases.
+#if (TAO_HAS_MINIMUM_CORBA != 0)
+
+ if (this->use_dii_too_)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("Client (%P|%t) Invoking server->invoked_by_client() via DII\n")));
+
+ CORBA::Request_var request =
+ this->server_->_request ("invoked_by_client"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ request->set_return_type (CORBA::_tc_void);
+
+ request->invoke (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+ }
+
+#endif /* (TAO_HAS_MINIMUM_CORBA != 0) */
+
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("Client (%P|%t) Invoking server->invoked_by_client() via SII\n")));
+
+ this->server_->invoked_by_client (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (TAO_debug_level > 0 && i % 100 == 0)
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Client (%P|%t) Iteration = %d\n"),
+ i));
+ }
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Client: exception raised");
+ }
+ ACE_ENDTRY;
+ return 0;
+}
+
+
+/// The main driver
+int
+ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ Test::Client_Request_Interceptor cri (CLIENT_ORB_ID, test_transport_current);
+
+ PortableInterceptor::ORBInitializer_ptr temp_initializer =
+ PortableInterceptor::ORBInitializer::_nil ();
+
+ ACE_NEW_RETURN (temp_initializer,
+ Test::ORBInitializer<PortableInterceptor::ClientRequestInterceptor> (&cri),
+ -1);
+
+ PortableInterceptor::ORBInitializer_var orb_initializer =
+ temp_initializer;
+
+ PortableInterceptor::register_orb_initializer (orb_initializer.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc,
+ argv,
+ CLIENT_ORB_ID
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (parse_args (argc, argv) != 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("Client (%P|%t) Failure to parse the command line.\n"),
+ ior),
+ -1);
+
+
+ ACE_TRY
+ {
+ test_transport_current (orb.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("Client (%P|%t) ERROR: ")
+ ACE_TEXT ("TC invocation, outside of ")
+ ACE_TEXT ("interceptor context is undefined.")
+ ACE_TEXT (" Expected exception was not thrown\n")),
+ -1);
+ }
+ ACE_CATCH (Transport::NoContext, ex)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("Client (%P|%t) Expected exception occured when trying ")
+ ACE_TEXT ("to access traits outside the ")
+ ACE_TEXT ("interceptor or upcall context.\n")));
+ }
+ ACE_ENDTRY;
+
+ // Resolve the target object
+ CORBA::Object_var obj = orb->string_to_object (ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::Transport::CurrentTest_var server =
+ Test::Transport::CurrentTest::_narrow (obj.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (server.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("Client (%P|%t) The server object reference <%s> is nil.\n"),
+ ior),
+ -1);
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Client (%P|%t) Spawning %d threads\n"), nthreads));
+
+ // Spawn a number of clients doing the same thing for a
+ // predetermined number of times
+ Worker client (server.in (), niterations, use_dii);
+
+#if defined (ACE_HAS_THREADS)
+ if (client.activate (THR_NEW_LWP | THR_JOINABLE,
+ nthreads) != 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("Client (%P|%t) Cannot activate %d client threads\n"),
+ nthreads),
+ -1);
+ client.thr_mgr ()->wait ();
+#else
+ if (nthreads > 1)
+ ACE_ERROR ((LM_WARNING,
+ ACE_TEXT ("Client (%P|%t) Cannot use threads other than ")
+ ACE_TEXT ("the only one available.\n")));
+ client.svc ();
+#endif
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Client (%P|%t) Collected any threads\n")));
+
+ CORBA::Long result = 0;
+
+ // Verify enough interception points have been triggered
+ if (cri.interceptions () != 2 * // request & response
+ niterations * // iterations
+ nthreads * // threads
+ (2*use_dii)) // sii and dii, if needed
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("Client (%P|%t) Expected %d client-side interceptions, but detected %d\n"),
+ 2 * niterations * nthreads * (2*use_dii),
+ cri.interceptions ()));
+ }
+ else
+ {
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Client (%P|%t) Invoking server->self_test()\n")));
+
+ // Self-test the server side
+ result = server->self_test (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (result != 0)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("Client (%P|%t) Server self-test reported failure\n")));
+ }
+
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Client (%P|%t) Invoking oneway server->shutdown()\n")));
+
+ server->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_INFO,
+ ACE_TEXT ("Client (%P|%t) Completed %s\n"),
+ ((result == 0) ? ACE_TEXT ("successfuly") : ACE_TEXT ("with failure"))));
+ return result;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ ACE_TEXT ("Client: Transport Current test (client-side) failed:"));
+ return -1;
+ }
+ ACE_ENDTRY;
+}
diff --git a/TAO/tests/TransportCurrent/IIOP/run_test.pl b/TAO/tests/TransportCurrent/IIOP/run_test.pl
index 5daa7f993e2..9db8ca35798 100755
--- a/TAO/tests/TransportCurrent/IIOP/run_test.pl
+++ b/TAO/tests/TransportCurrent/IIOP/run_test.pl
@@ -8,6 +8,23 @@ eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
use lib "$ENV{ACE_ROOT}/bin";
use PerlACE::Run_Test;
+sub add_path {
+ my($name) = shift;
+ my($value) = shift;
+ if (defined $ENV{$name}) {
+ $ENV{$name} .= ':' . $value
+ }
+ else {
+ $ENV{$name} = $value;
+ }
+}
+
+# Set the library path for the client to be able to load
+# the common library library.
+add_path('LD_LIBRARY_PATH', '../lib');
+add_path('LIBPATH', '../lib');
+add_path('SHLIB_PATH', '../lib');
+
$status = 0;
$client = PerlACE::LocalFile ("client");
diff --git a/TAO/tests/TransportCurrent/IIOP/server.cpp b/TAO/tests/TransportCurrent/IIOP/server.cpp
new file mode 100644
index 00000000000..31dbb014e90
--- /dev/null
+++ b/TAO/tests/TransportCurrent/IIOP/server.cpp
@@ -0,0 +1,242 @@
+// -*- C++ -*-
+
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_stdio.h"
+#include "ace/Task.h"
+
+#include "tao/ORBInitializer_Registry.h"
+
+#include "Current_Test_Impl.h"
+#include "Server_Request_Interceptor.h"
+#include "ORBInitializer_T.h"
+
+
+ACE_RCSID (Transport_Current,
+ server,
+ "$Id$")
+
+const char *ior_output_file = "server.ior";
+int nthreads = 1;
+int use_collocated_call = 1;
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "t:o:n:c:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'c':
+ use_collocated_call = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+ case 'o':
+ ior_output_file = get_opts.opt_arg ();
+ break;
+ case 't':
+ nthreads = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+ case 'n': // Does nothing. Added just for symetry with the client.
+ break;
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Usage: %s "
+ "-o <iorfile>"
+ "-t threads "
+ "-n n (ignored, if provided) "
+ "-c make_collocated_calls "
+ "\n",
+ argv[0]),
+ -1);
+ }
+
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+
+
+/// A helper class to encapsulate a task
+
+class Worker : public ACE_Task_Base
+{
+public:
+ Worker (CORBA::ORB_ptr);
+ virtual int svc (void);
+
+private:
+ // The ORB
+ CORBA::ORB_var orb_;
+};
+
+
+/// Ctor
+
+Worker::Worker (CORBA::ORB_ptr orb)
+ : orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+
+/// Test referencing the TC data *inside* the context of a client-side
+/// interceptor
+
+int
+Worker::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+ this->orb_->run (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Server: exception raised");
+ }
+ ACE_ENDTRY;
+ return 0;
+}
+
+
+
+/// Main driver
+
+int
+server_main (int argc,
+ ACE_TCHAR *argv[],
+ Test::Server_Request_Interceptor *cri)
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ PortableInterceptor::ORBInitializer_ptr temp_initializer =
+ PortableInterceptor::ORBInitializer::_nil ();
+
+ ACE_NEW_RETURN (temp_initializer,
+ Test::ORBInitializer <PortableInterceptor::ServerRequestInterceptor> (cri),
+ -1); // No exceptions yet!
+
+ PortableInterceptor::ORBInitializer_var orb_initializer =
+ temp_initializer;
+
+ PortableInterceptor::register_orb_initializer (orb_initializer.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+
+ CORBA::ORB_var orb = CORBA::ORB_init (argc,
+ argv,
+ ACE_TEXT ("test_orb")
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var obj =
+ orb->resolve_initial_references ("RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (root_poa.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("Server (%P|%t) Unable to obtain")
+ ACE_TEXT (" RootPOA reference.\n")),
+ -1);
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (parse_args (argc, argv) != 0)
+ return -1;
+
+ Current_Test_Impl server_impl (orb.in (),
+ root_poa.in (),
+ use_collocated_call);
+
+ obj = server_impl._this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::Transport::CurrentTest_var server =
+ Test::Transport::CurrentTest::_narrow (obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (server.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("Server (%P|%t) Unable to obtain ")
+ ACE_TEXT ("reference to CurrentTest object.\n")),
+ -1);
+
+ CORBA::String_var ior =
+ orb->object_to_string (server.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // If the ior_output_file exists, output the IOR to it.
+ if (ior_output_file != 0)
+ {
+ FILE *output_file = ACE_OS::fopen (ior_output_file, "w");
+ if (output_file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Server (%P|%t) Cannot write "
+ "IOR: %s - %m",
+ ior_output_file),
+ -1);
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+ }
+
+ // Spawn a number of clients doing the same thing for a
+ // predetermined number of times
+ Worker worker (orb.in ());
+
+#if defined (ACE_HAS_THREADS)
+ if (worker.activate (THR_NEW_LWP | THR_JOINABLE,
+ nthreads) != 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("Server (%P|%t) Cannot activate %d threads\n"),
+ nthreads),
+ -1);
+ worker.thr_mgr ()->wait ();
+#else
+ if (nthreads > 1)
+ ACE_ERROR ((LM_WARNING,
+ ACE_TEXT ("Server (%P|%t) Cannot use threads other than ")
+ ACE_TEXT ("the only one available.\n")));
+ worker.svc ();
+#endif
+
+ if (TAO_debug_level >= 1)
+ ACE_DEBUG ((LM_INFO, ACE_TEXT ("Server (%P|%t) Event loop finished.\n")));
+
+ if (!cri->self_test ())
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("Server (%P|%t) ERROR: Interceptor self_test failed\n")));
+
+ server->shutdown (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ ACE_TEXT ("Server (%P|%t) ERROR: "));
+
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ ACE_DEBUG ((LM_INFO, ACE_TEXT ("Server (%P|%t) Completed successfuly.\n")));
+ return 0;
+}
diff --git a/TAO/tests/TransportCurrent/Framework/Client_Request_Interceptor.cpp b/TAO/tests/TransportCurrent/lib/Client_Request_Interceptor.cpp
index 723fda12963..723fda12963 100644
--- a/TAO/tests/TransportCurrent/Framework/Client_Request_Interceptor.cpp
+++ b/TAO/tests/TransportCurrent/lib/Client_Request_Interceptor.cpp
diff --git a/TAO/tests/TransportCurrent/Framework/Client_Request_Interceptor.h b/TAO/tests/TransportCurrent/lib/Client_Request_Interceptor.h
index 3440a3e9288..c5ceadbf3f6 100644
--- a/TAO/tests/TransportCurrent/Framework/Client_Request_Interceptor.h
+++ b/TAO/tests/TransportCurrent/lib/Client_Request_Interceptor.h
@@ -16,7 +16,8 @@
#ifndef CLIENT_REQUEST_INTERCEPTOR_H
#define CLIENT_REQUEST_INTERCEPTOR_H
-#include "ace/config-all.h"
+#include /**/ "ace/config-all.h"
+#include /**/ "Current_Test_Export.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
@@ -49,7 +50,7 @@ namespace Test
* only forwards the initial request. See the README file for
* details.
*/
- class Client_Request_Interceptor
+ class Current_Test_Export Client_Request_Interceptor
: public virtual PortableInterceptor::ClientRequestInterceptor,
public virtual TAO_Local_RefCounted_Object
{
diff --git a/TAO/tests/TransportCurrent/Framework/Current_Test.idl b/TAO/tests/TransportCurrent/lib/Current_Test.idl
index a7f00f7d29f..a7f00f7d29f 100644
--- a/TAO/tests/TransportCurrent/Framework/Current_Test.idl
+++ b/TAO/tests/TransportCurrent/lib/Current_Test.idl
diff --git a/TAO/tests/TransportCurrent/lib/Current_Test_Export.h b/TAO/tests/TransportCurrent/lib/Current_Test_Export.h
new file mode 100644
index 00000000000..cfdf16fe60e
--- /dev/null
+++ b/TAO/tests/TransportCurrent/lib/Current_Test_Export.h
@@ -0,0 +1,58 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl -d Current_Test
+// ------------------------------
+#ifndef CURRENT_TEST_EXPORT_H
+#define CURRENT_TEST_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if defined (ACE_AS_STATIC_LIBS) && !defined (CURRENT_TEST_HAS_DLL)
+# define CURRENT_TEST_HAS_DLL 0
+#endif /* ACE_AS_STATIC_LIBS && CURRENT_TEST_HAS_DLL */
+
+#if !defined (CURRENT_TEST_HAS_DLL)
+# define CURRENT_TEST_HAS_DLL 1
+#endif /* ! CURRENT_TEST_HAS_DLL */
+
+#if defined (CURRENT_TEST_HAS_DLL) && (CURRENT_TEST_HAS_DLL == 1)
+# if defined (CURRENT_TEST_BUILD_DLL)
+# define Current_Test_Export ACE_Proper_Export_Flag
+# define CURRENT_TEST_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define CURRENT_TEST_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* CURRENT_TEST_BUILD_DLL */
+# define Current_Test_Export ACE_Proper_Import_Flag
+# define CURRENT_TEST_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define CURRENT_TEST_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* CURRENT_TEST_BUILD_DLL */
+#else /* CURRENT_TEST_HAS_DLL == 1 */
+# define Current_Test_Export
+# define CURRENT_TEST_SINGLETON_DECLARATION(T)
+# define CURRENT_TEST_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* CURRENT_TEST_HAS_DLL == 1 */
+
+// Set CURRENT_TEST_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (CURRENT_TEST_NTRACE)
+# if (ACE_NTRACE == 1)
+# define CURRENT_TEST_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define CURRENT_TEST_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !CURRENT_TEST_NTRACE */
+
+#if (CURRENT_TEST_NTRACE == 1)
+# define CURRENT_TEST_TRACE(X)
+#else /* (CURRENT_TEST_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define CURRENT_TEST_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (CURRENT_TEST_NTRACE == 1) */
+
+#endif /* CURRENT_TEST_EXPORT_H */
+
+// End of auto generated file.
diff --git a/TAO/tests/TransportCurrent/Framework/Current_Test_Impl.h b/TAO/tests/TransportCurrent/lib/Current_Test_Impl.h
index 84710ddbd86..84710ddbd86 100644
--- a/TAO/tests/TransportCurrent/Framework/Current_Test_Impl.h
+++ b/TAO/tests/TransportCurrent/lib/Current_Test_Impl.h
diff --git a/TAO/tests/TransportCurrent/lib/Current_Test_Lib.mpc b/TAO/tests/TransportCurrent/lib/Current_Test_Lib.mpc
new file mode 100644
index 00000000000..2e1e35b150e
--- /dev/null
+++ b/TAO/tests/TransportCurrent/lib/Current_Test_Lib.mpc
@@ -0,0 +1,65 @@
+// -*- MPC -*-
+// $Id$
+
+project(*idl): taoidldefaults {
+
+ dynamicflags += CURRENT_TEST_BUILD_DLL
+ idlflags += -Wb,export_include=Current_Test_Export.h \
+ -Wb,export_macro=Current_Test_Export
+
+ idlflags -= -Sa -St
+
+ IDL_Files {
+ Current_Test.idl
+ }
+
+ custom_only = 1
+}
+
+project(*Client): taolib_with_idl, tao_versioning_idl_defaults {
+
+ after += *idl
+ includes += .
+ libout = .
+ dynamicflags += CURRENT_TEST_BUILD_DLL
+
+ Source_Files {
+ Client_Request_Interceptor.cpp
+ }
+
+ Source_Files {
+ Current_TestC.cpp
+ }
+
+ Template_Files {
+ ORBInitializer_T.cpp
+ }
+
+ IDL_Files {
+ }
+}
+
+project(*Server): taolib_with_idl, tao_versioning_idl_defaults, pi_server {
+
+ after += *idl
+ includes += .
+ libout = .
+ dynamicflags += CURRENT_TEST_BUILD_DLL
+
+ Source_Files {
+ Server_Request_Interceptor.cpp
+ }
+
+ Source_Files {
+ Current_TestC.cpp
+ Current_TestS.cpp
+ }
+
+ Template_Files {
+ ORBInitializer_T.cpp
+ }
+
+ IDL_Files {
+ }
+}
+
diff --git a/TAO/tests/TransportCurrent/Framework/ORBInitializer_T.cpp b/TAO/tests/TransportCurrent/lib/ORBInitializer_T.cpp
index 31781bcb5cf..31781bcb5cf 100644
--- a/TAO/tests/TransportCurrent/Framework/ORBInitializer_T.cpp
+++ b/TAO/tests/TransportCurrent/lib/ORBInitializer_T.cpp
diff --git a/TAO/tests/TransportCurrent/Framework/ORBInitializer_T.h b/TAO/tests/TransportCurrent/lib/ORBInitializer_T.h
index 62dc5caeba0..00d0fc7de9d 100644
--- a/TAO/tests/TransportCurrent/Framework/ORBInitializer_T.h
+++ b/TAO/tests/TransportCurrent/lib/ORBInitializer_T.h
@@ -13,8 +13,8 @@
#ifndef ORBINITIALIZER_T_H
#define ORBINITIALIZER_T_H
#include /**/ "ace/pre.h"
-
-#include "ace/config-all.h"
+#include /**/ "ace/config-all.h"
+#include /**/ "Current_Test_Export.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
@@ -29,7 +29,7 @@ namespace Test
// interceptors. Partial specializations exist to handle client and
// server request interceptors.
template <typename I>
- class ORBInitializer : public PortableInterceptor::ORBInitializer
+ class Current_Test_Export ORBInitializer : public PortableInterceptor::ORBInitializer
{
public:
ORBInitializer (typename I::_ptr_type interceptor);
diff --git a/TAO/tests/TransportCurrent/Framework/Server_Request_Interceptor.cpp b/TAO/tests/TransportCurrent/lib/Server_Request_Interceptor.cpp
index 7b287231601..7b287231601 100644
--- a/TAO/tests/TransportCurrent/Framework/Server_Request_Interceptor.cpp
+++ b/TAO/tests/TransportCurrent/lib/Server_Request_Interceptor.cpp
diff --git a/TAO/tests/TransportCurrent/Framework/Server_Request_Interceptor.h b/TAO/tests/TransportCurrent/lib/Server_Request_Interceptor.h
index 9f168bb7321..a1d96b50b38 100644
--- a/TAO/tests/TransportCurrent/Framework/Server_Request_Interceptor.h
+++ b/TAO/tests/TransportCurrent/lib/Server_Request_Interceptor.h
@@ -16,7 +16,8 @@
#ifndef SERVER_REQUEST_INTERCEPTOR_H
#define SERVER_REQUEST_INTERCEPTOR_H
-#include "ace/config-all.h"
+#include /**/ "ace/config-all.h"
+#include /**/ "Current_Test_Export.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
@@ -44,7 +45,7 @@ namespace Test
* @brief Simple concrete server request interceptor.
*
*/
- class Server_Request_Interceptor
+ class Current_Test_Export Server_Request_Interceptor
: public virtual PortableInterceptor::ServerRequestInterceptor,
public virtual TAO_Local_RefCounted_Object
{