From 2439f5121bd2989daae452410ea14b61fc0e0775 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Fri, 25 Jun 2010 10:30:42 +0000
Subject: [PATCH] Fixes an issue when deleting a password policy

---
 opends/tests/unit-tests-testng/src/server/org/opends/server/api/DITCacheMapTestCase.java |   78 +++++++++++++++++++++++++++++++++++++++
 opends/src/server/org/opends/server/api/DITCacheMap.java                                 |   37 +++++++++++-------
 2 files changed, 101 insertions(+), 14 deletions(-)

diff --git a/opends/src/server/org/opends/server/api/DITCacheMap.java b/opends/src/server/org/opends/server/api/DITCacheMap.java
index 6f2d335..543cfab 100644
--- a/opends/src/server/org/opends/server/api/DITCacheMap.java
+++ b/opends/src/server/org/opends/server/api/DITCacheMap.java
@@ -116,7 +116,7 @@
   private Map<DN,Node<T>> ditCacheMap;
 
   /**
-   * Default contructor.
+   * Default constructor.
    */
   public DITCacheMap()
   {
@@ -124,7 +124,7 @@
   }
 
   /**
-   * Contructs a new DITCacheMap from a given Map.
+   * Constructs a new DITCacheMap from a given Map.
    * @param m existing Map to construct new
    *          DITCacheMap from.
    */
@@ -683,6 +683,13 @@
       {
         if (rootNode != null)
         {
+          if (node == rootNode)
+          {
+            if (rootNode.element != null)
+            {
+              return true;
+            }
+          }
           while (node != null)
           {
             if (node.element != null)
@@ -695,13 +702,10 @@
             }
             else
             {
-              if (node != rootNode)
+              while ((node.next == null) &&
+                     (node.parent != rootNode))
               {
-                while ((node.next == null) &&
-                       (node.parent != rootNode))
-                {
-                  node = node.parent;
-                }
+                node = node.parent;
               }
               node = node.next;
             }
@@ -719,6 +723,14 @@
 
         if (rootNode != null)
         {
+          if (node == rootNode)
+          {
+            node = rootNode.child;
+            if (rootNode.element != null)
+            {
+              return rootNode.element;
+            }
+          }
           while (node != null)
           {
             if (node.element != null)
@@ -735,13 +747,10 @@
             }
             else
             {
-              if (node != rootNode)
+              while ((node.next == null) &&
+                     (node.parent != rootNode))
               {
-                while ((node.next == null) &&
-                       (node.parent != rootNode))
-                {
-                  node = node.parent;
-                }
+                node = node.parent;
               }
               node = node.next;
             }
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/api/DITCacheMapTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/api/DITCacheMapTestCase.java
index 75c8d50..74832b6 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/api/DITCacheMapTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/api/DITCacheMapTestCase.java
@@ -292,6 +292,21 @@
     assertFalse(subtreeSet.isEmpty());
     assertEquals(subtreeSet.size(), 1);
     assertTrue(subtreeSet.contains(dn0String));
+
+    subtreeSet = ditMap.getSubtree(dn1);
+    assertFalse(subtreeSet.isEmpty());
+    assertEquals(subtreeSet.size(), 1);
+    assertTrue(subtreeSet.contains(dn1String));
+
+    subtreeSet = ditMap.getSubtree(dn2);
+    assertFalse(subtreeSet.isEmpty());
+    assertEquals(subtreeSet.size(), 1);
+    assertTrue(subtreeSet.contains(dn2String));
+
+    subtreeSet = ditMap.getSubtree(dn3);
+    assertFalse(subtreeSet.isEmpty());
+    assertEquals(subtreeSet.size(), 1);
+    assertTrue(subtreeSet.contains(dn3String));
   }
 
   @Test()
@@ -492,5 +507,68 @@
     assertTrue(ditMap.containsKey(dn7));
     assertTrue(ditMap.containsKey(dn8));
     assertTrue(ditMap.containsKey(dn9));
+
+    clearTestMap();
+
+    putAllAndVerify();
+
+    removeSet.clear();
+    assertTrue(ditMap.removeSubtree(dn1,
+            removeSet));
+    assertFalse(removeSet.isEmpty());
+    assertEquals(removeSet.size(), 1);
+    assertTrue(removeSet.contains(dn1String));
+    assertEquals(ditMap.size(), 9);
+    assertTrue(ditMap.containsKey(dn0));
+    assertTrue(ditMap.containsKey(dn2));
+    assertTrue(ditMap.containsKey(dn3));
+    assertTrue(ditMap.containsKey(dn4));
+    assertTrue(ditMap.containsKey(dn5));
+    assertTrue(ditMap.containsKey(dn6));
+    assertTrue(ditMap.containsKey(dn7));
+    assertTrue(ditMap.containsKey(dn8));
+    assertTrue(ditMap.containsKey(dn9));
+
+    clearTestMap();
+
+    putAllAndVerify();
+
+    removeSet.clear();
+    assertTrue(ditMap.removeSubtree(dn2,
+            removeSet));
+    assertFalse(removeSet.isEmpty());
+    assertEquals(removeSet.size(), 1);
+    assertTrue(removeSet.contains(dn2String));
+    assertEquals(ditMap.size(), 9);
+    assertTrue(ditMap.containsKey(dn0));
+    assertTrue(ditMap.containsKey(dn1));
+    assertTrue(ditMap.containsKey(dn3));
+    assertTrue(ditMap.containsKey(dn4));
+    assertTrue(ditMap.containsKey(dn5));
+    assertTrue(ditMap.containsKey(dn6));
+    assertTrue(ditMap.containsKey(dn7));
+    assertTrue(ditMap.containsKey(dn8));
+    assertTrue(ditMap.containsKey(dn9));
+
+    clearTestMap();
+
+    putAllAndVerify();
+
+    removeSet.clear();
+    assertTrue(ditMap.removeSubtree(dn3,
+            removeSet));
+    assertFalse(removeSet.isEmpty());
+    assertEquals(removeSet.size(), 1);
+    assertTrue(removeSet.contains(dn3String));
+    assertEquals(ditMap.size(), 9);
+    assertTrue(ditMap.containsKey(dn0));
+    assertTrue(ditMap.containsKey(dn1));
+    assertTrue(ditMap.containsKey(dn2));
+    assertTrue(ditMap.containsKey(dn4));
+    assertTrue(ditMap.containsKey(dn5));
+    assertTrue(ditMap.containsKey(dn6));
+    assertTrue(ditMap.containsKey(dn7));
+    assertTrue(ditMap.containsKey(dn8));
+    assertTrue(ditMap.containsKey(dn9));
   }
 }

--
Gitblit v1.10.0