From e4c9a36eaf27166c62f1d4e101aa7f40032624f6 Mon Sep 17 00:00:00 2001 From: Mattias Arthursson Date: Wed, 10 Jan 2007 18:37:09 +0000 Subject: [PATCH] Fix for LDAP-15: DirContextAdapter.setAttribute() --- .../ldap/support/DirContextAdapter.java | 6 +++- .../ldap/support/DirContextAdapterTest.java | 29 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/spring-ldap/src/main/java/org/springframework/ldap/support/DirContextAdapter.java b/spring-ldap/src/main/java/org/springframework/ldap/support/DirContextAdapter.java index 689c70dc..6d29df2c 100644 --- a/spring-ldap/src/main/java/org/springframework/ldap/support/DirContextAdapter.java +++ b/spring-ldap/src/main/java/org/springframework/ldap/support/DirContextAdapter.java @@ -710,7 +710,11 @@ public class DirContextAdapter implements DirContextOperations { * the attribute to set. */ public void setAttribute(Attribute attribute) { - attrs.put(attribute); + if (!updateMode) { + attrs.put(attribute); + } else { + updatedAttrs.put(attribute); + } } /** diff --git a/spring-ldap/src/test/java/org/springframework/ldap/support/DirContextAdapterTest.java b/spring-ldap/src/test/java/org/springframework/ldap/support/DirContextAdapterTest.java index e25fc1e6..427ff581 100644 --- a/spring-ldap/src/test/java/org/springframework/ldap/support/DirContextAdapterTest.java +++ b/spring-ldap/src/test/java/org/springframework/ldap/support/DirContextAdapterTest.java @@ -17,6 +17,7 @@ package org.springframework.ldap.support; import javax.naming.Name; +import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; @@ -653,6 +654,34 @@ public class DirContextAdapterTest extends TestCase { assertEquals("new", classUnderTest.getStringAttribute("zzz")); } + /** + * Test for LDAP-15: DirContextAdapter.setAttribute(). Verifies that setting + * an Attribute should modify updatedAttrs if in update mode. + * + * @throws NamingException + */ + public void testSetAttribute_UpdateMode() throws NamingException { + // Set original attribute value + Attribute attribute = new BasicAttribute("cn", "john doe"); + classUnderTest.setAttribute(attribute); + + // Set to update mode + classUnderTest.setUpdateMode(true); + + // Perform test - update the attribute + Attribute updatedAttribute = new BasicAttribute("cn", "nisse hult"); + classUnderTest.setAttribute(updatedAttribute); + + // Verify result + ModificationItem[] mods = classUnderTest.getModificationItems(); + assertEquals(1, mods.length); + assertEquals(DirContext.REPLACE_ATTRIBUTE, mods[0].getModificationOp()); + + Attribute modificationAttribute = mods[0].getAttribute(); + assertEquals("cn", modificationAttribute.getID()); + assertEquals("nisse hult", modificationAttribute.get()); + } + private ModificationItem getModificationItem(ModificationItem[] mods, int operation) { for (int i = 0; i < mods.length; i++) {