summaryrefslogtreecommitdiff
path: root/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp')
-rw-r--r--TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp198
1 files changed, 198 insertions, 0 deletions
diff --git a/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp b/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp
new file mode 100644
index 00000000000..c29013285ff
--- /dev/null
+++ b/TAO/tests/Portable_Interceptors/IORInterceptor/FOO_IORInterceptor.cpp
@@ -0,0 +1,198 @@
+#include "FOO_IORInterceptor.h"
+#include "testS.h"
+
+#include "tao/ORB_Constants.h"
+
+ACE_RCSID (IORInterceptor,
+ FOO_IORInterceptor,
+ "$Id$")
+
+
+FOO_IORInterceptor::FOO_IORInterceptor (IOP::Codec_ptr codec)
+ : codec_ (IOP::Codec::_duplicate (codec))
+{
+}
+
+char *
+FOO_IORInterceptor::name (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ return CORBA::string_dup ("FOO_IORInterceptor");
+}
+
+void
+FOO_IORInterceptor::destroy (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+FOO_IORInterceptor::establish_components (
+ PortableInterceptor::IORInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // According to the Portable Interceptors specification,
+ // IORInterceptor::establish_components() must not throw an
+ // exception. We check for exceptions despite this fact. The ORB
+ // does the right thing, and ignores any IOR interceptors that throw
+ // an exception.
+
+ CORBA::String_var name = this->name (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK;
+
+ CORBA::Any data;
+ data <<= name.in ();
+
+ CORBA::OctetSeq_var encoded_data =
+ this->codec_->encode_value (data
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ // Construct a tagged component.
+ IOP::TaggedComponent component;
+
+ component.tag = FOO::COMPONENT_ID;
+
+ const CORBA::ULong maximum = encoded_data->maximum ();
+ const CORBA::ULong length = encoded_data->length ();
+ CORBA::Octet * buffer = encoded_data->get_buffer ();
+ const CORBA::Boolean release = 0; // OctetSeq retains ownership.
+
+ ACE_ASSERT (maximum > 1); // Sanity check.
+ ACE_ASSERT (length > 1); // Sanity check.
+
+ component.component_data.replace (maximum, length, buffer, release);
+
+ ACE_ASSERT (component.component_data.length () == length);
+
+ // Add the tagged component to all profiles.
+ info->add_ior_component (component
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) Added tagged component containing the\n"
+ "(%P|%t) string \"%s\" to all profiles.\n",
+ name.in ()));
+
+
+ // Add the tagged component to all IIOP profiles.
+ info->add_ior_component_to_profile (component,
+ IOP::TAG_INTERNET_IOP
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) Added tagged component containing the\n"
+ "(%P|%t) string \"%s\" to all IIOP profiles.\n",
+ name.in ()));
+
+
+ ACE_TRY
+ {
+ // Verify that policy retrieval internals work, and do not cause
+ // memory access violations.
+ CORBA::Policy_var policy =
+ info->get_effective_policy (PortableServer::THREAD_POLICY_ID
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%t) Successfully retrieved effective policy.\n"));
+ }
+ ACE_CATCH (CORBA::INV_POLICY, ex)
+ {
+ if (ex.minor () != (CORBA::OMGVMCID | 3))
+ ACE_RE_THROW;
+ }
+ ACE_ENDTRY;
+ ACE_CHECK;
+}
+
+void
+FOO_IORInterceptor::components_established (
+ PortableInterceptor::IORInfo_ptr info
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ // Construct a dummy tagged component.
+ IOP::TaggedComponent component;
+
+ component.tag = 0;
+ component.component_data.length (1);
+
+
+ ACE_TRY_EX (ALL)
+ {
+ // Add the tagged component to all profiles.
+ //
+ // This call should fail since it shouldn't be possible to add
+ // an IOR component after establish_components() has been
+ // called.
+ info->add_ior_component (component
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK_EX (ALL);
+
+ // The above call should NOT have succeeded.
+ ACE_TRY_THROW_EX (CORBA::INTERNAL (), ALL);
+ }
+ ACE_CATCH (CORBA::BAD_INV_ORDER, ex)
+ {
+ if (ex.minor () != (CORBA::OMGVMCID | 14))
+ {
+ ACE_PRINT_EXCEPTION (ex,
+ "Unexpected exception");
+
+ ACE_RE_THROW_EX (ALL);
+ }
+ }
+ ACE_ENDTRY;
+ ACE_CHECK;
+
+ ACE_TRY_EX (PROFILE)
+ {
+ // Add the tagged component to all profiles.
+ //
+ // This call should fail since it shouldn't be possible to add
+ // an IOR component after establish_components() has been
+ // called.
+ info->add_ior_component_to_profile (component,
+ IOP::TAG_INTERNET_IOP
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK_EX (PROFILE);
+
+ // The above call should NOT have succeeded.
+ ACE_TRY_THROW_EX (CORBA::INTERNAL (), PROFILE);
+ }
+ ACE_CATCH (CORBA::BAD_INV_ORDER, ex)
+ {
+ if (ex.minor () != (CORBA::OMGVMCID | 14))
+ {
+ ACE_PRINT_EXCEPTION (ex,
+ "Unexpected exception");
+
+ ACE_RE_THROW_EX (PROFILE);
+ }
+ }
+ ACE_ENDTRY;
+ ACE_CHECK;
+}
+
+void
+FOO_IORInterceptor::adapter_manager_state_changed (
+ const char *,
+ PortableInterceptor::AdapterState
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+FOO_IORInterceptor:: adapter_state_changed (
+ const PortableInterceptor::ObjectReferenceTemplateSeq &,
+ PortableInterceptor::AdapterState
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}