summaryrefslogtreecommitdiff
path: root/ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp
diff options
context:
space:
mode:
authorJohnny Willemsen <jwillemsen@remedy.nl>2011-03-24 13:16:05 +0000
committerJohnny Willemsen <jwillemsen@remedy.nl>2011-03-24 13:16:05 +0000
commitb344c17ae152f6df1d1da81e3b2a68e131a86d49 (patch)
tree5bb72d5f3dfa2bc68544c387f81f06b9d77ac00c /ACE/tests/SOCK_SEQPACK_SCTP_Test.cpp
parent528887fdce077c419d5ae415c5d9d3a4a47b8727 (diff)
downloadATCD-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.cpp382
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.
+ *
+ *