summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Huston <shuston@riverace.com>2011-01-05 23:04:05 +0000
committerSteve Huston <shuston@riverace.com>2011-01-05 23:04:05 +0000
commit366fea6e36f0a545d50fe3e35c420a8f5637aecc (patch)
treee6ba4a1031d324b90860b86f7d20fa9faaf3142c
parentc6e5d4e14729014a2148ea20690ec9bbcd027e71 (diff)
downloadATCD-366fea6e36f0a545d50fe3e35c420a8f5637aecc.tar.gz
ChangeLogTag:Wed Jan 5 21:47:19 UTC 2011 Steve Huston <shuston@riverace.com>
-rw-r--r--ChangeLog5
-rw-r--r--tests/Bug_2609_Regression_Test.cpp97
2 files changed, 69 insertions, 33 deletions
diff --git a/ChangeLog b/ChangeLog
index 20b73ffdb98..24020146156 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Jan 5 21:47:19 UTC 2011 Steve Huston <shuston@riverace.com>
+
+ * tests/Bug_2609_Regression_Test.cpp: Carried over improvements to this
+ tests, particularly for IPv6, from 5.8 tree.
+
Sun Nov 7 00:13:13 UTC 2010 Steve Huston <shuston@riverace.com>
* tests/INET_Addr_Test.cpp: Mismatching the addr->name test is not
diff --git a/tests/Bug_2609_Regression_Test.cpp b/tests/Bug_2609_Regression_Test.cpp
index 734ba205acd..475ef6aeb81 100644
--- a/tests/Bug_2609_Regression_Test.cpp
+++ b/tests/Bug_2609_Regression_Test.cpp
@@ -55,22 +55,24 @@ public:
int open (void* pv)
{
TEST_TRACE ("open");
- g_semaphore.release(); // signal open completed
+ g_semaphore.release (); // signal open completed
+ // super::open() will register_handler for input. The default
+ // handle_input() from ACE_Event_Handler will return -1, triggering
+ // handler removal from the reactor.
return super::open (pv);
}
//FUZZ: enable check_for_lack_ACE_OS
- int handle_close (ACE_HANDLE fd, ACE_Reactor_Mask mask)
+ int handle_close (ACE_HANDLE, ACE_Reactor_Mask)
{
TEST_TRACE ("handle_close");
- super::handle_close (fd, mask);
if (g_handler_deleted)
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT("Handler deleted in base class' handle_close()\n")));
- }
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("Handler deleted in base handle_close()\n")));
+ }
// signal handle_close() completed
- g_semaphore.release();
+ g_semaphore.release ();
return 0;
}
};
@@ -80,12 +82,15 @@ struct My_Task : public ACE_Task_Base
int svc()
{
TEST_TRACE ("My_Task::svc");
- ACE_Reactor::instance()->owner(ACE_OS::thr_self());
- int rv = ACE_Reactor::instance()->run_reactor_event_loop();
+ ACE_Reactor *r = ACE_Reactor::instance ();
+ r->owner (ACE_OS::thr_self ());
+ int rv = r->run_reactor_event_loop ();
if (rv < 0)
- {
- ACE_ERROR ((LM_ERROR, ACE_TEXT("Cannot run reactor event loop\n")));
- }
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("Cannot run %p\n"),
+ ACE_TEXT ("reactor event loop")));
+ }
return 0;
}
};
@@ -95,7 +100,7 @@ struct Timer_Handler : public ACE_Event_Handler
{
int handle_timeout (const ACE_Time_Value&, const void*)
{
- g_semaphore.release(); // signal reactor started
+ g_semaphore.release (); // signal reactor started
return 0;
}
};
@@ -109,40 +114,66 @@ run_main (int, ACE_TCHAR *[])
{
ACE_START_TEST (ACE_TEXT ("Bug_2609_Regression_Test"));
+ int status = 0;
+
#if defined (ACE_HAS_THREADS)
- My_Acceptor acceptor (ACE_INET_Addr(9876));
+ My_Acceptor acceptor;
+ if (-1 == acceptor.open (ACE_sap_any_cast (const ACE_INET_Addr &)))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("acceptor open")),
+ 1);
+ ACE_INET_Addr listen_addr;
+ acceptor.acceptor ().get_local_addr (listen_addr);
+#if defined (ACE_HAS_IPV6)
+ const ACE_TCHAR *me =
+ listen_addr.get_type () == PF_INET ? ACE_LOCALHOST : ACE_IPV6_LOCALHOST;
+#else
+ const ACE_TCHAR *me = ACE_LOCALHOST;
+#endif /* ACE_HAS_IPV6 */
+ ACE_INET_Addr connect_addr (listen_addr.get_port_number (),
+ me,
+ listen_addr.get_type ());
+
Timer_Handler timer_handler;
- ACE_Reactor::instance()->schedule_timer(
- &timer_handler, 0, ACE_Time_Value(0));
+ ACE_Reactor::instance()->schedule_timer (&timer_handler,
+ 0,
+ ACE_Time_Value(0));
My_Task task;
- int activated = task.activate();
+ int activated = task.activate ();
if (activated < 0)
- {
- ACE_ERROR ((LM_ERROR, ACE_TEXT ("Could not activate task\n")));
- }
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ ACE_TEXT ("%p\n"),
+ ACE_TEXT ("Error activating task")),
+ 1);
+ }
- g_semaphore.acquire();// wait for reactor to start
+ g_semaphore.acquire (); // wait for reactor to start
{
ACE_SOCK_Connector c1;
ACE_SOCK_Stream s1;
- ACE_INET_Addr a1(9876, "localhost");
- if (-1 == c1.connect (s1, a1))
- {
- ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT("Could not connect\n")), -1);
- }
- g_semaphore.acquire(); // wait for open to complete
- s1.close();
- g_semaphore.acquire(); // wait for handle_close to complete
+ if (-1 == c1.connect (s1, connect_addr))
+ {
+ ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT("connect")));
+ status = 1;
+ }
+ else
+ {
+ g_semaphore.acquire (); // wait for open to complete
+ s1.close (); // will trip handle_input()
+ g_semaphore.acquire (); // wait for handle_close to complete
+ }
}
- ACE_Reactor::end_event_loop();
- task.wait();
+ ACE_Reactor::instance ()->end_reactor_event_loop ();
+ task.wait ();
#else
ACE_ERROR ((LM_INFO,
ACE_TEXT ("threads not supported on this platform\n")));
#endif
ACE_END_TEST;
- return 0;
+ return status;
}