Package org.apache.harmony.jndi.tests.javax.naming

Source Code of org.apache.harmony.jndi.tests.javax.naming.ReferenceTest

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.harmony.jndi.tests.javax.naming;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Enumeration;
import java.util.Random;

import javax.naming.BinaryRefAddr;
import javax.naming.RefAddr;
import javax.naming.Reference;
import javax.naming.StringRefAddr;

import junit.framework.TestCase;

public class ReferenceTest extends TestCase {

  private Reference ref;

  private byte[] buffer;

  @Override
    protected void setUp() {
    int bufferLen = 50;
    buffer = new byte[bufferLen];
    Random random = new Random();
    for (int i = 0; i < bufferLen; i++) {
      buffer[i] = (byte) random.nextInt(0x100);
    }

    String className = "java.util.Hashtable";
    ref = new Reference(className);
  }

  /**
   * test create Reference using a className
   */
  public void testConstructor_Simple() {
    String className = "java.util.Hashtable";
    Reference reference = new Reference(className);

    assertEquals(className, reference.getClassName());
    assertNull(reference.getFactoryClassName());
    assertNull(reference.getFactoryClassLocation());
    assertEquals(0, reference.size());
  }

  public void testConstructor_SimpleNull() {
    Reference reference = new Reference(null);

    assertNull(reference.getClassName());
    assertEquals(0, reference.size());
  }

  public void testConstructor_ByRefAddr() {
    String className = "java.util.Hashtable";
    String type = "Binary";
    RefAddr refAddr = new BinaryRefAddr(type, buffer);
    Reference reference = new Reference(className, refAddr);

    assertEquals(className, reference.getClassName());
    assertEquals(refAddr, reference.get(0));
    assertNull(reference.getFactoryClassName());
    assertNull(reference.getFactoryClassLocation());
    assertEquals(1, reference.size());
  }

  public void testConstructor_ByRefAddrNull() {
    Reference reference = new Reference(null, null);

    assertNull(reference.getClassName());
    assertNull(reference.getFactoryClassName());
    assertNull(reference.getFactoryClassLocation());
    assertNull(reference.get(0));
    assertEquals(1, reference.size());
  }

  public void testConstructor_ByFactory() {
    String className = "java.util.Hashtable";
    String factoryName = "factory name";
    String factoryLocation = "file:///home/";
    Reference reference = new Reference(className, factoryName,
        factoryLocation);

    assertEquals(className, reference.getClassName());
    assertEquals(factoryName, reference.getFactoryClassName());
    assertEquals(factoryLocation, reference.getFactoryClassLocation());
    assertEquals(0, reference.size());
  }

  public void testConstructor_ByFactoryNull() {
    Reference reference = new Reference(null, null, null);

    assertNull(reference.getClassName());
    assertNull(reference.getFactoryClassName());
    assertNull(reference.getFactoryClassLocation());
    assertEquals(0, reference.size());
  }

  public void testConstructor_Full() {
    String className = "java.util.Hashtable";
    String factoryName = "factory name";
    String factoryLocation = "file:///home/";

    String type = "Binary";
    RefAddr refAddr = new BinaryRefAddr(type, buffer);

    Reference reference = new Reference(className, refAddr, factoryName,
        factoryLocation);

    assertEquals(className, reference.getClassName());
    assertEquals(factoryName, reference.getFactoryClassName());
    assertEquals(factoryLocation, reference.getFactoryClassLocation());
    assertEquals(1, reference.size());
    assertEquals(refAddr, reference.get(0));
  }

  public void testConstructor_FullNull() {

    Reference reference = new Reference(null, null, null, null);

    assertNull(reference.getClassName());
    assertNull(reference.getFactoryClassName());
    assertNull(reference.getFactoryClassLocation());
    assertNull(reference.get(0));
    assertEquals(1, reference.size());
  }

  public void testAdd_Simple() {
    String type = "Binary";
    BinaryRefAddr refAddr0 = new BinaryRefAddr(type, buffer);
    byte[] buffer1 = { 1, 2, 3, 4 };
    BinaryRefAddr refAddr1 = new BinaryRefAddr(type, buffer1);
    ref.add(refAddr0);
    ref.add(refAddr1);

    assertEquals(2, ref.size());
    assertEquals(refAddr0, ref.get(0));
    assertEquals(refAddr1, ref.get(1));
  }

  public void testAdd_SimpleNull() {
    ref.add(null);

    assertEquals(1, ref.size());
    assertNull(ref.get(0));
  }

  public void testAdd_ByIndex() {
    String type = "Binary";
    BinaryRefAddr refAddr0 = new BinaryRefAddr(type, buffer);
    byte[] buffer1 = { 1, 2, 3, 4 };
    BinaryRefAddr refAddr1 = new BinaryRefAddr(type, buffer1);
    ref.add(0, refAddr0);
    ref.add(1, refAddr1);

    assertEquals(2, ref.size());
    assertEquals(refAddr0, ref.get(0));
    assertEquals(refAddr1, ref.get(1));
  }

  public void testAdd_ByIndexInsert() {
    String type = "Binary";
    BinaryRefAddr refAddr0 = new BinaryRefAddr(type, buffer);
    byte[] buffer1 = { 1, 2, 3, 4 };
    BinaryRefAddr refAddr1 = new BinaryRefAddr(type, buffer1);
    byte[] buffer2 = { 1, 2, 3, 4, 5 };
    BinaryRefAddr refAddr2 = new BinaryRefAddr(type, buffer2);

    ref.add(0, refAddr0);
    ref.add(1, refAddr1);
    ref.add(1, refAddr2);

    assertEquals(3, ref.size());
    assertEquals(refAddr0, ref.get(0));
    assertEquals(refAddr2, ref.get(1));
  }

  public void testAdd_ByIndexInvalidGreat() {
    String type = "Binary";
    BinaryRefAddr refAddr = new BinaryRefAddr(type, buffer);
    try {
      ref.add(1, refAddr);
      fail("This should throw a ArrayIndexOutOfBoundsException");
    } catch (ArrayIndexOutOfBoundsException e) {
    }
  }

  public void testAdd_ByIndexInvalidLess() {
    String type = "Binary";
    BinaryRefAddr refAddr = new BinaryRefAddr(type, buffer);
    try {
      ref.add(-1, refAddr);
      fail("This should throw a ArrayIndexOutOfBoundsException");
    } catch (ArrayIndexOutOfBoundsException e) {
    }
  }

  public void testGet_SimpleInvalidGreat() {
    String type = "Binary";
    BinaryRefAddr refAddr = new BinaryRefAddr(type, buffer);
    ref.add(refAddr);

    try {
      ref.get(ref.size());
      fail("This should throw a ArrayIndexOutOfBoundsException");
    } catch (ArrayIndexOutOfBoundsException e) {
    }
  }

  public void testGet_SimpleInvalidLess() {
    String type = "Binary";
    BinaryRefAddr refAddr = new BinaryRefAddr(type, buffer);
    ref.add(refAddr);

    try {
      ref.get(-1);
      fail("This should throw a ArrayIndexOutOfBoundsException");
    } catch (ArrayIndexOutOfBoundsException e) {
    }
  }

  public void testGet_ByType() {
    String[] types = { "Binary", "String", };

    byte[][] buffers = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, };

    BinaryRefAddr[] refAddrs = new BinaryRefAddr[types.length];

    for (int i = 0; i < types.length; i++) {
      refAddrs[i] = new BinaryRefAddr(types[i], buffers[i]);
      ref.add(refAddrs[i]);
    }

    for (int i = 0; i < types.length; i++) {
      assertEquals(refAddrs[i], ref.get(types[i]));
    }
  }

  public void testGet_ByTypeNotExist() {
    String type = "Binary";
    BinaryRefAddr refAddr = new BinaryRefAddr(type, buffer);
    ref.add(refAddr);

    assertNull(ref.get("String"));
  }

  public void testGet_TypeNull() {
    String type = "Binary";
    BinaryRefAddr refAddr = new BinaryRefAddr(type, buffer);
    ref.add(refAddr);
    try {
      ref.get(null);
      fail("Should throw NullPointerException.");
    } catch (NullPointerException e) {
    }
  }

  public void testGetAll_Simple() {
    String type = "Binary";
    BinaryRefAddr refAddr = new BinaryRefAddr(type, buffer);
    ref.add(refAddr);

    Enumeration<?> allAddrs = ref.getAll();
    assertTrue(allAddrs.hasMoreElements());
    assertEquals(refAddr, allAddrs.nextElement());
  }

  public void testGetAll_Empty() {
    Enumeration<?> allAddrs = ref.getAll();
    assertFalse(allAddrs.hasMoreElements());
  }

  public void testRemove_Simple() {
    String type = "Binary";
    BinaryRefAddr refAddr = new BinaryRefAddr(type, buffer);
    ref.add(refAddr);

    assertEquals(1, ref.size());

    assertEquals(ref.remove(0), refAddr);

    assertEquals(0, ref.size());
  }

  public void testRemove_Invalid() {
    try {
      ref.remove(0);
      fail("This should throw a ArrayIndexOutOfBoundsException");
    } catch (ArrayIndexOutOfBoundsException e) {
    }
  }

  public void testClear_Simple() {
    String type = "Binary";
    BinaryRefAddr refAddr = new BinaryRefAddr(type, buffer);
    int count = 10;
    for (int i = 0; i < count; i++) {
      ref.add(refAddr);
    }
    assertEquals(count, ref.size());
    ref.clear();
    assertEquals(0, ref.size());
  }

  public void testClear_Empty() {
    ref.clear();
    assertEquals(0, ref.size());
  }

  public void testEquals_Simple() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";

    Reference reference0 = new Reference(className, classFactory, location);
    Reference reference1 = new Reference(className, classFactory, location);
    assertTrue(reference0.equals(reference1));
    assertTrue(reference0.equals(reference0));
    assertTrue(reference1.equals(reference0));
    assertFalse(reference0.equals(null));
  }

  public void testEquals_SimpleWithStrAddr() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";
    StringRefAddr addr = new StringRefAddr("String address",
        "this is a string");
    Reference reference0 = new Reference(className, addr, classFactory,
        location);
    Reference reference1 = new Reference(className, addr, classFactory,
        location);
    assertTrue(reference0.equals(reference1));
    assertTrue(reference0.equals(reference0));
    assertTrue(reference1.equals(reference0));
    assertFalse(reference0.equals(null));
  }

  public void testEquals_IgnoreFactory() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";
    StringRefAddr addr = new StringRefAddr("String address",
        "this is a string");
    Reference reference0 = new Reference(className, addr, classFactory,
        location);
    Reference reference1 = new Reference(className, addr, "", location);
    assertTrue(reference0.equals(reference1));
  }

  public void testEquals_IgnoreFactoryLocation() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";
    StringRefAddr addr = new StringRefAddr("String address",
        "this is a string");
    Reference reference0 = new Reference(className, addr, classFactory,
        location);
    Reference reference1 = new Reference(className, addr, classFactory, "");
    assertTrue(reference0.equals(reference1));
  }

  public void testEquals_NotEquals1() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";
    StringRefAddr addr = new StringRefAddr("String address",
        "this is a string");
    Reference reference0 = new Reference(className, addr, classFactory,
        location);
    Reference reference1 = new Reference("java.lang.StringBuffer", addr,
        classFactory, location);
    assertFalse(reference0.equals(reference1));
  }

  public void testEquals_NotEquals2() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";
    StringRefAddr addr = new StringRefAddr("String address",
        "this is a string");
    BinaryRefAddr addr1 = new BinaryRefAddr("Binary address", new byte[] {
        1, 2, 3, 4, 5 });
    Reference reference0 = new Reference(className, addr, classFactory,
        location);
    Reference reference1 = new Reference(className, addr1, classFactory,
        location);
    assertFalse(reference0.equals(reference1));
  }

  public void testEquals_NotInstance() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";

    Reference reference0 = new Reference(className, classFactory, location);
    assertFalse(reference0.equals("reference"));
  }

  public void testEquals_NullClassName() {
    String classFactory = "class factory";
    String location = "/home/neuser";

    Reference reference0 = new Reference(null, classFactory, location);
    Reference reference1 = new Reference(null, classFactory, location);

    try {
      reference0.equals(reference1);
      fail("Should throw NullPointerException.");
    } catch (NullPointerException e) {
    }
  }

  public void testEquals_NullClassName2() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";

    Reference reference0 = new Reference(null, classFactory, location);
    Reference reference2 = new Reference(className, classFactory, location);

    // try {
    assertFalse(reference0.equals(reference2));
    // fail("Should throw NullPointerException.");
    // } catch (NullPointerException e) {
    // }
  }

  public void testEquals_NullClassName3() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";

    Reference reference0 = new Reference(null, classFactory, location);
    Reference reference2 = new Reference(className, classFactory, location);

    try {
      reference2.equals(reference0);
      fail("Should throw NullPointerException.");
    } catch (NullPointerException e) {
    }
  }

  public void testHashcode_Simple() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";
    StringRefAddr addr0 = new StringRefAddr("String address",
        "this is a string");
    StringRefAddr addr1 = new StringRefAddr("String address",
        "this is another string");
    Reference reference = new Reference(className, addr0, classFactory,
        location);
    reference.add(addr1);
    assertEquals(
        className.hashCode() + addr0.hashCode() + addr1.hashCode(),
        reference.hashCode());
  }

  public void testHashcode_AddressNull() {
    String className = "java.lang.String";
    Reference reference = new Reference(className);
    assertEquals(className.hashCode(), reference.hashCode());
  }

  public void testToString_Simple() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";
    StringRefAddr addr0 = new StringRefAddr("String address",
        "this is a string");
    StringRefAddr addr1 = new StringRefAddr("String address",
        "this is another string");
    Reference reference = new Reference(className, addr0, classFactory,
        location);
    reference.add(addr1);

    /*
     * assertEquals( "Reference class name: " + className + "\nReference
     * addresses:\n\t" + addr0.toString() + "\n\t" + addr1.toString() +
     * "\n", reference.toString());
     */
    assertNotNull(reference.toString());
  }

  public void testToString_AddressNull() {
    String className = "java.lang.String";
    Reference reference = new Reference(className);
    /*
     * assertEquals( "Reference class name: " + className + "\nReference
     * addresses:\n", reference.toString());
     */
    assertNotNull(reference.toString());
  }

  public void testClone_Simple() {
    String className = "java.lang.String";
    String classFactory = "class factory";
    String location = "/home/neuser";
    StringRefAddr addr = new StringRefAddr("String address",
        "this is a string");
    Reference reference = new Reference(className, addr, classFactory,
        location);

    Reference cloneRef = (Reference) reference.clone();
    assertEquals(reference, cloneRef);
    assertNotSame(reference, cloneRef);
  }

  public void testClone_AddressNull() {
    String className = "java.lang.String";
    Reference reference = new Reference(className);

    Reference cloneRef = (Reference) reference.clone();
    assertEquals(reference, cloneRef);
    assertNotSame(reference, cloneRef);
  }

  public void testClone_DiffAddress() {
    String className = "java.lang.String";
    StringRefAddr addr = new StringRefAddr("string address", "/home/neuser");
    Reference reference = new Reference(className);
    reference.add(addr);
    Reference cloneRef = (Reference) reference.clone();
    reference.clear();
    assertFalse(reference.equals(cloneRef));
  }

  public void testSerializable_Simple() throws ClassNotFoundException,
      IOException {
    Reference reference = new Reference("dazzle.naming.Reference",
        "dazzle.naming.factory.RefFactory", "http://www.apache.org");
    StringRefAddr addr = new StringRefAddr("StringRefAddr",
        "This is a String RefAddr.");
    BinaryRefAddr addr2 = new BinaryRefAddr("BinaryRefAddr", new byte[] {
        'a', 'b', 'c' });
    reference.add(addr);
    reference.add(addr2);

    // write to byte array
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(baos);
    oos.writeObject(reference);
    byte[] buffer = baos.toByteArray();
    oos.close();
    baos.close();

    // read from byte array
    ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
    ObjectInputStream ois = new ObjectInputStream(bais);
    Reference reference2 = (Reference) ois.readObject();
    ois.close();
    bais.close();

    assertEquals(reference, reference2);
  }

  public void testSerializable_compatibility() throws ClassNotFoundException,
      IOException {
    ObjectInputStream ois = new ObjectInputStream(getClass()
                .getClassLoader().getResourceAsStream(
                        "/serialization/javax/naming/Reference.ser"));
    Reference reference2 = (Reference) ois.readObject();
    ois.close();

    Reference reference = new Reference("dazzle.naming.Reference",
        "dazzle.naming.factory.RefFactory", "http://www.apache.org");
    StringRefAddr addr = new StringRefAddr("StringRefAddr",
        "This is a String RefAddr.");
    BinaryRefAddr addr2 = new BinaryRefAddr("BinaryRefAddr", new byte[] {
        'a', 'b', 'c' });
    reference.add(addr);
    reference.add(addr2);

    assertEquals(reference, reference2);
  }
}
TOP

Related Classes of org.apache.harmony.jndi.tests.javax.naming.ReferenceTest

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.