gdamour     2005/03/26 01:32:06

  Added:       modules/core/src/test/org/openejb/server
                        ServiceAccessControllerTest.java
  Log:

  ServiceAccessController supports now bit masking of IP addresses.
  
  Revision  Changes    Path
  1.1                  
openejb/modules/core/src/test/org/openejb/server/ServiceAccessControllerTest.java
  
  Index: ServiceAccessControllerTest.java
  ===================================================================
  /**
   * Redistribution and use of this software and associated documentation
   * ("Software"), with or without modification, are permitted provided
   * that the following conditions are met:
   *
   * 1. Redistributions of source code must retain copyright
   *    statements and notices.  Redistributions must also contain a
   *    copy of this document.
   *
   * 2. Redistributions in binary form must reproduce the
   *    above copyright notice, this list of conditions and the
   *    following disclaimer in the documentation and/or other
   *    materials provided with the distribution.
   *
   * 3. The name "OpenEJB" must not be used to endorse or promote
   *    products derived from this Software without prior written
   *    permission of The OpenEJB Group.  For written permission,
   *    please contact [EMAIL PROTECTED]
   *
   * 4. Products derived from this Software may not be called "OpenEJB"
   *    nor may "OpenEJB" appear in their names without prior written
   *    permission of The OpenEJB Group. OpenEJB is a registered
   *    trademark of The OpenEJB Group.
   *
   * 5. Due credit should be given to the OpenEJB Project
   *    (http://openejb.org/).
   *
   * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * Copyright 2001 (C) The OpenEJB Group. All Rights Reserved.
   *
   * $Id: ServiceAccessControllerTest.java,v 1.1 2005/03/26 06:32:06 gdamour 
Exp $
   */
  package org.openejb.server;
  
  import java.io.IOException;
  import java.net.InetAddress;
  import java.net.Socket;
  import java.net.UnknownHostException;
  import java.util.Properties;
  
  import junit.framework.TestCase;
  
  public class ServiceAccessControllerTest extends TestCase {
  
      public void testWrongIPAddressMask1() throws Exception {
          try {
              new ServiceAccessController.IPAddressMask("127.0.0.a");
              fail();
          } catch (IllegalArgumentException e) {
          }
      }
  
      public void testWrongIPAddressMask2() throws Exception {
          try {
              new ServiceAccessController.IPAddressMask("127.0.0.333");
              fail();
          } catch (IllegalArgumentException e) {
          }
      }
  
      public void testIPAddressMaskOK() throws Exception {
          ServiceAccessController.IPAddressMask mask = new 
ServiceAccessController.IPAddressMask("123.*.56.*");
          boolean match = mask.implies(InetAddress.getByAddress(new byte[] 
{123, 123, 56, 123}));
          assertTrue(match);
      }
      
      public void testIPAddressMaskNOK() throws Exception {
          ServiceAccessController.IPAddressMask mask = new 
ServiceAccessController.IPAddressMask("123.*.56.*");
          boolean match = mask.implies(InetAddress.getByAddress(new byte[] 
{123, 123, 57, 123}));
          assertFalse(match);
      }
      
      public void testServiceOKWithConstructor() throws Exception {
          ServiceAccessController.IPAddressMask[] masks = new 
ServiceAccessController.IPAddressMask[] {
                  new ServiceAccessController.IPAddressMask("123.*.56.*"),
                  new ServiceAccessController.IPAddressMask("123.*.57.*")
          };
          
          MockServerService mockServerService = new MockServerService();
          ServiceAccessController controller = new 
ServiceAccessController(null, mockServerService, masks);
          
          executeTestServiceOK(mockServerService, controller);
      }
      
      public void testServiceNOK() throws Exception {
          ServiceAccessController.IPAddressMask[] masks = new 
ServiceAccessController.IPAddressMask[] {
                  new ServiceAccessController.IPAddressMask("123.*.56.*"),
                  new ServiceAccessController.IPAddressMask("123.*.57.*")
          };
          
          MockServerService mockServerService = new MockServerService();
          ServiceAccessController controller = new 
ServiceAccessController(null, mockServerService, masks);
          
          executeTestServiceNOK(controller);
      }
  
      public void testServiceOKWithInit() throws Exception {
          Properties properties = new Properties();
          properties.put("only_from", "123.*.56.*,123.*.57.*");
          
          MockServerService mockServerService = new MockServerService();
          ServiceAccessController controller = new 
ServiceAccessController(mockServerService);
          controller.init(properties);
          
          executeTestServiceOK(mockServerService, controller);
      }
  
      public void testServiceNOKWithInit() throws Exception {
          Properties properties = new Properties();
          properties.put("only_from", "123.*.56.*,123.*.57.*");
          
          MockServerService mockServerService = new MockServerService();
          ServiceAccessController controller = new 
ServiceAccessController(mockServerService);
          controller.init(properties);
          
          executeTestServiceOK(mockServerService, controller);
      }
  
      private void executeTestServiceOK(MockServerService mockServerService, 
ServiceAccessController controller) throws UnknownHostException, 
ServiceException, IOException {
          MockSocket mockSocket = new MockSocket(InetAddress.getByAddress(new 
byte[] {123, 123, 56, 123})); 
          controller.service(mockSocket);
          assertSame(mockSocket, mockServerService.socket);
          
          mockSocket = new MockSocket(InetAddress.getByAddress(new byte[] {123, 
123, 57, 123})); 
          controller.service(mockSocket);
          assertSame(mockSocket, mockServerService.socket);
      }
  
      private void executeTestServiceNOK(ServiceAccessController controller) 
throws UnknownHostException, ServiceException, IOException {
          MockSocket mockSocket = new MockSocket(InetAddress.getByAddress(new 
byte[] {123, 123, 58, 123})); 
          try {
              controller.service(mockSocket);
              fail();
          } catch (SecurityException e) {
          }
      }
  
      private static class MockSocket extends Socket {
          private final InetAddress address;
          
          private MockSocket(InetAddress address) {
              this.address = address;
          }
          
          public InetAddress getInetAddress() {
              return address;
          }
      }
      
      private static class MockServerService implements ServerService {
          private Socket socket;
          
          public void init(Properties props) throws Exception {
          }
          
          public void start() throws ServiceException {
              throw new AssertionError();
          }
          
          public void stop() throws ServiceException {
              throw new AssertionError();
          }
  
          public String getIP() {
              throw new AssertionError();
          }
          
          public int getPort() {
              throw new AssertionError();
          }
          
          public void service(Socket socket) throws ServiceException, 
IOException {
              this.socket = socket;
          }
  
          public String getName() {
              throw new AssertionError();
          }
      }
  }
  
  

Reply via email to