Package org.codehaus.spice.netserve.connection.impl

Source Code of org.codehaus.spice.netserve.connection.impl.ConnectionAcceptorTestCase

/*
* Copyright (C) The Spice Group. All rights reserved.
*
* This software is published under the terms of the Spice
* Software License version 1.1, a copy of which has been included
* with this distribution in the LICENSE.txt file.
*/
package org.codehaus.spice.netserve.connection.impl;

import java.net.ServerSocket;

import junit.framework.TestCase;

/**
*
* @author Peter Donald
* @version $Revision: 1.2 $ $Date: 2004/03/21 23:42:59 $
*/
public class ConnectionAcceptorTestCase
   extends TestCase
{
   public void testNullConfigInCtor()
      throws Exception
   {
      try
      {
         new ConnectionAcceptor( null,
                                 new NullAcceptorMonitor() );
      }
      catch ( final NullPointerException npe )
      {
         assertEquals( "npe.message", "config", npe.getMessage() );
         return;
      }
      fail( "Expected to fail due to NPE for config" );
   }

   public void testNullMonitorInCtor()
      throws Exception
   {
      try
      {
         new ConnectionAcceptor( new AcceptorConfig( "name",
                                                     new ServerSocket(),
                                                     new MockSocketConnectionHandler() ),
                                 null );
      }
      catch ( NullPointerException npe )
      {
         assertEquals( "npe.message", "monitor", npe.getMessage() );
         return;
      }
      fail( "Expected to fail due to NPE for monitor" );
   }

   public void testShutdownServerSocketCausesError()
      throws Exception
   {
      final RecordingAcceptorMonitor monitor = new RecordingAcceptorMonitor();
      final ConnectionAcceptor acceptor =
         new ConnectionAcceptor( new AcceptorConfig( "name",
                                                     new ExceptOnCloseServerSocket(),
                                                     new MockSocketConnectionHandler() ),
                                 monitor );
      assertEquals( "errorClosingServerSocket pre-shutdownServerSocket()",
                    null,
                    monitor.getErrorClosingServerSocket() );
      acceptor.shutdownServerSocket();
      assertEquals( "errorClosingServerSocket post-shutdownServerSocket()",
                    ExceptOnCloseServerSocket.EXCEPTION,
                    monitor.getErrorClosingServerSocket() );
   }

   public void testShutdownServerSocket()
      throws Exception
   {
      final RecordingAcceptorMonitor monitor = new RecordingAcceptorMonitor();
      final ConnectionAcceptor acceptor =
         new ConnectionAcceptor( new AcceptorConfig( "name",
                                                     new ServerSocket(),
                                                     new MockSocketConnectionHandler() ),
                                 monitor );
      assertEquals( "errorClosingServerSocket pre-shutdownServerSocket()",
                    null,
                    monitor.getErrorClosingServerSocket() );
      acceptor.shutdownServerSocket();
      assertEquals( "errorClosingServerSocket post-shutdownServerSocket()",
                    null,
                    monitor.getErrorClosingServerSocket() );
   }

   public void testExceptionOnAccept()
      throws Exception
   {
      final RecordingAcceptorMonitor monitor = new RecordingAcceptorMonitor();
      final ConnectionAcceptor acceptor =
         new ConnectionAcceptor( new AcceptorConfig( "name",
                                                     new ExceptOnAcceptServerSocket( false ),
                                                     new MockSocketConnectionHandler() ),
                                 monitor );
      assertEquals( "getErrorAcceptingConnection pre-shutdownServerSocket()",
                    null,
                    monitor.getErrorAcceptingConnection() );
      final Thread thread = startAcceptor( acceptor );
      waitUntilStarted( acceptor );
      waitUntilListening( monitor );

      assertEquals( "getErrorAcceptingConnection post-shutdownServerSocket()",
                    ExceptOnAcceptServerSocket.ERROR_EXCEPTION,
                    monitor.getErrorAcceptingConnection() );

      acceptor.close( 0 );
      thread.join();
   }

   public void testInteruptOnAccept()
      throws Exception
   {
      final RecordingAcceptorMonitor monitor = new RecordingAcceptorMonitor();
      final ConnectionAcceptor acceptor =
         new ConnectionAcceptor( new AcceptorConfig( "name",
                                                     new ExceptOnAcceptServerSocket( true ),
                                                     new MockSocketConnectionHandler() ),
                                 monitor );
      final Thread thread = startAcceptor( acceptor );
      waitUntilStarted( acceptor );
      waitUntilListening( monitor );

      try
      {
         Thread.sleep( 30 );
      }
      catch ( final InterruptedException e )
      {
      }
      assertTrue( "1 < monitor.getListenCount", 1 < monitor.getListenCount() );

      acceptor.close( 0 );
      thread.join();
   }

   public void _testNormalHandlerAccept()
      throws Exception
   {
      final RecordingAcceptorMonitor monitor = new RecordingAcceptorMonitor();
      final BlockingServerSocket serverSocket = new BlockingServerSocket();
      final MockSocketConnectionHandler handler = new MockSocketConnectionHandler();
      final ConnectionAcceptor acceptor =
         new ConnectionAcceptor( new AcceptorConfig( "name",
                                                     serverSocket,
                                                     handler ),
                                 monitor );
      final Thread thread = startAcceptor( acceptor );
      waitUntilStarted( acceptor );
      waitUntilListening( monitor );
      serverSocket.unlock();
      try
      {
         Thread.sleep( 30 );
      }
      catch ( final InterruptedException e )
      {
      }
      assertEquals( "handler.getSocket()",
                    BlockingServerSocket.SOCKET,
                    handler.getSocket() );
      acceptor.close( 50 );
      serverSocket.unlock();
      thread.join();
   }

   public void testAcceptAfterClose()
      throws Exception
   {
      final RecordingAcceptorMonitor monitor = new RecordingAcceptorMonitor();
      final BlockingServerSocket serverSocket = new BlockingServerSocket();
      final MockSocketConnectionHandler handler = new MockSocketConnectionHandler();
      final ConnectionAcceptor acceptor =
         new ConnectionAcceptor( new AcceptorConfig( "name",
                                                     serverSocket,
                                                     handler ),
                                 monitor );
      final Thread thread = startAcceptor( acceptor );
      waitUntilStarted( acceptor );
      waitUntilListening( monitor );
      acceptor.close( 50 );
      serverSocket.unlock();
      waitUntilListening( monitor );
      assertEquals( "handler.getSocket()",
                    null,
                    handler.getSocket() );
      serverSocket.unlock();
      thread.join();
   }

   private void waitUntilListening( final RecordingAcceptorMonitor monitor )
   {
      while ( 0 == monitor.getListenCount() )
      {
         try
         {
            Thread.sleep( 30 );
         }
         catch ( final InterruptedException e )
         {
         }
      }
   }

   private Thread startAcceptor( final ConnectionAcceptor acceptor )
   {
      final Thread thread = new Thread( acceptor );
      thread.start();
      return thread;
   }

   private void waitUntilStarted( final ConnectionAcceptor acceptor )
   {
      while ( !acceptor.isRunning() )
      {
         try
         {
            Thread.sleep( 30 );
         }
         catch ( final InterruptedException e )
         {
         }
      }
   }
}
TOP

Related Classes of org.codehaus.spice.netserve.connection.impl.ConnectionAcceptorTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.