From 31cfe0fb61be4e245b0b3a310d6bbfa480c5d33f Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Thu, 08 Oct 2009 15:58:53 +0000
Subject: [PATCH] Split the test in two to speed up the precommit and improve speed

---
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java |  216 ++++++++++++++++++++++-------------------------------
 1 files changed, 91 insertions(+), 125 deletions(-)

diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
index a8182d5..cf503e4 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
@@ -27,8 +27,8 @@
 package org.opends.server.replication;
 
 import static org.opends.server.TestCaseUtils.TEST_ROOT_DN_STRING;
-import static org.opends.server.loggers.debug.DebugLogger.getTracer;
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
+import static org.opends.server.loggers.debug.DebugLogger.getTracer;
 import static org.opends.server.replication.protocol.OperationContext.SYNCHROCONTEXT;
 import static org.opends.server.util.StaticUtils.createEntry;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
@@ -109,6 +109,7 @@
 import org.opends.server.replication.service.ReplicationBroker;
 import org.opends.server.tools.LDAPSearch;
 import org.opends.server.tools.LDAPWriter;
+import org.opends.server.types.AbstractOperation;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeBuilder;
 import org.opends.server.types.AttributeValue;
@@ -209,9 +210,31 @@
   @Test(enabled=true)
   public void ECLReplicationServerTest()
   {
+    // 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();
+ 
+    // Test with a mix of domains, a mix of DSes
+    ECLTwoDomains(); replicationServer.clearDb();
+    
+    // Write changes and read ECL from start
+    int ts = ECLCompatWriteReadAllOps(1);
+
+    // Write additional changes and read ECL from a provided draft change number
+    ts = ECLCompatWriteReadAllOps(5);replicationServer.clearDb();
+
+  }
+
+  @Test(enabled=true, groups="slow", dependsOnMethods = { "ECLReplicationServerTest"})
+  public void ECLReplicationServerFullTest()
+  {
     // ***********************************************
     // First set of test are in the cookie mode
     // ***********************************************
+
     // Test that private backend is excluded from ECL
     ECLOnPrivateBackend();replicationServer.clearDb();
 
@@ -232,7 +255,7 @@
     ECLRemoteNonEmpty();replicationServer.clearDb();
 
     // Test with a mix of domains, a mix of DSes
-    ECLTwoDomains();
+    //ECLTwoDomains();
     // changelogDb required NOT empty for the next test
 
     // Test ECL after changelog triming
@@ -523,9 +546,7 @@
           null);
 
       // success
-      assertEquals(
-          op2.getResultCode(), ResultCode.SUCCESS,
-          op2.getErrorMessage().toString());
+      waitOpResult(op2, ResultCode.SUCCESS);
 
       // root entry returned
       assertEquals(op2.getEntriesSent(), 1);
@@ -581,8 +602,7 @@
         entry.getUserAttributes(), entry.getOperationalAttributes());
     addOp.setInternalOperation(true);
     addOp.run();
-    assertEquals(addOp.getResultCode(), ResultCode.SUCCESS,
-        addOp.getErrorMessage().toString() + addOp.getAdditionalLogMessage());
+    waitOpResult(addOp, ResultCode.SUCCESS);
     assertNotNull(getEntry(entry.getDN(), 1000, true));
   }
 
@@ -649,8 +669,8 @@
           null);
 
       // Expect SUCCESS and root entry returned
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString() + searchOp.getAdditionalLogMessage());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
+
       LinkedList<SearchResultEntry> entries = searchOp.getSearchEntries();
       assertEquals(entries.size(),2, "Entries number returned by search");
       assertTrue(entries != null);
@@ -691,8 +711,8 @@
           null);
 
       // Expect success and only entry from o=test returned
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString() + searchOp.getAdditionalLogMessage());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
+
       entries = searchOp.getSearchEntries();
       assertTrue(entries != null);
       assertTrue(entries.size()==1);
@@ -817,8 +837,8 @@
             createControls(cookie),
             null);
 
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
+
       cookie="";
       LinkedList<SearchResultEntry> entries = searchOp.getSearchEntries();
       if (entries != null)
@@ -837,7 +857,6 @@
           }
         }
       }
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS);
       assertEquals(searchOp.getSearchEntries().size(), 4);
 
       // Now start from last cookie and expect to get ONLY the 4th change
@@ -865,8 +884,7 @@
           null);
 
       // We expect SUCCESS and the 4th change
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString() + searchOp.getAdditionalLogMessage());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
       entries = searchOp.getSearchEntries();
       cookie="";
       if (entries != null)
@@ -919,8 +937,7 @@
           controls,
           null);
 
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString() + searchOp.getAdditionalLogMessage());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
       entries = searchOp.getSearchEntries();
       if (entries != null)
       {
@@ -937,7 +954,6 @@
           {}
         }
       }
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS);
       assertEquals(searchOp.getSearchEntries().size(), 1);
 
       cookie="";
@@ -963,8 +979,7 @@
           null);
 
 
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString() + searchOp.getAdditionalLogMessage());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
 
       entries = searchOp.getSearchEntries();
       if (entries != null)
@@ -982,7 +997,6 @@
           {}
         }
       }
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS);
       // we expect msg1 + msg4 + msg5
       assertEquals(searchOp.getSearchEntries().size(), 3);
 
@@ -1099,8 +1113,8 @@
             createControls(cookie),
             null);
 
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
+
       cookie="";
       LinkedList<SearchResultEntry> entries = searchOp.getSearchEntries();
       if (entries != null)
@@ -1111,7 +1125,6 @@
           ldifWriter.writeEntry(entry);
         }
       }
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS);
       assertEquals(searchOp.getSearchEntries().size(), 0);
 
       // Read last cookie
@@ -1133,8 +1146,7 @@
             createControls(cookie),
             null);
 
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
       entries = searchOp.getSearchEntries();
       if (entries != null)
       {
@@ -1144,7 +1156,6 @@
           ldifWriter.writeEntry(entry);
         }
       }
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS);
       assertEquals(searchOp.getSearchEntries().size(), 0);
     }
     catch(Exception e)
@@ -1180,9 +1191,7 @@
             NO_CONTROL,
             null);
 
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString()
-          + searchOp.getAdditionalLogMessage());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
       LinkedList<SearchResultEntry> entries = searchOp.getSearchEntries();
       if (entries != null)
       {
@@ -1322,11 +1331,9 @@
             attributes,
             controls,
             null);
-      sleep(500);
 
       // test success
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
       // test 4 entries returned
       String cookie1 = "o=test:"+cn1.toString()+";o=test2:;";
       String cookie2 = "o=test:"+cn2.toString()+";o=test2:;";
@@ -1696,9 +1703,9 @@
             case LDAPConstants.OP_TYPE_SEARCH_RESULT_ENTRY:
               searchResultEntry = message.getSearchResultEntryProtocolOp();
               searchEntries++;
-              // FIXME:ECL Double check 10 is really the valid value here.
+              // FIXME:ECL Double check 1 is really the valid value here.
               checkValue(searchResultEntry.toSearchResultEntry(),"changenumber",
-                  (compatMode?"10":"0"));
+                  (compatMode?"1":"0"));
               break;
 
             case LDAPConstants.OP_TYPE_SEARCH_RESULT_REFERENCE:
@@ -1784,7 +1791,7 @@
       debugInfo(tn, "Second search done successfully : " + searchResultEntry);
       server01.stop();
       try { s.close(); } catch (Exception e) {};
-      sleep(1000);
+      while (!s.isClosed()) sleep(100);
 
       // TODO:  Testing ACI is disabled because it is currently failing when
       // ran in the precommit target while it works well when running alone.
@@ -1854,7 +1861,7 @@
       }
 
       try { s.close(); } catch (Exception e) {};
-      sleep(1000);
+      while (!s.isClosed()) sleep(100);
     }
     catch(Exception e)
     {
@@ -2234,21 +2241,6 @@
         }
       }
       sleep(1000);
-      /*
-      // Check we received change 11
-      for (LDAPAttribute a : searchResultEntry.getAttributes())
-      {
-        if (a.getAttributeType().equalsIgnoreCase("targetDN"))
-        {
-          for (ByteString av : a.getValues())
-          {
-            assertTrue(av.toString().equalsIgnoreCase(expectedDn11),
-                "Entry returned by psearch11 is " + av.toString() +
-                " when expected is " + expectedDn11);
-          }
-        }
-      }
-      */
       debugInfo(tn, "Search 1 successfully receives additional changes");
 
       // wait 12 & 13
@@ -2282,21 +2274,6 @@
         }
       }
       sleep(1000);
-      /*
-      // Check we received change 12
-      for (LDAPAttribute a : searchResultEntry.getAttributes())
-      {
-        if (a.getAttributeType().equalsIgnoreCase("targetDN"))
-        {
-          for (ByteString av : a.getValues())
-          {
-            assertTrue(av.toString().equalsIgnoreCase(expectedDn12),
-                "Entry returned by psearch 12 is " + av.toString() +
-                " when expected is " + expectedDn12);
-          }
-        }
-      }
-      */
       debugInfo(tn, "Search 2 successfully receives additional changes");
 
       // wait 11 & 12 & 13
@@ -2353,7 +2330,9 @@
       try { s2.close(); } catch (Exception e) {};
       try { s3.close(); } catch (Exception e) {};
 
-      sleep(1000);
+      while (!s1.isClosed()) sleep(100);
+      while (!s2.isClosed()) sleep(100);
+      while (!s3.isClosed()) sleep(100);
     }
     catch(Exception e)
     {
@@ -2450,7 +2429,7 @@
     if (debugEnabled())
     {
 //      logError(Message.raw(Category.SYNC, Severity.NOTICE,
-//          "** TEST " + tn + " ** " + s));
+//         "** TEST " + tn + " ** " + s));
       TRACER.debugInfo("** TEST " + tn + " ** " + s);
     }
   }
@@ -2519,12 +2498,12 @@
       ReplicationBroker s1test = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          1000, true);
+          5000, true);
 
       ReplicationBroker s2test2 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING2),  1202,
           100, replicationServerPort,
-          1000, true, EMPTY_DN_GENID);
+          5000, true, EMPTY_DN_GENID);
       sleep(500);
 
       // Produce updates
@@ -2750,11 +2729,7 @@
             attributes,
             NO_CONTROL,
             null);
-      sleep(500);
-
-      // test success
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
 
       // test 4 entries returned
       LinkedList<SearchResultEntry> entries = searchOp.getSearchEntries();
@@ -2848,11 +2823,7 @@
             attributes,
             NO_CONTROL,
             null);
-      sleep(500);
-
-      // test success
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
 
       entries = searchOp.getSearchEntries();
 
@@ -2973,11 +2944,7 @@
             attributes,
             NO_CONTROL,
             null);
-      sleep(500);
-
-      // test success
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
 
       LinkedList<SearchResultEntry> entries = searchOp.getSearchEntries();
       assertEquals(searchOp.getSearchEntries().size(), 1);
@@ -3046,12 +3013,8 @@
             attributes,
             NO_CONTROL,
             null);
-      sleep(500);
-
-      // test success
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
-      assertEquals(searchOp.getSearchEntries().size(),
+      waitOpResult(searchOp, ResultCode.SUCCESS);
+      assertEquals(searchOp.getSearchEntries().size(), 
           lastDraftChangeNumber-firstDraftChangeNumber+1);
     }
     catch(Exception e)
@@ -3091,11 +3054,7 @@
             attributes,
             NO_CONTROL,
             null);
-      sleep(500);
-
-      // test success and no entries returned
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
       assertEquals(searchOp.getSearchEntries().size(), 0);
     }
     catch(Exception e)
@@ -3137,11 +3096,7 @@
             attributes,
             NO_CONTROL,
             null);
-      sleep(500);
-
-      // test success and no entries returned
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
       assertEquals(searchOp.getSearchEntries().size(), 1);
 
       LinkedList<SearchResultEntry> entries = searchOp.getSearchEntries();
@@ -3313,11 +3268,7 @@
             attributes,
             NO_CONTROL,
             null);
-      sleep(500);
-
-      // test success and no entries returned
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
       assertEquals(searchOp.getSearchEntries().size(), 1);
 
       LinkedList<SearchResultEntry> entries = searchOp.getSearchEntries();
@@ -3369,6 +3320,7 @@
             user1entryUUID);
       server01.publish(delMsg);
       debugInfo(tn, " publishes " + delMsg.getChangeNumber());
+      sleep(500);
 
       ECLCompatTestLimits(expectedFirst, expectedLast+1);
 
@@ -3562,28 +3514,31 @@
       Entry uentry2 = TestCaseUtils.entryFromLdifString(lentry);
       addEntry(uentry2);
 
+      //
       AttributeBuilder builder = new AttributeBuilder("sn");
       builder.add("newsn");
       Modification mod =
         new Modification(ModificationType.REPLACE, builder.toAttribute());
       List<Modification> mods = new ArrayList<Modification>();
       mods.add(mod);
-
       ModifyOperationBasis modOpBasis =
         new ModifyOperationBasis(connection, 1, 1, null, uentry1.getDN(), mods);
       modOpBasis.run();
+      waitOpResult(modOpBasis, ResultCode.SUCCESS);
 
+      //
       builder = new AttributeBuilder("telephonenumber");
       builder.add("555555");
       mod =
         new Modification(ModificationType.REPLACE, builder.toAttribute());
       mods = new ArrayList<Modification>();
       mods.add(mod);
-
-      modOpBasis =
+      ModifyOperationBasis modOpBasis2 =
         new ModifyOperationBasis(connection, 1, 1, null, uentry2.getDN(), mods);
-      modOpBasis.run();
+      modOpBasis2.run();
+      waitOpResult(modOpBasis2, ResultCode.SUCCESS);
 
+      //
       ModifyDNOperationBasis modDNOp = new ModifyDNOperationBasis(connection,
           InternalClientConnection.nextOperationID(),
           InternalClientConnection.nextMessageID(),
@@ -3592,18 +3547,17 @@
           RDN.decode("cn=Robert Hue2"), true,
           DN.decode(TEST_ROOT_DN_STRING3));
       modDNOp.run();
-      assertEquals(modDNOp.getResultCode(), ResultCode.SUCCESS,
-          modDNOp.getErrorMessage().toString() + modDNOp.getAdditionalLogMessage());
+      waitOpResult(modDNOp, ResultCode.SUCCESS);
 
+      //
       DeleteOperationBasis delOp = new DeleteOperationBasis(connection,
           InternalClientConnection.nextOperationID(),
           InternalClientConnection.nextMessageID(), null,
           DN.decode("cn=Robert Hue2," + TEST_ROOT_DN_STRING3));
       delOp.run();
-      assertEquals(delOp.getResultCode(), ResultCode.SUCCESS,
-          delOp.getErrorMessage().toString() + delOp.getAdditionalLogMessage());
+      waitOpResult(delOp, ResultCode.SUCCESS);
 
-      sleep(400);
+      getEntry(DN.decode("cn=Robert Hue2," + TEST_ROOT_DN_STRING3),5000,false);
 
       // Search on ECL from start on all suffixes
       String cookie = "";
@@ -3616,7 +3570,7 @@
       attributes.add("+");
       attributes.add("*");
 
-
+      sleep(1000);
       debugInfo(tn, "Search with cookie=" + cookie);
       InternalSearchOperation searchOp = connection.processSearch(
           ByteString.valueOf("cn=changelog"),
@@ -3630,23 +3584,19 @@
           controls,
           null);
 
-      sleep(500);
-
-      // Expect SUCCESS and root entry returned
-      assertEquals(searchOp.getResultCode(), ResultCode.SUCCESS,
-          searchOp.getErrorMessage().toString() + searchOp.getAdditionalLogMessage());
+      waitOpResult(searchOp, ResultCode.SUCCESS);
       LinkedList<SearchResultEntry> entries = searchOp.getSearchEntries();
 
 
-      assertEquals(entries.size(),8, "Entries number returned by search");
       assertTrue(entries != null);
-
+      String s = tn + " entries returned= ";
       if (entries != null)
       {
         for (SearchResultEntry resultEntry : entries)
         {
           // Expect
           debugInfo(tn, "Entry returned =" +  resultEntry.toLDIFString());
+          s += "Entry:" + resultEntry.toLDIFString();
 
           String targetdn = getAttributeValue(resultEntry, "targetdn");
           if ((targetdn.endsWith("cn=robert hue,o=test3"))
@@ -3663,6 +3613,7 @@
           }
         }
       }
+      assertEquals(entries.size(),8, "Entries number returned by search" + s);
       server01.stop();
 
       // Cleaning
@@ -3690,4 +3641,19 @@
     }
     debugInfo(tn, "Ending test with success");
   }
+  
+  private void waitOpResult(AbstractOperation searchOp,
+      ResultCode expectedResult)
+  {
+    int ii=0;
+    while((searchOp.getResultCode()==ResultCode.UNDEFINED) ||
+        (searchOp.getResultCode()!=expectedResult))
+    {
+      sleep(50);
+      ii++;
+      if (ii>10)
+        assertEquals(searchOp.getResultCode(), expectedResult, 
+            searchOp.getErrorMessage().toString());                
+    }
+  }
 }
\ No newline at end of file

--
Gitblit v1.10.0