You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ar...@apache.org on 2008/09/29 16:06:19 UTC

svn commit: r700134 [2/2] - in /incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management: ./ configuration/ domain/ domain/handler/ domain/handler/base/ domain/model/ domain/model/type/

Added: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidPropertyBuilderTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidPropertyBuilderTest.java?rev=700134&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidPropertyBuilderTest.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidPropertyBuilderTest.java Mon Sep 29 07:06:18 2008
@@ -0,0 +1,271 @@
+/*
+ *
+ * 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.qpid.management.domain.model;
+
+import static org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute.access;
+import static org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute.index;
+import static org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute.max;
+import static org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute.min;
+import static org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute.optional;
+import static org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute.type;
+import static org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute.unit;
+
+import javax.management.MBeanAttributeInfo;
+
+import org.apache.qpid.management.configuration.UnknownTypeCodeException;
+import org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute;
+
+/**
+ * Test case for Qpid Property builder.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class QpidPropertyBuilderTest extends BaseQpidFeatureBuilderTestCase
+{
+    private final static Integer MIN = 0;
+    private final static Integer MAX = 120;
+    private final static String UNIT = "bytes";
+    
+    private Integer _access;
+    
+    @Override
+    protected void setUp () throws Exception
+    {
+        super.setUp();
+
+        _access = 1;
+        configurator.addAccessModeMapping(_access.toString(), AccessMode.RW.name());
+        
+        _featureDefinition.put(access.name(), _access);
+        _featureDefinition.put(unit.name(),UNIT);
+        _featureDefinition.put(min.name(), MIN);
+        _featureDefinition.put(max.name(),MAX);
+
+        _featureDefinition.put(type.name(), _type);
+        _featureDefinition.put(optional.name(),0);
+        _featureDefinition.put(index.name(), 0);
+        
+        _builder = QpidFeatureBuilder.createPropertyBuilder(_featureDefinition);
+    }
+
+    /**
+     * Tests the build process for a statistic when the definition map contains an unknown type code.
+     * 
+     * <br>precondition : the statistic definiton map contains an unknown type code.
+     * <br>postcondition : an exception is thrown indicating the failure.
+     */
+    public void testStatisticBuilderKO_WithUnknownType() 
+    {
+        int unknownTypeCode =999;
+        try
+        {
+            _featureDefinition.put(type.name(), unknownTypeCode);
+            _builder.build();
+            fail("An unknown type code should raise an exception to indicate a failure.");
+        } catch (UnableToBuildFeatureException expected)
+        {
+            assertEquals(unknownTypeCode,((UnknownTypeCodeException)expected.getCause()).getCode());
+        }
+    }
+    
+    /**
+     * Tests the build process for a statistic when the definition map contains a null value for a metadata attribute.
+     * 
+     * <br>precondition : the statistic definiton map contains a null value for a metadata attribute.
+     * <br>postcondition : an exception is thrown indicating the failure.
+     */
+    public void testMethodBuilderKO_WithNullMetadataValue() 
+    {
+        try
+        {
+            _featureDefinition.put(type.name(), null);
+            _builder.build();
+            fail("An null value for a metadata attribute should raise an exception to indicate a failure.");
+        } catch (UnableToBuildFeatureException expected)
+        {
+            assertTrue(expected.getCause() instanceof NullPointerException);
+        }
+    }    
+    
+    /**
+     * Tests the build process for a property when the definition map contains an invalid metadata type.
+     * 
+     * <br>precondition : the property definiton map contains a wrong type for a metadata attribute.
+     * <br>postcondition : an exception is thrown indicating the failure.
+     */
+    public void testPropertyBuilderKO_WithClassCastException() 
+    {
+        try
+        {
+            _featureDefinition.put(access.name(), new String("a"));
+            _builder.build();
+            fail("A wrong metadata attribute type should raise an exception to indicate a failure.");
+        } catch (UnableToBuildFeatureException expected)
+        {
+            assertTrue(expected.getCause() instanceof ClassCastException);
+        }
+    }    
+    
+    /**
+     * Tests the build process for a property when the definition map contains an unknown type code.
+     * 
+     * <br>precondition : the property definiton map contains an unknown type code.
+     * <br>postcondition : an exception is thrown indicating the failure.
+     */
+    public void testPropertyBuilderKO_WithUnknownType() 
+    {
+        int unknownTypeCode = 999;
+        try
+        {
+            _featureDefinition.put(type.name(), unknownTypeCode);
+            _builder.build();
+            fail("An unknown type code should raise an exception to indicate a failure.");
+        } catch (UnableToBuildFeatureException expected)
+        {
+            assertEquals(unknownTypeCode,((UnknownTypeCodeException)expected.getCause()).getCode());
+        }
+    }
+
+    /**
+     * Tests the build process for a property when the definition map doesn't contains type attribute.
+     * 
+     * <br>precondition: definition map doesn't contains type attribute.
+     * <br>postcondition : an exception should be thrown indicating the failure. That exception must contain the name of the 
+     * missing attribute.
+     */
+    public void testPropertyBuilderKO_WithMissingType()
+    {
+        internalTestForMissingMandatoryAttribute(Attribute.type);
+    }
+
+    /**
+     * Tests the build process for a property when the definition map doesn't contain type & name attributes.
+     * 
+     * <br>precondition: definition map doesn't contain type & name attributes.
+     * <br>postcondition : an exception should be thrown indicating the failure. That exception must contain the name of the 
+     * missing attributes.
+     */
+    public void testPropertyBuilderKO_WithMissingTypeAndName()
+    {
+        internalTestForMissingMandatoryAttribute(Attribute.type, Attribute.name);
+    }
+
+    /**
+     * Tests the build process for a property when the definition map doesn't contain type & name & index attributes.
+     * 
+     * <br>precondition: definition map doesn't contain type & name & index attributes.
+     * <br>postcondition : an exception should be thrown indicating the failure. That exception must contain the name of the 
+     * missing attributes.
+     */
+    public void testPropertyBuilderKO_WithMissingTypeAndNameAndIndex()
+    {
+        internalTestForMissingMandatoryAttribute(Attribute.type, Attribute.name,Attribute.index);
+    }
+
+    /**
+     * Tests the build process for a property when the definition map doesn't contain type, name, index & optional attributes.
+     * 
+     * <br>precondition: definition map doesn't contain type, name, index & optional attributes.
+     * <br>postcondition : an exception should be thrown indicating the failure. That exception must contain the name of the 
+     * missing attributes.
+     */
+    public void testPropertyBuilderKO_WithMissingTypeAndNameAndIndexAndOptional()
+    {
+        internalTestForMissingMandatoryAttribute(Attribute.type, Attribute.name,Attribute.index,Attribute.optional);
+    }
+
+    /**
+     * Tests the build process for a property when the definition map doesn't contain type, name, index, optional and access 
+     * attributes.
+     * 
+     * <br>precondition: definition map doesn't contain type, name, index, optional and access attributes.
+     * <br>postcondition : an exception should be thrown indicating the failure. That exception must contain the name of the 
+     * missing attributes.
+     */
+    public void testPropertyBuilderKO_WithMissingTypeAndNameAndIndexAndOptionalAndAccess()
+    {
+        internalTestForMissingMandatoryAttribute(Attribute.type, Attribute.name,Attribute.index,Attribute.optional,Attribute.access);
+    }
+    
+    /**
+     * Tests the build process for a property when the definition map doesn't unit attribute.
+     * Note that this attribute is optional and therefore the build must succeed.
+     * 
+     * <br>precondition: definition map doesn't contain unit attribute.
+     * <br>postcondition : no exception is thrown and the property is built.
+     */
+    public void testBuilderOK_WithMissingUnit() throws UnableToBuildFeatureException
+    {
+        internalTestForMissingOptionalAttribute(Attribute.unit);  
+    }
+
+    /**
+     * Tests the build process for a property when the definition map doesn't min and max attributes.
+     * Note that those attributes are optional and therefore the build must succeed.
+     * 
+     * <br>precondition: definition map doesn't contain min and max attributes.
+     * <br>postcondition : no exception is thrown and the property is built.
+     */
+    public void testBuilderOK_WithMissingMinAndMax() throws UnableToBuildFeatureException
+    {
+        internalTestForMissingOptionalAttribute(Attribute.min,Attribute.max);  
+    }
+
+    /**
+     * Tests the build process for a property when the definition map doesn't description attribute.
+     * Note that this attribute is optional and therefore the build must succeed.
+     * 
+     * <br>precondition: definition map doesn't contain description attribute.
+     * <br>postcondition : no exception is thrown and the property is built.
+     */
+    public void testBuilderOK_WithMissingDescription() throws UnableToBuildFeatureException
+    {
+        internalTestForMissingOptionalAttribute(Attribute.desc);  
+    }
+
+    /**
+     * Tests the build process for a property when the definition map contains valid values.
+     * 
+     * <br>precondition : the property definiton map contains valid values.
+     * <br>postcondition : no exception is thrown and the property is built as expected.
+     */
+    public void testPropertyBuilderOK() throws UnableToBuildFeatureException 
+    {
+        _builder.build();
+        
+        QpidProperty property = (QpidProperty) _builder.getQpidFeature();
+        MBeanAttributeInfo info = (MBeanAttributeInfo) _builder.getManagementFeature();
+        
+        assertEquals(NAME,property.getName());
+        assertEquals(AccessMode.RW,property.getAccessMode());
+        assertEquals(UNIT,property.getUnit());
+        assertEquals(MIN.intValue(),property.getMinValue());
+        assertEquals(MAX.intValue(),property.getMaxValue());
+        assertEquals(Integer.MIN_VALUE,property.getMaxLength());
+        assertEquals(DESCRIPTION,property.getDescription());
+        assertEquals(Integer.class,property.getJavaType());
+        assertFalse(property.isOptional());
+        
+        assertEquals(property.getDescription(),info.getDescription());
+        assertEquals(property.getName(),info.getName());
+        assertEquals(property.getJavaType().getName(),info.getType());
+    }
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidStatisticBuilderTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidStatisticBuilderTest.java?rev=700134&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidStatisticBuilderTest.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidStatisticBuilderTest.java Mon Sep 29 07:06:18 2008
@@ -0,0 +1,159 @@
+/*
+ *
+ * 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.qpid.management.domain.model;
+
+import static org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute.type;
+import static org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute.unit;
+
+import javax.management.MBeanAttributeInfo;
+
+import org.apache.qpid.management.configuration.UnknownTypeCodeException;
+import org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute;
+
+/**
+ * Test case for Qpid Statistic builder.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class QpidStatisticBuilderTest extends BaseQpidFeatureBuilderTestCase
+{
+    private final static String UNIT = "bytes";
+    
+    @Override
+    protected void setUp () throws Exception
+    {  
+        super.setUp();
+        _featureDefinition.put(unit.name(),UNIT);
+        _featureDefinition.put(type.name(), _type);
+        
+        _builder = QpidFeatureBuilder.createStatisticBuilder(_featureDefinition);
+    }
+
+    /**
+     * Tests the build process for a statistic when the definition map contains an unknown type code.
+     * 
+     * <br>precondition : the statistic definiton map contains an unknown type code.
+     * <br>postcondition : an exception is thrown indicating the failure.
+     */
+    public void testStatisticBuilderKO_WithUnknownType() 
+    {
+        int unknownTypeCode = 999;
+        try
+        {
+            _featureDefinition.put(type.name(), unknownTypeCode);
+            _builder.build();
+            fail("An unknown type code should raise an exception to indicate a failure.");
+        } catch (UnableToBuildFeatureException expected)
+        {
+            assertEquals(unknownTypeCode,((UnknownTypeCodeException)expected.getCause()).getCode());
+        }
+    }
+    
+    /**
+     * Tests the build process for a statistic when the definition map contains a null value for a metadata attribute.
+     * 
+     * <br>precondition : the statistic definiton map contains a null value for a metadata attribute.
+     * <br>postcondition : an exception is thrown indicating the failure.
+     */
+    public void testMethodBuilderKO_WithNullMetadataValue() 
+    {
+        try
+        {
+            _featureDefinition.put(type.name(), null);
+            _builder.build();
+            fail("An null value for a metadata attribute should raise an exception to indicate a failure.");
+        } catch (UnableToBuildFeatureException expected)
+        {
+            assertTrue(expected.getCause() instanceof NullPointerException);
+        }
+    }        
+    
+    /**
+     * Tests the build process for a statistic when the definition map doesn't contains type attribute.
+     * 
+     * <br>precondition: definition map doesn't contains type attribute.
+     * <br>postcondition : an exception should be thrown indicating the failure. That exception must contain the name of the 
+     * missing attribute.
+     */
+    public void testStatisticBuilderKO_WithMissingType()
+    {
+        internalTestForMissingMandatoryAttribute(Attribute.type);
+    }
+
+    /**
+     * Tests the build process for a statistic when the definition map doesn't contain type & name attributes.
+     * 
+     * <br>precondition: definition map doesn't contain type & name attributes.
+     * <br>postcondition : an exception should be thrown indicating the failure. That exception must contain the name of the 
+     * missing attributes.
+     */
+    public void testStatisticBuilderKO_WithMissingTypeAndName()
+    {
+        internalTestForMissingMandatoryAttribute(Attribute.type, Attribute.name);
+    }
+
+    /**
+     * Tests the build process for a statistic when the definition map doesn't contain type, name, index & optional attributes.
+     * 
+     * <br>precondition: definition map doesn't contain type, name, index & optional attributes.
+     * <br>postcondition : an exception should be thrown indicating the failure. That exception must contain the name of the 
+     * missing attributes.
+     */
+    public void testStatisticBuilderOK_WithMissingUnit() throws UnableToBuildFeatureException
+    {
+        internalTestForMissingOptionalAttribute(Attribute.unit);
+    }
+    
+    /**
+     * Tests the build process for a statistic when the definition map doesn't unit attribute.
+     * Note that this attribute is optional and therefore the build must succeed.
+     * 
+     * <br>precondition: definition map doesn't contain unit attribute.
+     * <br>postcondition : no exception is thrown and the statistic is built.
+     */
+    public void testBuilderOK_WithMissingDescription() throws UnableToBuildFeatureException
+    {
+        internalTestForMissingOptionalAttribute(Attribute.desc);  
+    }
+
+    /**
+     * Tests the build process for a statistic when the definition map contains valid values.
+     * 
+     * <br>precondition : the statistic definiton map contains valid values.
+     * <br>postcondition : no exception is thrown and the statistisc is built as expected.
+     */
+    public void testStatisticBuilderOK() throws UnableToBuildFeatureException
+    {
+        _builder.build();
+        
+        QpidStatistic statistic= (QpidStatistic) _builder.getQpidFeature();
+        MBeanAttributeInfo info = (MBeanAttributeInfo) _builder.getManagementFeature();
+        
+        assertEquals(NAME,statistic.getName());
+        assertEquals(UNIT,statistic.getUnit());
+        assertEquals(DESCRIPTION,statistic.getDescription());
+        assertEquals(Integer.class,statistic.getJavaType());
+        
+        assertEquals(statistic.getDescription(),info.getDescription());
+        assertEquals(statistic.getName(),info.getName());
+        assertEquals(statistic.getJavaType().getName(),info.getType());
+    }
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidStringPropertyTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidStringPropertyTest.java?rev=700134&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidStringPropertyTest.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/QpidStringPropertyTest.java Mon Sep 29 07:06:18 2008
@@ -0,0 +1,123 @@
+/*
+ *
+ * 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.qpid.management.domain.model;
+
+import org.apache.qpid.management.domain.model.type.Str16;
+
+public class QpidStringPropertyTest extends BaseDomainModelTestCase
+{
+    private QpidProperty _property;
+    private final String _5LettersString = "12345";
+    
+    @Override
+    protected void setUp () throws Exception
+    {
+        super.setUp();
+        _property = new QpidProperty();
+        _property.setName("name");
+        _property.setAccessMode(AccessMode.RW);
+        _property.setType(new Str16());
+    }
+    
+    /**
+     * Tests the validation of a qpid property when the type is a string and a max length constraint hasn't been set.
+     * 
+     * <br>precondition : property type is a string, max length hasn't been set.
+     * <br>postcondition : no exception is thrown. That is : the validation succeeds.
+     */    
+    public void testValidationWithoutMaxLength() {
+        try
+        {
+            _property.validate(_5LettersString);
+        } catch (ValidationException notExpected)
+        {
+            fail("No max length has been set on property so validation must succeed.");
+        }
+    }
+    
+    /**
+     * Tests the validation of a qpid property when the type is a string and a max length constraint has been set.
+     * 
+     * <br>precondition : property type is a string, max length has been set and property value is longer than max length.
+     * <br>postcondition : an exception is thrown indicating the validation failure.
+     */
+    public void testValidationKO_withMaxLength() {
+        int maxLength = 2;
+        _property.setMaxLength(maxLength);
+        
+        try
+        {
+            _property.validate(_5LettersString);
+            fail("No max length has been set on property so validation must proceed.");
+        } catch (ValidationException expected)
+        {
+            assertEquals(ValidationException.MAX_LENGTH,expected.getConstraintName());
+            assertEquals(maxLength,expected.getConstraintValue());
+            assertEquals(_5LettersString.length(),expected.getFeatureValue());
+            assertEquals(_property.getName(),expected.getFeatureName());
+        }
+    }    
+    
+    /**
+     * Tests the validation of a qpid property when the type is a string and the property value is null.
+     * 
+     * <br>precondition : property type is a string and property value is null..
+     * <br>postcondition : no exception is thrown. That is : the validation succeeds.
+     */
+    public void testValidationOK_withNullValue() {        
+        try
+        {
+            _property.validate(null);
+        } catch (ValidationException notExpected)
+        {
+            fail("No constraint has been violated so validate() shouldn't raise an exception.");
+        }
+        
+        _property.setMaxLength(1);
+        
+        try
+        {
+            _property.validate(null);
+        } catch (ValidationException notExpected)
+        {
+            fail("No constraint has been violated so validate() shouldn't raise an exception.");
+        }
+    }    
+    
+    /**
+     * Tests the validation of a qpid property when the type is a string and a max length constraint has been set.
+     * 
+     * <br>precondition : property type is a string, max length has been set and property value is not violating that.
+     * <br>postcondition : no exception is thrown. That is : the validation succeeds.
+     */
+    public void testValidationOK_withMaxLength() {
+        int maxLength = (_5LettersString.length()+1);
+        _property.setMaxLength(maxLength);
+        
+        try
+        {
+            _property.validate(_5LettersString);
+        } catch (ValidationException notExpected)
+        {
+            fail("No constraint has been violated so validate() shouldn't raise an exception.");
+        }
+    }        
+}

Added: incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/type/BinaryTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/type/BinaryTest.java?rev=700134&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/type/BinaryTest.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/management/domain/model/type/BinaryTest.java Mon Sep 29 07:06:18 2008
@@ -0,0 +1,59 @@
+/*
+ *
+ * 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.qpid.management.domain.model.type;
+
+import junit.framework.TestCase;
+
+/**
+ * Test case for "Binary" type.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class BinaryTest extends TestCase
+{
+    /**
+     * Tests the lazy & once hash code computation behaviour of the binary type.
+     */
+    public void testHashCodeComputation(){
+        Binary binary = new Binary(new byte[]{1,2,3,4,5,6,7,6,3,3});
+        assertSame(binary.state,binary.hashCodeNotYetComputed);
+        
+        int firstResult = binary.hashCode();
+        assertSame(binary.state,binary.hashCodeAlreadyComputed);
+
+        int secondResult = binary.hashCode();
+        assertSame(binary.state,binary.hashCodeAlreadyComputed);
+        assertEquals(firstResult,secondResult);
+    }
+    
+    /**
+     * Tests the equals() method of the binary class.
+     * Two binary must be equals only if they contain the same array (that is, two arrays with the same size & content)
+     */
+    public void testIdentity() {
+        Binary binary = new Binary(new byte[]{1,2,3,4,5,6,7,6,3,3});
+        Binary theSame= new Binary(new byte[]{1,2,3,4,5,6,7,6,3,3});
+        Binary aDifferentOne = new Binary(new byte[]{4,2,3,3,4,4,5,3,3,2});
+        
+        assertTrue(binary.equals(theSame));
+        assertFalse(binary.equals(aDifferentOne));
+    }
+}
\ No newline at end of file