From 8690264fc9acfbf6931aa563fa13023d6e74ad7c Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Mon, 13 Oct 2014 07:54:58 +0000
Subject: [PATCH] Fix failing unit tests caused by side-effects and unpredictable test ordering.

---
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java |  111 +++++++++++++++++++++++++++++++++----------------------
 1 files changed, 66 insertions(+), 45 deletions(-)

diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java
index 87eb52d..fb78212 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/SubentryManagerTestCase.java
@@ -28,6 +28,7 @@
 package org.opends.server.core;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 
@@ -63,7 +64,6 @@
 import static org.forgerock.opendj.ldap.ModificationType.*;
 import static org.opends.server.TestCaseUtils.*;
 import static org.opends.server.protocols.internal.InternalClientConnection.*;
-import static org.opends.server.util.CollectionUtils.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.testng.Assert.*;
 
@@ -125,15 +125,15 @@
     subentryList = manager.getCollectiveSubentries(testEntry.getName());
     assertThat(getDns(subentryList)).containsExactly(collectiveSubentry.getName());
 
+    // Other unit tests may have modified the sub-entry causing it to contain
+    // modify timestamps, etc, so get a fresh copy.
+    Entry refreshedCollectiveSubentry = DirectoryServer.getEntry(collectiveSubentry.getName());
     subentryList = manager.getCollectiveSubentries(testEntry);
-    // FIXME following line does not work because server's Entry.equals() is not reflexive
-    // assertThat(getEntries(subentryList)).containsExactly(collectiveSubentry);
-    assertNotNull(subentryList);
-    assertEquals(subentryList.size(), 1);
-    assertEquals(subentryList.get(0).getEntry(), collectiveSubentry);
+    assertThat(getEntries(subentryList)).containsExactly(refreshedCollectiveSubentry);
 
+    Entry refreshedLegacyLdapSubentry = DirectoryServer.getEntry(legacyLdapSubentry.getName());
     subentryList = manager.getSubentries(legacyLdapSubentry.getName().parent());
-    assertThat(getEntries(subentryList)).containsExactly(legacyLdapSubentry);
+    assertThat(getEntries(subentryList)).containsExactly(refreshedLegacyLdapSubentry);
 
     subentryList = manager.getSubentries(legacyLdapSubentry.getName().parent().parent());
     assertThat(subentryList).isEmpty();
@@ -162,9 +162,16 @@
   @Test
   public void testCollectiveAttributes() throws Exception
   {
-    replaceAttribute(collectiveSubentry, "collectiveConflictBehavior", "real-overrides-virtual");
-    hasValues(testEntry.getName(), "c-l", "Savoie");
-    hasValues(testEntry.getName(), "preferredlanguage", "fr");
+    try
+    {
+      replaceAttribute(collectiveSubentry, "collectiveConflictBehavior", "real-overrides-virtual");
+      hasValues(testEntry.getName(), "c-l", "Savoie");
+      hasValues(testEntry.getName(), "preferredlanguage", "fr");
+    }
+    finally
+    {
+      deleteAttribute(collectiveSubentry, "collectiveConflictBehavior");
+    }
   }
 
 
@@ -296,25 +303,31 @@
   @Test
   public void testCollectiveAttributeConflict() throws Exception
   {
-    DN dn = testEntry.getName();
-    replaceAttribute(testEntry, "preferredLanguage", "ja");
+    try
+    {
+      DN dn = testEntry.getName();
+      replaceAttribute(testEntry, "preferredLanguage", "ja");
 
-    // real-overrides-virtual.
-    replaceAttribute(collectiveSubentry, "collectiveConflictBehavior", "real-overrides-virtual");
-    hasValues(dn, "preferredlanguage", "ja");
-    doesNotHaveValues(dn, "preferredlanguage", "fr");
+      // real-overrides-virtual.
+      replaceAttribute(collectiveSubentry, "collectiveConflictBehavior", "real-overrides-virtual");
+      hasValues(dn, "preferredlanguage", "ja");
+      doesNotHaveValues(dn, "preferredlanguage", "fr");
 
-    // virtual-overrides-real.
-    replaceAttribute(collectiveSubentry, "collectiveConflictBehavior", "virtual-overrides-real");
-    hasValues(dn, "preferredlanguage", "fr");
-    doesNotHaveValues(dn, "preferredlanguage", "ja");
+      // virtual-overrides-real.
+      replaceAttribute(collectiveSubentry, "collectiveConflictBehavior", "virtual-overrides-real");
+      hasValues(dn, "preferredlanguage", "fr");
+      doesNotHaveValues(dn, "preferredlanguage", "ja");
 
-    // merge-real-and-virtual.
-    replaceAttribute(collectiveSubentry, "collectiveConflictBehavior", "merge-real-and-virtual");
-    hasValues(dn, "preferredlanguage", "ja", "fr");
-
-    // cleanup.
-    deleteAttribute(testEntry, "preferredLanguage", "ja");
+      // merge-real-and-virtual.
+      replaceAttribute(collectiveSubentry, "collectiveConflictBehavior", "merge-real-and-virtual");
+      hasValues(dn, "preferredlanguage", "ja", "fr");
+    }
+    finally
+    {
+      // cleanup.
+      deleteAttribute(testEntry, "preferredLanguage");
+      deleteAttribute(collectiveSubentry, "collectiveConflictBehavior");
+    }
   }
 
   private void hasValues(DN dn, String attrTypeLower, String... values) throws DirectoryException
@@ -374,29 +387,35 @@
   @Test
   public void testCollectiveExclusions() throws Exception
   {
-    DN dn = testEntry.getName();
+    try
+    {
+      DN dn = testEntry.getName();
 
-    replaceAttribute(collectiveSubentry, "collectiveConflictBehavior", "real-overrides-virtual");
-    replaceAttribute(testEntry, "collectiveExclusions", "c-l");
-    hasNoAttribute(dn, "c-l");
-    hasValues(dn, "preferredlanguage", "fr");
+      replaceAttribute(collectiveSubentry, "collectiveConflictBehavior", "real-overrides-virtual");
+      replaceAttribute(testEntry, "collectiveExclusions", "c-l");
+      hasNoAttribute(dn, "c-l");
+      hasValues(dn, "preferredlanguage", "fr");
 
-    replaceAttribute(testEntry, "collectiveExclusions", "preferredLanguage");
-    hasNoAttribute(dn, "preferredlanguage");
-    hasValues(dn, "c-l", "Savoie");
+      replaceAttribute(testEntry, "collectiveExclusions", "preferredLanguage");
+      hasNoAttribute(dn, "preferredlanguage");
+      hasValues(dn, "c-l", "Savoie");
 
-    replaceAttribute(testEntry, "collectiveExclusions", "excludeAllCollectiveAttributes");
-    hasNoAttribute(dn, "preferredlanguage");
-    hasNoAttribute(dn, "c-l");
-
-    // cleanup.
-    deleteAttribute(testEntry, "collectiveExclusions", "excludeAllCollectiveAttributes");
+      replaceAttribute(testEntry, "collectiveExclusions", "excludeAllCollectiveAttributes");
+      hasNoAttribute(dn, "preferredlanguage");
+      hasNoAttribute(dn, "c-l");
+    }
+    finally
+    {
+      // cleanup.
+      deleteAttribute(testEntry, "collectiveExclusions");
+      deleteAttribute(collectiveSubentry, "collectiveConflictBehavior");
+    }
   }
 
-  private void deleteAttribute(Entry e, String attrType, String oldValue)
+  private void deleteAttribute(Entry e, String attrType)
   {
     InternalClientConnection conn = getRootConnection();
-    List<RawModification> mods = newRawModifications(DELETE, attrType, oldValue);
+    List<RawModification> mods = newRawModifications(DELETE, attrType);
     ModifyOperation modifyOperation = conn.processModify(ByteString.valueOf(e.getName().toNormalizedString()), mods);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
@@ -409,10 +428,12 @@
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
   }
 
-  private List<RawModification> newRawModifications(ModificationType modType, String attrType, String value)
+
+
+  private List<RawModification> newRawModifications(ModificationType modType,
+      String attrType, String... values)
   {
-    ArrayList<ByteString> values = newArrayList(ByteString.valueOf(value));
-    LDAPAttribute attr = new LDAPAttribute(attrType, values);
+    LDAPAttribute attr = new LDAPAttribute(attrType, Arrays.asList(values));
     return newList((RawModification) new LDAPModification(modType, attr));
   }
 

--
Gitblit v1.10.0