diff options
Diffstat (limited to 'tests/SOCK_Dgram_Bcast_Test.cpp')
-rw-r--r-- | tests/SOCK_Dgram_Bcast_Test.cpp | 256 |
1 files changed, 0 insertions, 256 deletions
diff --git a/tests/SOCK_Dgram_Bcast_Test.cpp b/tests/SOCK_Dgram_Bcast_Test.cpp deleted file mode 100644 index fc8149bce3c..00000000000 --- a/tests/SOCK_Dgram_Bcast_Test.cpp +++ /dev/null @@ -1,256 +0,0 @@ -// $Id$ -// =========================================================================== -// -// = LIBRARY -// tests -// -// = FILENAME -// SOCK_Dgram_Bcast_Test.cpp -// -// = DESCRIPTION -// This simple broadcast test is intended to check if ACE is capable -// of sending and receiving broadcasts. In single host environment most -// errors related to invalid broadcast initialization will not manifest -// themself, because usually broadcast on localhost interface works -// correctly. For this reason one should run also this test on two distinct -// hosts in single LAN. -// Tests that a call to open with an any address binds to the any address -// for the protocol passed in. -// -// = AUTHOR -// Marek Brudka (mbrudka@elka.pw.edu.pl) -// -// ========================================================================== - -#include "test_config.h" -#include "ace/OS_NS_string.h" -#include "ace/OS_NS_unistd.h" -#include "ace/OS_NS_sys_time.h" -#include "ace/Log_Msg.h" -#include "ace/Get_Opt.h" -#include "ace/SOCK_Dgram_Bcast.h" -#include "ace/Thread_Manager.h" -#include "ace/Process.h" -#include "ace/Process_Manager.h" - -static int dgram_port = 14521; -static int dgrams_no = 10; -static ACE_Time_Value dgram_recv_timeout( 5, 0 ); -static ACE_exitcode receiver_exit_code = 0; - -/*\brief Create and send single datagram - \param socket broadcast over this socket - \param datagram_no datagram identifier - \return -1 if error, 0 if OK -*/ -int send_datagram (ACE_SOCK_Dgram_Bcast &socket, int datagram_no) -{ - static char dgram_buffer[BUFSIZ]; - - ACE_OS::snprintf (dgram_buffer, sizeof(dgram_buffer) - 1, - "Datagram %d", datagram_no); - if (socket.send (dgram_buffer, - ACE_OS::strlen (dgram_buffer) + 1, - dgram_port) < 0 ) - ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), - ACE_TEXT ("Cannot broadcast datagram")), -1); - else - ACE_DEBUG ((LM_INFO, ACE_TEXT ("%C sent\n"), dgram_buffer)); - return 0; -} - -/*\brief Send a sequence of datagrams with 1 second period - \note Th function employs dgram_port and dgrams_no global variables - \retval -1 if error - \retval 0 if sent -*/ -int run_sender( ) -{ - ACE_DEBUG ((LM_INFO, - ACE_TEXT ("Sending %d datagrams on port %d\n"), - dgrams_no, - dgram_port)); - ACE_SOCK_Dgram_Bcast socket; - - if (socket.open (ACE_Addr::sap_any) != -1) - { - while (dgrams_no-- != 0) - { - if (send_datagram (socket, dgrams_no) < 0) - break; - ACE_OS::sleep (1); - } - socket.close (); - return (0); - } - - ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), - ACE_TEXT ("Cannot open broadcast socket")), -1); -} - -/*\brief Receive single datagram - \note The function employes dgram_port and dgram_recv_timeout variables - \retval -1 if not received, - \retval 0 received a datagrams -*/ -int run_receiver () -{ - ACE_DEBUG - ((LM_INFO, - ACE_TEXT ("Receiving datagrams from port %d with timeout %d ms\n"), - dgram_port, dgram_recv_timeout.msec ())); - - ACE_SOCK_Dgram socket; - ACE_INET_Addr remote ; - static char dgram_buffer[BUFSIZ]; - - if (socket.open (ACE_INET_Addr (dgram_port)) != -1) - if (socket.recv (dgram_buffer, sizeof (dgram_buffer), - remote, 0, &dgram_recv_timeout) > 0) - { - ACE_DEBUG ((LM_INFO, ACE_TEXT ("%C received\n"), dgram_buffer)); - return 0; - } - else - ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), - ACE_TEXT ("Cannot receive datagrams")), -1); - - ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), - ACE_TEXT ("Cannot open broadcast socket")), -1); -} - -#if !defined (ACE_HAS_PROCESS_SPAWN) && defined (ACE_HAS_THREADS) -/* \brief Thread main function to run run_receiver function - \note run_receiver return valu is stored in receiver_exit_code global variable -*/ -static ACE_THR_FUNC_RETURN run_thread_receiver (void *) -{ - receiver_exit_code = run_receiver (); - return 0; -} -#endif /* !defined (ACE_HAS_PROCESS_SPAWN) && defined (ACE_HAS_THREADS) */ - -/* \brief Just runs automatic tests - -Function sends a number of datagrams, spawns child thread or process and -tries to receive at least one datagram. -\retval 0 datagram was received -\retval -1 datagram was not received -*/ -int run_auto_test (const ACE_TCHAR *prog_name) -{ -#if defined (ACE_HAS_PROCESS_SPAWN) - ACE_DEBUG ((LM_INFO, ACE_TEXT ("Running auto_tests in process mode\n"))); - - ACE_Process_Options opts; - pid_t child_pid; - opts.command_line (ACE_TEXT ("%s -p %d -t %d -a -r"), - prog_name, dgram_port, dgram_recv_timeout.msec ()); - if ((child_pid = ACE_Process_Manager::instance ()->spawn (opts)) == -1) - ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("spawn_n()")), -1); - -#elif defined (ACE_HAS_THREADS) - ACE_UNUSED_ARG (prog_name); - ACE_DEBUG ((LM_INFO, ACE_TEXT ("Running auto_tests in thread mode\n"))); - if (ACE_Thread_Manager::instance ()->spawn (run_thread_receiver) == -1) - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("%p\n"), - ACE_TEXT ("spawn_n ()")), -1); -#else - ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("Cannot run in auto_test mode without fork or threads.\n")), - -1); -#endif /* defined (ACE_HAS_PROCESS_SPAWN) */ - - ACE_DEBUG ((LM_INFO, - ACE_TEXT ("Sending datagrams on port %d in auto_test mode\n"), - dgram_port)); - - ACE_SOCK_Dgram_Bcast socket; - - if (socket.open (ACE_Addr::sap_any) != -1) - { - // send datagrams until child finishes - while (1) - { - send_datagram (socket, dgrams_no--); - ACE_Time_Value child_timeout (1); -#if defined (ACE_HAS_PROCESS_SPAWN) - - if (ACE_Process_Manager::instance ()->wait (child_pid, - child_timeout, - &receiver_exit_code) == child_pid) - break; -#else /* ACE_HAS_THREAD */ - // sleep 1 second or wait for child thread - child_timeout += ACE_OS::gettimeofday () ; - if (ACE_Thread_Manager::instance ()->wait (&child_timeout) == 0) - break; -#endif - } - socket.close (); - ACE_DEBUG ((LM_INFO, ACE_TEXT ("Child finished with %d exit code\n"), - receiver_exit_code)); - } - else - ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), - ACE_TEXT ("Cannot open broadcast socket")), -1); - return (receiver_exit_code); -} - -void print_usage (void) -{ - printf("Usage:SOCK_Dgram_Bast_Test [-p port] [-n dgrams_no] [-t timeout_ms] [-s] [-r]\n" - "\tp broadcast port [14521]\n" - "\tn number of datagrams to broadcast [30] (<0 infinite)\n" - "\tt timeout in seconds for receive [5] (<=0 infinite)\n" - "\ts send datagrams and exit\n" - "\tr receive one datagram and exit\n\n" - "\t run auto-test when no r and s option is passed\n" - "\t test failures are minifested by -1 exit value, otherwise 0\n"); -} - -int run_main (int argc, ACE_TCHAR *argv[]) -{ - // parse options and run in appropriate mode - int opt = 0; - int auto_test_recv = 0; - int result = 0; - ACE_Get_Opt opts (argc, argv, ACE_TEXT ("p:t:n:sra")); - while ((opt = opts ()) != -1) - switch (opt) - { - case 'a': - auto_test_recv = 1; - break; - case 's': - return (run_sender()); - case 'r': - { - if (auto_test_recv) - { - ACE_START_TEST (ACE_TEXT ("SOCK_Dgram_Bcast_Test_Child")); - result = run_receiver (); - ACE_END_TEST; - return result; - } - return (run_receiver ()); - } - case 'n': - dgrams_no = ACE_OS::atoi (opts.opt_arg ()); - break; - case 't': - dgram_recv_timeout.msec (ACE_OS::atoi (opts.opt_arg ())); - break; - case 'p': - dgram_port = ACE_OS::atoi (opts.opt_arg ()); - break; - default: - print_usage (); - return -1; - } - ACE_START_TEST (ACE_TEXT ("SOCK_Dgram_Bcast_Test")); - result = run_auto_test (ACE_TEXT ("SOCK_Dgram_Bcast_Test")); - ACE_END_TEST; - return result; -} |