You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ps...@apache.org on 2004/02/22 20:38:59 UTC
svn commit: rev 6824 - incubator/directory/naming/trunk/core/src/test/org/apache/naming/resources
Author: psteitz
Date: Sun Feb 22 11:38:58 2004
New Revision: 6824
Modified:
incubator/directory/naming/trunk/core/src/test/org/apache/naming/resources/AbstractDirContextTest.java
Log:
Added schema and attribute modification tests, improved documentation.
Modified: incubator/directory/naming/trunk/core/src/test/org/apache/naming/resources/AbstractDirContextTest.java
==============================================================================
--- incubator/directory/naming/trunk/core/src/test/org/apache/naming/resources/AbstractDirContextTest.java (original)
+++ incubator/directory/naming/trunk/core/src/test/org/apache/naming/resources/AbstractDirContextTest.java Sun Feb 22 11:38:58 2004
@@ -20,17 +20,30 @@
import java.util.Map;
import javax.naming.directory.DirContext;
-import javax.naming.directory.Attributes;
import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.ModificationItem;
+import javax.naming.Name;
import javax.naming.NamingEnumeration;
+import javax.naming.NameParser;
+import javax.naming.OperationNotSupportedException;
import org.apache.naming.AbstractContextTest;
import org.apache.naming.resources.Resource;
-
-
/**
- * Unit tests for basic ops on a {@link DirContext}.
+ * Abstract base class for DirContext tests.
+ *
+ * Extends AbstractContextTest to include constructs and tests for DirContext implementations.
+ *
+ * In addition to overriding AbstractConextTest.makeInitialContext() and setting switches defined
+ * in AbstractContextTest, test classes derived from this class should:
+ *
+ * -- override isSchemaSupported() to return false if schema are not supported
+ * -- override isAttributeModificationSupported() to return false if attribute modification is not supported
+ * -- if attribute modification operations are supported, override modifyAttributeName(), modifyAttributeValue(),
+ * etc. to designate names and values appropriate for firstBoundObject() (from AbstractContextTest).
*
* @version $Revision: 1.2 $ $Date: 2003/11/30 05:36:07 $
*/
@@ -39,8 +52,7 @@
super(name);
}
- /** A few bytes to write to temp files created */
- protected byte[] bytes = {'a', 'b', 'c'};
+ // ---------------- Override test data defaults from AbstractContextTest ---------------------
/** firstContext name -- relative to InitialContext */
protected String firstContextName() {
@@ -72,6 +84,94 @@
return new Resource(new ByteArrayInputStream(bytes));
}
+ //---------------------- Test data for DirContext tests ---------------------------------------
+
+ /** A few bytes to write to temp files created */
+ protected byte[] bytes = {'a', 'b', 'c'};
+
+ /**
+ * Expected attributes associated with firstBoundObject()
+ */
+ protected Attributes expectedAttributes() {
+ return null;
+ }
+
+ /** Name parser from initialContext */
+ protected NameParser nameParser = null;
+
+
+ //-------------- Switches to turn off tests if features are not supported ---------------------
+
+ /**
+ * Does this DirContext support shema -- i.e. implement getSchema(), getSchemaClassDefinition()?
+ * Override to return false if schema methods are not supported.
+ */
+ protected boolean isSchemaSupported() {
+ return true;
+ }
+
+ /**
+ * Does this DirContext support attribute modification?
+ * Override to return false if attributes cannot be modified.
+ */
+ protected boolean isAttributeModificationSupported() {
+ return true;
+ }
+
+ //---------------- Attribute names and values for modification tests --------------------------
+ /**
+ * Name of the attribute associated with firstBoundObject() to replace.
+ * Override to return the name of an attribute of firstBoundObject() whose value can be replaced
+ * if this is supported
+ */
+ protected String replaceAttributeName() {
+ return null;
+ }
+
+ /**
+ * Replacement value for replaceAttributeName.
+ * Override to return the replacement value if this is supported.
+ */
+ protected Object replaceAttributeValue() {
+ return null;
+ }
+
+ /**
+ * Name of attribute of firstBoundObject() object to add.
+ * Override to return the name of a new attribute to add to the attributes of firstBoundObject()
+ * if this is supported.
+ */
+ protected String addAttributeName() {
+ return null;
+ }
+
+ /**
+ * Value for addAttributeName.
+ * Override to return the value for the new attribute if this is supported.
+ */
+ protected Object addAttributeValue() {
+ return null;
+ }
+
+ /**
+ * Name of attribute of firstBoundObject() to remove.
+ * Override to return the name of an attribute to remove from the attributes of firstBoundObject()
+ * if this is supported.
+ */
+ protected String removeAttributeName() {
+ return null;
+ }
+
+ // -------------- Override AbstractContextTest.setup to add nameParser intialization -----------------------------
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ nameParser = initialContext.getNameParser("");
+ }
+
+ // -------------------------------- Verification methods -----------------------------------------------
+
+ //--------------------------------- Overrides of AbstractContextTest defaults -------------------
/**
* Verify that the listed bound names match expectation and
* that the class names of bound objects are not empty
@@ -91,8 +191,36 @@
assertEquals(expected.keySet(), returned.keySet());
}
+ //--------------------------------------- DirContext verification methods ------------------------------------
+ /**
+ * Verify that the Attributes associated with <name> in <context> include an Attribute with
+ * attribute ID = <attributeName> and this Attribute contains the value <attributeValue>
+ */
+ protected void verifyAttribute(DirContext context, String name, String attributeName,
+ Object attributeValue) throws Exception {
+ String attrIds[] = new String[1];
+ attrIds[0] = attributeName;
+ Attributes attrs = context.getAttributes(name, attrIds);
+ assertTrue(attrs.get(attributeName).contains(attributeValue));
+ }
+
+ /**
+ * Verify that the Attributes associated with <name> in <context> do not include an Attribute with
+ * attribute ID = <attributeName>
+ */
+ protected void verifyAttributeMissing(DirContext context, String name, String attributeName) throws Exception {
+ String attrIds[] = new String[1];
+ attrIds[0] = attributeName;
+ Attributes attrs = context.getAttributes(name, attrIds);
+ assertEquals(0, attrs.size());
+ }
+
+ //----------------------------- Default implementations for basic tests --------------------------------------------
+
/**
- * Verify that getAttributes returns a valid NamingEnumeration of Attributes
+ * Verify that getAttributes returns a valid NamingEnumeration of Attributes.
+ * If expectedAttributes() has been overriden to return a non-null set of attributes,
+ * this set is tested for equality with the Attributes returned by getAttributes.
*/
public void testAttributes() throws Exception {
DirContext context = (DirContext) initialContext.lookup(firstContextName()+ "/" + secondContextName());
@@ -101,6 +229,76 @@
while (enum.hasMoreElements()) {
assertTrue(enum.nextElement() instanceof Attribute);
}
+ Attributes expected = expectedAttributes();
+ if (expected != null) {
+ assertEquals(expected, attrs);
+ }
}
-
+
+ /**
+ * Verify that getSchema and getSchemaClassDefinition return non-null DirContexts.
+ * This test will only be run if isSchemaSupported returns true.
+ * @throws Exception
+ */
+ public void testGetSchema() throws Exception {
+ if (!isSchemaSupported()) {
+ try {
+ ((DirContext) initialContext.lookup("")).getSchema("");
+ fail("Expecting OperationNotSupportedException");
+ } catch (OperationNotSupportedException ex) {
+ // expected
+ }
+ return;
+ }
+ DirContext context = (DirContext) initialContext.lookup("");
+ DirContext schemaContext = context.getSchema("");
+ assertNotNull(schemaContext);
+ Name name = nameParser.parse(firstContext.getNameInNamespace());
+ schemaContext = context.getSchema(name);
+ assertNotNull(schemaContext);
+ schemaContext = context.getSchema(firstBoundName());
+ assertNotNull(schemaContext);
+ schemaContext = context.getSchemaClassDefinition(name);
+ assertNotNull(schemaContext);
+ schemaContext = context.getSchemaClassDefinition(firstBoundName());
+ assertNotNull(schemaContext);
+ }
+
+ /**
+ * Tests attribute modification operations on attributes -- add, update, delete.
+ * If no attribute modifications are supported, override isAttributeModificationSupported() to return
+ * false and this test will be skipped. If one or more of add, update, delete are not supported,
+ * just leave the associated *attributeName() method returning null and the associated operation
+ * will not be tested.
+ */
+ public void testAttributeModification() throws Exception {
+ if (!isAttributeModificationSupported()) {
+ return;
+ }
+ ModificationItem[] modifications = new ModificationItem[1];
+ DirContext context = (DirContext) initialContext.lookup(firstContextName() + "/"
+ + secondContextName() +"/" + firstBoundName());
+
+ if(addAttributeName() != null) {
+ Attribute addModification = new BasicAttribute(addAttributeName(), addAttributeValue());
+ modifications[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE, addModification);
+ context.modifyAttributes("", modifications);
+ verifyAttribute(context, "", addAttributeName(), addAttributeValue());
+ }
+
+ if(replaceAttributeName() != null) {
+ Attribute replaceModification = new BasicAttribute(replaceAttributeName(), replaceAttributeValue());
+ modifications[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, replaceModification);
+ context.modifyAttributes("", modifications);
+ verifyAttribute(context, "", replaceAttributeName(), replaceAttributeValue());
+ }
+
+ if(removeAttributeName() != null) {
+ Attribute removeModification = new BasicAttribute(removeAttributeName());
+ modifications[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, removeModification);
+ context.modifyAttributes("", modifications);
+ verifyAttributeMissing(context, "", removeAttributeName());
+ }
+ }
+
}