diff options
Diffstat (limited to 'trunk/TAO/orbsvcs/tests/Notify/Basic/Simple.cpp')
-rw-r--r-- | trunk/TAO/orbsvcs/tests/Notify/Basic/Simple.cpp | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/trunk/TAO/orbsvcs/tests/Notify/Basic/Simple.cpp b/trunk/TAO/orbsvcs/tests/Notify/Basic/Simple.cpp new file mode 100644 index 00000000000..fd0dffb4620 --- /dev/null +++ b/trunk/TAO/orbsvcs/tests/Notify/Basic/Simple.cpp @@ -0,0 +1,271 @@ +//$Id$ + +#include "ace/Arg_Shifter.h" +#include "ace/Get_Opt.h" +#include "tao/debug.h" +#include "Simple.h" + +ACE_RCSID (Notify_Tests, Simple, "$Id$") + +//*************************************************************************** + +Event_AnyPushConsumer::Event_AnyPushConsumer (Simple_Test *test_client) + : test_client_ (test_client) +{ +} + +void +Event_AnyPushConsumer::push (const CORBA::Any & data + ACE_ENV_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException, + CosEventComm::Disconnected)) +{ + int event_num; + data >>= event_num; + + if (TAO_debug_level) + ACE_DEBUG ((LM_DEBUG, + "Received event# %d\n", + event_num)); + + this->test_client_->on_event_received (); +} + +//*************************************************************************** + +Event_AnyPushSupplier::Event_AnyPushSupplier (Simple_Test* test_client) + : test_client_ (test_client) +{ +} + +Event_AnyPushSupplier::~Event_AnyPushSupplier (void) +{ +} + +//*************************************************************************** + +Simple_Test::Simple_Test (void) + : event_count_ (5) +{ +} + +Simple_Test::~Simple_Test (void) +{ +} + +int +Simple_Test::init (int argc, + char* argv [] + ACE_ENV_ARG_DECL) +{ + // Initialized the base class. + Notify_Test_Client::init (argc, + argv + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + // Create all participents. + this->create_EC (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + CosNotifyChannelAdmin::AdminID adminid; + + supplier_admin_ = + this->ec_->new_for_suppliers (this->ifgop_, + adminid + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + ACE_ASSERT (!CORBA::is_nil (supplier_admin_.in ())); + + consumer_admin_ = + this->ec_->new_for_consumers (this->ifgop_, + adminid + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + ACE_ASSERT (!CORBA::is_nil (consumer_admin_.in ())); + + ACE_NEW_RETURN (this->consumer_, + Event_AnyPushConsumer (this), + -1); + this->consumer_->init (root_poa_.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + this->consumer_->connect (this->consumer_admin_.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + Event_AnyPushConsumer* consumer2; + ACE_NEW_RETURN (consumer2, + Event_AnyPushConsumer (this), + -1); + consumer2->init (root_poa_.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + consumer2->connect (this->consumer_admin_.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + ACE_NEW_RETURN (this->supplier_, + Event_AnyPushSupplier (this), + -1); + this->supplier_->init (root_poa_.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + this->supplier_->connect (this->supplier_admin_.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + consumer_start( 0 ); + + return 0; +} + +int +Simple_Test::parse_args (int argc, + char *argv[]) +{ + ACE_Arg_Shifter arg_shifter (argc, + argv); + + const char *current_arg = 0; + + while (arg_shifter.is_anything_left ()) + { + if ((current_arg = arg_shifter.get_the_parameter ("-events"))) + { + this->event_count_ = ACE_OS::atoi (current_arg); + // The number of events to send/receive. + arg_shifter.consume_arg (); + } + else if (arg_shifter.cur_arg_strncasecmp ("-?") == 0) + { + ACE_DEBUG ((LM_DEBUG, + "usage: %s " + "-events event_count \n", + argv[0], + argv[0])); + + arg_shifter.consume_arg (); + + return -1; + } + else + { + arg_shifter.ignore_arg (); + } + } + return 0; +} + +void +Simple_Test::create_EC (ACE_ENV_SINGLE_ARG_DECL) +{ + CosNotifyChannelAdmin::ChannelID id; + + this->ec_ = notify_factory_->create_channel (this->initial_qos_, + this->initial_admin_, + id + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + ACE_ASSERT (!CORBA::is_nil (ec_.in ())); +} + +void +Simple_Test::on_event_received (void) +{ + ++this->result_count_; + + if (TAO_debug_level) + ACE_DEBUG ((LM_DEBUG, + "event count = #%d\n", + this->result_count_.value ())); + + if (this->result_count_ == 2 * this->event_count_) + { + ACE_DECLARE_NEW_CORBA_ENV; + this->end_test (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + } +} + +void +Simple_Test::run_test (ACE_ENV_SINGLE_ARG_DECL) +{ + CORBA::Any data; + + for (int i = 0; i < this->event_count_; ++i) + { + data <<= (CORBA::Long)i; + + this->supplier_->send_event (data + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + } +} + +void +Simple_Test::end_test (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) +{ + consumer_done( 0 ); +} + +int +Simple_Test::check_results (void) +{ + // Destroy the channel + ACE_DECLARE_NEW_CORBA_ENV; + this->ec_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + if (this->result_count_ == 2 * this->event_count_) + { + ACE_DEBUG ((LM_DEBUG, + "Events test success\n")); + return 0; + } + else + { + ACE_DEBUG ((LM_DEBUG, + "Events test failed!\n")); + return 1; + } +} + +//*************************************************************************** + +int +main (int argc, char* argv[]) +{ + Simple_Test events; + + if (events.parse_args (argc, argv) == -1) + { + return 1; + } + + ACE_TRY_NEW_ENV + { + events.init (argc, + argv + ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + events.run_test (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + events.ORB_run( ACE_ENV_SINGLE_ARG_PARAMETER ); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::Exception, se) + { + ACE_PRINT_EXCEPTION (se, "Error: "); + return 1; + } + ACE_ENDTRY; + + return events.check_results (); +} |