From 3556ad0275d7271b6533569ac72cb741abdb0b81 Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Thu, 03 Jan 2008 14:00:38 +0000
Subject: [PATCH]  fix for 2787 : Replication Server sessions fails when disconnecting and re-connecting   When a ReplicationBroker disconnect and reconnect quickly to a Replication Server the reconnection sometimes fails.

---
 opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java |   69 +++++++++++++++++++++++++++++-----
 1 files changed, 59 insertions(+), 10 deletions(-)

diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
index 5ba1a2d..7011c1f 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ *      Portions Copyright 2006-2008 Sun Microsystems, Inc.
  */
 package org.opends.server.replication;
 
@@ -721,7 +721,6 @@
       // Read generationId - should be not retrievable since no entry
       debugInfo(testCase + " Connecting DS1 to replServer1(" + changelog1ID + ")");
       connectServer1ToChangelog(changelog1ID);
-      Thread.sleep(1000);
 
       debugInfo(testCase + " Expect genId attribute to be not retrievable");
       genId = readGenId();
@@ -848,13 +847,15 @@
       debugInfo("Create again replServer1");
       replServer1 = createReplicationServer(changelog1ID, false, testCase);
       debugInfo("Delay to allow DS to reconnect to replServer1");
-      Thread.sleep(200);
+      Thread.sleep(1000);
 
       long genIdAfterRestart = replServer1.getGenerationId(baseDn);
       debugInfo("Aft restart / replServer.genId=" + genIdAfterRestart);
       assertTrue(replServer1!=null, "Replication server creation failed.");
       assertTrue(genIdBeforeShut == genIdAfterRestart,
-      "generationId is expected to have the same value after replServer1 restart");
+        "generationId is expected to have the same value" +
+        " after replServer1 restart. Before : " + genIdBeforeShut +
+        " after : " + genIdAfterRestart);
 
       try
       {
@@ -1072,12 +1073,6 @@
     disconnectFromReplServer(changelog1ID);
     Thread.sleep(1000);
 
-    debugInfo("Expect genId to be unset(-1) in all servers since no server is " +
-        " connected and no change ever occurred");
-    assertEquals(replServer1.getGenerationId(baseDn), -1, " in replServer1");
-    assertEquals(replServer2.getGenerationId(baseDn), -1, " in replServer2");
-    assertEquals(replServer3.getGenerationId(baseDn), -1, " in replServer3");
-
     debugInfo("Add entries to DS");
     this.addTestEntriesToDB(updatedEntries);
 
@@ -1278,6 +1273,8 @@
       debugInfo(testCase + " Expect genId attribute to be retrievable");
       genId = readGenId();
       assertEquals(genId, 3211313L);
+      
+      disconnectFromReplServer(changelog1ID);
     }
     finally
     {
@@ -1285,11 +1282,63 @@
       debugInfo("Successfully ending " + testCase);
     }
   }
+  
+  /**
+   * Loop opening sessions to the Replication Server 
+   * to check that it handle correctly deconnection and reconnection. 
+   */
+  @Test(enabled=false, groups="slow")
+  public void testLoop() throws Exception
+  {
+    String testCase = "testLoop";
+    debugInfo("Starting "+ testCase + " debugEnabled:" + debugEnabled());
+    long rgenId;
+    
+    ReplicationDomain.clearJEBackend(false,
+        "userRoot",
+        baseDn.toNormalizedString());
+
+    replServer1 = createReplicationServer(changelog1ID, false, testCase);
+    replServer1.clearDb();
+
+    ReplicationBroker broker = null;
+    try 
+    {
+      for (int i=0; i< 100; i++)
+      {
+        long generationId = 1000+i;
+        broker = openReplicationSession(baseDn,
+            server2ID, 100, getChangelogPort(changelog1ID),
+            1000, !emptyOldChanges, generationId);
+
+        debugInfo(testCase + " Expect genId to be set in memory on the replication " +
+        " server side even if not wrote on disk/db since no change occurred.");
+        rgenId = replServer1.getGenerationId(baseDn);
+        if (rgenId != generationId)
+        {
+          fail("replication server failed to set generation ID");
+          replServer1.getGenerationId(baseDn);
+        }
+        broker.stop();
+        broker = null;
+      }
+    } finally
+    {
+      if (broker != null)
+        broker.stop();
+    }
+  }
+  
+  /**
+   * This is used to make sure that the 3 tests are run in the 
+   * specified order since this is necessary.
+   */
   @Test(enabled=true, groups="slow")
   public void generationIdTest() throws Exception
   {
     testSingleRS();
     testMultiRS();
     testServerStop();
+    testLoop();
   }
 }

--
Gitblit v1.10.0