summaryrefslogtreecommitdiff
path: root/tests/MT_Reference_Counted_Notify_Test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/MT_Reference_Counted_Notify_Test.cpp')
-rw-r--r--tests/MT_Reference_Counted_Notify_Test.cpp477
1 files changed, 0 insertions, 477 deletions
diff --git a/tests/MT_Reference_Counted_Notify_Test.cpp b/tests/MT_Reference_Counted_Notify_Test.cpp
deleted file mode 100644
index ef0a0a52b31..00000000000
--- a/tests/MT_Reference_Counted_Notify_Test.cpp
+++ /dev/null
@@ -1,477 +0,0 @@
-// $Id$
-
-// ============================================================================
-//
-// = LIBRARY
-// tests
-//
-// = FILENAME
-// MT_Reference_Counted_Notify_Test.cpp
-//
-// = DESCRIPTION
-// This test is used to check reference counting of the event
-// handlers when it interacts with the reactor notification
-// mechanism.
-//
-// = AUTHOR
-// Irfan Pyarali <irfan@oomworks.com>
-//
-// ============================================================================
-
-#include "test_config.h"
-#include "ace/OS_NS_unistd.h"
-#include "ace/Reactor.h"
-#include "ace/Select_Reactor.h"
-#include "ace/TP_Reactor.h"
-#include "ace/WFMO_Reactor.h"
-#include "ace/Dev_Poll_Reactor.h"
-#include "ace/Task.h"
-#include "ace/Get_Opt.h"
-
-ACE_RCSID(tests, MT_Reference_Counted_Notify_Test, "$Id$")
-
-#if defined (ACE_HAS_THREADS)
-
-static int test_select_reactor = 1;
-static int test_tp_reactor = 1;
-static int test_wfmo_reactor = 1;
-static int test_dev_poll_reactor = 1;
-static int test_empty_notify = 1;
-static int test_simple_notify = 1;
-static int test_reference_counted_notify = 1;
-static int iterations = 5;
-static int debug = 1;
-
-class Reference_Counted_Event_Handler : public ACE_Event_Handler
-{
-public:
-
- Reference_Counted_Event_Handler (void);
-
- ~Reference_Counted_Event_Handler (void);
-
- int handle_input (ACE_HANDLE);
-
- ACE_Event_Handler::Reference_Count add_reference (void);
-
- ACE_Event_Handler::Reference_Count remove_reference (void);
-
-};
-
-Reference_Counted_Event_Handler::Reference_Counted_Event_Handler (void)
-{
- this->reference_counting_policy ().value
- (ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
-
- if (debug)
- ACE_DEBUG
- ((LM_DEBUG,
- ACE_TEXT ("Reference count in Reference_Counted_Event_Handler() ")
- ACE_TEXT ("is %d\n"),
- this->reference_count_.value ()));
-}
-
-Reference_Counted_Event_Handler::~Reference_Counted_Event_Handler (void)
-{
- if (debug)
- ACE_DEBUG
- ((LM_DEBUG,
- ACE_TEXT ("Reference count in ~Reference_Counted_Event_Handler() ")
- ACE_TEXT ("is %d\n"),
- this->reference_count_.value ()));
-
- if (0 != this->reference_count_.value ())
- ACE_ERROR
- ((LM_ERROR,
- ACE_TEXT ("Reference count in ~Reference_Counted_Event_Handler() ")
- ACE_TEXT ("should be 0 but is %d\n"),
- this->reference_count_.value ()));
-}
-
-int
-Reference_Counted_Event_Handler::handle_input (ACE_HANDLE)
-{
- if (debug)
- ACE_DEBUG
- ((LM_DEBUG,
- ACE_TEXT ("Reference count in Reference_Counted_Event_Handler::")
- ACE_TEXT ("handle_input() is %d\n"),
- this->reference_count_.value ()));
-
- if (2 != this->reference_count_.value ())
- ACE_ERROR
- ((LM_ERROR,
- ACE_TEXT ("Reference count in Reference_Counted_Event_Handler::")
- ACE_TEXT ("handle_input() should be 2 but is %d\n"),
- this->reference_count_.value ()));
-
- return 0;
-}
-
-ACE_Event_Handler::Reference_Count
-Reference_Counted_Event_Handler::add_reference (void)
-{
- ACE_Event_Handler::Reference_Count reference_count =
- this->ACE_Event_Handler::add_reference ();
-
- if (debug)
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("Reference count after add_reference() is %d\n"),
- this->reference_count_.value ()));
-
- return reference_count;
-}
-
-ACE_Event_Handler::Reference_Count
-Reference_Counted_Event_Handler::remove_reference (void)
-{
- ACE_Event_Handler::Reference_Count reference_count =
- this->ACE_Event_Handler::remove_reference ();
-
- if (debug)
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("Reference count after remove_reference() is %d\n"),
- reference_count));
-
- return reference_count;
-}
-
-class Simple_Event_Handler : public ACE_Event_Handler
-{
-public:
-
- Simple_Event_Handler (int notifies);
-
- ~Simple_Event_Handler (void);
-
- int handle_input (ACE_HANDLE);
-
- int notifies_;
-};
-
-Simple_Event_Handler::Simple_Event_Handler (int notifies)
- : notifies_ (notifies)
-{
- if (debug)
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("Simple_Event_Handler()\n")));
-}
-
-Simple_Event_Handler::~Simple_Event_Handler (void)
-{
- if (debug)
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("~Simple_Event_Handler()\n")));
-}
-
-int
-Simple_Event_Handler::handle_input (ACE_HANDLE)
-{
- if (debug)
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("Simple_Event_Handler::handle_input()\n")));
-
- this->notifies_--;
-
- if (this->notifies_ == 0)
- delete this;
-
- return 0;
-}
-
-class Event_Loop_Thread : public ACE_Task_Base
-{
-public:
-
- Event_Loop_Thread (ACE_Thread_Manager &thread_manager,
- ACE_Reactor &reactor,
- int extra_iterations_needed);
-
- int svc (void);
-
- ACE_Reactor &reactor_;
-
- int extra_iterations_needed_;
-};
-
-Event_Loop_Thread::Event_Loop_Thread (ACE_Thread_Manager &thread_manager,
- ACE_Reactor &reactor,
- int extra_iterations_needed)
- : ACE_Task_Base (&thread_manager),
- reactor_ (reactor),
- extra_iterations_needed_ (extra_iterations_needed)
-{
-}
-
-int
-Event_Loop_Thread::svc (void)
-{
- int counter = 0;
-
- // Simply run the event loop.
- this->reactor_.owner (ACE_Thread::self ());
-
- while (1)
- {
- counter++;
-
- if (debug)
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("Event Loop iteration %d....\n"),
- counter));
-
- this->reactor_.handle_events ();
-
- if (counter ==
- iterations + this->extra_iterations_needed_)
- break;
- }
-
- return 0;
-}
-
-void
-notify (ACE_Reactor &reactor,
- ACE_Event_Handler *event_handler,
- int extra_iterations_needed)
-{
- ACE_Thread_Manager thread_manager;
-
- // Create a thread to run the event loop.
- Event_Loop_Thread event_loop_thread (thread_manager,
- reactor,
- extra_iterations_needed);
-
- int result =
- event_loop_thread.activate ();
- ACE_ASSERT (result == 0);
-
- for (int i = 0;
- i < iterations;
- ++i)
- {
- ACE_OS::sleep (ACE_Time_Value (0, 500 * 1000));
-
- result = reactor.notify (event_handler,
- ACE_Event_Handler::READ_MASK);
-
- ACE_ASSERT (result == 0);
- }
-
- thread_manager.wait ();
-}
-
-template <class REACTOR_IMPLEMENTATION>
-class test
-{
-public:
- test (int extra_iterations_needed);
-};
-
-template <class REACTOR_IMPLEMENTATION>
-test<REACTOR_IMPLEMENTATION>::test (int extra_iterations_needed)
-{
- if (test_empty_notify)
- {
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n\nTesting empty notifies...\n\n")));
-
- REACTOR_IMPLEMENTATION impl;
- ACE_Reactor reactor (&impl, 0);
-
- notify (reactor,
- 0,
- extra_iterations_needed);
- }
-
-
- if (test_simple_notify)
- {
- ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\n\nTesting simple notifies...\n\n")));
-
- REACTOR_IMPLEMENTATION impl;
- ACE_Reactor reactor (&impl, 0);
-
- Simple_Event_Handler *simple_event_handler =
- new Simple_Event_Handler (iterations);
-
- notify (reactor,
- simple_event_handler,
- extra_iterations_needed);
- }
-
- if (test_reference_counted_notify)
- {
- ACE_DEBUG ((LM_DEBUG,
- ACE_TEXT ("\n\nTesting reference counted notifies...\n\n")));
-
- REACTOR_IMPLEMENTATION impl;
- ACE_Reactor reactor (&impl, 0);
-
- Reference_Counted_Event_Handler *reference_counted_event_handler =
- new Reference_Counted_Event_Handler;
-
- ACE_Event_Handler_var safe_event_handler (reference_counted_event_handler);
-
- notify (reactor,
- reference_counted_event_handler,
- extra_iterations_needed);
- }
-}
-
-static int
-parse_args (int argc, ACE_TCHAR *argv[])
-{
- ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("a:b:c:d:e:f:g:z:"));
-
- int cc;
- while ((cc = get_opt ()) != -1)
- {
- switch (cc)
- {
- case 'a':
- test_select_reactor = ACE_OS::atoi (get_opt.opt_arg ());
- break;
- case 'b':
- test_tp_reactor = ACE_OS::atoi (get_opt.opt_arg ());
- break;
- case 'c':
- test_wfmo_reactor = ACE_OS::atoi (get_opt.opt_arg ());
- break;
- case 'd':
- test_dev_poll_reactor = ACE_OS::atoi (get_opt.opt_arg ());
- break;
- case 'e':
- test_empty_notify = ACE_OS::atoi (get_opt.opt_arg ());
- break;
- case 'f':
- test_simple_notify = ACE_OS::atoi (get_opt.opt_arg ());
- break;
- case 'g':
- test_reference_counted_notify = ACE_OS::atoi (get_opt.opt_arg ());
- break;
- case 'z':
- debug = ACE_OS::atoi (get_opt.opt_arg ());
- break;
- default:
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("\nusage: %s \n\n")
- ACE_TEXT ("\t[-a test Select Reactor] (defaults to %d)\n")
- ACE_TEXT ("\t[-b test TP Reactor] (defaults to %d)\n")
- ACE_TEXT ("\t[-c test WFMO Reactor] (defaults to %d)\n")
- ACE_TEXT ("\t[-d test Dev Poll Reactor] (defaults to %d)\n")
- ACE_TEXT ("\t[-e test empty notify] (defaults to %d)\n")
- ACE_TEXT ("\t[-f test simple notify] (defaults to %d)\n")
- ACE_TEXT ("\t[-g test reference counted notify] (defaults to %d)\n")
- ACE_TEXT ("\t[-z debug] (defaults to %d)\n")
- ACE_TEXT ("\n"),
- argv[0],
- test_select_reactor,
- test_tp_reactor,
- test_wfmo_reactor,
- test_dev_poll_reactor,
- test_empty_notify,
- test_simple_notify,
- test_reference_counted_notify,
- debug));
- return -1;
- }
- }
-
- return 0;
-}
-
-int
-run_main (int argc, ACE_TCHAR *argv[])
-{
- ACE_START_TEST (ACE_TEXT ("MT_Reference_Counted_Notify_Test"));
-
- // Validate options.
- int result =
- parse_args (argc, argv);
- if (result != 0)
- return result;
-
- int extra_iterations_needed = 1;
- int extra_iterations_not_needed = 0;
-
- if (test_select_reactor)
- {
- ACE_DEBUG ((LM_DEBUG,
- "\n\nTesting Select Reactor....\n\n"));
-
- test<ACE_Select_Reactor> test (extra_iterations_not_needed);
- ACE_UNUSED_ARG (test);
- }
-
- if (test_tp_reactor)
- {
- ACE_DEBUG ((LM_DEBUG,
- "\n\nTesting TP Reactor....\n\n"));
-
- test<ACE_TP_Reactor> test (extra_iterations_not_needed);
- ACE_UNUSED_ARG (test);
- }
-
-#if defined (ACE_HAS_EVENT_POLL)
-
- if (test_dev_poll_reactor)
- {
- ACE_DEBUG ((LM_DEBUG,
- "\n\nTesting Dev Poll Reactor....\n\n"));
-
- test<ACE_Dev_Poll_Reactor> test (extra_iterations_not_needed);
- ACE_UNUSED_ARG (test);
- }
-
-#endif
-
-#if defined (ACE_WIN32)
-
- if (test_wfmo_reactor)
- {
- ACE_DEBUG ((LM_DEBUG,
- "\n\nTesting WFMO Reactor....\n\n"));
-
- test<ACE_WFMO_Reactor> test (extra_iterations_needed);
- ACE_UNUSED_ARG (test);
- }
-
-#else /* ACE_WIN32 */
-
- ACE_UNUSED_ARG (extra_iterations_needed);
-
-#endif /* ACE_WIN32 */
-
- ACE_END_TEST;
-
- return 0;
-}
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-template class test<ACE_Select_Reactor>;
-template class test<ACE_TP_Reactor>;
-#if defined (ACE_WIN32)
-template class test<ACE_WFMO_Reactor>;
-#endif /* ACE_WIN32 */
-#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-#pragma instantiate test<ACE_Select_Reactor>
-#pragma instantiate test<ACE_TP_Reactor>
-#if defined (ACE_WIN32)
-#pragma instantiate test<ACE_WFMO_Reactor>
-#endif /* ACE_WIN32 */
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
-
-#else /* ACE_HAS_THREADS */
-
-int
-run_main (int, ACE_TCHAR *[])
-{
- ACE_START_TEST (ACE_TEXT ("MT_Reference_Counted_Notify_Test"));
-
- ACE_ERROR ((LM_INFO,
- ACE_TEXT ("threads not supported on this platform\n")));
-
- ACE_END_TEST;
-
- return 0;
-}
-
-#endif /* ACE_HAS_THREADS */