summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TAO/orbsvcs/tests/Time/Client_i.cpp413
-rw-r--r--TAO/orbsvcs/tests/Time/Client_i.h102
-rw-r--r--TAO/orbsvcs/tests/Time/Makefile63
-rw-r--r--TAO/orbsvcs/tests/Time/client.cpp21
4 files changed, 599 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/Time/Client_i.cpp b/TAO/orbsvcs/tests/Time/Client_i.cpp
new file mode 100644
index 00000000000..c151dd0c495
--- /dev/null
+++ b/TAO/orbsvcs/tests/Time/Client_i.cpp
@@ -0,0 +1,413 @@
+// $Id$
+
+#include "ace/Get_Opt.h"
+#include "ace/Read_Buffer.h"
+#include "ace/OS.h"
+
+#include "Client_i.h"
+
+ACE_RCSID(Time_Service, Client_i, "$Id$")
+
+// Constructor.
+
+Client_i::Client_i (void)
+ : ior_ (0),
+ loop_count_ (10),
+ shutdown_ (0),
+ clerk_ ()
+{
+}
+
+// The following test throws an exception that the operation secure_universal_time ()
+// has not been currently implemented in the given server.
+void
+Client_i::test_for_secure_universal_time (void)
+{
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Testing secure_time()\n"));
+ TAO_TRY
+ {
+ CosTime::UTO_var UTO_server =
+ this->clerk_->secure_universal_time (TAO_TRY_ENV);
+
+ TAO_CHECK_ENV;
+ }
+ TAO_CATCHANY
+ {
+ TAO_TRY_ENV.print_exception ("Test Successful\n");
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) test_for_secure_universal_time()\n"));
+ }
+ TAO_ENDTRY;
+
+ }
+
+ // The following test retrieves the current universal time as a UTO
+ // from the clerk_ and prints out the various attributes of the UTO.
+
+ void
+ Client_i::test_for_universal_time (void)
+ {
+
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Testing universal_time()\n"));
+ TAO_TRY
+ {
+ CosTime::UTO_var UTO_server =
+ this->clerk_->universal_time (TAO_TRY_ENV);
+
+ ACE_DEBUG ((LM_DEBUG,
+ "\nTime = %Q\nInaccuracy = %Q\nTimeDiff = %d\nstruct.time = %Q"
+ "\nstruct.inacclo = %d\nstruct.inacchi = %d\nstruct.Tdf = %d\n",
+ UTO_server->time (TAO_TRY_ENV),
+ UTO_server->inaccuracy (TAO_TRY_ENV),
+ UTO_server->tdf (TAO_TRY_ENV),
+ (UTO_server->utc_time ()).time,
+ (UTO_server->utc_time ()).inacclo,
+ (UTO_server->utc_time ()).inacchi,
+ (UTO_server->utc_time ()).tdf));
+
+ TAO_CHECK_ENV;
+ }
+ TAO_CATCHANY
+ {
+ TAO_TRY_ENV.print_exception ("Error:");
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) test_for_universal_time()\n"));
+ }
+ TAO_ENDTRY;
+ };
+
+void
+ Client_i::test_for_new_universal_time (void)
+{
+ // @@ Vishal, please consider replacing these numbers with consts or enums.
+ TimeBase::TimeT time = 999999999;
+ TimeBase::InaccuracyT inaccuracy = 9999;
+ TimeBase::TdfT tdf = 99;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Testing new_universal_time()\n"));
+
+ TAO_TRY
+ {
+ CosTime::UTO_var UTO_server = this->clerk_->new_universal_time (time,
+ inaccuracy,
+ tdf,
+ TAO_TRY_ENV);
+
+ ACE_ASSERT (UTO_server->time (TAO_TRY_ENV) == 999999999);
+ ACE_ASSERT (UTO_server->inaccuracy (TAO_TRY_ENV) == 9999);
+ ACE_ASSERT (UTO_server->tdf (TAO_TRY_ENV) == 99);
+ ACE_ASSERT ((UTO_server->utc_time (TAO_TRY_ENV)).time == 999999999);
+ ACE_ASSERT ((UTO_server->utc_time (TAO_TRY_ENV)).inacchi == 9999 / 2);
+ ACE_ASSERT ((UTO_server->utc_time (TAO_TRY_ENV)).inacclo == 9999 - 9999 / 2);
+ ACE_ASSERT ((UTO_server->utc_time (TAO_TRY_ENV)).tdf == 99);
+
+ TAO_CHECK_ENV;
+ }
+ TAO_CATCHANY
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Test new_universal_time () fails.\n"));
+ }
+ TAO_ENDTRY;
+};
+
+void
+Client_i::test_for_uto_from_utc (void)
+ {
+
+ TimeBase::UtcT utc_struct;
+
+ utc_struct.time = 999999999;
+ utc_struct.inacclo = 50;
+ utc_struct.inacchi = 50;
+ utc_struct.tdf = 99;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Testing uto_from_utc ()\n"));
+
+ TAO_TRY
+ {
+ CosTime::UTO_var UTO_server = this->clerk_->uto_from_utc (utc_struct,
+ TAO_TRY_ENV);
+
+ ACE_ASSERT (UTO_server->time (TAO_TRY_ENV) == 999999999);
+ ACE_ASSERT (UTO_server->inaccuracy (TAO_TRY_ENV) == 100);
+ ACE_ASSERT (UTO_server->tdf (TAO_TRY_ENV) == 99);
+ ACE_ASSERT ((UTO_server->utc_time (TAO_TRY_ENV)).time == 999999999);
+ ACE_ASSERT ((UTO_server->utc_time (TAO_TRY_ENV)).inacclo == 50);
+ ACE_ASSERT ((UTO_server->utc_time (TAO_TRY_ENV)).inacchi == 50);
+ ACE_ASSERT ((UTO_server->utc_time (TAO_TRY_ENV)).tdf == 99);
+
+ TAO_CHECK_ENV;
+ }
+ TAO_CATCHANY
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Test uto_from_utc () fails.\n"));
+ }
+ TAO_ENDTRY;
+ };
+
+void
+Client_i::test_for_new_interval (void)
+ {
+ TimeBase::TimeT lower = 666666666;
+ TimeBase::TimeT upper = 999999999;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Testing new_interval ()\n"));
+
+ TAO_TRY
+ {
+ CosTime::TIO_var TIO_server = this->clerk_->new_interval (lower,
+ upper,
+ TAO_TRY_ENV);
+
+ ACE_ASSERT ((TIO_server->time_interval (TAO_TRY_ENV)).lower_bound == 666666666);
+ ACE_ASSERT ((TIO_server->time_interval (TAO_TRY_ENV)).upper_bound == 999999999);
+
+ TAO_CHECK_ENV;
+ }
+ TAO_CATCHANY
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Test new_interval () fails.\n"));
+ }
+ TAO_ENDTRY;
+
+ return;
+ }
+
+ // Reads the Time Service Server ior from a file
+
+int
+Client_i::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,
+ "[CLIENT] Process/Thread Id : (%P/%t) Unable to open %s for writing: %p\n",
+ filename),
+ -1);
+
+ ACE_Read_Buffer ior_buffer (f_handle);
+ char *data = ior_buffer.read ();
+
+ if (data == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "[CLIENT] Process/Thread Id : (%P/%t) Unable to read ior: %p\n"),
+ -1);
+
+ this->ior_ = ACE_OS::strdup (data);
+ ior_buffer.alloc ()->free (data);
+
+ ACE_OS::close (f_handle);
+
+ return 0;
+ }
+
+// Parses the command line arguments and returns an error status.
+
+ int
+ Client_i::parse_args (void)
+{
+ ACE_Get_Opt get_opts (argc_, argv_, "dn:f:xk:");
+ int c;
+ int result;
+
+ while ((c = get_opts ()) != -1)
+ // ACE_DEBUG((LM_DEBUG,"bal =1%c",c
+ // ));
+ switch (c)
+ {
+ case 'd': // debug flag
+ TAO_debug_level++;
+ break;
+ case 'n': // loop count
+ this->loop_count_ = (u_int) ACE_OS::atoi (get_opts.optarg);
+ break;
+ case 'k': // ior provide on command line
+ this->ior_ = ACE_OS::strdup (get_opts.optarg);
+ break;
+ case 'f': // read the IOR from the file.
+ result = this->read_ior (get_opts.optarg);
+ if (result < 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "[CLIENT] Process/Thread Id : (%P/%t) Unable to read ior from %s : %p\n",
+ get_opts.optarg),
+ -1);
+ break;
+ case 'x':
+ this->shutdown_ = 1;
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s"
+ " [-d]"
+ " [-n loopcount]"
+ " [-f ior-file]"
+ " [-k ior]"
+ " [-x]"
+ "\n",
+ this->argv_ [0]),
+ -1);
+ }
+
+ // Indicates successful parsing of command line.
+ return 0;
+}
+
+// Execute client example code.
+
+int
+Client_i::run (void)
+{
+ // Retrieves the current universal time.
+ test_for_universal_time ();
+
+ // Asserts the validity of the new_universal_time.
+ test_for_new_universal_time ();
+
+ // Asserts the validity of the UTO created from a given UTC.
+ test_for_uto_from_utc ();
+
+ // Asserts the validity of the TIO created using the given
+ // bounds.
+ test_for_new_interval ();
+
+ // Throws an exception because the method has not been
+ // implemented currently.
+ test_for_secure_universal_time ();
+
+ return 0;
+}
+
+Client_i::~Client_i (void)
+{
+ ACE_OS::free (this->ior_);
+}
+
+int
+Client_i::obtain_initial_references (void)
+{
+ TAO_TRY
+ {
+ // Initialize the naming services.
+ if (my_name_client_.init (orb_.in ()) != 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "[CLIENT] Process/Thread Id : (%P/%t) Unable to initialize "
+ "the TAO_Naming_Client. \n"),
+ -1);
+
+ ACE_DEBUG ((LM_DEBUG,
+ "DONE\n"));
+
+ char host_name[MAXHOSTNAMELEN];
+ char name[MAXHOSTNAMELEN];
+
+ ACE_OS::hostname (host_name, MAXHOSTNAMELEN);
+
+ CosNaming::Name clerk_name;
+ clerk_name.length (2);
+ clerk_name[0].id = CORBA::string_dup ("ClerkContext");
+ strcpy (name, "Clerk:");
+ strcat (name, host_name);
+ clerk_name[1].id = name;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "%s|\n",
+ name));
+
+ CORBA::Object_var temp_object =
+ my_name_client_->resolve (clerk_name,
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+ clerk_ = CosTime::TimeService::_narrow (temp_object.in (),
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ if (CORBA::is_nil (clerk_.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "[CLIENT] Process/Thread Id : (%P/%t) Unable to Resolve "
+ "Clerk Reference\n"),
+ -1);
+ }
+ TAO_CATCHANY
+ {
+ TAO_TRY_ENV.print_exception ("Client :: obtain_initial_references");
+ return -1;
+ }
+ TAO_ENDTRY;
+
+ return 0;
+}
+
+// This method uses the IOR if specified on the command line or in a
+// file, else it uses the Naming Service
+
+int
+Client_i::init (int argc, char **argv)
+{
+ this->argc_ = argc;
+ this->argv_ = argv;
+
+ TAO_TRY
+ {
+ // Retrieve the ORB.
+ this->orb_ = CORBA::ORB_init (this->argc_,
+ this->argv_,
+ 0,
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ // Parse command line and verify parameters.
+ if (this->parse_args () == -1)
+ return -1;
+
+ if (this->ior_)
+ {
+ // An ior is specified for the client through a commandline
+ // option or a file.
+
+ CORBA::Object_var server_object =
+ this->orb_->string_to_object (this->ior_,
+ TAO_TRY_ENV);
+ TAO_CHECK_ENV;
+
+ if (CORBA::is_nil (server_object.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "invalid ior <%s>\n",
+ this->ior_),
+ -1);
+ this->clerk_ =
+ CosTime::TimeService::_narrow (server_object.in (),
+ TAO_TRY_ENV);
+
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Using the IOR provided\n"));
+ TAO_CHECK_ENV;
+ }
+ else
+ { // No IOR specified. Use the Naming Service
+ ACE_DEBUG((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Using the Naming Service\n"));
+
+ this->obtain_initial_references ();
+ TAO_CHECK_ENV;
+ }
+ }
+ TAO_CATCHANY
+ {
+ TAO_TRY_ENV.print_exception ("Client_i::init");
+ return -1;
+ }
+ TAO_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/orbsvcs/tests/Time/Client_i.h b/TAO/orbsvcs/tests/Time/Client_i.h
new file mode 100644
index 00000000000..9d527c7a8d1
--- /dev/null
+++ b/TAO/orbsvcs/tests/Time/Client_i.h
@@ -0,0 +1,102 @@
+// -*- C++ -*-
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO/orbsvcs/Time_Service
+//
+// = FILENAME
+// Client_i.h
+//
+// = DESCRIPTION
+// This class implements a simple CORBA client that accesses a Time Service
+// server.
+//
+// = AUTHORS
+// Vishal Kachroo <vishal@cs.wustl.edu>
+//
+// ============================================================================
+
+#include "orbsvcs/TimeServiceC.h"
+#include "orbsvcs/Naming/Naming_Utils.h"
+
+class Client_i
+{
+ // = TITLE
+ // Client implementation to access the Time Service server.
+ //
+ // = DESCRIPTION
+ // Class wrapper for a client that gets the IOR of the clerk running
+ // on its machine and uses it to get the globally synchronized time
+
+public:
+
+ // = Initialization and termination methods.
+ Client_i (void);
+ // Constructor.
+
+ ~Client_i (void);
+ // Destructor.
+
+ int run (void);
+ // Execute client example code.
+
+ int init (int argc, char *argv[]);
+ // Initialize the client communication endpoint with server.
+
+ void Client_i::test_for_secure_universal_time (void);
+ // This test throws an exception that the operation
+ // secure_universal_time () has not been currently implemented
+ // in the given server.
+
+ void test_for_universal_time (void);
+ // Tests if the server returns a valid time.
+
+ void test_for_new_universal_time (void);
+ // Tests if the server returns a new UTO filled with the given time.
+
+ void test_for_uto_from_utc (void);
+ // Tests if the returned UTO has the same value as the given UTC.
+
+ void test_for_new_interval (void);
+ // Tests if a new TIO is created according to the given bounds.
+
+private:
+ int read_ior (char *filename);
+ // Function to read the server IOR from a file.
+
+ int parse_args (void);
+ // Parses the arguments passed on the command line.
+
+ int obtain_initial_references (void);
+ // To initialize the naming service and get a clerk IOR.
+
+ int argc_;
+ // # of arguments on the command line.
+
+ char **argv_;
+ // arguments from command line.
+
+ char *ior_;
+ // IOR of the obj ref of the server.
+
+ u_int loop_count_;
+ // Number of times to invoke the <time> operation.
+
+ int shutdown_;
+ // Flag for server shutdown.
+
+ CORBA::Environment env_;
+ // Environment variable.
+
+ CosTime::TimeService_var clerk_;
+ // Time Service Server object ptr.
+
+ TAO_Naming_Client my_name_client_;
+ // An instance of the name client used for resolving the Time
+ // Service object.
+
+ CORBA::ORB_var orb_;
+ // Remember our orb.
+};
diff --git a/TAO/orbsvcs/tests/Time/Makefile b/TAO/orbsvcs/tests/Time/Makefile
new file mode 100644
index 00000000000..fd882c63c86
--- /dev/null
+++ b/TAO/orbsvcs/tests/Time/Makefile
@@ -0,0 +1,63 @@
+#----------------------------------------------------------------------------
+#
+# $Id$
+#
+#----------------------------------------------------------------------------
+
+#----------------------------------------------------------------------------
+# Local macros
+#----------------------------------------------------------------------------
+
+ifndef TAO_ROOT
+ TAO_ROOT = $(ACE_ROOT)/TAO
+endif
+
+LDLIBS = -lorbsvcs -lTAO
+
+PROG_SRCS = \
+ client.cpp \
+ Client_i.cpp \
+
+SRC = $(PROG_SRCS)
+
+SIMPLE_CLT_OBJS = Client_i.o \
+ client.o
+
+BIN = client \
+
+BUILD = $(BIN)
+VLDLIBS = $(LDLIBS:%=%$(VAR))
+VBIN = $(BIN:%=%$(VAR))
+
+#----------------------------------------------------------------------------
+# Include macros and targets
+#----------------------------------------------------------------------------
+
+include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
+include $(ACE_ROOT)/include/makeinclude/macros.GNU
+include $(TAO_ROOT)/rules.tao.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.local.GNU
+include $(TAO_ROOT)/taoconfig.mk
+
+#----------------------------------------------------------------------------
+# Local targets
+#----------------------------------------------------------------------------
+
+
+LDFLAGS += -L$(TAO_ROOT)/orbsvcs/orbsvcs -L$(TAO_ROOT)/tao -L$(TAO_ROOT)/orbsvcs/Naming_Service
+CPPFLAGS += -I$(TAO_ROOT)/orbsvcs
+
+.PRECIOUS: TimeServiceC.cpp TimeServiceC.i TimeServiceC.h
+.PRECIOUS: TimeServiceS.cpp TimeServiceS.i TimeServiceS.h
+.PRECIOUS: TimeServiceS_T.cpp TimeServiceS_T.i TimeServiceS_T.h
+
+client: $(addprefix $(VDIR),$(SIMPLE_CLT_OBJS))
+ $(LINK.cc) $(LDFLAGS) -o $@ $^ $(VLDLIBS) $(POSTLINK)
+
+realclean: clean
+ -/bin/rm -rf TimeServiceC.* TimeServiceS.* TimeServiceS_T.*
+
+# DO NOT DELETE THIS LINE -- g++dep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
diff --git a/TAO/orbsvcs/tests/Time/client.cpp b/TAO/orbsvcs/tests/Time/client.cpp
new file mode 100644
index 00000000000..764d016bdf5
--- /dev/null
+++ b/TAO/orbsvcs/tests/Time/client.cpp
@@ -0,0 +1,21 @@
+// $Id$
+
+#include "Client_i.h"
+
+ACE_RCSID(Time, client, "$Id$")
+
+// This function runs the Time Service client test.
+
+int
+main (int argc, char *argv[])
+{
+ Client_i client;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "[CLIENT] Process/Thread Id : (%P/%t) Time Service Client\n"));
+
+ if (client.init (argc, argv) == -1)
+ return -1;
+ else
+ return client.run ();
+}