summaryrefslogtreecommitdiff
path: root/TAO/tests/Param_Test/options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tests/Param_Test/options.cpp')
-rw-r--r--TAO/tests/Param_Test/options.cpp243
1 files changed, 243 insertions, 0 deletions
diff --git a/TAO/tests/Param_Test/options.cpp b/TAO/tests/Param_Test/options.cpp
new file mode 100644
index 00000000000..493e73dfa7c
--- /dev/null
+++ b/TAO/tests/Param_Test/options.cpp
@@ -0,0 +1,243 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/tests/Param_Test
+//
+// = FILENAME
+// options.cpp
+//
+// = DESCRIPTION
+// Options for the Param_Test application
+//
+// = AUTHORS
+// Aniruddha Gokhale
+//
+// ============================================================================
+
+#include "options.h"
+#include "tao/debug.h"
+#include "ace/Read_Buffer.h"
+#include "ace/Get_Opt.h"
+#include "ace/OS_NS_string.h"
+#include "ace/OS_NS_fcntl.h"
+
+ACE_RCSID (Param_Test,
+ options,
+ "$Id$")
+
+// Constructor.p
+Options::Options (void)
+ : ior_ (CORBA::string_dup ("file://test.ior")),
+ test_type_ (Options::NO_TEST),
+ invoke_type_ (Options::SII),
+ loop_count_ (1),
+ debug_ (0),
+ shutdown_ (0)
+{
+}
+
+Options::~Options (void)
+{
+}
+
+// Parses the command line arguments and returns an error status.
+
+int
+Options::parse_args (int argc, char **argv)
+{
+ ACE_Get_Opt get_opts (argc, argv, "xdn:f:i:t:k:");
+ int c;
+ int result;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'd': // debug flag
+ TAO_debug_level++;
+ this->debug_ = 1;
+ break;
+
+ case 'x':
+ this->shutdown_ = 1;
+ break;
+
+ case 'n': // loop count
+ this->loop_count_ = (CORBA::ULong) ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+
+ case 'f':
+ result = this->read_ior (get_opts.opt_arg ());
+
+ if (result < 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Unable to read ior from %s : %p\n",
+ get_opts.opt_arg ()),
+ -1);
+
+ break;
+
+ case 'k':
+ this->ior_ = CORBA::string_dup (get_opts.opt_arg ());
+ break;
+
+ case 'i': // invocation
+ if (!ACE_OS::strcmp (get_opts.opt_arg (), "dii"))
+ this->invoke_type_ = Options::DII;
+ break;
+
+ case 't': // data type
+ if (!ACE_OS::strcmp (get_opts.opt_arg (), "short"))
+ this->test_type_ = Options::TEST_SHORT;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "ulonglong"))
+ this->test_type_ = Options::TEST_ULONGLONG;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "ubstring"))
+ this->test_type_ = Options::TEST_UB_STRING;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "ubwstring"))
+ this->test_type_ = Options::TEST_UB_WSTRING;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "bdstring"))
+ this->test_type_ = Options::TEST_BD_STRING;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "bdwstring"))
+ this->test_type_ = Options::TEST_BD_WSTRING;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "fixed_struct"))
+ this->test_type_ = Options::TEST_FIXED_STRUCT;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "ub_strseq"))
+ this->test_type_ = Options::TEST_UB_STRING_SEQUENCE;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "bd_strseq"))
+ this->test_type_ = Options::TEST_BD_STRING_SEQUENCE;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "ub_wstrseq"))
+ this->test_type_ = Options::TEST_UB_WSTRING_SEQUENCE;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "bd_wstrseq"))
+ this->test_type_ = Options::TEST_BD_WSTRING_SEQUENCE;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "var_struct"))
+ this->test_type_ = Options::TEST_VAR_STRUCT;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "nested_struct"))
+ this->test_type_ = Options::TEST_NESTED_STRUCT;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "recursive_struct"))
+ this->test_type_ = Options::TEST_RECURSIVE_STRUCT;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "objref_struct"))
+ this->test_type_ = Options::TEST_OBJREF_STRUCT;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "ub_struct_seq"))
+ this->test_type_ = Options::TEST_UB_STRUCT_SEQUENCE;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "bd_struct_seq"))
+ this->test_type_ = Options::TEST_BD_STRUCT_SEQUENCE;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "ub_array_seq"))
+ this->test_type_ = Options::TEST_UB_ARRAY_SEQUENCE;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "bd_array_seq"))
+ this->test_type_ = Options::TEST_BD_ARRAY_SEQUENCE;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "objref"))
+ this->test_type_ = Options::TEST_OBJREF;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "typecode"))
+ this->test_type_ = Options::TEST_TYPECODE;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "any"))
+ this->test_type_ = Options::TEST_ANY;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "objref_sequence"))
+ this->test_type_ = Options::TEST_OBJREF_SEQUENCE;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "any_sequence"))
+ this->test_type_ = Options::TEST_ANYSEQ;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "ub_short_sequence"))
+ this->test_type_ = Options::TEST_UB_SHORTSEQ;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "bd_short_sequence"))
+ this->test_type_ = Options::TEST_BD_SHORTSEQ;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "ub_long_sequence"))
+ this->test_type_ = Options::TEST_UB_LONGSEQ;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "bd_long_sequence"))
+ this->test_type_ = Options::TEST_BD_LONGSEQ;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "fixed_array"))
+ this->test_type_ = Options::TEST_FIXED_ARRAY;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "var_array"))
+ this->test_type_ = Options::TEST_VAR_ARRAY;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "multdim_array"))
+ this->test_type_ = Options::TEST_MULTDIM_ARRAY;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "exception"))
+ this->test_type_ = Options::TEST_EXCEPTION;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "big_union"))
+ this->test_type_ = Options::TEST_BIG_UNION;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "small_union"))
+ this->test_type_ = Options::TEST_SMALL_UNION;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "recursive_union"))
+ this->test_type_ = Options::TEST_RECURSIVE_UNION;
+ else if (!ACE_OS::strcmp (get_opts.opt_arg (), "complex_any"))
+ this->test_type_ = Options::TEST_COMPLEX_ANY;
+ break;
+
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s"
+ " [-d]"
+ " [-n loopcount]"
+ " [-f servant-IOR-file]"
+ " [-i invocation (sii/dii)]"
+ " [-t data type]"
+ "\n",
+ argv [0]),
+ -1);
+ }
+
+ // Indicates successful parsing of command line.
+ return 0;
+}
+
+// Get the factory IOR from the file created by the server.
+int
+Options::read_ior (char *filename)
+{
+ // Open the file for reading.
+ ACE_HANDLE f_handle = ACE_OS::open (filename, 0);
+
+ if (f_handle == ACE_INVALID_HANDLE)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Unable to open %s for writing: %p\n",
+ filename),
+ -1);
+ ACE_Read_Buffer ior_buffer (f_handle, true);
+ this->ior_ = ior_buffer.read ();
+
+ if (this->ior_.in () == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Unable to allocate memory to read ior: %p\n"),
+ -1);
+ return 0;
+}
+
+char const *
+Options::param_test_ior (void) const
+{
+ return this->ior_.in ();
+}
+
+Options::TEST_TYPE
+Options::test_type (void)
+{
+ return this->test_type_;
+}
+
+Options::INVOKE_TYPE
+Options::invoke_type (void)
+{
+ return this->invoke_type_;
+}
+
+CORBA::ULong
+Options::loop_count (void)
+{
+ return this->loop_count_;
+}
+
+CORBA::Boolean
+Options::debug (void) const
+{
+ return this->debug_;
+}
+
+CORBA::Boolean
+Options::shutdown (void) const
+{
+ return this->shutdown_;
+}
+
+#if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION)
+template ACE_Singleton<Options, ACE_Recursive_Thread_Mutex> *ACE_Singleton<Options, ACE_Recursive_Thread_Mutex>::singleton_;
+#endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */