From 7d9d0fb263d859f08a12262c4de6cae507561c95 Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Thu, 22 Mar 2007 16:59:32 +0000
Subject: [PATCH] Fix for issue 1370 : tests for resynchronization after import or restore are failing This was happening because in some cases the Changelog server was failing to re-send the changes to the LDAP servers.

---
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ReSyncTest.java                |   10 ++++++----
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SchemaSynchronizationTest.java |    2 +-
 opendj-sdk/opends/src/server/org/opends/server/synchronization/changelog/ChangelogDB.java                             |   16 +++++++++++++++-
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/changelog/ChangelogTest.java   |   29 +++++++++++++++++++++++++++++
 4 files changed, 51 insertions(+), 6 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/synchronization/changelog/ChangelogDB.java b/opendj-sdk/opends/src/server/org/opends/server/synchronization/changelog/ChangelogDB.java
index 1f9c67f..d443ddb 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/synchronization/changelog/ChangelogDB.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/synchronization/changelog/ChangelogDB.java
@@ -323,7 +323,21 @@
         if (cursor.getSearchKey(key, data, LockMode.DEFAULT) !=
           OperationStatus.SUCCESS)
         {
-          throw new Exception("ChangeNumber not available");
+          if (cursor.getSearchKeyRange(key, data, LockMode.DEFAULT) !=
+            OperationStatus.SUCCESS)
+          {
+              throw new Exception("ChangeNumber not available");
+          }
+          else
+          {
+            DatabaseEntry key = new DatabaseEntry();
+            DatabaseEntry data = new DatabaseEntry();
+            if (cursor.getPrev(key, data, LockMode.DEFAULT) !=
+             OperationStatus.SUCCESS)
+           {
+             cursor = db.openCursor(txn, null);
+           }
+          }
         }
       }
     }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ReSyncTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ReSyncTest.java
index 34348d6..7a1844a 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ReSyncTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/ReSyncTest.java
@@ -116,15 +116,17 @@
         + "cn: example\n"
         + "ds-cfg-synchronization-dn: dc=example,dc=com\n"
         + "ds-cfg-changelog-server: localhost:"+ changelogPort + "\n"
-        + "ds-cfg-directory-server-id: 1\n";
+        + "ds-cfg-directory-server-id: 123\n";
     synchroServerEntry = TestCaseUtils.entryFromLdifString(synchroServerLdif);
 
     configureSynchronization();
 
+    // Give some time to the synchronization to setup 
+    Thread.sleep(1000);
+    
     // Create a dummy entry
     addEntry("dn: dc=dummy, dc=example,dc=com\n"
         + "objectClass: top\n" + "objectClass: domain\n");
-
   }
 
   /**
@@ -153,7 +155,7 @@
   /**
    * Test re-synchronization after after backup/restore
    */
-  @Test(enabled=false)
+  @Test(enabled=true, groups="slow")
   public void testResyncAfterRestore() throws Exception
   {
     /*
@@ -208,7 +210,7 @@
   /**
    * Test re-synchronization after after backup/restore
    */
-  @Test(enabled=false)
+  @Test(enabled=true, groups="slow")
   public void testResyncAfterImport() throws Exception
   {
     /*
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SchemaSynchronizationTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SchemaSynchronizationTest.java
index 4bf3273..b20a411 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SchemaSynchronizationTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/SchemaSynchronizationTest.java
@@ -255,7 +255,7 @@
    * It causes schema tests in org.opends.server.core.AddOperationTestCase
    * to fail when running the build test target.
    */
-  @Test(enabled=false, dependsOnMethods = { "replaySchemaChange" })
+  @Test(enabled=true, dependsOnMethods = { "replaySchemaChange" })
   public void pushSchemaFilesChange() throws Exception
   {
     logError(ErrorLogCategory.SYNCHRONIZATION,
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/changelog/ChangelogTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/changelog/ChangelogTest.java
index 60877b6..0b1bc2e 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/changelog/ChangelogTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/synchronization/changelog/ChangelogTest.java
@@ -81,6 +81,8 @@
   private ChangeNumber firstChangeNumberServer2 = null;
   private ChangeNumber secondChangeNumberServer2 = null;
 
+  private ChangeNumber unknownChangeNumberServer1;
+
 
   /**
    * Before starting the tests, start the server and configure a
@@ -148,6 +150,16 @@
        */
       firstChangeNumberServer2 = new ChangeNumber(time+ 1, 1, (short) 2);
       secondChangeNumberServer2 = new ChangeNumber(time + 3, 2, (short) 2);
+      
+      /*
+       * Create a ChangeNumber between firstChangeNumberServer1 and  
+       * secondChangeNumberServer1 that will not be used to create a
+       * change sent to the changelog server but that will be used
+       * in the Server State when opening a connection to the 
+       * Changelog Server to make sure that the Changelog server is 
+       * able to accept such clients.
+       */
+      unknownChangeNumberServer1 = new ChangeNumber(time+1, 1, (short) 1);
 
       /*
        * Send and receive a Delete Msg from server 1 to server 2
@@ -308,6 +320,23 @@
 
     newClientWithChanges(state, secondChangeNumberServer1);
   }
+  
+  /**
+   * Test with a client that has already seen a Change that the
+   * Changelog server has not seen.
+   */
+  @Test(enabled=true, dependsOnMethods = { "changelogBasic" })
+  public void newClientWithUnknownChanges() throws Exception
+  {
+    /*
+     * Create a ServerState with wrongChangeNumberServer1
+     */
+    ServerState state = new ServerState();
+    state.update(unknownChangeNumberServer1);
+    state.update(secondChangeNumberServer2);
+
+    newClientWithChanges(state, secondChangeNumberServer1);
+  }
 
   /**
    * Test that a client that has already seen the first change from server 1

--
Gitblit v1.10.0