diff options
author | michel_j <michel_j@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2005-07-01 20:27:01 +0000 |
---|---|---|
committer | michel_j <michel_j@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2005-07-01 20:27:01 +0000 |
commit | c6242e538b2144d1391aeae03d6139ed59ef2e9f (patch) | |
tree | edb6b78708bd65ec3ffb083a6c82fd6f3d9f87d3 /TAO/orbsvcs/tests/Notify/Ordering/Sequence_Supplier.cpp | |
parent | c1eb8ab20e76266f9e5b0a1009bfc2e1c93f7aa0 (diff) | |
download | ATCD-c6242e538b2144d1391aeae03d6139ed59ef2e9f.tar.gz |
Fri Jul 1 14:43:27 2005 Justin Michel <michel_j@ociweb.com>
Diffstat (limited to 'TAO/orbsvcs/tests/Notify/Ordering/Sequence_Supplier.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/Notify/Ordering/Sequence_Supplier.cpp | 420 |
1 files changed, 188 insertions, 232 deletions
diff --git a/TAO/orbsvcs/tests/Notify/Ordering/Sequence_Supplier.cpp b/TAO/orbsvcs/tests/Notify/Ordering/Sequence_Supplier.cpp index f689cb5b866..f2be0c3074e 100644 --- a/TAO/orbsvcs/tests/Notify/Ordering/Sequence_Supplier.cpp +++ b/TAO/orbsvcs/tests/Notify/Ordering/Sequence_Supplier.cpp @@ -1,53 +1,67 @@ // $Id$ - -// ****************************************************************** -// Include Section -// ****************************************************************** - -#include "ace/Get_Opt.h" -#include "ace/OS_NS_unistd.h" - -#include "tao/ORB_Core.h" +#include "Notify_SequencePushSupplier.h" +#include "goS.h" +#include "Notify_Test_Client.h" #include "orbsvcs/CosNotifyChannelAdminS.h" #include "orbsvcs/CosNotifyCommC.h" #include "orbsvcs/CosNamingC.h" #include "orbsvcs/TimeBaseC.h" -#include "Notify_SequencePushSupplier.h" -#include "goS.h" -#include "Notify_Test_Client.h" +#include "tao/ORB_Core.h" -// ****************************************************************** -// Data Section -// ****************************************************************** +#include "ace/Get_Opt.h" +#include "ace/OS_NS_unistd.h" +#include "ace/OS_NS_strings.h" +#include "ace/Auto_Ptr.h" static TAO_Notify_Tests_SequencePushSupplier* supplier_1 = 0; -static CORBA::Boolean done = 0; -static CORBA::Boolean start = 0; static CORBA::Short order_policy = CosNotification::FifoOrder; -static int max_events = 6; // 6 sets of 16 +static int num_events = 30; static const char* ior_output_file = "supplier.ior"; - -// ****************************************************************** -// Subroutine Section -// ****************************************************************** +static const int BATCH_SIZE = 5; class sig_i : public POA_sig { public: - void go (ACE_ENV_SINGLE_ARG_DECL) - ACE_THROW_SPEC ((CORBA::SystemException)); -}; + sig_i(CORBA::ORB_ptr orb) + : orb_(orb) + , started_(false) + { + } + void go (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) + { + started_ = true; + } -void -sig_i::go (ACE_ENV_SINGLE_ARG_DECL_NOT_USED /*ACE_ENV_SINGLE_ARG_PARAMETER*/) + void done (ACE_ENV_SINGLE_ARG_DECL) ACE_THROW_SPEC ((CORBA::SystemException)) -{ - start = 1; -} + { + started_ = false; + } + + void wait_for_startup() + { + while (! started_) { + ACE_Time_Value tv(0, 100 * 1000); // 100ms + orb_->run(tv); + } + } + + void wait_for_completion() + { + while (started_) { + ACE_Time_Value tv(0, 100 * 1000); // 100ms + orb_->run(tv); + } + } +private: + CORBA::ORB_ptr orb_; + bool started_; +}; class Supplier_Client : public Notify_Test_Client { @@ -55,7 +69,6 @@ public: virtual int parse_args (int argc, char* argv[]); }; - int Supplier_Client::parse_args (int argc, char *argv[]) { @@ -64,61 +77,60 @@ Supplier_Client::parse_args (int argc, char *argv[]) while ((c = get_opts ()) != -1) switch (c) - { - case 'd': + { + case 'd': { const char* order = get_opts.optarg; - if (ACE_OS::strcmp (order, "fifo") == 0) - { - order_policy = CosNotification::FifoOrder; - } - else if (ACE_OS::strcmp (order, "priority") == 0) - { - order_policy = CosNotification::PriorityOrder; - } - else if (ACE_OS::strcmp (order, "deadline") == 0) - { - order_policy = CosNotification::DeadlineOrder; + if (ACE_OS::strcasecmp (order, "fifo") == 0) + { + order_policy = CosNotification::FifoOrder; + } + else if (ACE_OS::strcasecmp (order, "priority") == 0) + { + order_policy = CosNotification::PriorityOrder; + } + else if (ACE_OS::strcasecmp (order, "deadline") == 0) + { + order_policy = CosNotification::DeadlineOrder; #if !defined (ACE_HAS_TIMED_MESSAGE_BLOCKS) - ACE_ERROR_RETURN ((LM_ERROR, - "This order policy requires timed message " - "blocks.\nPlease #define " - "ACE_HAS_TIMED_MESSAGE_BLOCKS in your " - "config.h\n"), -1); + ACE_ERROR_RETURN ((LM_ERROR, + "This order policy requires timed message " + "blocks.\nPlease #define " + "ACE_HAS_TIMED_MESSAGE_BLOCKS in your " + "config.h\n"), -1); #endif - } + } else - { - ACE_ERROR_RETURN ((LM_ERROR, - "Unknown order policy: %s\n", - order_policy), - -1); - } + { + ACE_ERROR_RETURN ((LM_ERROR, + "Unknown order policy: %s\n", + order_policy), + -1); + } break; } - case 'e': - max_events = ACE_OS::atoi (get_opts.optarg); - break; - - case 'o': - ior_output_file = get_opts.optarg; - break; - - default: - ACE_ERROR_RETURN ((LM_ERROR, - "usage: %s " - "-o <iorfile> -e <# of events> -d" - "\n", - argv [0]), - -1); - } + case 'e': + num_events = ACE_OS::atoi (get_opts.optarg); + break; + + case 'o': + ior_output_file = get_opts.optarg; + break; + + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s " + "-o <iorfile> -e <# of events> -d" + "\n", + argv [0]), + -1); + } // Indicates sucessful parsing of the command line return 0; } - static CosNotifyChannelAdmin::SupplierAdmin_ptr create_supplieradmin (CosNotifyChannelAdmin::EventChannel_ptr ec ACE_ENV_ARG_DECL) @@ -126,8 +138,8 @@ create_supplieradmin (CosNotifyChannelAdmin::EventChannel_ptr ec CosNotifyChannelAdmin::AdminID adminid = 0; CosNotifyChannelAdmin::SupplierAdmin_var admin = ec->new_for_suppliers (CosNotifyChannelAdmin::AND_OP, - adminid - ACE_ENV_ARG_PARAMETER); + adminid + ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (0); @@ -136,98 +148,35 @@ create_supplieradmin (CosNotifyChannelAdmin::EventChannel_ptr ec static void -SendEvents (void) +SendBatch (int batch_id ACE_ENV_ARG_DECL) { - if (start) - { - static int count = 0; - static const char* types[] = { "good", "bad", "ugly" }; - CosNotification::EventBatch events; - - CosNotification::StructuredEvent event; - event.header.fixed_header.event_type.domain_name = - CORBA::string_dup ("Orbix 2000 Demos"); - event.header.fixed_header.event_type.type_name = - CORBA::string_dup ("Sequence Notification Push Demo Event"); - - event.header.fixed_header.event_name = CORBA::string_dup ("test event"); - - - event.header.variable_header.length (2); - event.header.variable_header[0].name = - CORBA::string_dup (CosNotification::Priority); - event.header.variable_header[0].value <<= (CORBA::Short) - (count > max_events / 2 ? - -count : count); - event.header.variable_header[1].name = - CORBA::string_dup (CosNotification::Timeout); - event.header.variable_header[1].value <<= (TimeBase::TimeT) - ((max_events - count) * 60); - - event.filterable_data.length (3); - event.filterable_data[0].name = CORBA::string_dup ("objectId"); - event.filterable_data[0].value <<= (CORBA::Long)0xdad; - - event.filterable_data[1].name = CORBA::string_dup ("type"); - event.filterable_data[1].value <<= types[count % 3]; - - event.filterable_data[2].name = CORBA::string_dup ("enum"); - event.filterable_data[2].value <<= (CORBA::ULong)count; - - events.length (16); - events[0] = event; - - CosNotification::StructuredEvent revents[15]; - for (int z = 0; z < 15; z++) - { - revents[z].header.fixed_header.event_type.domain_name = - CORBA::string_dup ("Orbix 2000 Demos"); - revents[z].header.fixed_header.event_type.type_name = - CORBA::string_dup ("Sequence Notification Push Demo Event"); - - revents[z].header.fixed_header.event_name = CORBA::string_dup ("test revents[z]"); - - revents[z].header.variable_header.length (2); - revents[z].header.variable_header[0].name = - CORBA::string_dup (CosNotification::Priority); - revents[z].header.variable_header[0].value <<= (CORBA::Short) - (count > max_events / 2 ? - -count : count); - revents[z].header.variable_header[1].name = - CORBA::string_dup (CosNotification::Timeout); - revents[z].header.variable_header[1].value <<= (TimeBase::TimeT) - ((max_events - count) * 60); - - revents[z].filterable_data.length (3); - revents[z].filterable_data[0].name = CORBA::string_dup ("objectId"); - revents[z].filterable_data[0].value <<= (CORBA::Long)z; - - revents[z].filterable_data[1].name = CORBA::string_dup ("type"); - revents[z].filterable_data[1].value <<= types[2 - (count % 3)]; - - revents[z].filterable_data[2].name = CORBA::string_dup ("enum"); - revents[z].filterable_data[2].value <<= (CORBA::ULong)count; - events[z + 1] = revents[z]; - } - count++; - - if (count >= max_events) - { - done = 1; - } - - ACE_TRY_NEW_ENV - { - supplier_1->send_events (events ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - } - ACE_CATCH (CORBA::Exception, e) - { - ACE_PRINT_EXCEPTION (e, - "Supplier exception: "); - } - ACE_ENDTRY; + CosNotification::EventBatch events; + events.length(BATCH_SIZE); + for (CORBA::Long i = 0; i < BATCH_SIZE; ++i) + { + int id = batch_id * BATCH_SIZE + i; + + CosNotification::StructuredEvent event; + + event.header.fixed_header.event_type.domain_name = CORBA::string_dup ("a"); + event.header.fixed_header.event_type.type_name = CORBA::string_dup ("b"); + event.header.fixed_header.event_name = CORBA::string_dup ("c"); + + event.header.variable_header.length (3); + event.header.variable_header[0].name = + CORBA::string_dup ("id"); + event.header.variable_header[0].value <<= (CORBA::Long)id; + event.header.variable_header[1].name = + CORBA::string_dup (CosNotification::Priority); + event.header.variable_header[1].value <<= (CORBA::Short)(id); + event.header.variable_header[2].name = + CORBA::string_dup (CosNotification::Timeout); + event.header.variable_header[2].value <<= (TimeBase::TimeT) (num_events - id); + + events[i] = event; } + supplier_1->send_events (events ACE_ENV_ARG_PARAMETER); + ACE_CHECK; } static void @@ -235,10 +184,9 @@ create_suppliers (CosNotifyChannelAdmin::SupplierAdmin_ptr admin, PortableServer::POA_ptr poa ACE_ENV_ARG_DECL) { - // start up the supplier ACE_NEW_THROW_EX (supplier_1, - TAO_Notify_Tests_SequencePushSupplier (), - CORBA::NO_MEMORY ()); + TAO_Notify_Tests_SequencePushSupplier (), + CORBA::NO_MEMORY ()); supplier_1->init (poa ACE_ENV_ARG_PARAMETER); ACE_CHECK; @@ -254,75 +202,83 @@ create_suppliers (CosNotifyChannelAdmin::SupplierAdmin_ptr admin, int main (int argc, char* argv[]) { - int status = 0; + ACE_Auto_Ptr< sig_i > sig_impl; ACE_TRY_NEW_ENV + { + Supplier_Client client; + int status = client.init (argc, argv ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + ACE_UNUSED_ARG(status); + ACE_ASSERT(status == 0); + + CosNotifyChannelAdmin::EventChannel_var ec = + client.create_event_channel ("MyEventChannel", 0 ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CosNotification::QoSProperties qos (1); + qos.length (1); + qos[0].name = CORBA::string_dup (CosNotification::OrderPolicy); + qos[0].value <<= order_policy; + ec->set_qos (qos ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::ORB_ptr orb = client.orb (); + + sig_impl.reset( new sig_i( orb ) ); + sig_var sig = sig_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::String_var ior = + orb->object_to_string (sig.in () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (ior_output_file != 0) { - Supplier_Client client; - status = client.init (argc, argv ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - if (status == 0) - { - CosNotifyChannelAdmin::EventChannel_var ec = - client.create_event_channel ("MyEventChannel", 0 ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - CosNotification::QoSProperties qos (1); - qos.length (1); - qos[0].name = CORBA::string_dup (CosNotification::OrderPolicy); - qos[0].value <<= order_policy; - ec->set_qos (qos ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - sig_i sig_impl; - sig_var sig = sig_impl._this (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_TRY_CHECK; - - CORBA::ORB_ptr orb = client.orb (); - CORBA::String_var ior = - orb->object_to_string (sig.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, - "Cannot open output file for " - "writing IOR: %s", - ior_output_file), - 1); - ACE_OS::fprintf (output_file, "%s", ior.in ()); - ACE_OS::fclose (output_file); - } - - CosNotifyChannelAdmin::SupplierAdmin_var admin = - create_supplieradmin (ec.in () ACE_ENV_ARG_PARAMETER); - if (!CORBA::is_nil (admin.in ())) - { - create_suppliers (admin.in (), client.root_poa () ACE_ENV_ARG_PARAMETER); - ACE_TRY_CHECK; - - while (!done) - { - SendEvents (); - if (orb->work_pending ()) - { - orb->perform_work (); - } - } - ACE_OS::unlink (ior_output_file); - } - } + FILE *output_file= ACE_OS::fopen (ior_output_file, "w"); + if (output_file == 0) + ACE_ERROR_RETURN ((LM_ERROR, + "Cannot open output file for " + "writing IOR: %s", + ior_output_file), + 1); + ACE_OS::fprintf (output_file, "%s", ior.in ()); + ACE_OS::fclose (output_file); } - ACE_CATCH (CORBA::Exception, e) + + CosNotifyChannelAdmin::SupplierAdmin_var admin = + create_supplieradmin (ec.in () ACE_ENV_ARG_PARAMETER); + ACE_ASSERT(!CORBA::is_nil (admin.in ())); + create_suppliers (admin.in (), client.root_poa () ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + sig_impl->wait_for_startup(); + + ACE_DEBUG((LM_DEBUG, "1 supplier sending %d events...\n", num_events)); + for (int i = 0; i < num_events / BATCH_SIZE; ++i) { - ACE_PRINT_EXCEPTION (e, - "Supplier exception: "); - status = 1; + ACE_DEBUG((LM_DEBUG, "+")); + SendBatch (i ACE_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; } + ACE_DEBUG((LM_DEBUG, "\nSupplier sent %d events.\n", num_events)); + + sig_impl->wait_for_completion(); + + ACE_OS::unlink (ior_output_file); + + supplier_1->disconnect(ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + ec->destroy(ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + return 0; + } + ACE_CATCH (CORBA::Exception, e) + { + ACE_PRINT_EXCEPTION (e, "Error: "); + } ACE_ENDTRY; - return status; + return 1; } |