diff options
author | Johnny Willemsen <jwillemsen@remedy.nl> | 2011-03-24 13:16:05 +0000 |
---|---|---|
committer | Johnny Willemsen <jwillemsen@remedy.nl> | 2011-03-24 13:16:05 +0000 |
commit | b344c17ae152f6df1d1da81e3b2a68e131a86d49 (patch) | |
tree | 5bb72d5f3dfa2bc68544c387f81f06b9d77ac00c /ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp | |
parent | 528887fdce077c419d5ae415c5d9d3a4a47b8727 (diff) | |
download | ATCD-b344c17ae152f6df1d1da81e3b2a68e131a86d49.tar.gz |
Thu Mar 24 13:10:02 UTC 2011 Johnny Willemsen <jwillemsen@remedy.nl>
* tests/ACE_Init_Test.h:
* tests/ACE_Init_Test_Resource.h:
* tests/ACE_Init_Test_StdAfx.h:
* tests/Aio_Platform_Test.cpp:
* tests/Atomic_Op_Test.cpp:
* tests/Auto_Event_Test.cpp:
* tests/Auto_IncDec_Test.cpp:
* tests/Barrier_Test.cpp:
* tests/Based_Pointer_Test.cpp:
* tests/Based_Pointer_Test_Lib.cpp:
* tests/Basic_Types_Test.cpp:
* tests/Bound_Ptr_Test.h:
* tests/Buffer_Stream_Test.cpp:
* tests/Bug_2434_Regression_Test.cpp:
* tests/Bug_2653_Regression_Test.cpp:
* tests/Bug_2659_Regression_Test.cpp:
* tests/Bug_3539_Regression_Test.cpp:
* tests/Bug_3729_Regression_Test.cpp:
* tests/CDR_Array_Test.cpp:
* tests/CDR_File_Test.cpp:
* tests/CDR_Test.cpp:
* tests/Cache_Map_Manager_Test.h:
* tests/Cache_Map_Manager_Test.cpp:
* tests/Cached_Accept_Conn_Test.h:
* tests/Cached_Accept_Conn_Test.cpp:
* tests/Cached_Allocator_Test.cpp:
* tests/Cached_Conn_Test.h:
* tests/Cached_Conn_Test.cpp:
* tests/Capabilities_Test.cpp:
* tests/Codecs_Test.cpp:
* tests/Collection_Test.h:
* tests/Collection_Test.cpp:
* tests/Config_Test.h:
* tests/Config_Test.cpp:
* tests/Conn_Test.h:
* tests/Conn_Test.cpp:
* tests/DLL_Test.cpp:
* tests/DLL_Test_Impl.h:
* tests/DLL_Test_Impl.cpp:
* tests/DLList_Test.cpp:
* tests/Dirent_Test.cpp:
* tests/Dynamic_Priority_Test.cpp:
* tests/Dynamic_Test.cpp:
* tests/Enum_Interfaces_Test.cpp:
* tests/FIFO_Test.cpp:
* tests/FlReactor_Test.cpp:
* tests/Framework_Component_DLL.h:
* tests/Framework_Component_DLL.cpp:
* tests/Framework_Component_Test.h:
* tests/Future_Set_Test.cpp:
* tests/Future_Test.cpp:
* tests/Handle_Set_Test.cpp:
* tests/Hash_Map_Bucket_Iterator_Test.cpp:
* tests/Hash_Map_Manager_Test.cpp:
* tests/Hash_Multi_Map_Manager_Test.cpp:
* tests/High_Res_Timer_Test.cpp:
* tests/INET_Addr_Test.cpp:
* tests/IOStream_Test.cpp:
* tests/Intrusive_Auto_Ptr_Test.cpp:
* tests/Lazy_Map_Manager_Test.cpp:
* tests/Log_Msg_Backend_Test.cpp:
* tests/Log_Msg_Test.cpp:
* tests/Logging_Strategy_Test.cpp:
* tests/MEM_Stream_Test.h:
* tests/MEM_Stream_Test.cpp:
* tests/MM_Shared_Memory_Test.cpp:
* tests/MT_NonBlocking_Connect_Test.cpp:
* tests/MT_Reactor_Timer_Test.h:
* tests/MT_Reactor_Timer_Test.cpp:
* tests/MT_Reactor_Upcall_Test.cpp:
* tests/MT_Reference_Counted_Event_Handler_Test.cpp:
* tests/MT_Reference_Counted_Notify_Test.cpp:
* tests/MT_SOCK_Test.cpp:
* tests/Main.cpp:
* tests/Malloc_Test.h:
* tests/Malloc_Test.cpp:
* tests/Manual_Event_Test.cpp:
* tests/Map_Manager_Test.cpp:
* tests/Map_Test.h:
* tests/Map_Test.cpp:
* tests/Max_Default_Port_Test.h:
* tests/Max_Default_Port_Test.cpp:
* tests/Mem_Map_Test.cpp:
* tests/Message_Block_Test.cpp:
* tests/Message_Queue_Notifications_Test.cpp:
* tests/Message_Queue_Test.cpp:
* tests/Message_Queue_Test_Ex.cpp:
* tests/Missing_Svc_Conf_Test.cpp:
* tests/Multihomed_INET_Addr_Test.cpp:
* tests/Multihomed_INET_Addr_Test_IPV6.cpp:
* tests/NDDS_Timer_Test.cpp:
* tests/Naming_Test.cpp:
* tests/Network_Adapters_Test.h:
* tests/Network_Adapters_Test.cpp:
* tests/New_Fail_Test.cpp:
* tests/NonBlocking_Conn_Test.h:
* tests/NonBlocking_Conn_Test.cpp:
* tests/Notify_Performance_Test.cpp:
* tests/Object_Manager_Flipping_Test.cpp:
* tests/Object_Manager_Test.cpp:
* tests/Obstack_Test.cpp:
* tests/OrdMultiSet_Test.cpp:
* tests/Pipe_Test.cpp:
* tests/Priority_Buffer_Test.cpp:
* tests/Priority_Reactor_Test.h:
* tests/Priority_Reactor_Test.cpp:
* tests/Priority_Task_Test.cpp:
* tests/Proactor_Test.h:
* tests/Proactor_Timer_Test.cpp:
* tests/Process_Env_Test.cpp:
* tests/Process_Manager_Test.cpp:
* tests/Process_Manual_Event_Test.cpp:
* tests/Process_Mutex_Test.cpp:
* tests/Process_Semaphore_Test.cpp:
* tests/Process_Strategy_Test.h:
* tests/Process_Strategy_Test.cpp:
* tests/Process_Test.cpp:
* tests/QtReactor_Test.cpp:
* tests/RB_Tree_Test.h:
* tests/RB_Tree_Test.cpp:
* tests/RW_Process_Mutex_Test.cpp:
* tests/Reactor_Dispatch_Order_Test.cpp:
* tests/Reactor_Dispatch_Order_Test_Dev_Poll.cpp:
* tests/Reactor_Exceptions_Test.cpp:
* tests/Reactor_Fairness_Test.h:
* tests/Reactor_Fairness_Test.cpp:
* tests/Reactor_Notify_Test.cpp:
* tests/Reactor_Performance_Test.h:
* tests/Reactor_Performance_Test.cpp:
* tests/Reactor_Registration_Test.cpp:
* tests/Reactor_Timer_Test.cpp:
* tests/Reactors_Test.cpp:
* tests/Reader_Writer_Test.cpp:
* tests/Recursive_Condition_Bug_Test.cpp:
* tests/Recursive_Condition_Test.cpp:
* tests/Recursive_Mutex_Test.cpp:
* tests/Refcounted_Auto_Ptr_Test.h:
* tests/Refcounted_Event_Handler_Test_DevPoll.cpp:
* tests/Reference_Counted_Event_Handler_Test.cpp:
* tests/Reverse_Lock_Test.cpp:
* tests/SOCK_Connector_Test.cpp:
* tests/SOCK_Dgram_Bcast_Test.cpp:
* tests/SOCK_Dgram_Test.cpp:
* tests/SOCK_Netlink_Test.cpp:
* tests/SOCK_SEQPACK_SCTP_Test.cpp:
* tests/SOCK_Send_Recv_Test.cpp:
* tests/SOCK_Test.cpp:
* tests/SPIPE_Test.cpp:
* tests/SSL/Main.cpp:
* tests/SSL/SSL_Asynch_Stream_Test.cpp:
* tests/SSL/Thread_Pool_Reactor_SSL_Test.h:
* tests/SSL/Thread_Pool_Reactor_SSL_Test.cpp:
* tests/SString_Test.cpp:
* tests/SV_Shared_Memory_Test.cpp:
* tests/Semaphore_Test.cpp:
* tests/Sig_Handlers_Test.cpp:
* tests/Signal_Test.cpp:
* tests/Sigset_Ops_Test.cpp:
* tests/Simple_Message_Block_Test.cpp:
* tests/Singleton_Test.cpp:
* tests/Svc_Handler_Test.cpp:
* tests/TP_Reactor_Test.h:
* tests/TP_Reactor_Test.cpp:
* tests/TSS_Static_Test.cpp:
* tests/TSS_Test.cpp:
* tests/TSS_Test_Errno.h:
* tests/Task_Ex_Test.cpp:
* tests/Task_Test.cpp:
* tests/Thread_Attrs_Test.cpp:
* tests/Thread_Creation_Threshold_Test.cpp:
* tests/Thread_Manager_Test.cpp:
* tests/Thread_Mutex_Test.cpp:
* tests/Thread_Pool_Reactor_Resume_Test.h:
* tests/Thread_Pool_Reactor_Resume_Test.cpp:
* tests/Thread_Pool_Reactor_Test.h:
* tests/Thread_Pool_Reactor_Test.cpp:
* tests/Thread_Pool_Test.cpp:
* tests/Time_Service_Test.cpp:
* tests/Time_Value_Test.cpp:
* tests/Timeprobe_Test.cpp:
* tests/Timer_Cancellation_Test.cpp:
* tests/Timer_Queue_Reference_Counting_Test.cpp:
* tests/Timer_Queue_Test.cpp:
* tests/TkReactor_Test.cpp:
* tests/Tokens_Test.cpp:
* tests/UPIPE_SAP_Test.cpp:
* tests/UUID_Test.cpp:
* tests/Unbounded_Set_Test.cpp:
* tests/Unload_libACE.cpp:
* tests/Upgradable_RW_Test.h:
* tests/Upgradable_RW_Test.cpp:
* tests/Vector_Test.cpp:
* tests/WFMO_Reactor_Test.cpp:
* tests/XtAthenaReactor_Test.cpp:
* tests/XtMotifReactor_Test.cpp:
Converted to doxygen style of documentation
Diffstat (limited to 'ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp')
-rw-r--r-- | ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp | 382 |
1 files changed, 13 insertions, 369 deletions
diff --git a/ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp b/ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp index 895d2d374d5..953bb654b08 100644 --- a/ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp +++ b/ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp @@ -1,369 +1,13 @@ -// $Id$ -// -// *WARRANTY DISCLAIMER: LIMITATION OF LIABILITY. THE SOFTWARE AND -// CONTENT ARE PROVIDED "AS IS" WITH NO EXPRESS OR IMPLIED -// REPRESENTATIONS, GUARANTEES, OR WARRANTIES, INCLUDING BUT NOT LIMITED -// TO SUCH REPRESENTATION, GUARANTEES OR WARRANTIES REGARDING THE -// USABILITY, SUITABILITY, CONDITION, OPERATION OR ACCURACY THEREOF. * -// -// *ALL OTHER WARRANTIES AND CONDITIONS (EXPRESS, IMPLIED OR STATUTORY) -// ARE HEREBY DISCLAIMED, SUCH WARRANTIES AND CONDITIONS INCLUDING -// WITHOUT LIMITATION, ALL WARRANTIES AND CONDITIONS OF MERCHANTABILITY, -// TITLE, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, -// COMPATIBILITY, AND SECURITY OR ACCURACY.* -// -// ============================================================================ -// -// = LIBRARY -// tests -// -// = FILENAME -// SOCK_SEQPACK_SCTP_Test.cpp -// -// = DESCRIPTION -// Performs several tests on the ACE_SOCK_SEQPACK_Connector, -// ACE_SOCK_SEQPACK_Acceptor, and ACE_SOCK_SEQPACK_Association classes -// specifically for SCTP using the loopback interface. Attempts to -// replicate behavior of SOCK_Test.cpp, but integrating IPv6 tests -// directly. -// -// = AUTHOR -// Dave Craig <dwc@qualcomm.com> -// - -#include "test_config.h" -#include "ace/OS_NS_unistd.h" -#include "ace/OS_NS_sys_select.h" -#include "ace/OS_NS_sys_wait.h" -#include "ace/SOCK_SEQPACK_Connector.h" -#include "ace/SOCK_SEQPACK_Acceptor.h" -#include "ace/Thread_Manager.h" -#include "ace/Handle_Set.h" - -#define TTCPPORT 5001 -#define BYTE_MESG 0xcd - -struct tdesc { - ACE_Thread_Semaphore *tsemap; - bool ipv6_test; -}; - -typedef struct tdesc tdesc_t; - -#ifdef ACE_WIN64 -// This arg is ignored on Windows and causes pointer truncation -// warnings on 64-bit compiled. -#define SELECT_WIDTH(x) 0 -#else -#define SELECT_WIDTH(x) (x) -#endif - -ACE_THR_FUNC_RETURN -Server (void *arg) -{ - ACE_SOCK_SEQPACK_Acceptor *AcceptorSocket = - reinterpret_cast<ACE_SOCK_SEQPACK_Acceptor *> (arg); - - ACE_SOCK_SEQPACK_Association Stream; - - ACE_Handle_Set handle_set; - - const ACE_Time_Value def_timeout (ACE_DEFAULT_TIMEOUT); - - ACE_Time_Value tv (def_timeout); - - int select_width; - - int result; - - // - // Make sure AcceptorSocket is in nonblocking mode so as not to - // hang tests. - // - if (-1 == AcceptorSocket->enable (ACE_NONBLOCK)) - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p\n"), - ACE_TEXT ("AcceptorSocket.enable (ACE_NONBLOCK)"))); - - // - // Set up select to wait for I/O events. - // - handle_set.reset (); - handle_set.set_bit (AcceptorSocket->get_handle ()); - - select_width = SELECT_WIDTH(int (AcceptorSocket->get_handle ()) + 1); - - result = ACE_OS::select(select_width, - handle_set, - 0, - 0, - &tv); - - if (-1 == result) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p\n"), - ACE_TEXT ("select")), - 0); - if (0 == result) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT("(%P|%t) select timed out, shutting down\n")), - 0); - - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("(%P|%t) waiting for client to connect\n"))); - - while (-1 != AcceptorSocket->accept (Stream)) { - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("(%P|%t) client connected\n"))); - - // - // Enable non-blocking I/O. - // - if (Stream.enable (ACE_NONBLOCK)) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p\n"), - ACE_TEXT ("Stream.enable (ACE_NONBLOCK)")), - 0); - - unsigned char byte = BYTE_MESG; - - if (-1 == Stream.send_n (&byte, 1)) - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p\n"), - ACE_TEXT ("Stream.send_n"))); - - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("(%P|%t) byte sent\n"))); - - // - // Abruptly terminate the association. - // - if (-1 == Stream.abort ()) - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p\n"), - ACE_TEXT ("Association.abort"))); - - // - // Negative test: make sure that we cannot send on a closed association. - // - if (-1 != Stream.send_n (&byte, 1)) - //FUZZ: disable check_for_lack_ACE_OS - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) Negative test fail: Association") - ACE_TEXT(".send_n succeeded after abort()\n"))); - //FUZZ: enable check_for_lack_ACE_OS - - } - - // - // Close server socket. - // - if (-1 == AcceptorSocket->close ()) - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p\n"), - ACE_TEXT ("AcceptorSocket.close"))); - - return 0; -} - -ACE_THR_FUNC_RETURN -Client(void *arg) -{ - ACE_Multihomed_INET_Addr *ServerAddr = - reinterpret_cast<ACE_Multihomed_INET_Addr *> (arg); - - ACE_SOCK_SEQPACK_Connector Connector; - - ACE_SOCK_SEQPACK_Association Stream; - - ACE_Time_Value tv (ACE_DEFAULT_TIMEOUT); - - char b; - size_t bytes; - - if (-1 == Connector.connect (Stream, - *ServerAddr, - &tv, - ACE_Addr::sap_any, - 1)) - { - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p to %s:%d\n"), - ACE_TEXT ("Connector.connect"), - ServerAddr->get_host_name (), - ServerAddr->get_port_number ()), - 0); - } - - if (-1 == Stream.disable (ACE_NONBLOCK)) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p\n"), - ACE_TEXT ("Association.disable (ACE_NONBLOCK)"))); - } - - - if (-1 == Stream.recv_n (&b, 1, &tv, &bytes)) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p\n"), - ACE_TEXT ("Association.recv_n"))); - } - - if (1 == bytes) - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("(%P|%t) Client received %B bytes\n"), - bytes)); - else - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) Client received %B bytes; expected 1\n"), - bytes)); - - // - // Give server a little time to abort the association. - // - ACE_OS::sleep(1); - - // abort closes the connection, so the recv should either see a closed - // socket or some failure other than a timeout. - ssize_t cnt = Stream.recv_n (&b, 1, &tv, &bytes); - if (cnt > 0 || (cnt == -1 && errno == ETIME)) - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) Negative test failed; Association") - ACE_TEXT (".recv_n returned %b (w/ %m) after abort\n"), - cnt)); - - return 0; -} - -// -// Spawn server and client threads and then wait until they complete the -// test. There must be a timeout on the wait, so executable does not hang the -// tests indefinitely. -// -int -spawn_test(bool ipv6_test) -{ - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("(%P|%t) spawn_test started ipv6 %d\n"), - ipv6_test)); - - ACE_SOCK_SEQPACK_Acceptor AcceptorSocket; - - const ACE_TCHAR *addrstr = -#ifdef ACE_HAS_IPV6 - ipv6_test ? ACE_IPV6_LOCALHOST : ACE_LOCALHOST; -#else - ACE_LOCALHOST; -#endif /* ACE_HAS_IPV6 */ - ACE_Multihomed_INET_Addr ServerAddr (TTCPPORT, - addrstr -#ifdef ACE_HAS_IPV6 - ,1, - ipv6_test ? AF_INET6 : AF_INET -#endif /* ACE_HAS_IPV6 */ - ); - - if (-1 == AcceptorSocket.open (ServerAddr, 1)) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p\n"), - ACE_TEXT ("AcceptorSocket.open"))); - } - - if (-1 == AcceptorSocket.get_local_addr (ServerAddr)) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p\n"), - ACE_TEXT ("AcceptorSocket.get_local_addr"))); - } - -#ifndef ACE_LACKS_FORK - switch (ACE_OS::fork (ACE_TEXT ("child"))) - { - case -1: - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p"), - ACE_TEXT ("fork failed"))); - break; - case 0: - ACE_LOG_MSG->sync (ACE_TEXT ("SOCK_SEQPACK_SCTP_Test")); - Client (&ServerAddr); - ACE_OS::exit (0); - break; - default: - Server (reinterpret_cast<void *> (&AcceptorSocket)); - ACE_OS::wait (); - break; - } -#elif defined (ACE_HAS_THREADS) - if (-1 == ACE_Thread_Manager::instance ()->spawn - (Server, - reinterpret_cast<void *> (&AcceptorSocket), - THR_NEW_LWP | THR_DETACHED)) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p%a"), - ACE_TEXT ("thread create failed"))); - } - - if (-1 == ACE_Thread_Manager::instance ()->spawn - (Client, - reinterpret_cast<void *> (&ServerAddr), - THR_NEW_LWP | THR_DETACHED)) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) %p%a"), - ACE_TEXT ("thread create failed"))); - } - - ACE_Thread_Manager::instance ()->wait (); -#else /* ACE_LACKS_FORK && ! ACE_HAS_THREADS */ - ACE_ERROR ((LM_DEBUG, - ACE_TEXT ("(%P|%t)\n"), - ACE_TEXT ("only one thread may be run ") - ACE_TEXT ("in a process on this platform\n"))); -#endif /* ACE_LACKS_FORK && ! ACE_HAS_THREADS */ - - return 0; -} - -int -do_test(void) -{ - spawn_test(false); - -#ifdef ACE_HAS_IPV6 - spawn_test(true); -#endif - - return 0; -} - -int run_main (int argc, ACE_TCHAR *argv[]) -{ - ACE_UNUSED_ARG (argc); - ACE_UNUSED_ARG (argv); - - ACE_START_TEST (ACE_TEXT ("SOCK_SEQPACK_SCTP_Test")); - - // - // Check whether host OS has SCTP support before starting this test. - // If not, just pass because there is not a hope of testing - // SOCK_SEQPACK. - // - int status = 0; - -#ifdef ACE_HAS_SCTP - status = do_test(); -#else /* ! ACE_HAS_SCTP */ - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT("SCTP not supported by ACE.\n") - ACE_TEXT("This test will not do anything.\n"))); -#endif /* ! ACE_HAS_SCTP */ - - ACE_END_TEST; - - return status; -} - +//============================================================================= +/** + * @file SOCK_SEQPACK_SCTP_Test.cpp + * + * $Id$ + * + * Performs several tests on the ACE_SOCK_SEQPACK_Connector, + * ACE_SOCK_SEQPACK_Acceptor, and ACE_SOCK_SEQPACK_Association classes + * specifically for SCTP using the loopback interface. Attempts to + * replicate behavior of SOCK_Test.cpp, but integrating IPv6 tests + * directly. + * + * |