From 201d97463e6508407f06f32f684b351ea89e4652 Mon Sep 17 00:00:00 2001 From: Angelo Corsaro Date: Mon, 28 Aug 2000 22:40:51 +0000 Subject: ChangeLogTag: Mon Aug 28 17:28:45 2000 Angelo Corsaro --- TAO/ChangeLogs/ChangeLog-02a | 18 ++ TAO/tests/Exposed_Policies/Client.dsp | 16 ++ TAO/tests/Exposed_Policies/Counter.idl | 12 +- TAO/tests/Exposed_Policies/Policy_Tester.cpp | 303 +++++++++++++++++++++++++ TAO/tests/Exposed_Policies/Policy_Tester.h | 68 ++++++ TAO/tests/Exposed_Policies/Policy_Verifier.cpp | 231 +++++++++++++++++++ TAO/tests/Exposed_Policies/Policy_Verifier.h | 70 ++++++ TAO/tests/Exposed_Policies/README | 10 +- TAO/tests/Exposed_Policies/RT_Properties.cpp | 2 +- TAO/tests/Exposed_Policies/Server.dsp | 18 +- TAO/tests/Exposed_Policies/client.cpp | 182 +-------------- TAO/tests/Exposed_Policies/server.cpp | 226 +----------------- 12 files changed, 754 insertions(+), 402 deletions(-) create mode 100644 TAO/tests/Exposed_Policies/Policy_Tester.cpp create mode 100644 TAO/tests/Exposed_Policies/Policy_Tester.h create mode 100644 TAO/tests/Exposed_Policies/Policy_Verifier.cpp create mode 100644 TAO/tests/Exposed_Policies/Policy_Verifier.h diff --git a/TAO/ChangeLogs/ChangeLog-02a b/TAO/ChangeLogs/ChangeLog-02a index 91639d61655..02711373273 100644 --- a/TAO/ChangeLogs/ChangeLog-02a +++ b/TAO/ChangeLogs/ChangeLog-02a @@ -1,3 +1,21 @@ +Mon Aug 28 17:28:45 2000 Angelo Corsaro + + * test/Exposed_Policies/Policy_Tester.h: + * test/Exposed_Policies/Policy_Tester.cpp: + * test/Exposed_Policies/Policy_Verifier.h: + * test/Exposed_Policies/Policy_Verifier.cpp: + * test/Exposed_Policies/RT_Properties.h: + * test/Exposed_Policies/RT_Properties.cpp: + * test/Exposed_Policies/client.cpp: + * test/Exposed_Policies/server.cpp + * test/Exposed_Policies/Server.dsp + * test/Exposed_Policies/Client.dsp + * test/Exposed_Policies/README + + Extended sample to auto-check if the policies embedded + in the IOR are the same that were specified in the + config files. + Mon Aug 28 14:05:36 2000 Ossama Othman * orbsvcs/orbsvcs/SSLIOP/SSLIOP_Acceptor.h: diff --git a/TAO/tests/Exposed_Policies/Client.dsp b/TAO/tests/Exposed_Policies/Client.dsp index 4feb08df095..b8551623b56 100644 --- a/TAO/tests/Exposed_Policies/Client.dsp +++ b/TAO/tests/Exposed_Policies/Client.dsp @@ -93,6 +93,18 @@ SOURCE=.\client.cpp SOURCE=.\CounterC.cpp # End Source File +# Begin Source File + +SOURCE=.\Policy_Tester.cpp +# End Source File +# Begin Source File + +SOURCE=.\Policy_Verifier.cpp +# End Source File +# Begin Source File + +SOURCE=.\RT_Properties.cpp +# End Source File # End Group # Begin Group "Header Files" @@ -101,6 +113,10 @@ SOURCE=.\CounterC.cpp SOURCE=.\CounterC.h # End Source File +# Begin Source File + +SOURCE=.\Policy_Verifier.h +# End Source File # End Group # Begin Group "Resource Files" diff --git a/TAO/tests/Exposed_Policies/Counter.idl b/TAO/tests/Exposed_Policies/Counter.idl index 0e1140573ef..60ac5162c8a 100644 --- a/TAO/tests/Exposed_Policies/Counter.idl +++ b/TAO/tests/Exposed_Policies/Counter.idl @@ -1,10 +1,18 @@ //$Id$ +// This interface abstracts a counter. It provides methods +// for increasing and getting the value of the counter. interface Counter { - // @@ Angelo: please add some comments explaining how does this work - // or what it is supposed to do. void increment (); + // Increases the counter value. + long get_count (); + // Decreases the counter value. + + void reset (); + // Sets the counter value to zero. + oneway void shutdown (); + // Shuts down the ORB on which this obj is running. }; diff --git a/TAO/tests/Exposed_Policies/Policy_Tester.cpp b/TAO/tests/Exposed_Policies/Policy_Tester.cpp new file mode 100644 index 00000000000..ccf7ad8ed80 --- /dev/null +++ b/TAO/tests/Exposed_Policies/Policy_Tester.cpp @@ -0,0 +1,303 @@ +// $Id$ + +// -- App. Specific Include -- +#include "Policy_Tester.h" +#include "RT_Properties.h" +#include "CounterC.h" + +// -- ACE Include -- +#include "ace/Arg_Shifter.h" + +// -- TAO Include -- +#include "tao/RT_ORB.h" +#include "tao/RT_Policy_i.h" + + +ACE_RCSID (tao, Policy_Tester, "$Id$"); + +Policy_Tester::Policy_Tester (void) + : rt_object_properties_ (0), + rt_poa_properties_ (0) +{ + // No_Op +} + +Policy_Tester::~Policy_Tester (void) +{ + this->shutdown (); +} + +void +Policy_Tester::run (CORBA::Environment &ACE_TRY_ENV) +{ + ACE_TRY + { + this->create_objects (ACE_TRY_ENV); + ACE_TRY_CHECK; + + PortableServer::POAManager_var poa_manager = + this->child_poa_->the_POAManager (ACE_TRY_ENV); + ACE_TRY_CHECK; + + poa_manager->activate (ACE_TRY_ENV); + ACE_TRY_CHECK; + + this->orb_->run (ACE_TRY_ENV); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + ACE_TEXT ("CORBA Exception Raised.")); + } + ACE_ENDTRY; +} + +int +Policy_Tester::init (int argc, + char *argv[], + CORBA::Environment &ACE_TRY_ENV) +{ + ACE_TRY + { + // ORB Initialization. + this->orb_ = CORBA::ORB_init (argc, argv, "", ACE_TRY_ENV); + ACE_TRY_CHECK; + + // Get a reference to the RT-ORB. + CORBA::Object_var object = + this->orb_->resolve_initial_references ("RTORB", ACE_TRY_ENV); + + ACE_TRY_CHECK; + + this->rt_orb_ = RTCORBA::RTORB::_narrow (object.in (), + ACE_TRY_ENV); + ACE_TRY_CHECK; + // Here we parse the command line paramether passed + // to the application. + + ACE_Arg_Shifter arg_shifter (argc, argv); + + while (arg_shifter.is_anything_left ()) + { + char *arg; + // IOR File Name Option. + if ((arg = arg_shifter.get_the_parameter ("-POAConfigFile"))) + { + this->rt_poa_properties_ = + RT_Properties::read_from (arg, ACE_TRY_ENV); + ACE_TRY_CHECK; + } + else if ((arg = arg_shifter.get_the_parameter ("-ObjectConfigFile"))) + { + this->rt_object_properties_ = + RT_Properties::read_from (arg, ACE_TRY_ENV); + ACE_TRY_CHECK; + } + else + arg_shifter.consume_arg (); + + } + + if ((this->rt_poa_properties_ == 0) || (this->rt_object_properties_ == 0)) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Configuration file missing!"))); + return 0; + } + + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + ACE_TEXT ("CORBA Exception Raised.")); + return 0; + } + ACE_ENDTRY; + return 1; +} + +CORBA::Boolean +Policy_Tester::check_reference (CORBA::Object_ptr object, + const char *msg) +{ + if (CORBA::is_nil (object)) + { + ACE_DEBUG ((LM_DEBUG, ACE_TEXT (msg))); + return 0; + } + return 1; +} + + +int +Policy_Tester::create_objects (CORBA::Environment &ACE_TRY_ENV) +{ + ACE_TRY + { + CORBA::PolicyList poa_policy_list; + poa_policy_list.length (3); + + // Create the priority policy using the RT-ORB. + RTCORBA::Priority priority = this->rt_poa_properties_->priority (); + poa_policy_list[0] = + this->rt_orb_->create_priority_model_policy (RTCORBA::SERVER_DECLARED, + priority, + ACE_TRY_ENV); + ACE_TRY_CHECK; + + // Create priority Banded Connection Policy. + RTCORBA::PriorityBands poa_priority_bands = + this->rt_poa_properties_->priority_bands (); + + poa_policy_list[1] = + this->rt_orb_->create_priority_banded_connection_policy (poa_priority_bands, + ACE_TRY_ENV); + ACE_TRY_CHECK; + + // Client Protocol Policy. + RTCORBA::ProtocolList protocol_list; + protocol_list.length (1); + + protocol_list[0].protocol_type = IOP::TAG_INTERNET_IOP; + protocol_list[0].orb_protocol_properties = + TAO_Protocol_Properties_Factory::create_orb_protocol_property (IOP::TAG_INTERNET_IOP); + + protocol_list[0].transport_protocol_properties = + TAO_Protocol_Properties_Factory::create_transport_protocol_property (IOP::TAG_INTERNET_IOP); + + poa_policy_list[2] = + this->rt_orb_->create_client_protocol_policy (protocol_list); + + CORBA::Object_var object = + this->orb_->resolve_initial_references ("RootPOA", ACE_TRY_ENV); + ACE_TRY_CHECK; + + this->poa_ = + PortableServer::POA::_narrow (object.in (), ACE_TRY_ENV); + ACE_TRY_CHECK; + + PortableServer::POAManager_var poa_mgr = + PortableServer::POAManager::_nil (); + + this->child_poa_ = + this->poa_->create_POA ("Child_POA", + poa_mgr , + poa_policy_list); + + // Create a Corba Object reference, using the policies + // set at the POA level. + object = + this->child_poa_->create_reference ("IDL:Counter:1.0", + ACE_TRY_ENV); + ACE_TRY_CHECK; + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Reference Created!\n"))); + + if (!check_reference (object, + "Unable to create Object!\n")) + return 0; + + Counter_var base_object = Counter::_narrow (object.in (), ACE_TRY_ENV); + ACE_TRY_CHECK; + + if (!check_reference (base_object.in(), + "Unable to create a Object!\n")) + return 0; + + CORBA::String_var ior = + this->orb_->object_to_string (base_object.in (), ACE_TRY_ENV); + ACE_TRY_CHECK; + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Activated as <%s>\n"), ior.in ())); + + FILE *output_file = ACE_OS::fopen (this->rt_poa_properties_->ior_source (), "w"); + if (output_file == 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Cannot open output file for writing IOR: %s"), + this->rt_poa_properties_->ior_source ()), + 0); + ACE_OS::fprintf (output_file, "%s", ior.in ()); + ACE_OS::fclose (output_file); + + // Now we create an object that overrides some of the policies + // set at the POA level. + + + // Create a Corba Object reference, using the policies + // set at the POA level. + + // @@ Shortcut - The following code is not definitive, and + // the cast is only used to access a RTPortableServer::POA + // method that isn't currently accessible otherwise. + + object = + ((TAO_POA*)this->child_poa_.ptr ())->create_reference_with_priority + ("IDL:Counter:1.0", + this->rt_object_properties_->priority (), + ACE_TRY_ENV); + + ACE_TRY_CHECK; + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Reference Created!\n"))); + + if (!check_reference (object, + "Unable to create a Counter Object!\n")) + return 0; + + Counter_var over_object = Counter::_narrow (object.in (), ACE_TRY_ENV); + ACE_TRY_CHECK; + + if (!check_reference (over_object.in(), + "Unable to create Object!\n")) + return 0; + + + CORBA::String_var o_ior = this->orb_->object_to_string (over_object.in (), ACE_TRY_ENV); + ACE_TRY_CHECK; + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Activated as <%s>\n"), o_ior.in ())); + + output_file = ACE_OS::fopen (this->rt_object_properties_->ior_source (), "w"); + + if (output_file == 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Cannot open output file for writing IOR: %s"), + this->rt_object_properties_->ior_source ()), + 0); + ACE_OS::fprintf (output_file, "%s", o_ior.in ()); + ACE_OS::fclose (output_file); + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + ACE_TEXT ("CORBA Exception Raised.")); + return 0; + } + ACE_ENDTRY; + return 1; +} + +void +Policy_Tester::shutdown (CORBA::Environment &ACE_TRY_ENV) +{ + this->orb_->shutdown (0, ACE_TRY_ENV); + ACE_TRY_CHECK; + + this->child_poa_->destroy (1, 1, ACE_TRY_ENV); + ACE_TRY_CHECK; + + this->poa_->destroy (1, 1, ACE_TRY_ENV); + ACE_TRY_CHECK; +} + + + + + + + diff --git a/TAO/tests/Exposed_Policies/Policy_Tester.h b/TAO/tests/Exposed_Policies/Policy_Tester.h new file mode 100644 index 00000000000..540b61f890b --- /dev/null +++ b/TAO/tests/Exposed_Policies/Policy_Tester.h @@ -0,0 +1,68 @@ +// $Id$ +// +// ============================================================================ +// +// = LIBRARY +// TAO/tests/Exposed_Policies +// +// = FILENAME +// Policy_Verifier.h +// +// = DESCRIPTION +// This class verifies that the policy are correctly embedded +// in the IOR. +// +// = AUTHOR +// Angelo Corsaro +// +// ============================================================================ + +#ifndef POLICY_TESTER_H_ +#define POLICY_TESTER_H_ + +// -- App. Specific Include -- +#include "RT_Properties.h" + +// -- TAO Include -- +#include "tao/corba.h" + +class Policy_Tester +{ +public: + // Ctor/Dtor. + Policy_Tester (void); + ~Policy_Tester (void); + + void run (CORBA::Environment &ACE_TRY_ENV + = TAO_default_environment ()); + // Runs the test. + + int init (int argc, + char *argv[], + CORBA::Environment &ACE_TRY_ENV + = TAO_default_environment ()); + + void shutdown (CORBA::Environment &ACE_TRY_ENV + = TAO_default_environment ()); +private: + // Helper method used internally. + int create_objects (CORBA::Environment &ACE_TRY_ENV + = TAO_default_environment ()); +public: + + static CORBA::Boolean check_reference (CORBA::Object_ptr object, + const char *msg); + +private: + + int is_initialized_; + + RTCORBA::RTORB_var rt_orb_; + CORBA::ORB_var orb_; + PortableServer::POA_var poa_; + PortableServer::POA_var child_poa_; + RT_Properties *rt_object_properties_; + RT_Properties *rt_poa_properties_; +}; + +#endif diff --git a/TAO/tests/Exposed_Policies/Policy_Verifier.cpp b/TAO/tests/Exposed_Policies/Policy_Verifier.cpp new file mode 100644 index 00000000000..185b529d409 --- /dev/null +++ b/TAO/tests/Exposed_Policies/Policy_Verifier.cpp @@ -0,0 +1,231 @@ +#include "Policy_Verifier.h" + +ACE_RCSID (tao, Policy_Verifier, "$Id$"); + + +Policy_Verifier::Policy_Verifier (void) +{ + ACE_OS_String::strcpy (this->base_object_ref_, + "file://"); + ACE_OS_String::strcpy (this->overridden_object_ref_, + "file://"); +} + +Policy_Verifier::~Policy_Verifier (void) +{ + // No Op. +} + +void +Policy_Verifier::init (int argc, + char *argv[], + CORBA::Environment &ACE_TRY_ENV) +{ + ACE_TRY + { + this->orb_ = + CORBA::ORB_init (argc, argv, "", ACE_TRY_ENV); + ACE_TRY_CHECK; + + ACE_Arg_Shifter arg_shifter (argc, argv); + + while (arg_shifter.is_anything_left ()) + { + char *arg; + // IOR File Name Option. + if ((arg = arg_shifter.get_the_parameter ("-POAConfigFile"))) + { + this->rt_poa_properties_ = + RT_Properties::read_from (arg, ACE_TRY_ENV); + ACE_TRY_CHECK; + + ACE_OS_String::strcat (this->base_object_ref_, + this->rt_poa_properties_->ior_source ()); + } + else if ((arg = arg_shifter.get_the_parameter ("-ObjectConfigFile"))) + { + this->rt_object_properties_ = + RT_Properties::read_from (arg, ACE_TRY_ENV); + ACE_TRY_CHECK; + + ACE_OS_String::strcat (this->overridden_object_ref_, + this->rt_object_properties_->ior_source ()); + + } + else + arg_shifter.consume_arg (); + + } + + if ((this->rt_poa_properties_ == 0) || (this->rt_object_properties_ == 0)) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Configuration file missing!\n"))); + return; + } + + // Get the Object references. + CORBA::Object_var object = this->orb_->string_to_object (this->base_object_ref_, + ACE_TRY_ENV); + ACE_TRY_CHECK; + + if (!Policy_Tester::check_reference (object.in (), "Invalid IOR file!\n")) + return; + + this->base_object_ = Counter::_narrow (object.in (), ACE_TRY_ENV); + ACE_TRY_CHECK; + + if (!Policy_Tester::check_reference (this->base_object_, + "Unable to convert the IOR to the proper object reference.\n")) + return; + + object = this->orb_->string_to_object (this->overridden_object_ref_, ACE_TRY_ENV); + ACE_TRY_CHECK; + + if (!Policy_Tester::check_reference (object.in (), "Invalid IOR file!\n")) + return; + + this->overridden_object_ = Counter::_narrow (object.in (), ACE_TRY_ENV); + ACE_TRY_CHECK; + + if (!Policy_Tester::check_reference (this->overridden_object_, + "Unable to convert the IOR to the proper object reference.\n")) + return; + + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "CORBA Excaption Raised"); + } + ACE_ENDTRY; +} + +void +Policy_Verifier::run (CORBA::Environment &ACE_TRY_ENV ) +{ + this->verify_reference (this->base_object_, + this->rt_poa_properties_, + ACE_TRY_ENV); + ACE_TRY_CHECK; + + this->verify_reference (this->overridden_object_, + this->rt_object_properties_, + ACE_TRY_ENV); + ACE_TRY_CHECK; +} + +void +Policy_Verifier::verify_reference (Counter_ptr object, + RT_Properties *rt_properties, + CORBA::Environment &ACE_TRY_ENV) +{ + + ACE_TRY + { + CORBA::Policy_var policy_ptr = + object->_get_policy (RTCORBA::PRIORITY_MODEL_POLICY_TYPE, + ACE_TRY_ENV); + ACE_TRY_CHECK; + + if (Policy_Tester::check_reference (policy_ptr, "Unable to get Priority Policy.\n")) + { + RTCORBA::PriorityModelPolicy_var priority_policy = + RTCORBA::PriorityModelPolicy::_narrow (policy_ptr); + + RTCORBA::PriorityModel priority_model = + priority_policy->priority_model (ACE_TRY_ENV); + ACE_TRY_CHECK; + + RTCORBA::Priority priority = + priority_policy->server_priority (ACE_TRY_ENV); + ACE_TRY_CHECK; + + if (priority_model == RTCORBA::SERVER_DECLARED) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("\n\nPriority Model: RTCORBA::SERVER_DECLARED\n") + )); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Priority Model: %d\nCORBA Priority: %d\n\n"), + priority_model, + priority + )); + + + if (priority != rt_properties->priority ()) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Priority Value Mismatch.\n"))); + } + + policy_ptr = object->_get_policy (RTCORBA::PRIORITY_BANDED_CONNECTION_POLICY_TYPE, + ACE_TRY_ENV); + if (Policy_Tester::check_reference (policy_ptr, + "Unable to get Priority Banded Policy\n")) + { + + RTCORBA::PriorityBandedConnectionPolicy_var priority_banded_policy = + RTCORBA::PriorityBandedConnectionPolicy::_narrow (policy_ptr, + ACE_TRY_ENV); + ACE_TRY_CHECK; + + + if (Policy_Tester::check_reference (priority_banded_policy, + "Unable to get Priority Banded Policy\n")) + { + + // Here we have a priority banded connection policy. + + RTCORBA::PriorityBands_var pb = + priority_banded_policy->priority_bands (); + unsigned int band_num = pb->length (); + if (band_num != rt_properties->priority_bands ().length ()) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Mismatching Number of Priority Bands!\n"))); + + for (unsigned int i = 0; i < band_num; ++i) + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Priority Band <%d>: (%d, %d)\n"), + i, + pb[i].low, + pb[i].high + )); + + + if ((band_num == rt_properties->priority_bands ().length ()) && + ((pb[i].low != rt_properties->priority_bands ()[i].low) || + (pb[i].high != rt_properties->priority_bands ()[i].high))) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("Mismatching Priority Band Range!\n"))); + + } + } + } + policy_ptr = object->_get_policy (RTCORBA::CLIENT_PROTOCOL_POLICY_TYPE, + ACE_TRY_ENV); + if (Policy_Tester::check_reference (policy_ptr, "Unable Client Protocol Policy\n")) + { + RTCORBA::ClientProtocolPolicy_var client_protocol_policy = + RTCORBA::ClientProtocolPolicy::_narrow (policy_ptr, ACE_TRY_ENV); + ACE_TRY_CHECK; + + RTCORBA::ProtocolList_var protocol_list = + client_protocol_policy->protocols (ACE_TRY_ENV); + ACE_TRY_CHECK; + + for (unsigned int i = 0; i < protocol_list->length (); i++) + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("\nThe Client Protocol Type: %d\n"), + protocol_list[i].protocol_type)); + + } + + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "CORBA Excaption Raised"); + } + + ACE_ENDTRY; +} + diff --git a/TAO/tests/Exposed_Policies/Policy_Verifier.h b/TAO/tests/Exposed_Policies/Policy_Verifier.h new file mode 100644 index 00000000000..f8251b43f6a --- /dev/null +++ b/TAO/tests/Exposed_Policies/Policy_Verifier.h @@ -0,0 +1,70 @@ +// $Id$ +// +// ============================================================================ +// +// = LIBRARY +// TAO/tests/Exposed_Policies +// +// = FILENAME +// Policy_Verifier.h +// +// = DESCRIPTION +// This class verifies that the policy are correctly embedded +// in the IOR. +// +// = AUTHOR +// Angelo Corsaro +// +// ============================================================================ + +#ifndef POLICY_VERIFIER_H_ +#define POLICY_VERIFIER_H_ + +// -- App. Specific Include -- +#include "CounterC.h" +#include "RT_Properties.h" +#include "Policy_Tester.h" +// -- ACE Include -- +#include "ace/Arg_Shifter.h" + +// -- TAO Include -- +#include "tao/corba.h" + +class Policy_Verifier +{ +public: + + // -- Ctor/Dtor -- + Policy_Verifier (void); + ~Policy_Verifier (void); + + void init (int argc, + char *argv[], + CORBA::Environment &ACE_TRY_ENV + = TAO_default_environment ()); + + void run (CORBA::Environment &ACE_TRY_ENV + = TAO_default_environment ()); + +private: + // -- Helper methods -- + void verify_reference (Counter_ptr counter, + RT_Properties *rt_properties, + CORBA::Environment &ACE_TRY_ENV + = TAO_default_environment ()); + +private: + + CORBA::ORB_var orb_; + + RT_Properties *rt_object_properties_; + RT_Properties *rt_poa_properties_; + + Counter_var base_object_; + Counter_var overridden_object_; + + char base_object_ref_[256]; + char overridden_object_ref_[256]; +}; + +#endif /* POLICY_VERIFIER_H_ */ diff --git a/TAO/tests/Exposed_Policies/README b/TAO/tests/Exposed_Policies/README index c09c90f8857..b33abbff283 100644 --- a/TAO/tests/Exposed_Policies/README +++ b/TAO/tests/Exposed_Policies/README @@ -58,21 +58,25 @@ the same priority that where specified when the POA was created, while the other ovverride some of them as prescribed in the config file specified with the option "-ObjectConfigFile". +The config file are used by the client side to verify that what is +embedded in the IOR is correct. + USAGE: server -POAConfigFile -ObjectConfigFile - client -IORSource + client -POAConfigFile + -ObjectConfigFile EXAMPLE: $ server -POAConfigFile POA.cfg -ObjectConfigFile Object.cfg - $ client -IORSource file://default.ior + $ client -POAConfigFile POA.cfg -ObjectConfigFile Object.cfg - $ client -IORSource file://overridden.ior + $ client -POAConfigFile POA.cfg -ObjectConfigFile Object.cfg diff --git a/TAO/tests/Exposed_Policies/RT_Properties.cpp b/TAO/tests/Exposed_Policies/RT_Properties.cpp index 9dcfc156cab..fff46b828f6 100644 --- a/TAO/tests/Exposed_Policies/RT_Properties.cpp +++ b/TAO/tests/Exposed_Policies/RT_Properties.cpp @@ -1,4 +1,4 @@ ->//$Id$ +//$Id$ #include "RT_Properties.h" diff --git a/TAO/tests/Exposed_Policies/Server.dsp b/TAO/tests/Exposed_Policies/Server.dsp index edd817c05e1..008618dc980 100644 --- a/TAO/tests/Exposed_Policies/Server.dsp +++ b/TAO/tests/Exposed_Policies/Server.dsp @@ -99,6 +99,10 @@ SOURCE=.\CounterS.cpp # End Source File # Begin Source File +SOURCE=.\Policy_Tester.cpp +# End Source File +# Begin Source File + SOURCE=.\RT_Properties.cpp # End Source File # Begin Source File @@ -123,6 +127,10 @@ SOURCE=.\CounterS.h # End Source File # Begin Source File +SOURCE=.\Policy_Tester.h +# End Source File +# Begin Source File + SOURCE=.\RT_Properties.h # End Source File # End Group @@ -146,13 +154,16 @@ InputName=Counter BuildCmds= \ ..\..\..\bin\tao_idl -Ge 1 $(InputName).idl +"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + "$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) "$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) -"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) "$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" @@ -161,7 +172,7 @@ BuildCmds= \ "$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) -"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" +"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) "$(InputName)S_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" @@ -169,9 +180,6 @@ BuildCmds= \ "$(InputName)S_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" $(BuildCmds) - -"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" - $(BuildCmds) # End Custom Build !ELSEIF "$(CFG)" == "Server - Win32 Debug" diff --git a/TAO/tests/Exposed_Policies/client.cpp b/TAO/tests/Exposed_Policies/client.cpp index 5de236695c5..bc71bb285d2 100644 --- a/TAO/tests/Exposed_Policies/client.cpp +++ b/TAO/tests/Exposed_Policies/client.cpp @@ -1,26 +1,14 @@ // $Id$ -#include "ace/Arg_Shifter.h" +// -- App. Specific Include -- #include "CounterC.h" +#include "util.h" -char object_ref[256]; +// -- App. Specific Include -- +#include "Policy_Verifier.h" ACE_RCSID(tao, client, "$Id$") - -CORBA::Boolean -check_reference (CORBA::Object_ptr object, - const char *msg) -{ - if (CORBA::is_nil (object)) - { - ACE_DEBUG ((LM_DEBUG, ACE_TEXT (msg))); - return 0; - } - return 1; -} - - int main (int argc, char *argv[]) { @@ -28,169 +16,17 @@ main (int argc, char *argv[]) ACE_TRY { - // ORB Initialization - CORBA::ORB_var orb = - CORBA::ORB_init (argc, argv, "TAO", ACE_TRY_ENV); - // @@ Angelo: there is no need to name the ORB, don't do it - // unless you have a good reason to, because it confuses the - // users that see this stuff. - ACE_TRY_CHECK; - - // @@ Angelo: we have been using -k IOR for this same kind of - // option forever, please try to make your examples consistent, - // it is easier to understand them that way. - ACE_Arg_Shifter arg_shifter (argc, argv); + Policy_Verifier policy_verifier; - int file_set = 0; - while (arg_shifter.is_anything_left ()) - { - char *arg; - if ((arg = arg_shifter.get_the_parameter ("-IORSource"))) - { - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("IOR File Name: %s\n"), - arg)); - ACE_OS_String::strcpy (object_ref, arg); - file_set = 1; - } - else - arg_shifter.consume_arg (); - } - - if (file_set == 0) - ACE_OS_String::strcpy (object_ref, "file://poa_default.ior"); - - // @@ Angelo: it is better style just to initialize the - // variables as soon as you declare them, in this case: - // - // CORBA::Object_var object = orb->string_to_object_.... - // - CORBA::Object_var object; - - // @@ Angelo: you may want to repeat the test multiple times in - // a loop, this is useful when running with Purify or similar - // tools because the leaks are more visible when you do that. - - // @@ Angelo: I'm not sure if you really need a client and a - // server, it may be enough to have a single program that does - // object_to_string() and then string_to_object() to verify that - // all the policies are preserved and parsed correctly. Those - // programs are usually much easier to debug and purify. - - // Get the IOR from a file. - object = orb->string_to_object (object_ref, ACE_TRY_ENV); + policy_verifier.init (argc, argv, ACE_TRY_ENV); ACE_TRY_CHECK; - - // @@ Angelo: cool use of a helper routine, but you may want to - // declare the helper at the top of the file and put its - // definition at the bottom, to avoid distractions when looking - // for the core of the test. - if (!check_reference (object, "Invalid IOR file!\n")) - return 1; - - Counter_var counter = Counter::_narrow (object.in (), ACE_TRY_ENV); + + policy_verifier.run (ACE_TRY_ENV); ACE_TRY_CHECK; - - if (!check_reference (object, - "Unable to convert the IOR to the proper object reference.\n")) - return 1; - - // @@ Angelo: more initialization stuff. - CORBA::Policy_var policy_ptr; - policy_ptr = counter->_get_policy (RTCORBA::PRIORITY_MODEL_POLICY_TYPE, - ACE_TRY_ENV); - ACE_TRY_CHECK; - - if (check_reference (policy_ptr, "Unable to get Priority Policy.\n")) - { - RTCORBA::PriorityModelPolicy_var priority_policy = - RTCORBA::PriorityModelPolicy::_narrow (policy_ptr); - - RTCORBA::PriorityModel priority_model = - priority_policy->priority_model (ACE_TRY_ENV); - ACE_TRY_CHECK; - - RTCORBA::Priority priority = - priority_policy->server_priority (ACE_TRY_ENV); - ACE_TRY_CHECK; - - if (priority_model == RTCORBA::SERVER_DECLARED) - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("\n\nPriority Model: RTCORBA::SERVER_DECLARED\n") - )); - - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("Priority Model: %d\nCORBA Priority: %d\n\n"), - priority_model, - priority - )); - } - - policy_ptr = object->_get_policy (RTCORBA::PRIORITY_BANDED_CONNECTION_POLICY_TYPE, - ACE_TRY_ENV); - if (check_reference (policy_ptr, "Unable to get Priority Banded Policy\n")) - { - - RTCORBA::PriorityBandedConnectionPolicy_var priority_banded_policy = - RTCORBA::PriorityBandedConnectionPolicy::_narrow (policy_ptr, - ACE_TRY_ENV); - ACE_TRY_CHECK; - - - if (check_reference (priority_banded_policy, "Unable to get Priority Banded Policy\n")) - { - - // Here we have a priority banded connection policy. - - RTCORBA::PriorityBands_var pb = - priority_banded_policy->priority_bands (); - unsigned int band_num = pb->length (); - for (unsigned int i = 0; i < band_num; ++i) - { - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("Priority Band <%d>: (%d, %d)\n"), - i, - pb[i].low, - pb[i].high - )); - } - } - } - policy_ptr = object->_get_policy (RTCORBA::CLIENT_PROTOCOL_POLICY_TYPE, - ACE_TRY_ENV); - if (check_reference (policy_ptr, "Unable Client Protocol Policy\n")) - { - RTCORBA::ClientProtocolPolicy_var client_protocol_policy = - RTCORBA::ClientProtocolPolicy::_narrow (policy_ptr, ACE_TRY_ENV); - ACE_TRY_CHECK; - - RTCORBA::ProtocolList_var protocol_list = - client_protocol_policy->protocols (ACE_TRY_ENV); - ACE_TRY_CHECK; - - for (unsigned int i = 0; i < protocol_list->length (); i++) - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("\nThe Client Protocol Type: %d\n"), - protocol_list[i].protocol_type)); - - } - - // @@ Angelo: cleanup the ORB at the end! - - // @@ Angelo: in general this is a good test, but it does not - // check if: - // + The values obtained are the expected values, - // could you compare against well known values somehow? - // + Can - // you check that things that should fail indeed do? For - // example: what if the user queries or tries to set a policy - // that makes no sense on the client, like ServerProtocolPolicy? - // Certain values should be returned and maybe exceptions raised - // (I don't know), we need to check for that too! } ACE_CATCHANY { - ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "CORBA Excaption Raised"); + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "CORBA Exception Raised"); return 1; } diff --git a/TAO/tests/Exposed_Policies/server.cpp b/TAO/tests/Exposed_Policies/server.cpp index 94931085a88..971d4bf927c 100644 --- a/TAO/tests/Exposed_Policies/server.cpp +++ b/TAO/tests/Exposed_Policies/server.cpp @@ -10,38 +10,12 @@ // them into the IOR. // // -#include "Counter_i.h" -// @@ Angelo, we don't use angle brackets in our tests or examples -// because that disables dependencies, we need to have the code -// automatically compile if something fails. -#include -#include -#include - -// @@ Angelo: any reason to have an inconsistent order of declaration? -#include "RT_Properties.h" +// -- App. Specific Include -- +#include "Policy_Tester.h" ACE_RCSID(tao, server, "$Id$"); -// @@ Angelo: please move this routine to some common place (but *NOT* -// in the TAO library). -CORBA::Boolean check_reference (CORBA::Object_ptr object, - const char *msg = 0) -{ - if (CORBA::is_nil (object)) - { - if (msg == 0) - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("The Object reference is nil.\n"))); - else - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT (msg))); - return 0; - } - return 1; -} - int main (int argc, char *argv[]) @@ -50,197 +24,12 @@ main (int argc, char *argv[]) ACE_TRY { - // ORB Initialization. - CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "TAO", ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Here we parse the command line paramether passed - // to the application. - - ACE_Arg_Shifter arg_shifter (argc, argv); - - RT_Properties *rt_object_properties = 0; - RT_Properties *rt_poa_properties = 0; - - while (arg_shifter.is_anything_left ()) - { - char *arg; - // IOR File Name Option. - if ((arg = arg_shifter.get_the_parameter ("-POAConfigFile"))) - { - rt_poa_properties = RT_Properties::read_from (arg, ACE_TRY_ENV); - ACE_TRY_CHECK; - } - else if ((arg = arg_shifter.get_the_parameter ("-ObjectConfigFile"))) - { - rt_object_properties = RT_Properties::read_from (arg, ACE_TRY_ENV); - ACE_TRY_CHECK; - } - else - arg_shifter.consume_arg (); - - } - - CORBA::Object_var object; - - // Get a reference to the RT-ORB. - object = orb->resolve_initial_references ("RTORB", ACE_TRY_ENV); - ACE_TRY_CHECK; - - RTCORBA::RTORB_var rt_orb = RTCORBA::RTORB::_narrow (object.in (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - CORBA::PolicyList poa_policy_list; - poa_policy_list.length (3); - - - // Create the priority policy using the RT-ORB. - RTCORBA::Priority priority = rt_poa_properties->priority (); - poa_policy_list[0] = - rt_orb->create_priority_model_policy (RTCORBA::SERVER_DECLARED, - priority, - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Create priority Banded Connection Policy. - RTCORBA::PriorityBands poa_priority_bands = rt_poa_properties->priority_bands (); - - poa_policy_list[1] = - rt_orb->create_priority_banded_connection_policy (poa_priority_bands, - ACE_TRY_ENV); - ACE_TRY_CHECK; - - // Client Protocol Policy. - RTCORBA::ProtocolList protocol_list; - protocol_list.length (1); - - protocol_list[0].protocol_type = IOP::TAG_INTERNET_IOP; - protocol_list[0].orb_protocol_properties = - TAO_Protocol_Properties_Factory::create_orb_protocol_property (IOP::TAG_INTERNET_IOP); - - protocol_list[0].transport_protocol_properties = - TAO_Protocol_Properties_Factory::create_transport_protocol_property (IOP::TAG_INTERNET_IOP); - - poa_policy_list[2] = - rt_orb->create_client_protocol_policy (protocol_list); - - object = orb->resolve_initial_references ("RootPOA", ACE_TRY_ENV); - ACE_TRY_CHECK; - - PortableServer::POA_var poa = - PortableServer::POA::_narrow (object.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - PortableServer::POAManager_var poa_mgr = - PortableServer::POAManager::_nil (); - - PortableServer::POA_var child_poa = - poa->create_POA ("Child_POA", - poa_mgr , - poa_policy_list); - - // Create a Corba Object reference, using the policies - // set at the POA level. - object = - child_poa->create_reference ("IDL:Counter:1.0", - ACE_TRY_ENV); - ACE_TRY_CHECK; - - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("Reference Created!\n"))); - - if (!check_reference (object, - "Unable to create a Counter Object!\n")) - return 1; - - Counter_var counter = Counter::_narrow (object.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - if (!check_reference (counter.in(), - "Unable to create a Counter Object!\n")) - return 1; - - Counter_Servant servant (orb.in ()); - - // TODO: Incarnate the CORBA Object with servant. - - CORBA::String_var ior = - orb->object_to_string (counter.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("Activated as <%s>\n"), ior.in ())); - - FILE *output_file = ACE_OS::fopen (rt_poa_properties->ior_source (), "w"); - if (output_file == 0) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("Cannot open output file for writing IOR: %s"), - rt_poa_properties->ior_source ()), - 1); - ACE_OS::fprintf (output_file, "%s", ior.in ()); - ACE_OS::fclose (output_file); - - // Now we create an object that overrides some of the policies - // set at the POA level. - - - // Create a Corba Object reference, using the policies - // set at the POA level. - - // @@ Shortcut - The following code is not definitive, and - // the cast is only used to access a RTPortableServer::POA - // method that isn't currently accessible otherwise. - - object = - ((TAO_POA*)child_poa.ptr ())->create_reference_with_priority ("IDL:Counter:1.0", - rt_object_properties->priority (), - ACE_TRY_ENV); - ACE_TRY_CHECK; - - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("Reference Created!\n"))); - - if (!check_reference (object, - "Unable to create a Counter Object!\n")) - return 1; - - Counter_var counter_over = Counter::_narrow (object.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - if (!check_reference (counter_over.in(), - "Unable to create a Counter Object!\n")) - return 1; - - - CORBA::String_var o_ior = orb->object_to_string (counter_over.in (), ACE_TRY_ENV); - ACE_TRY_CHECK; - - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("Activated as <%s>\n"), o_ior.in ())); - - output_file = ACE_OS::fopen (rt_object_properties->ior_source (), "w"); - - if (output_file == 0) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("Cannot open output file for writing IOR: %s"), - rt_object_properties->ior_source ()), - 1); - ACE_OS::fprintf (output_file, "%s", o_ior.in ()); - ACE_OS::fclose (output_file); - - - PortableServer::POAManager_var poa_manager = - child_poa->the_POAManager (ACE_TRY_ENV); - ACE_TRY_CHECK; - - poa_manager->activate (ACE_TRY_ENV); + Policy_Tester policy_tester; + + policy_tester.init (argc, argv, ACE_TRY_ENV); ACE_TRY_CHECK; - orb->run (ACE_TRY_ENV); - ACE_TRY_CHECK; - - poa->destroy (1, 1, ACE_TRY_ENV); + policy_tester.run (ACE_TRY_ENV); ACE_TRY_CHECK; } @@ -249,7 +38,8 @@ main (int argc, char *argv[]) ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, ACE_TEXT ("CORBA Exception Raised.")); return 1; - } + } return 1; + ACE_ENDTRY; return 0; -- cgit v1.2.1