From 09ef01374239f7048c2db6bb9cad2b8a807d4cf8 Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Wed, 28 Oct 2009 08:38:19 +0000
Subject: [PATCH] Fix#4320 ECL Replication Server only should not support 'cn=changelog' naming context

---
 opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java |   63 ++++++++++++++++++++++++++-----
 1 files changed, 53 insertions(+), 10 deletions(-)

diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
index 9c67fb4..d43eb5d 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
@@ -138,6 +138,7 @@
 import org.opends.server.util.LDIFWriter;
 import org.opends.server.util.TimeThread;
 import org.opends.server.workflowelement.externalchangelog.ECLSearchOperation;
+import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
 import org.opends.server.workflowelement.localbackend.LocalBackendModifyDNOperation;
 import org.testng.Assert;
 import org.testng.annotations.AfterClass;
@@ -216,12 +217,32 @@
   @Test(enabled=true)
   public void ECLReplicationServerTest()
   {
+    // No RSDomain created yet => RS only case => ECL is not a supported 
+    ECLIsNotASupportedSuffix();
+
+    // Following test does not create RSDomain (only broker) but want to test
+    // ECL .. so let's enable ECl manually
+    // Now that we tested that ECl is not available 
+    try
+    {
+      ECLWorkflowElement wfe = (ECLWorkflowElement)
+      DirectoryServer.getWorkflowElement(
+          ECLWorkflowElement.ECL_WORKFLOW_ELEMENT);
+      if (wfe!=null)
+        wfe.getReplicationServer().enableECL();
+    }
+    catch(DirectoryException de)
+    {
+      fail("Ending test " +  " with exception:"
+          +  stackTraceToSingleLineString(de));
+    }
+   
     // Test all types of ops.  
     ECLAllOps(); // Do not clean the db for the next test
 
     // First and last should be ok whenever a request has been done or not
     // in compat mode.
-    ECLCompatTestLimits(1,4);replicationServer.clearDb();
+    ECLCompatTestLimits(1,4,true);replicationServer.clearDb();
  
     // Test with a mix of domains, a mix of DSes
     ECLTwoDomains(); replicationServer.clearDb();
@@ -259,7 +280,7 @@
 
     // First and last should be ok whenever a request has been done or not
     // in compat mode.
-    ECLCompatTestLimits(1,4);replicationServer.clearDb();
+    ECLCompatTestLimits(1,4, true);replicationServer.clearDb();
 
     // Test remote API (ECL through replication protocol) with NON empty ECL
     ECLRemoteNonEmpty();replicationServer.clearDb();
@@ -319,7 +340,7 @@
     ECLCompatReadFromTo(5,7);
 
     // Test first and last draft changenumber
-    ECLCompatTestLimits(1,8);
+    ECLCompatTestLimits(1,8, true);
 
     // Test first and last draft changenumber, a dd a new change, do not
     // search again the ECL, but search fro first and last
@@ -329,7 +350,7 @@
     ECLPurgeDraftCNDbAfterChangelogClear();
 
     // Test first and last are updated
-    ECLCompatTestLimits(0,0);
+    ECLCompatTestLimits(0,0, true);
 
     // Persistent search in changesOnly mode
     ECLPsearch(true, true);replicationServer.clearDb();
@@ -346,6 +367,11 @@
 
   }
 
+  private void ECLIsNotASupportedSuffix()
+  {
+    ECLCompatTestLimits(0,0, false);
+  }
+
   //=======================================================
   // Objectives
   //   - Test that everything id ok with no changes
@@ -1182,6 +1208,7 @@
 
     try
     {
+      // Root DSE
       InternalSearchOperation searchOp =
         connection.processSearch(
             ByteString.valueOf(""),
@@ -3263,7 +3290,8 @@
     debugInfo(tn, "Ending test with success");
   }
 
-  private void ECLCompatTestLimits(int expectedFirst, int expectedLast)
+  private void ECLCompatTestLimits(int expectedFirst, int expectedLast,
+      boolean eclEnabled)
   {
     String tn = "ECLCompatTestLimits";
     debugInfo(tn, "Starting test\n\n");
@@ -3302,12 +3330,27 @@
           i++;
           debugInfo(tn, "Result entry returned:" + resultEntry.toLDIFString());
           ldifWriter.writeEntry(resultEntry);
-          checkValue(resultEntry,"firstchangenumber",
+          if (eclEnabled)
+          {
+            checkValue(resultEntry,"firstchangenumber",
               String.valueOf(expectedFirst));
-          checkValue(resultEntry,"lastchangenumber",
+            checkValue(resultEntry,"lastchangenumber",
               String.valueOf(expectedLast));
-          checkValue(resultEntry,"changelog",
+            checkValue(resultEntry,"changelog",
               String.valueOf("cn=changelog"));
+          }
+          else
+          {
+            assertEquals(getAttributeValue(resultEntry, "firstchangenumber"),
+                null);
+            assertEquals(getAttributeValue(resultEntry, "lastchangenumber"),
+                null);
+            assertEquals(getAttributeValue(resultEntry, "changelog"),
+                null);
+            assertEquals(getAttributeValue(resultEntry, "lastExternalChangelogCookie"),
+                null);
+            
+          }
         }
       }
     }
@@ -3326,7 +3369,7 @@
     debugInfo(tn, "Starting test\n\n");
     try
     {
-      ECLCompatTestLimits(expectedFirst, expectedLast);
+      ECLCompatTestLimits(expectedFirst, expectedLast, true);
 
       // Creates broker on o=test
       ReplicationBroker server01 = openReplicationSession(
@@ -3346,7 +3389,7 @@
       sleep(500);
       server01.stop();
 
-      ECLCompatTestLimits(expectedFirst, expectedLast+1);
+      ECLCompatTestLimits(expectedFirst, expectedLast+1, true);
 
     }
     catch(Exception e)

--
Gitblit v1.10.0