You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2009/08/05 19:55:16 UTC
svn commit: r801340 [5/13] - in /directory/apacheds/trunk:
core-entry/src/main/java/org/apache/directory/server/core/entry/
core-entry/src/test/java/org/apache/directory/server/core/entry/
core-integ/src/main/java/org/apache/directory/server/core/integ...
Modified: directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerStringValueTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerStringValueTest.java?rev=801340&r1=801339&r2=801340&view=diff
==============================================================================
--- directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerStringValueTest.java (original)
+++ directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/ServerStringValueTest.java Wed Aug 5 17:55:15 2009
@@ -1,782 +1,782 @@
-/*
- * 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.directory.server.core.entry;
-
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-
-import javax.naming.NamingException;
-import javax.naming.directory.InvalidAttributeValueException;
-
-import org.apache.directory.shared.ldap.entry.Value;
-import org.apache.directory.shared.ldap.schema.AttributeType;
-import org.apache.directory.shared.ldap.schema.SyntaxChecker;
-import org.apache.directory.shared.ldap.schema.normalizers.DeepTrimToLowerNormalizer;
-import org.apache.directory.shared.ldap.schema.normalizers.NoOpNormalizer;
-import org.apache.directory.shared.ldap.schema.syntaxes.AcceptAllSyntaxChecker;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import jdbm.helper.StringComparator;
-
-
-/**
- * Tests that the ServerStringValue class works properly as expected.
- *
- * Some notes while conducting tests:
- *
- * <ul>
- * <li>comparing values with different types - how does this behave</li>
- * <li>exposing access to at from value or to a comparator?</li>
- * </ul>
- *
- * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
- * @version $Rev$, $Date$
- */
-public class ServerStringValueTest
-{
- private TestServerEntryUtils.S s;
- private TestServerEntryUtils.AT at;
- private TestServerEntryUtils.MR mr;
-
-
- /**
- * Initialize an AttributeType and the associated MatchingRule
- * and Syntax
- */
- @Before public void initAT()
- {
- s = new TestServerEntryUtils.S( "1.1.1.1", false );
- s.setSyntaxChecker( new AcceptAllSyntaxChecker( "1.1.1.1" ) );
- mr = new TestServerEntryUtils.MR( "1.1.2.1" );
- mr.syntax = s;
- mr.comparator = new StringComparator();
- mr.normalizer = new DeepTrimToLowerNormalizer();
- at = new TestServerEntryUtils.AT( "1.1.3.1" );
- at.setEquality( mr );
- at.setOrdering( mr );
- at.setSubstr( mr );
- at.setSyntax( s );
- }
-
-
- /**
- * Serialize a ServerStringValue
- */
- private ByteArrayOutputStream serializeValue( ServerStringValue value ) throws IOException
- {
- ObjectOutputStream oOut = null;
- ByteArrayOutputStream out = new ByteArrayOutputStream();
-
- try
- {
- oOut = new ObjectOutputStream( out );
- value.serialize( oOut );
- }
- catch ( IOException ioe )
- {
- throw ioe;
- }
- finally
- {
- try
- {
- if ( oOut != null )
- {
- oOut.flush();
- oOut.close();
- }
- }
- catch ( IOException ioe )
- {
- throw ioe;
- }
- }
-
- return out;
- }
-
-
- /**
- * Deserialize a ServerStringValue
- */
- private ServerStringValue deserializeValue( ByteArrayOutputStream out, AttributeType at ) throws IOException, ClassNotFoundException
- {
- ObjectInputStream oIn = null;
- ByteArrayInputStream in = new ByteArrayInputStream( out.toByteArray() );
-
- try
- {
- oIn = new ObjectInputStream( in );
-
- ServerStringValue value = new ServerStringValue( at );
- value.deserialize( oIn );
-
- return value;
- }
- catch ( IOException ioe )
- {
- throw ioe;
- }
- finally
- {
- try
- {
- if ( oIn != null )
- {
- oIn.close();
- }
- }
- catch ( IOException ioe )
- {
- throw ioe;
- }
- }
- }
-
-
- /**
- * Test the constructor with a null value
- */
- @Test
- public void testServerStringValueNullValue()
- {
- AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
-
- ServerStringValue value = new ServerStringValue( attribute, null );
-
- assertNull( value.get() );
- assertTrue( value.isNull() );
- }
-
-
- /**
- * Test the getNormalizedValue method
- */
- @Test public void testGetNormalizedValue()
- {
- AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
-
- ServerStringValue value = new ServerStringValue( attribute, null );
-
- assertFalse( value.isNormalized() );
- assertNull( value.getNormalizedValue() );
- assertTrue( value.isNormalized() );
-
- value.set( "" );
- assertFalse( value.isNormalized() );
- assertEquals( "", value.getNormalizedValue() );
- assertTrue( value.isNormalized() );
-
- value.set( "TEST" );
- assertFalse( value.isNormalized() );
- assertEquals( "test", value.getNormalizedValue() );
- assertTrue( value.isNormalized() );
- }
-
-
- /**
- * Test the isValid method
- *
- * The SyntaxChecker does not accept values longer than 5 chars.
- */
- @Test public void testIsValid()
- {
- AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
-
- ServerStringValue value = new ServerStringValue( attribute, null );
- assertTrue( value.isValid() );
-
- value.set( "" );
- assertTrue( value.isValid() );
-
- value.set( "TEST" );
- assertTrue( value.isValid() );
-
- value.set( "testlong" );
- assertFalse( value.isValid() );
- }
-
-
- /**
- * Test the normalize method
- */
- @Test
- public void testNormalize() throws NamingException
- {
- AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
- ServerStringValue ssv = new ServerStringValue( attribute );
-
- ssv.normalize();
- assertEquals( null, ssv.getNormalizedValue() );
-
- ssv.set( "" );
- ssv.normalize();
- assertEquals( "", ssv.getNormalizedValue() );
-
- ssv.set( " This is a TEST " );
- ssv.normalize();
- assertEquals( "this is a test", ssv.getNormalizedValue() );
- }
-
-
- /**
- * Test the instanceOf method
- */
- @Test
- public void testInstanceOf() throws NamingException
- {
- AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
- ServerStringValue ssv = new ServerStringValue( attribute );
-
- assertTrue( ssv.instanceOf( attribute ) );
-
- attribute = TestServerEntryUtils.getBytesAttributeType();
-
- assertFalse( ssv.instanceOf( attribute ) );
- }
-
-
- /**
- * Test the getAttributeType method
- */
- @Test
- public void testgetAttributeType()
- {
- AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
- ServerStringValue ssv = new ServerStringValue( attribute );
-
- assertEquals( attribute, ssv.getAttributeType() );
- }
-
-
- /**
- * Test the equals method
- */
- @Test public void testEquals()
- {
- AttributeType at1 = TestServerEntryUtils.getIA5StringAttributeType();
- AttributeType at2 = TestServerEntryUtils.getBytesAttributeType();
-
- ServerStringValue value1 = new ServerStringValue( at1, "test" );
- ServerStringValue value2 = new ServerStringValue( at1, "test" );
- ServerStringValue value3 = new ServerStringValue( at1, "TEST" );
- ServerStringValue value4 = new ServerStringValue( at1, "tes" );
- ServerStringValue value5 = new ServerStringValue( at1, null );
- ServerBinaryValue valueBytes = new ServerBinaryValue( at2, new byte[]{0x01} );
- ServerStringValue valueString = new ServerStringValue( at, "test" );
-
- assertTrue( value1.equals( value1 ) );
- assertTrue( value1.equals( value2 ) );
- assertTrue( value1.equals( value3 ) );
- assertFalse( value1.equals( value4 ) );
- assertFalse( value1.equals( value5 ) );
- assertFalse( value1.equals( "test" ) );
- assertFalse( value1.equals( null ) );
-
- assertFalse( value1.equals( valueString ) );
- assertFalse( value1.equals( valueBytes ) );
- }
-
-
-
-
-
-
-
-
-
-
- /**
- * Test the constructor with bad AttributeType
- */
- @Test public void testBadConstructor()
- {
- try
- {
- new ServerStringValue( null );
- fail();
- }
- catch ( IllegalArgumentException iae )
- {
- // Expected...
- }
-
- // create a AT without any syntax
- AttributeType attribute = new TestServerEntryUtils.AT( "1.1.3.1" );
-
- try
- {
- new ServerStringValue( attribute );
- fail();
- }
- catch ( IllegalArgumentException iae )
- {
- // Expected...
- }
- }
-
-
- /**
- * Tests to make sure the hashCode method is working properly.
- * @throws Exception on errors
- */
- @Test public void testHashCode()
- {
- AttributeType at1 = TestServerEntryUtils.getCaseIgnoringAttributeNoNumbersType();
- ServerStringValue v0 = new ServerStringValue( at1, "Alex" );
- ServerStringValue v1 = new ServerStringValue( at1, "ALEX" );
- ServerStringValue v2 = new ServerStringValue( at1, "alex" );
-
- assertEquals( v0.hashCode(), v1.hashCode() );
- assertEquals( v0.hashCode(), v2.hashCode() );
- assertEquals( v1.hashCode(), v2.hashCode() );
-
- assertEquals( v0, v1 );
- assertEquals( v0, v2 );
- assertEquals( v1, v2 );
-
- assertTrue( v0.isValid() );
- assertTrue( v1.isValid() );
- assertTrue( v2.isValid() );
-
- ServerStringValue v3 = new ServerStringValue( at1, "Timber" );
-
- assertTrue( v3.isValid() );
- assertNotSame( v0.hashCode(), v3.hashCode() );
-
- ServerStringValue v4 = new ServerStringValue( at, "Alex" );
-
- assertNotSame( v0.hashCode(), v4.hashCode() );
- }
-
-
- /**
- * Test the compareTo method
- */
- @Test
- public void testCompareTo()
- {
- AttributeType at1 = TestServerEntryUtils.getCaseIgnoringAttributeNoNumbersType();
- ServerStringValue v0 = new ServerStringValue( at1, "Alex" );
- ServerStringValue v1 = new ServerStringValue( at1, "ALEX" );
-
- assertEquals( 0, v0.compareTo( v1 ) );
- assertEquals( 0, v1.compareTo( v0 ) );
-
- ServerStringValue v2 = new ServerStringValue( at1, null );
-
- assertEquals( 1, v0.compareTo( v2 ) );
- assertEquals( -1, v2.compareTo( v0 ) );
- }
-
-
- /**
- * Test the clone method
- */
- @Test
- public void testClone() throws NamingException
- {
- AttributeType at1 = TestServerEntryUtils.getCaseIgnoringAttributeNoNumbersType();
- ServerStringValue ssv = new ServerStringValue( at1, "Test" );
-
- ServerStringValue ssv1 = ssv.clone();
-
- assertEquals( ssv, ssv1 );
-
- ssv.set( "" );
-
- assertNotSame( ssv, ssv1 );
- assertEquals( "", ssv.getString() );
-
- ssv.set( " This is a TEST " );
- ssv1 = ssv.clone();
-
- assertEquals( ssv, ssv1 );
-
- ssv.normalize();
-
- assertEquals( ssv, ssv1 );
- }
-
-
- /**
- * Presumes an attribute which constrains it's values to some constant
- * strings: LOW, MEDIUM, HIGH. Normalization does nothing. MatchingRules
- * are exact case matching.
- *
- * @throws Exception on errors
- */
- @Test public void testConstrainedString()
- {
- s.setSyntaxChecker( new SyntaxChecker() {
- public String getSyntaxOid() { return "1.1.1.1"; }
- public boolean isValidSyntax( Object value )
- {
- if ( value instanceof String )
- {
- String strval = ( String ) value;
- return strval.equals( "HIGH" ) || strval.equals( "LOW" ) || strval.equals( "MEDIUM" );
- }
- return false;
- }
- public void assertSyntax( Object value ) throws NamingException
- { if ( ! isValidSyntax( value ) ) {throw new InvalidAttributeValueException(); }}
- });
-
- mr.syntax = s;
- mr.comparator = new Comparator<String>()
- {
- public int compare( String o1, String o2 )
- {
- if ( o1 == null )
- {
- if ( o2 == null )
- {
- return 0;
- }
- else
- {
- return -1;
- }
- }
- else if ( o2 == null )
- {
- return 1;
- }
-
- int i1 = getValue( o1 );
- int i2 = getValue( o2 );
-
- if ( i1 == i2 ) { return 0; }
- if ( i1 > i2 ) { return 1; }
- if ( i1 < i2 ) { return -1; }
-
- throw new IllegalStateException( "should not get here at all" );
- }
-
- public int getValue( String val )
- {
- if ( val.equals( "LOW" ) ) { return 0; }
- if ( val.equals( "MEDIUM" ) ) { return 1; }
- if ( val.equals( "HIGH" ) ) { return 2; }
- throw new IllegalArgumentException( "Not a valid value" );
- }
- };
- mr.normalizer = new NoOpNormalizer();
- at.setEquality( mr );
- at.setSyntax( s );
-
- // check that normalization and syntax checks work as expected
- ServerStringValue value = new ServerStringValue( at, "HIGH" );
- assertEquals( value.get(), value.get() );
- assertTrue( value.isValid() );
- value = new ServerStringValue( at, "high" );
- assertFalse( value.isValid() );
-
- // create a bunch to best tested for equals and in containers
- ServerStringValue v0 = new ServerStringValue( at, "LOW" );
- assertTrue( v0.isValid() );
- ServerStringValue v1 = new ServerStringValue( at, "LOW" );
- assertTrue( v1.isValid() );
- ServerStringValue v2 = new ServerStringValue( at, "MEDIUM" );
- assertTrue( v2.isValid() );
- ServerStringValue v3 = new ServerStringValue( at, "HIGH" );
- assertTrue( v3.isValid() );
- ServerStringValue v4 = new ServerStringValue( at );
- assertFalse( v4.isValid() );
- ServerStringValue v5 = new ServerStringValue( at );
- assertFalse( v5.isValid() );
-
- // check equals
- assertTrue( v0.equals( v1 ) );
- assertTrue( v1.equals( v0 ) );
- assertEquals( 0, v0.compareTo( v1 ) );
-
- assertTrue( v4.equals( v5 ) );
- assertTrue( v5.equals( v4 ) );
- assertEquals( 0, v4.compareTo( v5 ) );
-
- assertFalse( v2.equals( v3 ) );
- assertFalse( v3.equals( v2 ) );
- assertTrue( v2.compareTo( v3 ) < 0 );
- assertTrue( v3.compareTo( v2 ) > 0 );
-
- // add all except v1 and v5 to a set
- HashSet<ServerStringValue> set = new HashSet<ServerStringValue>();
- set.add( v0 );
- set.add( v2 );
- set.add( v3 );
- set.add( v4 );
-
- // check contains method
- assertTrue( "since v1.equals( v0 ) and v0 was added then this should be true", set.contains( v1 ) );
- assertTrue( "since v4.equals( v5 ) and v4 was added then this should be true", set.contains( v5 ) );
-
- // check ordering based on the comparator
- List<Value<String>> list = new ArrayList<Value<String>>();
- list.add( v1 );
- list.add( v3 );
- list.add( v5 );
- list.add( v0 );
- list.add( v2 );
- list.add( v4 );
-
- Collections.sort( list );
-
- // null ones are at first 2 indices
- assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 0 ).equals( v4 ) );
- assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 0 ).equals( v5 ) );
- assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 1 ).equals( v4 ) );
- assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 1 ).equals( v5 ) );
-
- // low ones are at the 3rd and 4th indices
- assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 2 ).equals( v0 ) );
- assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 2 ).equals( v1 ) );
- assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 3 ).equals( v0 ) );
- assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 3 ).equals( v1 ) );
-
- // medium then high next
- assertTrue( "since v2 \"MEDIUM\" should be at index 4", list.get( 4 ).equals( v2 ) );
- assertTrue( "since v3 \"HIGH\" should be at index 5", list.get( 5 ).equals( v3 ) );
-
- assertEquals( 6, list.size() );
- }
-
-
- /**
- * Creates a string value with an attribute type that is of a syntax
- * which accepts anything. Also there is no normalization since the
- * value is the same as the normalized value. This makes the at technically
- * a binary value however it can be dealt with as a string so this test
- * is still OK.
- * @throws Exception on errors
- */
- @Test public void testAcceptAllNoNormalization()
- {
- // check that normalization and syntax checks work as expected
- ServerStringValue value = new ServerStringValue( at, "hello" );
- assertEquals( value.get(), value.get() );
- assertTrue( value.isValid() );
-
- // create a bunch to best tested for equals and in containers
- ServerStringValue v0 = new ServerStringValue( at, "hello" );
- ServerStringValue v1 = new ServerStringValue( at, "hello" );
- ServerStringValue v2 = new ServerStringValue( at, "next0" );
- ServerStringValue v3 = new ServerStringValue( at, "next1" );
- ServerStringValue v4 = new ServerStringValue( at );
- ServerStringValue v5 = new ServerStringValue( at );
-
- // check equals
- assertTrue( v0.equals( v1 ) );
- assertTrue( v1.equals( v0 ) );
- assertTrue( v4.equals( v5 ) );
- assertTrue( v5.equals( v4 ) );
- assertFalse( v2.equals( v3 ) );
- assertFalse( v3.equals( v2 ) );
-
- // add all except v1 and v5 to a set
- HashSet<ServerStringValue> set = new HashSet<ServerStringValue>();
- set.add( v0 );
- set.add( v2 );
- set.add( v3 );
- set.add( v4 );
-
- // check contains method
- assertTrue( "since v1.equals( v0 ) and v0 was added then this should be true", set.contains( v1 ) );
- assertTrue( "since v4.equals( v5 ) and v4 was added then this should be true", set.contains( v5 ) );
-
- // check ordering based on the comparator
- ArrayList<ServerStringValue> list = new ArrayList<ServerStringValue>();
- list.add( v1 );
- list.add( v3 );
- list.add( v5 );
- list.add( v0 );
- list.add( v2 );
- list.add( v4 );
-
- Comparator<ServerStringValue> c = new Comparator<ServerStringValue>()
- {
- public int compare( ServerStringValue o1, ServerStringValue o2 )
- {
- String n1 = null;
- String n2 = null;
-
- if ( o1 != null )
- {
- n1 = o1.getString();
- }
-
- if ( o2 != null )
- {
- n2 = o2.getString();
- }
-
- if ( n1 == null )
- {
- return ( n2 == null ) ? 0 : -1;
- }
- else if ( n2 == null )
- {
- return 1;
- }
-
- try
- {
- return mr.getComparator().compare( n1, n2 );
- }
- catch ( NamingException ne )
- {
- throw new IllegalStateException( "Normalization and comparison should succeed!", ne );
- }
- }
- };
-
- Collections.sort( list, c );
-
- assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 0 ).equals( v4 ) );
- assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 0 ).equals( v5 ) );
- assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 1 ).equals( v4 ) );
- assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 1 ).equals( v5 ) );
-
- assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 2 ).equals( v0 ) );
- assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 2 ).equals( v1 ) );
- assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 3 ).equals( v0 ) );
- assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 3 ).equals( v1 ) );
-
- assertTrue( "since v2 \"next0\" should be at index 4", list.get( 4 ).equals( v2 ) );
- assertTrue( "since v3 \"next1\" should be at index 5", list.get( 5 ).equals( v3 ) );
-
- assertEquals( 6, list.size() );
- }
-
-
- /**
- * Test serialization of a StringValue which has a normalized value
- */
- @Test public void testNormalizedStringValueSerialization() throws NamingException, IOException, ClassNotFoundException
- {
- // First check with a value which will be normalized
- ServerStringValue ssv = new ServerStringValue( at, " Test Test " );
-
- ssv.normalize();
- String normalized = ssv.getNormalizedValue();
-
- assertEquals( "test test", normalized );
- assertEquals( " Test Test ", ssv.getString() );
-
- ServerStringValue ssvSer = deserializeValue( serializeValue( ssv ), at );
-
- assertEquals( ssv, ssvSer );
- }
-
-
- /**
- * Test serialization of a StringValue which does not have a normalized value
- */
- @Test public void testNoNormalizedStringValueSerialization() throws NamingException, IOException, ClassNotFoundException
- {
- // First check with a value which will be normalized
- ServerStringValue ssv = new ServerStringValue( at, "test" );
-
- ssv.normalize();
- String normalized = ssv.getNormalizedValue();
-
- assertEquals( "test", normalized );
- assertEquals( "test", ssv.getString() );
-
- ServerStringValue ssvSer = deserializeValue( serializeValue( ssv ), at );
-
- assertEquals( ssv, ssvSer );
- }
-
-
- /**
- * Test serialization of a null StringValue
- */
- @Test public void testNullStringValueSerialization() throws NamingException, IOException, ClassNotFoundException
- {
- // First check with a value which will be normalized
- ServerStringValue ssv = new ServerStringValue( at );
-
- ssv.normalize();
- String normalized = ssv.getNormalizedValue();
-
- assertNull( normalized );
- assertNull( ssv.get() );
-
- ServerStringValue ssvSer = deserializeValue( serializeValue( ssv ), at );
-
- assertEquals( ssv, ssvSer );
- }
-
-
- /**
- * Test serialization of an empty StringValue
- */
- @Test public void testEmptyStringValueSerialization() throws NamingException, IOException, ClassNotFoundException
- {
- // First check with a value which will be normalized
- ServerStringValue ssv = new ServerStringValue( at, "" );
-
- ssv.normalize();
- String normalized = ssv.getNormalizedValue();
-
- assertEquals( "", normalized );
- assertEquals( "", ssv.getString() );
-
- ServerStringValue ssvSer = deserializeValue( serializeValue( ssv ), at );
-
- assertEquals( ssv, ssvSer );
- }
-
-
- /**
- * Test serialization of an empty StringValue
- */
- @Test public void testStringValueEmptyNormalizedSerialization() throws NamingException, IOException, ClassNotFoundException
- {
- // First check with a value which will be normalized
- ServerStringValue ssv = new ServerStringValue( at, " " );
-
- assertEquals( " ", ssv.getString() );
-
- ServerStringValue ssvSer = deserializeValue( serializeValue( ssv ), at );
-
- assertEquals( ssv, ssvSer );
- }
-}
\ No newline at end of file
+/*
+ * 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.directory.server.core.entry;
+
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+
+import javax.naming.NamingException;
+import javax.naming.directory.InvalidAttributeValueException;
+
+import org.apache.directory.shared.ldap.entry.Value;
+import org.apache.directory.shared.ldap.schema.AttributeType;
+import org.apache.directory.shared.ldap.schema.SyntaxChecker;
+import org.apache.directory.shared.ldap.schema.normalizers.DeepTrimToLowerNormalizer;
+import org.apache.directory.shared.ldap.schema.normalizers.NoOpNormalizer;
+import org.apache.directory.shared.ldap.schema.syntaxes.AcceptAllSyntaxChecker;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import jdbm.helper.StringComparator;
+
+
+/**
+ * Tests that the ServerStringValue class works properly as expected.
+ *
+ * Some notes while conducting tests:
+ *
+ * <ul>
+ * <li>comparing values with different types - how does this behave</li>
+ * <li>exposing access to at from value or to a comparator?</li>
+ * </ul>
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ServerStringValueTest
+{
+ private TestServerEntryUtils.S s;
+ private TestServerEntryUtils.AT at;
+ private TestServerEntryUtils.MR mr;
+
+
+ /**
+ * Initialize an AttributeType and the associated MatchingRule
+ * and Syntax
+ */
+ @Before public void initAT()
+ {
+ s = new TestServerEntryUtils.S( "1.1.1.1", false );
+ s.setSyntaxChecker( new AcceptAllSyntaxChecker( "1.1.1.1" ) );
+ mr = new TestServerEntryUtils.MR( "1.1.2.1" );
+ mr.syntax = s;
+ mr.comparator = new StringComparator();
+ mr.normalizer = new DeepTrimToLowerNormalizer();
+ at = new TestServerEntryUtils.AT( "1.1.3.1" );
+ at.setEquality( mr );
+ at.setOrdering( mr );
+ at.setSubstr( mr );
+ at.setSyntax( s );
+ }
+
+
+ /**
+ * Serialize a ServerStringValue
+ */
+ private ByteArrayOutputStream serializeValue( ServerStringValue value ) throws IOException
+ {
+ ObjectOutputStream oOut = null;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+
+ try
+ {
+ oOut = new ObjectOutputStream( out );
+ value.serialize( oOut );
+ }
+ catch ( IOException ioe )
+ {
+ throw ioe;
+ }
+ finally
+ {
+ try
+ {
+ if ( oOut != null )
+ {
+ oOut.flush();
+ oOut.close();
+ }
+ }
+ catch ( IOException ioe )
+ {
+ throw ioe;
+ }
+ }
+
+ return out;
+ }
+
+
+ /**
+ * Deserialize a ServerStringValue
+ */
+ private ServerStringValue deserializeValue( ByteArrayOutputStream out, AttributeType at ) throws IOException, ClassNotFoundException
+ {
+ ObjectInputStream oIn = null;
+ ByteArrayInputStream in = new ByteArrayInputStream( out.toByteArray() );
+
+ try
+ {
+ oIn = new ObjectInputStream( in );
+
+ ServerStringValue value = new ServerStringValue( at );
+ value.deserialize( oIn );
+
+ return value;
+ }
+ catch ( IOException ioe )
+ {
+ throw ioe;
+ }
+ finally
+ {
+ try
+ {
+ if ( oIn != null )
+ {
+ oIn.close();
+ }
+ }
+ catch ( IOException ioe )
+ {
+ throw ioe;
+ }
+ }
+ }
+
+
+ /**
+ * Test the constructor with a null value
+ */
+ @Test
+ public void testServerStringValueNullValue()
+ {
+ AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
+
+ ServerStringValue value = new ServerStringValue( attribute, null );
+
+ assertNull( value.get() );
+ assertTrue( value.isNull() );
+ }
+
+
+ /**
+ * Test the getNormalizedValue method
+ */
+ @Test public void testGetNormalizedValue()
+ {
+ AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
+
+ ServerStringValue value = new ServerStringValue( attribute, null );
+
+ assertFalse( value.isNormalized() );
+ assertNull( value.getNormalizedValue() );
+ assertTrue( value.isNormalized() );
+
+ value.set( "" );
+ assertFalse( value.isNormalized() );
+ assertEquals( "", value.getNormalizedValue() );
+ assertTrue( value.isNormalized() );
+
+ value.set( "TEST" );
+ assertFalse( value.isNormalized() );
+ assertEquals( "test", value.getNormalizedValue() );
+ assertTrue( value.isNormalized() );
+ }
+
+
+ /**
+ * Test the isValid method
+ *
+ * The SyntaxChecker does not accept values longer than 5 chars.
+ */
+ @Test public void testIsValid()
+ {
+ AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
+
+ ServerStringValue value = new ServerStringValue( attribute, null );
+ assertTrue( value.isValid() );
+
+ value.set( "" );
+ assertTrue( value.isValid() );
+
+ value.set( "TEST" );
+ assertTrue( value.isValid() );
+
+ value.set( "testlong" );
+ assertFalse( value.isValid() );
+ }
+
+
+ /**
+ * Test the normalize method
+ */
+ @Test
+ public void testNormalize() throws NamingException
+ {
+ AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
+ ServerStringValue ssv = new ServerStringValue( attribute );
+
+ ssv.normalize();
+ assertEquals( null, ssv.getNormalizedValue() );
+
+ ssv.set( "" );
+ ssv.normalize();
+ assertEquals( "", ssv.getNormalizedValue() );
+
+ ssv.set( " This is a TEST " );
+ ssv.normalize();
+ assertEquals( "this is a test", ssv.getNormalizedValue() );
+ }
+
+
+ /**
+ * Test the instanceOf method
+ */
+ @Test
+ public void testInstanceOf() throws NamingException
+ {
+ AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
+ ServerStringValue ssv = new ServerStringValue( attribute );
+
+ assertTrue( ssv.instanceOf( attribute ) );
+
+ attribute = TestServerEntryUtils.getBytesAttributeType();
+
+ assertFalse( ssv.instanceOf( attribute ) );
+ }
+
+
+ /**
+ * Test the getAttributeType method
+ */
+ @Test
+ public void testgetAttributeType()
+ {
+ AttributeType attribute = TestServerEntryUtils.getIA5StringAttributeType();
+ ServerStringValue ssv = new ServerStringValue( attribute );
+
+ assertEquals( attribute, ssv.getAttributeType() );
+ }
+
+
+ /**
+ * Test the equals method
+ */
+ @Test public void testEquals()
+ {
+ AttributeType at1 = TestServerEntryUtils.getIA5StringAttributeType();
+ AttributeType at2 = TestServerEntryUtils.getBytesAttributeType();
+
+ ServerStringValue value1 = new ServerStringValue( at1, "test" );
+ ServerStringValue value2 = new ServerStringValue( at1, "test" );
+ ServerStringValue value3 = new ServerStringValue( at1, "TEST" );
+ ServerStringValue value4 = new ServerStringValue( at1, "tes" );
+ ServerStringValue value5 = new ServerStringValue( at1, null );
+ ServerBinaryValue valueBytes = new ServerBinaryValue( at2, new byte[]{0x01} );
+ ServerStringValue valueString = new ServerStringValue( at, "test" );
+
+ assertTrue( value1.equals( value1 ) );
+ assertTrue( value1.equals( value2 ) );
+ assertTrue( value1.equals( value3 ) );
+ assertFalse( value1.equals( value4 ) );
+ assertFalse( value1.equals( value5 ) );
+ assertFalse( value1.equals( "test" ) );
+ assertFalse( value1.equals( null ) );
+
+ assertFalse( value1.equals( valueString ) );
+ assertFalse( value1.equals( valueBytes ) );
+ }
+
+
+
+
+
+
+
+
+
+
+ /**
+ * Test the constructor with bad AttributeType
+ */
+ @Test public void testBadConstructor()
+ {
+ try
+ {
+ new ServerStringValue( null );
+ fail();
+ }
+ catch ( IllegalArgumentException iae )
+ {
+ // Expected...
+ }
+
+ // create a AT without any syntax
+ AttributeType attribute = new TestServerEntryUtils.AT( "1.1.3.1" );
+
+ try
+ {
+ new ServerStringValue( attribute );
+ fail();
+ }
+ catch ( IllegalArgumentException iae )
+ {
+ // Expected...
+ }
+ }
+
+
+ /**
+ * Tests to make sure the hashCode method is working properly.
+ * @throws Exception on errors
+ */
+ @Test public void testHashCode()
+ {
+ AttributeType at1 = TestServerEntryUtils.getCaseIgnoringAttributeNoNumbersType();
+ ServerStringValue v0 = new ServerStringValue( at1, "Alex" );
+ ServerStringValue v1 = new ServerStringValue( at1, "ALEX" );
+ ServerStringValue v2 = new ServerStringValue( at1, "alex" );
+
+ assertEquals( v0.hashCode(), v1.hashCode() );
+ assertEquals( v0.hashCode(), v2.hashCode() );
+ assertEquals( v1.hashCode(), v2.hashCode() );
+
+ assertEquals( v0, v1 );
+ assertEquals( v0, v2 );
+ assertEquals( v1, v2 );
+
+ assertTrue( v0.isValid() );
+ assertTrue( v1.isValid() );
+ assertTrue( v2.isValid() );
+
+ ServerStringValue v3 = new ServerStringValue( at1, "Timber" );
+
+ assertTrue( v3.isValid() );
+ assertNotSame( v0.hashCode(), v3.hashCode() );
+
+ ServerStringValue v4 = new ServerStringValue( at, "Alex" );
+
+ assertNotSame( v0.hashCode(), v4.hashCode() );
+ }
+
+
+ /**
+ * Test the compareTo method
+ */
+ @Test
+ public void testCompareTo()
+ {
+ AttributeType at1 = TestServerEntryUtils.getCaseIgnoringAttributeNoNumbersType();
+ ServerStringValue v0 = new ServerStringValue( at1, "Alex" );
+ ServerStringValue v1 = new ServerStringValue( at1, "ALEX" );
+
+ assertEquals( 0, v0.compareTo( v1 ) );
+ assertEquals( 0, v1.compareTo( v0 ) );
+
+ ServerStringValue v2 = new ServerStringValue( at1, null );
+
+ assertEquals( 1, v0.compareTo( v2 ) );
+ assertEquals( -1, v2.compareTo( v0 ) );
+ }
+
+
+ /**
+ * Test the clone method
+ */
+ @Test
+ public void testClone() throws NamingException
+ {
+ AttributeType at1 = TestServerEntryUtils.getCaseIgnoringAttributeNoNumbersType();
+ ServerStringValue ssv = new ServerStringValue( at1, "Test" );
+
+ ServerStringValue ssv1 = ssv.clone();
+
+ assertEquals( ssv, ssv1 );
+
+ ssv.set( "" );
+
+ assertNotSame( ssv, ssv1 );
+ assertEquals( "", ssv.getString() );
+
+ ssv.set( " This is a TEST " );
+ ssv1 = ssv.clone();
+
+ assertEquals( ssv, ssv1 );
+
+ ssv.normalize();
+
+ assertEquals( ssv, ssv1 );
+ }
+
+
+ /**
+ * Presumes an attribute which constrains it's values to some constant
+ * strings: LOW, MEDIUM, HIGH. Normalization does nothing. MatchingRules
+ * are exact case matching.
+ *
+ * @throws Exception on errors
+ */
+ @Test public void testConstrainedString()
+ {
+ s.setSyntaxChecker( new SyntaxChecker() {
+ public String getSyntaxOid() { return "1.1.1.1"; }
+ public boolean isValidSyntax( Object value )
+ {
+ if ( value instanceof String )
+ {
+ String strval = ( String ) value;
+ return strval.equals( "HIGH" ) || strval.equals( "LOW" ) || strval.equals( "MEDIUM" );
+ }
+ return false;
+ }
+ public void assertSyntax( Object value ) throws NamingException
+ { if ( ! isValidSyntax( value ) ) {throw new InvalidAttributeValueException(); }}
+ });
+
+ mr.syntax = s;
+ mr.comparator = new Comparator<String>()
+ {
+ public int compare( String o1, String o2 )
+ {
+ if ( o1 == null )
+ {
+ if ( o2 == null )
+ {
+ return 0;
+ }
+ else
+ {
+ return -1;
+ }
+ }
+ else if ( o2 == null )
+ {
+ return 1;
+ }
+
+ int i1 = getValue( o1 );
+ int i2 = getValue( o2 );
+
+ if ( i1 == i2 ) { return 0; }
+ if ( i1 > i2 ) { return 1; }
+ if ( i1 < i2 ) { return -1; }
+
+ throw new IllegalStateException( "should not get here at all" );
+ }
+
+ public int getValue( String val )
+ {
+ if ( val.equals( "LOW" ) ) { return 0; }
+ if ( val.equals( "MEDIUM" ) ) { return 1; }
+ if ( val.equals( "HIGH" ) ) { return 2; }
+ throw new IllegalArgumentException( "Not a valid value" );
+ }
+ };
+ mr.normalizer = new NoOpNormalizer();
+ at.setEquality( mr );
+ at.setSyntax( s );
+
+ // check that normalization and syntax checks work as expected
+ ServerStringValue value = new ServerStringValue( at, "HIGH" );
+ assertEquals( value.get(), value.get() );
+ assertTrue( value.isValid() );
+ value = new ServerStringValue( at, "high" );
+ assertFalse( value.isValid() );
+
+ // create a bunch to best tested for equals and in containers
+ ServerStringValue v0 = new ServerStringValue( at, "LOW" );
+ assertTrue( v0.isValid() );
+ ServerStringValue v1 = new ServerStringValue( at, "LOW" );
+ assertTrue( v1.isValid() );
+ ServerStringValue v2 = new ServerStringValue( at, "MEDIUM" );
+ assertTrue( v2.isValid() );
+ ServerStringValue v3 = new ServerStringValue( at, "HIGH" );
+ assertTrue( v3.isValid() );
+ ServerStringValue v4 = new ServerStringValue( at );
+ assertFalse( v4.isValid() );
+ ServerStringValue v5 = new ServerStringValue( at );
+ assertFalse( v5.isValid() );
+
+ // check equals
+ assertTrue( v0.equals( v1 ) );
+ assertTrue( v1.equals( v0 ) );
+ assertEquals( 0, v0.compareTo( v1 ) );
+
+ assertTrue( v4.equals( v5 ) );
+ assertTrue( v5.equals( v4 ) );
+ assertEquals( 0, v4.compareTo( v5 ) );
+
+ assertFalse( v2.equals( v3 ) );
+ assertFalse( v3.equals( v2 ) );
+ assertTrue( v2.compareTo( v3 ) < 0 );
+ assertTrue( v3.compareTo( v2 ) > 0 );
+
+ // add all except v1 and v5 to a set
+ HashSet<ServerStringValue> set = new HashSet<ServerStringValue>();
+ set.add( v0 );
+ set.add( v2 );
+ set.add( v3 );
+ set.add( v4 );
+
+ // check contains method
+ assertTrue( "since v1.equals( v0 ) and v0 was added then this should be true", set.contains( v1 ) );
+ assertTrue( "since v4.equals( v5 ) and v4 was added then this should be true", set.contains( v5 ) );
+
+ // check ordering based on the comparator
+ List<Value<String>> list = new ArrayList<Value<String>>();
+ list.add( v1 );
+ list.add( v3 );
+ list.add( v5 );
+ list.add( v0 );
+ list.add( v2 );
+ list.add( v4 );
+
+ Collections.sort( list );
+
+ // null ones are at first 2 indices
+ assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 0 ).equals( v4 ) );
+ assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 0 ).equals( v5 ) );
+ assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 1 ).equals( v4 ) );
+ assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 1 ).equals( v5 ) );
+
+ // low ones are at the 3rd and 4th indices
+ assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 2 ).equals( v0 ) );
+ assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 2 ).equals( v1 ) );
+ assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 3 ).equals( v0 ) );
+ assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 3 ).equals( v1 ) );
+
+ // medium then high next
+ assertTrue( "since v2 \"MEDIUM\" should be at index 4", list.get( 4 ).equals( v2 ) );
+ assertTrue( "since v3 \"HIGH\" should be at index 5", list.get( 5 ).equals( v3 ) );
+
+ assertEquals( 6, list.size() );
+ }
+
+
+ /**
+ * Creates a string value with an attribute type that is of a syntax
+ * which accepts anything. Also there is no normalization since the
+ * value is the same as the normalized value. This makes the at technically
+ * a binary value however it can be dealt with as a string so this test
+ * is still OK.
+ * @throws Exception on errors
+ */
+ @Test public void testAcceptAllNoNormalization()
+ {
+ // check that normalization and syntax checks work as expected
+ ServerStringValue value = new ServerStringValue( at, "hello" );
+ assertEquals( value.get(), value.get() );
+ assertTrue( value.isValid() );
+
+ // create a bunch to best tested for equals and in containers
+ ServerStringValue v0 = new ServerStringValue( at, "hello" );
+ ServerStringValue v1 = new ServerStringValue( at, "hello" );
+ ServerStringValue v2 = new ServerStringValue( at, "next0" );
+ ServerStringValue v3 = new ServerStringValue( at, "next1" );
+ ServerStringValue v4 = new ServerStringValue( at );
+ ServerStringValue v5 = new ServerStringValue( at );
+
+ // check equals
+ assertTrue( v0.equals( v1 ) );
+ assertTrue( v1.equals( v0 ) );
+ assertTrue( v4.equals( v5 ) );
+ assertTrue( v5.equals( v4 ) );
+ assertFalse( v2.equals( v3 ) );
+ assertFalse( v3.equals( v2 ) );
+
+ // add all except v1 and v5 to a set
+ HashSet<ServerStringValue> set = new HashSet<ServerStringValue>();
+ set.add( v0 );
+ set.add( v2 );
+ set.add( v3 );
+ set.add( v4 );
+
+ // check contains method
+ assertTrue( "since v1.equals( v0 ) and v0 was added then this should be true", set.contains( v1 ) );
+ assertTrue( "since v4.equals( v5 ) and v4 was added then this should be true", set.contains( v5 ) );
+
+ // check ordering based on the comparator
+ ArrayList<ServerStringValue> list = new ArrayList<ServerStringValue>();
+ list.add( v1 );
+ list.add( v3 );
+ list.add( v5 );
+ list.add( v0 );
+ list.add( v2 );
+ list.add( v4 );
+
+ Comparator<ServerStringValue> c = new Comparator<ServerStringValue>()
+ {
+ public int compare( ServerStringValue o1, ServerStringValue o2 )
+ {
+ String n1 = null;
+ String n2 = null;
+
+ if ( o1 != null )
+ {
+ n1 = o1.getString();
+ }
+
+ if ( o2 != null )
+ {
+ n2 = o2.getString();
+ }
+
+ if ( n1 == null )
+ {
+ return ( n2 == null ) ? 0 : -1;
+ }
+ else if ( n2 == null )
+ {
+ return 1;
+ }
+
+ try
+ {
+ return mr.getComparator().compare( n1, n2 );
+ }
+ catch ( NamingException ne )
+ {
+ throw new IllegalStateException( "Normalization and comparison should succeed!", ne );
+ }
+ }
+ };
+
+ Collections.sort( list, c );
+
+ assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 0 ).equals( v4 ) );
+ assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 0 ).equals( v5 ) );
+ assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 1 ).equals( v4 ) );
+ assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 1 ).equals( v5 ) );
+
+ assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 2 ).equals( v0 ) );
+ assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 2 ).equals( v1 ) );
+ assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 3 ).equals( v0 ) );
+ assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 3 ).equals( v1 ) );
+
+ assertTrue( "since v2 \"next0\" should be at index 4", list.get( 4 ).equals( v2 ) );
+ assertTrue( "since v3 \"next1\" should be at index 5", list.get( 5 ).equals( v3 ) );
+
+ assertEquals( 6, list.size() );
+ }
+
+
+ /**
+ * Test serialization of a StringValue which has a normalized value
+ */
+ @Test public void testNormalizedStringValueSerialization() throws NamingException, IOException, ClassNotFoundException
+ {
+ // First check with a value which will be normalized
+ ServerStringValue ssv = new ServerStringValue( at, " Test Test " );
+
+ ssv.normalize();
+ String normalized = ssv.getNormalizedValue();
+
+ assertEquals( "test test", normalized );
+ assertEquals( " Test Test ", ssv.getString() );
+
+ ServerStringValue ssvSer = deserializeValue( serializeValue( ssv ), at );
+
+ assertEquals( ssv, ssvSer );
+ }
+
+
+ /**
+ * Test serialization of a StringValue which does not have a normalized value
+ */
+ @Test public void testNoNormalizedStringValueSerialization() throws NamingException, IOException, ClassNotFoundException
+ {
+ // First check with a value which will be normalized
+ ServerStringValue ssv = new ServerStringValue( at, "test" );
+
+ ssv.normalize();
+ String normalized = ssv.getNormalizedValue();
+
+ assertEquals( "test", normalized );
+ assertEquals( "test", ssv.getString() );
+
+ ServerStringValue ssvSer = deserializeValue( serializeValue( ssv ), at );
+
+ assertEquals( ssv, ssvSer );
+ }
+
+
+ /**
+ * Test serialization of a null StringValue
+ */
+ @Test public void testNullStringValueSerialization() throws NamingException, IOException, ClassNotFoundException
+ {
+ // First check with a value which will be normalized
+ ServerStringValue ssv = new ServerStringValue( at );
+
+ ssv.normalize();
+ String normalized = ssv.getNormalizedValue();
+
+ assertNull( normalized );
+ assertNull( ssv.get() );
+
+ ServerStringValue ssvSer = deserializeValue( serializeValue( ssv ), at );
+
+ assertEquals( ssv, ssvSer );
+ }
+
+
+ /**
+ * Test serialization of an empty StringValue
+ */
+ @Test public void testEmptyStringValueSerialization() throws NamingException, IOException, ClassNotFoundException
+ {
+ // First check with a value which will be normalized
+ ServerStringValue ssv = new ServerStringValue( at, "" );
+
+ ssv.normalize();
+ String normalized = ssv.getNormalizedValue();
+
+ assertEquals( "", normalized );
+ assertEquals( "", ssv.getString() );
+
+ ServerStringValue ssvSer = deserializeValue( serializeValue( ssv ), at );
+
+ assertEquals( ssv, ssvSer );
+ }
+
+
+ /**
+ * Test serialization of an empty StringValue
+ */
+ @Test public void testStringValueEmptyNormalizedSerialization() throws NamingException, IOException, ClassNotFoundException
+ {
+ // First check with a value which will be normalized
+ ServerStringValue ssv = new ServerStringValue( at, " " );
+
+ assertEquals( " ", ssv.getString() );
+
+ ServerStringValue ssvSer = deserializeValue( serializeValue( ssv ), at );
+
+ assertEquals( ssv, ssvSer );
+ }
+}
Modified: directory/apacheds/trunk/core-integ/src/main/java/org/apache/directory/server/core/integ/AnnotationUtils.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-integ/src/main/java/org/apache/directory/server/core/integ/AnnotationUtils.java?rev=801340&r1=801339&r2=801340&view=diff
==============================================================================
--- directory/apacheds/trunk/core-integ/src/main/java/org/apache/directory/server/core/integ/AnnotationUtils.java (original)
+++ directory/apacheds/trunk/core-integ/src/main/java/org/apache/directory/server/core/integ/AnnotationUtils.java Wed Aug 5 17:55:15 2009
@@ -1,76 +1,76 @@
-/*
- * 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.directory.server.core.integ;
-
-
-import org.apache.directory.server.core.integ.annotations.*;
-
-
-/**
- * Various utility methods for dealing with annotations all over.
- *
- * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
- * @version $Rev$, $Date$
- */
-public class AnnotationUtils
-{
- public static SetupMode getMode( Mode modeAnnotation, SetupMode defaultMode )
- {
- if ( modeAnnotation != null && modeAnnotation.value() != null )
- {
- return modeAnnotation.value();
- }
- else
- {
- return defaultMode;
- }
- }
-
-
- public static DirectoryServiceFactory newFactory( Factory factoryAnnotation,
- DirectoryServiceFactory defaultFactory )
- {
- DirectoryServiceFactory factory = defaultFactory;
-
- if ( factoryAnnotation != null )
- {
- try
- {
- factory = ( DirectoryServiceFactory ) factoryAnnotation.getClass().newInstance();
- }
- catch ( ClassCastException e )
- {
- throw new RuntimeException( "The specified factory '" +
- factoryAnnotation.getClass() + "' does not implement DirectoryServiceFactory", e );
- }
- catch ( InstantiationException e )
- {
- throw new RuntimeException( "The specified factory '" +
- factoryAnnotation.getClass() + "' does not contain a default constructor", e );
- }
- catch ( IllegalAccessException e )
- {
- throw new RuntimeException( "The specified factory '" +
- factoryAnnotation.getClass() + "' does not contain a public default constructor", e );
- }
- }
-
- return factory;
- }
-}
+/*
+ * 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.directory.server.core.integ;
+
+
+import org.apache.directory.server.core.integ.annotations.*;
+
+
+/**
+ * Various utility methods for dealing with annotations all over.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class AnnotationUtils
+{
+ public static SetupMode getMode( Mode modeAnnotation, SetupMode defaultMode )
+ {
+ if ( modeAnnotation != null && modeAnnotation.value() != null )
+ {
+ return modeAnnotation.value();
+ }
+ else
+ {
+ return defaultMode;
+ }
+ }
+
+
+ public static DirectoryServiceFactory newFactory( Factory factoryAnnotation,
+ DirectoryServiceFactory defaultFactory )
+ {
+ DirectoryServiceFactory factory = defaultFactory;
+
+ if ( factoryAnnotation != null )
+ {
+ try
+ {
+ factory = ( DirectoryServiceFactory ) factoryAnnotation.getClass().newInstance();
+ }
+ catch ( ClassCastException e )
+ {
+ throw new RuntimeException( "The specified factory '" +
+ factoryAnnotation.getClass() + "' does not implement DirectoryServiceFactory", e );
+ }
+ catch ( InstantiationException e )
+ {
+ throw new RuntimeException( "The specified factory '" +
+ factoryAnnotation.getClass() + "' does not contain a default constructor", e );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new RuntimeException( "The specified factory '" +
+ factoryAnnotation.getClass() + "' does not contain a public default constructor", e );
+ }
+ }
+
+ return factory;
+ }
+}
Modified: directory/apacheds/trunk/core-integ/src/main/java/org/apache/directory/server/core/integ/DirectoryServiceFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-integ/src/main/java/org/apache/directory/server/core/integ/DirectoryServiceFactory.java?rev=801340&r1=801339&r2=801340&view=diff
==============================================================================
--- directory/apacheds/trunk/core-integ/src/main/java/org/apache/directory/server/core/integ/DirectoryServiceFactory.java (original)
+++ directory/apacheds/trunk/core-integ/src/main/java/org/apache/directory/server/core/integ/DirectoryServiceFactory.java Wed Aug 5 17:55:15 2009
@@ -1,57 +1,57 @@
-/*
- * 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.directory.server.core.integ;
-
-
-import org.apache.directory.server.core.DefaultDirectoryService;
-import org.apache.directory.server.core.DirectoryService;
-
-
-/**
- * A factory used to generate differently configured DirectoryService objects.
- * Since the DirectoryService itself is what is configured then a factory for
- * these objects acts as a configurator. Tests can provide different factory
- * methods to be used.
- *
- * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
- * @version $Rev$, $Date$
- */
-public interface DirectoryServiceFactory
-{
- /**
- * The default factory returns stock instances of a directory
- * service with smart defaults
- */
- DirectoryServiceFactory DEFAULT = new DirectoryServiceFactory()
- {
- public DirectoryService newInstance()
- {
- DirectoryService service = new DefaultDirectoryService();
- service.getChangeLog().setEnabled( true );
-
- // change the working directory to something that is unique
- // on the system and somewhere either under target directory
- // or somewhere in a temp area of the machine.
-
- return service;
- }
- };
-
- DirectoryService newInstance() throws Exception;
-}
+/*
+ * 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.directory.server.core.integ;
+
+
+import org.apache.directory.server.core.DefaultDirectoryService;
+import org.apache.directory.server.core.DirectoryService;
+
+
+/**
+ * A factory used to generate differently configured DirectoryService objects.
+ * Since the DirectoryService itself is what is configured then a factory for
+ * these objects acts as a configurator. Tests can provide different factory
+ * methods to be used.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public interface DirectoryServiceFactory
+{
+ /**
+ * The default factory returns stock instances of a directory
+ * service with smart defaults
+ */
+ DirectoryServiceFactory DEFAULT = new DirectoryServiceFactory()
+ {
+ public DirectoryService newInstance()
+ {
+ DirectoryService service = new DefaultDirectoryService();
+ service.getChangeLog().setEnabled( true );
+
+ // change the working directory to something that is unique
+ // on the system and somewhere either under target directory
+ // or somewhere in a temp area of the machine.
+
+ return service;
+ }
+ };
+
+ DirectoryService newInstance() throws Exception;
+}