summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordhinton <dhinton@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-11-08 04:14:45 +0000
committerdhinton <dhinton@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-11-08 04:14:45 +0000
commit29646e414a08de18441d8e1eb8ff263eacb49f37 (patch)
tree6a0aab5817759f666a8999fc2f97b3bd575bbb4e
parent9cda21a29634937b8363cc080ac2860280562088 (diff)
downloadATCD-29646e414a08de18441d8e1eb8ff263eacb49f37.tar.gz
ChangeLogTag:Fri Nov 8 04:03:29 UTC 2002 Don Hinton <dhinton@ieee.org>
-rw-r--r--ChangeLog7
-rw-r--r--ChangeLogs/ChangeLog-03a7
-rw-r--r--tests/Multicast_Test.cpp103
3 files changed, 84 insertions, 33 deletions
diff --git a/ChangeLog b/ChangeLog
index 553b206e45d..821f8fdce39 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Fri Nov 8 04:03:29 UTC 2002 Don Hinton <dhinton@ieee.org>
+
+ * tests/Multicast_Test.cpp: Cleaned up error messages and
+ error handling and insure that errors are returned. Added
+ 2 second timeout to call to ACE_Thread_Manager::wait() so
+ that lost messages won't cause test to hang.
+
Wed Nov 6 18:55:22 2002 Steve Huston <shuston@riverace.com>
* ace/OS.{h i} (recursive_mutex_cond_unlock,
diff --git a/ChangeLogs/ChangeLog-03a b/ChangeLogs/ChangeLog-03a
index 553b206e45d..821f8fdce39 100644
--- a/ChangeLogs/ChangeLog-03a
+++ b/ChangeLogs/ChangeLog-03a
@@ -1,3 +1,10 @@
+Fri Nov 8 04:03:29 UTC 2002 Don Hinton <dhinton@ieee.org>
+
+ * tests/Multicast_Test.cpp: Cleaned up error messages and
+ error handling and insure that errors are returned. Added
+ 2 second timeout to call to ACE_Thread_Manager::wait() so
+ that lost messages won't cause test to hang.
+
Wed Nov 6 18:55:22 2002 Steve Huston <shuston@riverace.com>
* ace/OS.{h i} (recursive_mutex_cond_unlock,
diff --git a/tests/Multicast_Test.cpp b/tests/Multicast_Test.cpp
index a3c02cc7f47..a69bd5e1098 100644
--- a/tests/Multicast_Test.cpp
+++ b/tests/Multicast_Test.cpp
@@ -57,7 +57,7 @@ extern "C" void handler (int)
finished = 1;
}
-static const int MCT_ITERATIONS = 100;
+static const int MCT_ITERATIONS = 10;
static const int MCT_GROUPS = 5;
static const int MCT_MIN_GROUPS = 2;
@@ -68,6 +68,9 @@ static const size_t MAX_STRING_SIZE = 200;
int advance_addr (ACE_INET_Addr &addr);
+// Keep track of errors so we can report them on exit.
+static sig_atomic_t error = 0;
+
/*
* MCast_Config holds configuration data for this test.
*/
@@ -468,18 +471,20 @@ MCT_Event_Handler::join (const ACE_INET_Addr &mcast_addr,
int reuse_addr,
const ACE_TCHAR *net_if)
{
- if (this->mcast_.join (mcast_addr, reuse_addr, net_if) == 0)
- {
- char buf[MAX_STRING_SIZE];
- ACE_OS::sprintf (buf, "%s/%d",
- mcast_addr.get_host_addr (),
- mcast_addr.get_port_number ());
- ACE_CString *str;
- ACE_NEW_RETURN (str, ACE_CString (ACE::strnew (buf)), -1);
- this->address_vec_.push_back (str);
- return 0;
- }
- return -1;
+ if (this->mcast_.join (mcast_addr, reuse_addr, net_if) == -1)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("MCT_Event_Handler::join - ")
+ ACE_TEXT ("Could not join group.\n")),
+ -1);
+
+ char buf[MAX_STRING_SIZE];
+ ACE_OS::sprintf (buf, "%s/%d",
+ mcast_addr.get_host_addr (),
+ mcast_addr.get_port_number ());
+ ACE_CString *str;
+ ACE_NEW_RETURN (str, ACE_CString (ACE::strnew (buf)), -1);
+ this->address_vec_.push_back (str);
+ return 0;
}
int
@@ -514,17 +519,25 @@ MCT_Event_Handler::handle_input (ACE_HANDLE /*handle*/)
ACE_INET_Addr addr;
if (this->mcast ()->recv (buf, sizeof buf, addr) == -1)
- ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("error calling recv\n")), -1);
+ {
+ ++error;
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("MCT_Event_Handler::handle_input - ")
+ ACE_TEXT ("calling recv\n")), -1);
+ }
// Zero length buffer means we are done.
if (ACE_OS::strlen (buf) == 0)
return -1;
else if (this->find (buf) == -1)
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("error: received dgram for a group we didn't joing ")
- ACE_TEXT ("(%s) \n"),
- buf));
-
+ {
+ ++error;
+ ACE_DEBUG ((LM_ERROR,
+ ACE_TEXT ("MCT_Event_Handler::handle_input - ")
+ ACE_TEXT ("Received dgram for a group we didn't join ")
+ ACE_TEXT ("(%s) \n"),
+ buf));
+ }
return 0;
}
@@ -614,7 +627,8 @@ MCT_Task::open (void *)
break;
if (handler->join (addr) == -1)
- ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("join error\n")),
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("MCT_Task::open - join error\n")),
-1);
advance_addr (addr);
}
@@ -622,18 +636,24 @@ MCT_Task::open (void *)
else
{
if (handler->join (addr) == -1)
- ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("join error\n")), -1);
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("MCT_Task::open - join error\n")),
+ -1);
}
advance_addr (addr);
if (this->reactor ()->register_handler (handler, READ_MASK) == -1)
- ACE_ERROR ((LM_ERROR, ACE_TEXT ("cannot register handler\n")));
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("MCT_Task::open - cannot register ")
+ ACE_TEXT ("handler\n")),
+ -1);
}
if (this->activate (THR_NEW_LWP) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
- ACE_TEXT ("%p\n"), ACE_TEXT ("activate failed")),
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("MCT_TASK:open - activate failed")),
-1);
return 0;
}
@@ -673,7 +693,8 @@ int send_dgram (ACE_SOCK_Dgram &socket, ACE_INET_Addr addr, int done = 0)
//ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("sending (%s)\n"), buf));
if (socket.send (buf, ACE_OS_String::strlen (buf),addr) == -1)
ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"),
- ACE_TEXT ("error in send_dgram")), -1);
+ ACE_TEXT ("send_dgram - error calling send on ")
+ ACE_TEXT ("ACE_SOCK_Dgram.")), -1);
addr.set_port_number (++port);
}
return 0;
@@ -710,8 +731,8 @@ int advance_addr (ACE_INET_Addr &addr)
}
else
ACE_ERROR_RETURN ((LM_ERROR,
- ACE_TEXT ("Cannot advance multicast group address ")
- ACE_TEXT ("past %s\n"),
+ ACE_TEXT ("advance_addr - Cannot advance multicast ")
+ ACE_TEXT ("group address past %s\n"),
addr.get_host_addr ()),
-1);
@@ -762,7 +783,7 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
ACE_DEBUG ((LM_INFO, ACE_TEXT ("Starting consumer...\n")));
// Open makes it an active object.
- task->open ();
+ retval += task->open ();
}
// now produce the datagrams...
@@ -778,11 +799,12 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
ACE_INET_Addr addr = config.group_start ();
for (int j = 0; j < groups && !finished; ++j)
{
- if (send_dgram (socket, addr, ((i + 1) == iterations)) == -1)
- ACE_ERROR ((LM_ERROR, ACE_TEXT ("some sort of error\n")));
- if (advance_addr (addr) == -1)
+ if ((retval += send_dgram (socket, addr,
+ ((i + 1) == iterations))) == -1)
+ ACE_ERROR ((LM_ERROR, ACE_TEXT ("Calling send_dgram.\n")));
+ if ((retval += advance_addr (addr)) == -1)
ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("error calling advance addr\n")));
+ ACE_TEXT ("Calling advance_addr.\n")));
}
// Give the task thread a chance to run.
ACE_Thread::yield ();
@@ -794,12 +816,27 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
// and wait for everything to finish
ACE_DEBUG ((LM_INFO,
ACE_TEXT ("start waiting for consumer to finish...\n")));
- ACE_Thread_Manager::instance ()->wait ();
+ // Wait for the threads to exit.
+ // But, wait for a limited time since we could hang if the last udp
+ // message isn't received.
+ const ACE_Time_Value max_wait ( 2/* seconds */);
+ const ACE_Time_Value wait_time (ACE_OS::gettimeofday () + max_wait);
+ if (ACE_Thread_Manager::instance ()->wait (&wait_time) == -1)
+ {
+ if (errno == ETIME)
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("maximum wait time of %d msec exceeded\n"),
+ max_wait.msec ()));
+ else
+ ACE_OS::perror (ACE_TEXT ("wait"));
+
+ ++error;
+ }
}
delete task;
ACE_END_TEST;
- return retval == 0 ? 0 : 1;
+ return (retval == 0 && error == 0) ? 0 : 1;
}
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)