summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhuangming <huangminghuang@users.noreply.github.com>2004-01-30 19:17:18 +0000
committerhuangming <huangminghuang@users.noreply.github.com>2004-01-30 19:17:18 +0000
commit1aa0af390a917cb9f67ad789d35a339530faba6b (patch)
tree20071af629dbfd696da7677f0fad7c2540319396
parent73c0e907e908d3c678ff2a30de59f062ae970b3a (diff)
downloadATCD-ftrtec.tar.gz
Added FtRtEvent_Test.*ftrtec
-rw-r--r--TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.cpp179
-rw-r--r--TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.h66
2 files changed, 245 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.cpp b/TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.cpp
new file mode 100644
index 00000000000..cac26b3044b
--- /dev/null
+++ b/TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.cpp
@@ -0,0 +1,179 @@
+#include "FtRtEvent_Test.h"
+#include "orbsvcs/CosNamingC.h"
+#include "orbsvcs/FtRtecEventChannelAdminC.h"
+#include "ace/Get_Opt.h"
+#include "orbsvcs/FtRtEvent/Utils/resolve_init.h"
+#include "orbsvcs/FtRtEvent/Utils/FTEC_Gateway.h"
+#include "orbsvcs/FtRtEvent/Utils/Log.h"
+
+#ifndef NO_FTRTEC
+/// include this file to statically linked with FT ORB
+#include "orbsvcs/FaultTolerance/FT_ClientService_Activate.h"
+
+/// include this file to statically linked with Transaction Depth
+#include "orbsvcs/FtRtEvent/ClientORB/FTRT_ClientORB_Loader.h"
+#endif
+
+ACE_RCSID (FtRtEvent,
+ FtRtEvent_Test,
+ "$Id$")
+
+FtRtEvent_Test_Base::FtRtEvent_Test_Base()
+: gateway_(0)
+, use_gateway_(1)
+{
+ options_.num_events = INT_MAX;
+ options_.num_iterations=100;
+ options_.timer_interval.set(1,0);
+ options_.proxy_consumer_file="consumer.ior";
+}
+
+FtRtEvent_Test_Base::~FtRtEvent_Test_Base()
+{
+ delete gateway_;
+}
+
+int
+FtRtEvent_Test_Base::parse_args(int argc, ACE_TCHAR** argv ACE_ENV_ARG_DECL)
+{
+ ACE_Get_Opt get_opt (argc, argv, ACE_LIB_TEXT("d:e:f:hi:k:np:?"));
+ int opt;
+
+ while ((opt = get_opt ()) != EOF)
+ {
+ switch (opt)
+ {
+ case 'd':
+ TAO_FTRTEC::Log::level(ACE_OS::atoi(get_opt.opt_arg ()));
+ break;
+ case 'e':
+ options_.num_events = ACE_OS::atoi(get_opt.opt_arg ());
+ break;
+ case 'i':
+ {
+ CORBA::Object_var obj = orb_->string_to_object(get_opt.opt_arg ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN(0);
+ channel_ = RtecEventChannelAdmin::EventChannel::_narrow(obj.in()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN(0);
+ }
+ break;
+ case 'k':
+ options_.num_iterations = atoi(get_opt.opt_arg ());
+ break;
+ case 'n':
+ use_gateway_ = 0;
+ break;
+ case 'f':
+ options_.timer_interval.set(1.0/ACE_OS::atoi(get_opt.opt_arg ()));
+ break;
+ case 'p':
+ options_.proxy_consumer_file = get_opt.opt_arg ();
+ break;
+ case 'h':
+ case '?':
+ ACE_DEBUG((LM_DEBUG,
+ ACE_LIB_TEXT("Usage: %s ")
+ ACE_LIB_TEXT("-d debuglevel\n")
+ ACE_LIB_TEXT("-f event_frequency in HZ (default 1 HZ)\n")
+ ACE_LIB_TEXT("-i rt_eventchannel_ior\n")
+ ACE_LIB_TEXT("-k number_of_events\n")
+ ACE_LIB_TEXT("-n do not use gateway\n")
+ ACE_LIB_TEXT("\n"),
+ argv[0]));
+ return -1;
+ }
+ }
+ ACE_DEBUG((LM_DEBUG, "After Parse args\n"));
+ return 0;
+}
+
+RtecEventChannelAdmin::EventChannel_ptr
+FtRtEvent_Test_Base::get_event_channel(ACE_ENV_SINGLE_ARG_DECL)
+{
+#ifndef NO_FTRTEC
+ FtRtecEventChannelAdmin::EventChannel_var channel =
+ FtRtecEventChannelAdmin::EventChannel::_narrow(channel_.in());
+ if (CORBA::is_nil(channel.in()))
+ {
+ /// Find the FTRTEC from the Naming Service
+ CosNaming::Name name(1);
+ name.length(1);
+ name[0].id = CORBA::string_dup("FT_EventService");
+
+ ACE_DEBUG((LM_DEBUG, "Getting FT_EventService from Naming Service\n"));
+
+ CosNaming::NamingContext_var naming_context =
+ resolve_init<CosNaming::NamingContext>(orb_.in(), "NameService"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN(0);
+
+
+ channel = resolve<FtRtecEventChannelAdmin::EventChannel>(naming_context.in(),
+ name
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN(0);
+ ACE_DEBUG((LM_DEBUG, "Got FT_EventService\n"));
+ }
+
+ if (use_gateway_)
+ {
+ // use local gateway to communicate with FTRTEC
+ gateway_ = new TAO_FTRTEC::FTEC_Gateway(orb_.in(), channel.in());
+ return gateway_->_this(ACE_ENV_SINGLE_ARG_PARAMETER);
+ }
+ return channel._retn();
+#else
+ return RtecEventChannelAdmin::EventChannel::_duplicate(channel_.in());
+#endif
+}
+
+
+int
+FtRtEvent_Test_Base::run(int argc, ACE_TCHAR** argv)
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY {
+ orb_ = CORBA::ORB_init(argc, argv, ""
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (parse_args(argc, argv ACE_ENV_ARG_PARAMETER) == -1)
+ return -1;
+ ACE_TRY_CHECK;
+
+ channel_ = get_event_channel(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil(channel_.in()))
+ return -1;
+
+ PortableServer::POA_var poa =
+ resolve_init<PortableServer::POA>(orb_.in(), "RootPOA"
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POAManager_var mgr = poa->the_POAManager(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ mgr->activate(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (this->init(ACE_ENV_SINGLE_ARG_PARAMETER) == -1)
+ return -1;
+ ACE_TRY_CHECK;
+
+ orb_->run(ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ }
+ ACE_CATCHANY {
+ ACE_PRINT_EXCEPTION(ACE_ANY_EXCEPTION, "A CORBA Exception occurred.");
+ }
+ ACE_ENDTRY;
+
+ ACE_CHECK_RETURN(-1);
+
+ return 0;
+}
diff --git a/TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.h b/TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.h
new file mode 100644
index 00000000000..907ceb162af
--- /dev/null
+++ b/TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.h
@@ -0,0 +1,66 @@
+// -*- C++ -*-
+//=============================================================================
+/**
+ * @file FtRtEvent_Test.h
+ *
+ * $Id$
+ *
+ * @author Huang-Ming Huang <hh1@cse.wustl.edu>
+ */
+//=============================================================================
+
+#ifndef FTRTEVENT_TEST_H
+#define FTRTEVENT_TEST_H
+
+#include "orbsvcs/RtecEventChannelAdminC.h"
+#include "ace/SString.h"
+
+namespace TAO_FTRTEC {
+ class FTEC_Gateway;
+}
+
+struct Options
+{
+ ACE_Time_Value timer_interval;
+ int num_iterations;
+ int num_events;
+ ACE_CString proxy_consumer_file;
+};
+
+class FtRtEvent_Test_Base
+{
+public:
+ FtRtEvent_Test_Base();
+ virtual ~FtRtEvent_Test_Base();
+
+ int run(int argc, ACE_TCHAR** argv);
+protected:
+ CORBA::ORB_var orb_;
+ RtecEventChannelAdmin::EventChannel_var channel_;
+ TAO_FTRTEC::FTEC_Gateway* gateway_;
+ int use_gateway_;
+ Options options_;
+private:
+ int parse_args(int argc, ACE_TCHAR** argv
+ ACE_ENV_ARG_DECL);
+ RtecEventChannelAdmin::EventChannel_ptr
+ get_event_channel(ACE_ENV_SINGLE_ARG_DECL);
+
+ virtual int init(ACE_ENV_SINGLE_ARG_DECL)=0;
+};
+
+template <class T>
+class FtRtEvent_Test : public FtRtEvent_Test_Base
+{
+ virtual int init();
+ T client_;
+};
+
+template <class T>
+int FtRtEvent_Test<T>::init(ACE_ENV_SINGLE_ARG_DECL)
+{
+ return client_.init(orb_.in(), channel_.in(), options_
+ ACE_ENV_ARG_PARAMETER);
+}
+
+#endif