From 1aa0af390a917cb9f67ad789d35a339530faba6b Mon Sep 17 00:00:00 2001 From: huangming Date: Fri, 30 Jan 2004 19:17:18 +0000 Subject: Added FtRtEvent_Test.* --- TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.cpp | 179 +++++++++++++++++++++++++ TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.h | 66 +++++++++ 2 files changed, 245 insertions(+) create mode 100644 TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.cpp create mode 100644 TAO/orbsvcs/tests/FtRtEvent/FtRtEvent_Test.h 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(orb_.in(), "NameService" + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN(0); + + + channel = resolve(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(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 + */ +//============================================================================= + +#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 FtRtEvent_Test : public FtRtEvent_Test_Base +{ + virtual int init(); + T client_; +}; + +template +int FtRtEvent_Test::init(ACE_ENV_SINGLE_ARG_DECL) +{ + return client_.init(orb_.in(), channel_.in(), options_ + ACE_ENV_ARG_PARAMETER); +} + +#endif -- cgit v1.2.1