From 042cb4492e64fed84141f94b0c969234465fc74d Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 14 Aug 2013 11:14:13 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB

---
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java |  408 ++++++++++++---------------------
 opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitoringPublisher.java                              |   41 +--
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java                                    |   59 +---
 opendj-sdk/opends/src/server/org/opends/server/replication/protocol/MonitorMsg.java                                     |   46 ++-
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java                          |   77 +++---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/StatusAnalyzer.java                                   |   56 ++--
 opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java                         |   11 
 opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitorData.java                                      |   15 
 8 files changed, 287 insertions(+), 426 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/protocol/MonitorMsg.java b/opendj-sdk/opends/src/server/org/opends/server/replication/protocol/MonitorMsg.java
index 1b59b70..be77330 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/protocol/MonitorMsg.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/protocol/MonitorMsg.java
@@ -32,6 +32,7 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.zip.DataFormatException;
 
 import org.opends.server.protocols.asn1.ASN1;
@@ -60,7 +61,7 @@
   static class ServerData
   {
     private ServerState state;
-    private Long approxFirstMissingDate;
+    private long approxFirstMissingDate;
   }
 
   /**
@@ -128,7 +129,7 @@
    * @param isLDAP Specifies whether the server is a LS or a RS
    */
   public void setServerState(int serverId, ServerState state,
-      Long approxFirstMissingDate, boolean isLDAP)
+      long approxFirstMissingDate, boolean isLDAP)
   {
     ServerData sd = new ServerData();
     sd.state = state;
@@ -166,7 +167,7 @@
    * @param serverId The provided serverId.
    * @return The approximated state.
    */
-  public Long getLDAPApproxFirstMissingDate(int serverId)
+  public long getLDAPApproxFirstMissingDate(int serverId)
   {
     return data.ldapStates.get(serverId).approxFirstMissingDate;
   }
@@ -177,7 +178,7 @@
    * @param serverId The provided serverId.
    * @return The approximated state.
    */
-  public Long getRSApproxFirstMissingDate(int serverId)
+  public long getRSApproxFirstMissingDate(int serverId)
   {
     return data.rsStates.get(serverId).approxFirstMissingDate;
   }
@@ -261,7 +262,7 @@
       {
         ServerState newState = new ServerState();
         int serverId = 0;
-        Long outime = (long)0;
+        long outime = 0;
         boolean isLDAPServer = false;
 
         asn1Reader.readStartSequence();
@@ -402,8 +403,9 @@
   private void writeServerStates(short protocolVersion, ASN1Writer writer,
       boolean writeRSStates) throws IOException
   {
-    Map<Integer, ServerData> servers = writeRSStates ? data.rsStates
-        : data.ldapStates;
+    final Map<Integer, ServerData> servers =
+        writeRSStates ? data.rsStates : data.ldapStates;
+    final int seqNum = writeRSStates ? 0 : 1;
     for (Map.Entry<Integer, ServerData> server : servers.entrySet())
     {
       writer.writeStartSequence();
@@ -414,7 +416,7 @@
          * RS (0).
          */
         ChangeNumber cn = new ChangeNumber(
-            server.getValue().approxFirstMissingDate, writeRSStates ? 0 : 1,
+            server.getValue().approxFirstMissingDate, seqNum,
             server.getKey());
         if (protocolVersion >= ProtocolVersion.REPLICATION_PROTOCOL_V7)
         {
@@ -465,24 +467,26 @@
   @Override
   public String toString()
   {
-    String stateS = "\nRState:[";
-    stateS += data.replServerDbState.toString();
-    stateS += "]";
+    StringBuilder stateS = new StringBuilder("\nRState:[");
+    stateS.append(data.replServerDbState);
+    stateS.append("]");
 
-    stateS += "\nLDAPStates:[";
-    for (Integer sid : data.ldapStates.keySet())
+    stateS.append("\nLDAPStates:[");
+    for (Entry<Integer, ServerData> entry : data.ldapStates.entrySet())
     {
-      ServerData sd = data.ldapStates.get(sid);
-      stateS += "\n[LSstate("+ sid + ")=" + sd.state + "]" +
-                " afmd=" + sd.approxFirstMissingDate + "]";
+      ServerData sd = entry.getValue();
+      stateS.append("\n[LSstate(").append(entry.getKey()).append(")=")
+            .append(sd.state).append("]").append(" afmd=")
+            .append(sd.approxFirstMissingDate).append("]");
     }
 
-    stateS += "\nRSStates:[";
-    for (Integer sid : data.rsStates.keySet())
+    stateS.append("\nRSStates:[");
+    for (Entry<Integer, ServerData> entry : data.rsStates.entrySet())
     {
-      ServerData sd = data.rsStates.get(sid);
-      stateS += "\n[RSState("+ sid + ")=" + sd.state + "]" +
-                " afmd=" + sd.approxFirstMissingDate + "]";
+      ServerData sd = entry.getValue();
+      stateS.append("\n[RSState(").append(entry.getKey()).append(")=")
+            .append(sd.state).append("]").append(" afmd=")
+            .append(sd.approxFirstMissingDate + "]");
     }
     return getClass().getCanonicalName() +
     "[ sender=" + this.senderID +
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
index 9107b2d..815c124 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
@@ -137,16 +137,11 @@
     this.protocolVersion = protocolVersion;
 
     if (debugEnabled())
-      TRACER.debugInfo("In " + getLocalRSMonitorInstanceName()
+      TRACER.debugInfo("In " + rsDomain.getLocalRSMonitorInstanceName()
           + " LWSH for remote server " + this.serverId + " connected to:"
           + this.replServerHandler.getMonitorInstanceName() + " ()");
   }
 
-  private String getLocalRSMonitorInstanceName()
-  {
-    return rsDomain.getReplicationServer().getMonitorInstanceName();
-  }
-
   /**
    * Creates a DSInfo structure representing this remote DS.
    * @return The DSInfo structure representing this remote DS
@@ -173,7 +168,7 @@
   public void startHandler()
   {
     if (debugEnabled())
-      TRACER.debugInfo("In " + getLocalRSMonitorInstanceName()
+      TRACER.debugInfo("In " + rsDomain.getLocalRSMonitorInstanceName()
           + " LWSH for remote server " + this.serverId + " connected to:"
           + this.replServerHandler.getMonitorInstanceName() + " start");
     DirectoryServer.deregisterMonitorProvider(this);
@@ -186,7 +181,7 @@
   public void stopHandler()
   {
     if (debugEnabled())
-      TRACER.debugInfo("In " + getLocalRSMonitorInstanceName()
+      TRACER.debugInfo("In " + rsDomain.getLocalRSMonitorInstanceName()
           + " LWSH for remote server " + this.serverId + " connected to:"
           + this.replServerHandler.getMonitorInstanceName() + " stop");
     DirectoryServer.deregisterMonitorProvider(this);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitorData.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitorData.java
index aef980e..bfa3088 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitorData.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitorData.java
@@ -27,8 +27,6 @@
  */
 package org.opends.server.replication.server;
 
-import static org.opends.server.loggers.debug.DebugLogger.*;
-
 import java.util.Iterator;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
@@ -38,6 +36,8 @@
 import org.opends.server.replication.common.ServerState;
 import org.opends.server.util.TimeThread;
 
+import static org.opends.server.loggers.debug.DebugLogger.*;
+
 /**
  * This class defines the Monitor Data that are consolidated across the
  * whole replication topology.
@@ -338,17 +338,16 @@
   /**
    * Set the state of the LDAP server with the provided serverId.
    * @param serverId The server ID.
-   * @param newFmd The first missing date.
+   * @param newFmd The new first missing date.
    */
-  public void setFirstMissingDate(int serverId, Long newFmd)
+  public void setFirstMissingDate(int serverId, long newFmd)
   {
-    if (newFmd==null) return;
-    Long currentfmd = fmd.get(serverId);
-    if (currentfmd==null)
+    Long currentFmd = fmd.get(serverId);
+    if (currentFmd == null)
     {
       fmd.put(serverId, newFmd);
     }
-    else if (newFmd != 0 && (newFmd < currentfmd || currentfmd == 0))
+    else if (newFmd != 0 && (newFmd < currentFmd || currentFmd == 0))
     {
       fmd.replace(serverId, newFmd);
     }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitoringPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitoringPublisher.java
index 0f10959..eb678b0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitoringPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/MonitoringPublisher.java
@@ -28,13 +28,13 @@
 package org.opends.server.replication.server;
 
 import java.io.IOException;
-import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.loggers.debug.DebugLogger.getTracer;
 
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.protocol.MonitorMsg;
 
+import static org.opends.server.loggers.debug.DebugLogger.*;
+
 /**
  * This thread regularly publishes monitoring information:
  * - it sends monitoring messages regarding the direct topology (directly
@@ -54,13 +54,13 @@
    */
   private static final DebugTracer TRACER = getTracer();
 
-  // The domain we send monitoring for
+  /** The domain we send monitoring for. */
   private final ReplicationServerDomain replicationServerDomain;
 
-  // Sleep time (in ms) before sending new monitoring messages.
+  /** Sleep time (in ms) before sending new monitoring messages. */
   private volatile long period;
 
-  // Is the thread terminated ?
+  /** Whether the thread is terminated. */
   private volatile boolean done = false;
 
   private final Object shutdownLock = new Object();
@@ -75,8 +75,8 @@
     long period)
   {
     super("Replication server RS("
-        + replicationServerDomain.getReplicationServer()
-            .getServerId() + ") monitor publisher for domain \""
+        + replicationServerDomain.getLocalRSServerId()
+        + ") monitor publisher for domain \""
         + replicationServerDomain.getBaseDn() + "\"");
 
     this.replicationServerDomain = replicationServerDomain;
@@ -114,8 +114,7 @@
         MonitorMsg monitorMsg = replicationServerDomain
             .createGlobalTopologyMonitorMsg(0, 0, monitorData);
 
-        int localServerId = replicationServerDomain
-            .getReplicationServer().getServerId();
+        int localServerId = replicationServerDomain.getLocalRSServerId();
         for (ServerHandler serverHandler : replicationServerDomain
             .getConnectedDSs().values())
         {
@@ -137,20 +136,14 @@
     {
       TRACER.debugInfo("Monitoring publisher for dn "
           + replicationServerDomain.getBaseDn()
-          + " in RS "
-          + replicationServerDomain.getReplicationServer()
-              .getServerId()
+          + " in RS " + replicationServerDomain.getLocalRSServerId()
           + " has been interrupted while sleeping.");
-
     }
 
     done = true;
     TRACER.debugInfo("Monitoring publisher for dn "
-        + replicationServerDomain.getBaseDn()
-        + " is terminated."
-        + " This is in RS "
-        + replicationServerDomain.getReplicationServer()
-            .getServerId());
+        + replicationServerDomain.getBaseDn() + " is terminated."
+        + " This is in RS " + replicationServerDomain.getLocalRSServerId());
   }
 
 
@@ -167,9 +160,9 @@
 
       if (debugEnabled())
       {
-        TRACER.debugInfo("Shutting down monitoring publisher for dn " +
-          replicationServerDomain.getBaseDn() + " in RS " +
-          replicationServerDomain.getReplicationServer().getServerId());
+        TRACER.debugInfo("Shutting down monitoring publisher for dn "
+            + replicationServerDomain.getBaseDn()
+            + " in RS " + replicationServerDomain.getLocalRSServerId());
       }
     }
   }
@@ -184,7 +177,7 @@
     {
       int FACTOR = 40; // Wait for 2 seconds before interrupting the thread
       int n = 0;
-      while ((!done) && (this.isAlive()))
+      while (!done && isAlive())
       {
         Thread.sleep(50);
         n++;
@@ -192,8 +185,8 @@
         {
           TRACER.debugInfo("Interrupting monitoring publisher for dn " +
             replicationServerDomain.getBaseDn() + " in RS " +
-            replicationServerDomain.getReplicationServer().getServerId());
-          this.interrupt();
+            replicationServerDomain.getLocalRSServerId());
+          interrupt();
         }
       }
     } catch (InterruptedException e)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index e004623..940192b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -91,9 +91,6 @@
    * The following map contains one balanced tree for each replica ID to which
    * we are currently publishing the first update in the balanced tree is the
    * next change that we must push to this particular server.
-   * <p>
-   * We add new TreeSet in the HashMap when a new server register to this
-   * replication server.
    */
   private final Map<Integer, DataServerHandler> directoryServers =
     new ConcurrentHashMap<Integer, DataServerHandler>();
@@ -103,9 +100,6 @@
    * we are connected (so normally all the replication servers) the first update
    * in the balanced tree is the next change that we must push to this
    * particular server.
-   * <p>
-   * We add new TreeSet in the HashMap when a new replication server register to
-   * this replication server.
    */
   private final Map<Integer, ReplicationServerHandler> replicationServers =
     new ConcurrentHashMap<Integer, ReplicationServerHandler>();
@@ -2223,7 +2217,7 @@
     if (debugEnabled())
     {
       TRACER.debugInfo(
-          "In RS " + getReplicationServer().getServerId() +
+          "In RS " + getLocalRSServerId() +
           " Receiving ChangeStatusMsg from " + senderHandler.getServerId() +
           " for baseDn " + baseDn + ":\n" + csMsg);
     }
@@ -2283,8 +2277,7 @@
   {
     try
     {
-      // Acquire lock on domain (see more details in comment of start() method
-      // of ServerHandler)
+      // Acquire lock on domain (see ServerHandler#start() for more details)
       lock();
     }
     catch (InterruptedException ex)
@@ -2317,8 +2310,7 @@
       ServerStatus oldStatus = serverHandler.getStatus();
       try
       {
-        newStatus = serverHandler
-            .changeStatusFromStatusAnalyzer(event);
+        newStatus = serverHandler.changeStatusFromStatusAnalyzer(event);
       }
       catch (IOException e)
       {
@@ -2429,15 +2421,6 @@
   }
 
   /**
-   * Return the associated replication server.
-   * @return The replication server.
-   */
-  public ReplicationServer getReplicationServer()
-  {
-    return localReplicationServer;
-  }
-
-  /**
    * Process topology information received from a peer RS.
    * @param topoMsg The just received topo message from remote RS
    * @param handler The handler that received the message.
@@ -2453,10 +2436,9 @@
   {
     if (debugEnabled())
     {
-      TRACER.debugInfo(
-        "In RS " + getReplicationServer().getServerId() +
-        " Receiving TopologyMsg from " + handler.getServerId() +
-        " for baseDn " + baseDn + ":\n" + topoMsg);
+      TRACER.debugInfo("In RS " + getLocalRSServerId()
+          + " Receiving TopologyMsg from " + handler.getServerId()
+          + " for baseDn " + baseDn + ":\n" + topoMsg);
     }
 
     try
@@ -2475,14 +2457,10 @@
 
     try
     {
-      /*
-       * Store DS connected to remote RS & update information about the peer RS
-       */
+      // Store DS connected to remote RS & update information about the peer RS
       handler.processTopoInfoFromRS(topoMsg);
 
-      /*
-       * Handle generation id
-       */
+      // Handle generation id
       if (allowResetGenId)
       {
         // Check if generation id has to be reseted
@@ -2495,17 +2473,14 @@
 
       if (isDifferentGenerationId(handler.getGenerationId()))
       {
-        Message message = WARN_BAD_GENERATION_ID_FROM_RS.get(handler
-            .getServerId(), handler.session
-            .getReadableRemoteAddress(), handler.getGenerationId(),
-            baseDn, getReplicationServer().getServerId(),
-            generationId);
+        Message message = WARN_BAD_GENERATION_ID_FROM_RS.get(
+            handler.getServerId(), handler.session.getReadableRemoteAddress(),
+            handler.getGenerationId(),
+            baseDn, getLocalRSServerId(), generationId);
         logError(message);
 
-        ErrorMsg errorMsg = new ErrorMsg(
-            getReplicationServer().getServerId(),
-            handler.getServerId(),
-            message);
+        ErrorMsg errorMsg =
+            new ErrorMsg(getLocalRSServerId(), handler.getServerId(), message);
         handler.send(errorMsg);
       }
 
@@ -3411,4 +3386,28 @@
     }
     return latest;
   }
+
+  /**
+   * Return the monitor instance name of the ReplicationServer that created the
+   * current instance.
+   *
+   * @return the monitor instance name of the ReplicationServer that created the
+   *         current instance.
+   */
+  String getLocalRSMonitorInstanceName()
+  {
+    return this.localReplicationServer.getMonitorInstanceName();
+  }
+
+  /**
+   * Return the serverId of the ReplicationServer that created the current
+   * instance.
+   *
+   * @return the serverId of the ReplicationServer that created the current
+   *         instance.
+   */
+  int getLocalRSServerId()
+  {
+    return this.localReplicationServer.getServerId();
+  }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
index e6ea8fb..c377e5f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -27,10 +27,6 @@
  */
 package org.opends.server.replication.server;
 
-import static org.opends.messages.ReplicationMessages.*;
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
-
 import java.io.IOException;
 import java.util.List;
 import java.util.Random;
@@ -47,26 +43,12 @@
 import org.opends.server.replication.common.ChangeNumber;
 import org.opends.server.replication.common.RSInfo;
 import org.opends.server.replication.common.ServerStatus;
-import org.opends.server.replication.protocol.AckMsg;
-import org.opends.server.replication.protocol.ChangeTimeHeartbeatMsg;
-import org.opends.server.replication.protocol.HeartbeatThread;
-import org.opends.server.replication.protocol.ProtocolVersion;
-import org.opends.server.replication.protocol.ReplicationMsg;
-import org.opends.server.replication.protocol.ResetGenerationIdMsg;
-import org.opends.server.replication.protocol.RoutableMsg;
-import org.opends.server.replication.protocol.Session;
-import org.opends.server.replication.protocol.StartECLSessionMsg;
-import org.opends.server.replication.protocol.StartMsg;
-import org.opends.server.replication.protocol.StartSessionMsg;
-import org.opends.server.replication.protocol.TopologyMsg;
-import org.opends.server.replication.protocol.UpdateMsg;
-import org.opends.server.replication.protocol.WindowMsg;
-import org.opends.server.replication.protocol.WindowProbeMsg;
-import org.opends.server.types.Attribute;
-import org.opends.server.types.Attributes;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.InitializationException;
-import org.opends.server.types.ResultCode;
+import org.opends.server.replication.protocol.*;
+import org.opends.server.types.*;
+
+import static org.opends.messages.ReplicationMessages.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
 
 /**
  * This class defines a server handler  :
@@ -408,15 +390,12 @@
    */
   public void send(ReplicationMsg msg) throws IOException
   {
-    /*
-     * Some unit tests include a null domain, so avoid logging anything in that
-     * case.
-     */
+    // avoid logging anything for unit tests that include a null domain.
     if (debugEnabled() && replicationServerDomain != null)
     {
       TRACER.debugInfo("In "
-          + replicationServerDomain.getReplicationServer()
-              .getMonitorInstanceName() + this + " publishes message:\n" + msg);
+          + replicationServerDomain.getLocalRSMonitorInstanceName() + " "
+          + this + " publishes message:\n" + msg);
     }
     session.publish(msg);
   }
@@ -427,19 +406,17 @@
    * @return The age if the older change has not yet been replicated
    *         to the server handled by this ServerHandler.
    */
-  public Long getApproxFirstMissingDate()
+  public long getApproxFirstMissingDate()
   {
-    Long result = (long) 0;
-
     // Get the older CN received
     ChangeNumber olderUpdateCN = getOlderUpdateCN();
     if (olderUpdateCN != null)
     {
       // If not present in the local RS db,
       // then approximate with the older update time
-      result = olderUpdateCN.getTime();
+      return olderUpdateCN.getTime();
     }
-    return result;
+    return 0;
   }
 
   /**
@@ -917,9 +894,9 @@
   public void process(RoutableMsg msg)
   {
     if (debugEnabled())
-      TRACER.debugInfo("In " + replicationServerDomain.getReplicationServer().
-          getMonitorInstanceName() + this +
-          " processes routable msg received:" + msg);
+      TRACER.debugInfo("In "
+          + replicationServerDomain.getLocalRSMonitorInstanceName() + " "
+          + this + " processes routable msg received:" + msg);
     replicationServerDomain.process(msg, this);
   }
 
@@ -931,9 +908,9 @@
   public void process(ChangeTimeHeartbeatMsg msg)
   {
     if (debugEnabled())
-      TRACER.debugInfo("In " + replicationServerDomain.getReplicationServer().
-          getMonitorInstanceName() + this +
-          " processes received msg:\n" + msg);
+      TRACER.debugInfo("In "
+          + replicationServerDomain.getLocalRSMonitorInstanceName() + " "
+          + this + " processes received msg:\n" + msg);
     replicationServerDomain.processChangeTimeHeartbeatMsg(this, msg);
   }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/StatusAnalyzer.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/StatusAnalyzer.java
index 12ba75d..3b8daa7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/StatusAnalyzer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/StatusAnalyzer.java
@@ -27,15 +27,14 @@
  */
 package org.opends.server.replication.server;
 
-import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.common.ServerStatus;
 import org.opends.server.replication.common.StatusMachineEvent;
 import org.opends.server.types.DebugLogLevel;
 
+import static org.opends.server.loggers.debug.DebugLogger.*;
+
 /**
  * This thread is in charge of periodically determining if the connected
  * directory servers of the domain it is associated with are late or not
@@ -59,7 +58,7 @@
   private final ReplicationServerDomain replicationServerDomain;
   private volatile int degradedStatusThreshold = -1;
 
-  // Sleep time for the thread, in ms.
+  /** Sleep time for the thread, in ms. */
   private static final int STATUS_ANALYZER_SLEEP_TIME = 5000;
 
   private volatile boolean done = false;
@@ -77,9 +76,9 @@
     int degradedStatusThreshold)
   {
     super("Replication server RS("
-        + replicationServerDomain.getReplicationServer()
-            .getServerId() + ") delay monitor for domain \""
-        + replicationServerDomain.getBaseDn() + "\"");
+        + replicationServerDomain.getLocalRSServerId()
+        + ") delay monitor for domain \"" + replicationServerDomain.getBaseDn()
+        + "\"");
 
     this.replicationServerDomain = replicationServerDomain;
     this.degradedStatusThreshold = degradedStatusThreshold;
@@ -98,6 +97,7 @@
         replicationServerDomain.getBaseDn());
     }
 
+    final int localRsId = replicationServerDomain.getLocalRSServerId();
     boolean interrupted = false;
     while (!shutdown && !interrupted)
     {
@@ -132,11 +132,10 @@
         int nChanges = serverHandler.getRcvMsgQueueSize();
         if (debugEnabled())
         {
-          TRACER.debugInfo("Status analyzer for dn " +
-              replicationServerDomain.getBaseDn() + " DS " +
-            Integer.toString(serverHandler.getServerId()) + " has " + nChanges +
-            " message(s) in writer queue. This is in RS " +
-            replicationServerDomain.getReplicationServer().getServerId());
+          TRACER.debugInfo("Status analyzer for dn "
+              + replicationServerDomain.getBaseDn() + " DS "
+              + serverHandler.getServerId() + " has " + nChanges
+              + " message(s) in writer queue. This is in RS " + localRsId);
         }
 
         // Check status to know if it is relevant to change the status. Do not
@@ -161,10 +160,10 @@
               if (interrupted)
               {
                 // Finish job and let thread die
-                TRACER.debugInfo("Status analyzer for dn " +
-                    replicationServerDomain.getBaseDn() +
-                  " has been interrupted and will die. This is in RS " +
-                  replicationServerDomain.getReplicationServer().getServerId());
+                TRACER.debugInfo("Status analyzer for dn "
+                    + replicationServerDomain.getBaseDn()
+                    + " has been interrupted and will die. This is in RS "
+                    + localRsId);
                 break;
               }
             }
@@ -179,10 +178,10 @@
               if (interrupted)
               {
                 // Finish job and let thread die
-                TRACER.debugInfo("Status analyzer for dn " +
-                    replicationServerDomain.getBaseDn() +
-                  " has been interrupted and will die. This is in RS " +
-                  replicationServerDomain.getReplicationServer().getServerId());
+                TRACER.debugInfo("Status analyzer for dn "
+                    + replicationServerDomain.getBaseDn()
+                    + " has been interrupted and will die. This is in RS "
+                    + localRsId);
                 break;
               }
             }
@@ -192,10 +191,9 @@
     }
 
     done = true;
-    TRACER.debugInfo("Status analyzer for dn " +
-        replicationServerDomain.getBaseDn() + " is terminated." +
-      " This is in RS " +
-      replicationServerDomain.getReplicationServer().getServerId());
+    TRACER.debugInfo("Status analyzer for dn "
+        + replicationServerDomain.getBaseDn() + " is terminated."
+        + " This is in RS " + localRsId);
   }
 
   /**
@@ -211,8 +209,8 @@
       if (debugEnabled())
       {
         TRACER.debugInfo("Shutting down status analyzer for dn "
-            + replicationServerDomain.getBaseDn() + " in RS "
-            + replicationServerDomain.getReplicationServer().getServerId());
+            + replicationServerDomain.getBaseDn()
+            + " in RS " + replicationServerDomain.getLocalRSServerId());
       }
     }
   }
@@ -234,9 +232,9 @@
         if (n >= FACTOR)
         {
           TRACER.debugInfo("Interrupting status analyzer for dn " +
-            replicationServerDomain.getBaseDn() + " in RS " +
-            replicationServerDomain.getReplicationServer().getServerId());
-          this.interrupt();
+              replicationServerDomain.getBaseDn() + " in RS " +
+              replicationServerDomain.getLocalRSServerId());
+          interrupt();
         }
       }
     } catch (InterruptedException e)
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java
index 7d2ec3c..2ed462e 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java
@@ -27,11 +27,6 @@
  */
 package org.opends.server.replication.protocol;
 
-import static org.opends.server.TestCaseUtils.*;
-import static org.opends.server.replication.protocol.OperationContext.*;
-import static org.opends.server.replication.protocol.ProtocolVersion.*;
-import static org.testng.Assert.*;
-
 import java.util.*;
 import java.util.zip.DataFormatException;
 
@@ -51,6 +46,11 @@
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
+import static org.opends.server.TestCaseUtils.*;
+import static org.opends.server.replication.protocol.OperationContext.*;
+import static org.opends.server.replication.protocol.ProtocolVersion.*;
+import static org.testng.Assert.*;
+
 /**
  * Test the constructors, encoders and decoders of the replication protocol
  * PDUs classes (message classes)
@@ -84,14 +84,11 @@
 
     Attribute attr1 = Attributes.create("description", "new value");
     Modification mod1 = new Modification(ModificationType.REPLACE, attr1);
-    List<Modification> mods1 = new ArrayList<Modification>();
-    mods1.add(mod1);
+    List<Modification> mods1 = newList(mod1);
 
     Attribute attr2 = Attributes.empty("description");
     Modification mod2 = new Modification(ModificationType.DELETE, attr2);
-    List<Modification> mods2 = new ArrayList<Modification>();
-    mods2.add(mod1);
-    mods2.add(mod2);
+    List<Modification> mods2 = newList(mod1, mod2);
 
     AttributeBuilder builder = new AttributeBuilder(type);
     builder.add("string");
@@ -99,8 +96,7 @@
     builder.add("again");
     Attribute attr3 = builder.toAttribute();
     Modification mod3 = new Modification(ModificationType.ADD, attr3);
-    List<Modification> mods3 = new ArrayList<Modification>();
-    mods3.add(mod3);
+    List<Modification> mods3 = newList(mod3);
 
     List<Modification> mods4 = new ArrayList<Modification>();
     for (int i = 0; i < 10; i++)
@@ -113,16 +109,9 @@
 
     Attribute attr5 = Attributes.create("namingcontexts", TEST_ROOT_DN_STRING);
     Modification mod5 = new Modification(ModificationType.REPLACE, attr5);
-    List<Modification> mods5 = new ArrayList<Modification>();
-    mods5.add(mod5);
+    List<Modification> mods5 = newList(mod5);
 
-    // Entry attributes
-    Attribute eattr1 = Attributes.create("description", "eav description");
-    Attribute eattr2 = Attributes.create("namingcontexts", "eav naming contexts");
-    List<Attribute> eclIncludes = new ArrayList<Attribute>();
-    eclIncludes.add(eattr1);
-    eclIncludes.add(eattr2);
-
+    List<Attribute> eclIncludes = getEntryAttributes();
     return new Object[][] {
         { cn1, "dc=test", mods1, false, AssuredMode.SAFE_DATA_MODE, (byte)0, null},
         { cn2, "dc=cn2", mods1, true, AssuredMode.SAFE_READ_MODE, (byte)1, eclIncludes},
@@ -178,21 +167,7 @@
     assertEquals(msg.getChangeNumber(), generatedMsg.getChangeNumber());
 
     // Get ECL entry attributes
-    ArrayList<RawAttribute> genAttrList = generatedMsg.getEclIncludes();
-    if (entryAttrList==null)
-      assertTrue(genAttrList.size()==0);
-    else
-    {
-      assertTrue(genAttrList.size()==entryAttrList.size());
-      int i=0;
-      for (Attribute attr : entryAttrList)
-      {
-        assertTrue(attr.getName().equalsIgnoreCase(genAttrList.get(i).toAttribute().getName()));
-        assertTrue(attr.toString().equalsIgnoreCase(genAttrList.get(i).toAttribute().toString()),
-            "Comparing: " + attr.toString() + " and " + genAttrList.get(i).toAttribute().toString());
-        i++;
-      }
-    }
+    assertAttributesEqual(entryAttrList, generatedMsg.getEclIncludes());
 
     Operation op = msg.createOperation(connection);
     Operation generatedOperation = generatedMsg.createOperation(connection);
@@ -200,8 +175,8 @@
     assertEquals(op.getClass(), ModifyOperationBasis.class);
     assertEquals(generatedOperation.getClass(), ModifyOperationBasis.class);
 
-    ModifyOperationBasis mod1 = (ModifyOperationBasis) op;
-    ModifyOperationBasis mod2 = (ModifyOperationBasis) generatedOperation;
+    ModifyOperation mod1 = (ModifyOperation) op;
+    ModifyOperation mod2 = (ModifyOperation) generatedOperation;
 
     assertEquals(mod1.getRawEntryDN(), mod2.getRawEntryDN());
     assertEquals( mod1.getAttachment(SYNCHROCONTEXT),
@@ -237,9 +212,9 @@
     assertEquals(msg.getAssuredMode(), assuredMode);
 
     // Check safe data level
-    assertTrue(msg.getSafeDataLevel() == 1);
+    assertEquals(msg.getSafeDataLevel(), 1);
     msg.setSafeDataLevel(safeDataLevel);
-    assertTrue(msg.getSafeDataLevel() == safeDataLevel);
+    assertEquals(msg.getSafeDataLevel(), safeDataLevel);
 
     // Check equals
     ModifyMsg generatedMsg = (ModifyMsg) ReplicationMsg.generateMsg(
@@ -282,20 +257,20 @@
   @DataProvider(name = "createDeleteData")
   public Object[][] createDeleteData()
   {
-
-    // Entry attributes
-    Attribute eattr1 = Attributes.create("description", "eav description");
-    Attribute eattr2 = Attributes.create("namingcontexts", "eav naming contexts");
-    List<Attribute> entryAttrList = new ArrayList<Attribute>();
-    entryAttrList.add(eattr1);
-    entryAttrList.add(eattr2);
-
+    List<Attribute> entryAttrList = getEntryAttributes();
     return new Object[][] {
         {"dc=com", entryAttrList, false},
         {"dc=delete,dc=an,dc=entry,dc=with,dc=a,dc=long dn", null, true},
         };
   }
 
+  private List<Attribute> getEntryAttributes()
+  {
+    return newList(
+        Attributes.create("description", "eav description"),
+        Attributes.create("namingcontexts", "eav naming contexts"));
+  }
+
   /**
    * Create a Delete from the data provided above.
    * The call getBytes() to test the encoding of the Msg and
@@ -309,17 +284,17 @@
   {
     InternalClientConnection connection =
         InternalClientConnection.getRootConnection();
-    DeleteOperationBasis opBasis =
+    DeleteOperation deleteOp =
       new DeleteOperationBasis(connection, 1, 1,null, DN.decode(rawDN));
     if (subtree)
     {
-      opBasis.addRequestControl(new SubtreeDeleteControl(false));
+      deleteOp.addRequestControl(new SubtreeDeleteControl(false));
     }
-    LocalBackendDeleteOperation op = new LocalBackendDeleteOperation(opBasis);
+    LocalBackendDeleteOperation op = new LocalBackendDeleteOperation(deleteOp);
     ChangeNumber cn = new ChangeNumber(TimeThread.getTime(),123,  45);
     op.setAttachment(SYNCHROCONTEXT, new DeleteContext(cn, "uniqueid"));
     DeleteMsg msg = new DeleteMsg(op);
-    assertTrue((msg.isSubtreeDelete()==subtree));
+    assertEquals(msg.isSubtreeDelete(), subtree);
     // Set ECL entry attributes
     if (entryAttrList != null)
     {
@@ -335,21 +310,7 @@
     assertEquals(generatedMsg.isSubtreeDelete(), subtree);
 
     // Get ECL entry attributes
-    ArrayList<RawAttribute> genAttrList = generatedMsg.getEclIncludes();
-    if (entryAttrList==null)
-      assertTrue(genAttrList.size()==0);
-    else
-    {
-      assertTrue(genAttrList.size()==entryAttrList.size());
-      int i=0;
-      for (Attribute attr : entryAttrList)
-      {
-        assertTrue(attr.getName().equalsIgnoreCase(genAttrList.get(i).toAttribute().getName()));
-        assertTrue(attr.toString().equalsIgnoreCase(genAttrList.get(i).toAttribute().toString()),
-            "Comparing: " + attr.toString() + " and " + genAttrList.get(i).toAttribute().toString());
-        i++;
-      }
-    }
+    assertAttributesEqual(entryAttrList, generatedMsg.getEclIncludes());
 
     Operation generatedOperation = generatedMsg.createOperation(connection);
 
@@ -358,8 +319,7 @@
         (subtree?(generatedOperation.getRequestControl(SubtreeDeleteControl.DECODER)!=null):
           (generatedOperation.getRequestControl(SubtreeDeleteControl.DECODER)==null)));
 
-    DeleteOperationBasis mod2 = (DeleteOperationBasis) generatedOperation;
-
+    DeleteOperation mod2 = (DeleteOperationBasis) generatedOperation;
     assertEquals(op.getRawEntryDN(), mod2.getRawEntryDN());
 
     // Create an update message from this op
@@ -375,23 +335,19 @@
 
     Attribute attr1 = Attributes.create("description", "new value");
     Modification mod1 = new Modification(ModificationType.REPLACE, attr1);
-    List<Modification> mods1 = new ArrayList<Modification>();
-    mods1.add(mod1);
+    List<Modification> mods1 = newList(mod1);
 
     Attribute attr2 = Attributes.empty("description");
     Modification mod2 = new Modification(ModificationType.DELETE, attr2);
-    List<Modification> mods2 = new ArrayList<Modification>();
-    mods2.add(mod1);
-    mods2.add(mod2);
+    List<Modification> mods2 = newList(mod1, mod2);
 
     AttributeBuilder builder = new AttributeBuilder(type);
-    List<Modification> mods3 = new ArrayList<Modification>();
     builder.add("string");
     builder.add("value");
     builder.add("again");
     Attribute attr3 = builder.toAttribute();
     Modification mod3 = new Modification(ModificationType.ADD, attr3);
-    mods3.add(mod3);
+    List<Modification> mods3 = newList(mod3);
 
     List<Modification> mods4 = new ArrayList<Modification>();
     for (int i = 0; i < 10; i++)
@@ -402,19 +358,11 @@
       mods4.add(mod);
     }
 
-    // Entry attributes
-    Attribute eattr1 = Attributes.create("description", "eav description");
-    Attribute eattr2 = Attributes.create("namingcontexts", "eav naming contexts");
-    List<Attribute> entryAttrList = new ArrayList<Attribute>();
-    entryAttrList.add(eattr1);
-    entryAttrList.add(eattr2);
-
-
+    List<Attribute> entryAttrList = getEntryAttributes();
     return new Object[][] {
         {"dc=test,dc=com", "dc=new", false, "dc=change", mods1, false, AssuredMode.SAFE_DATA_MODE, (byte)0, entryAttrList},
         {"dc=test,dc=com", "dc=new", true, "dc=change", mods2, true, AssuredMode.SAFE_READ_MODE, (byte)1, null},
-        // testNG does not like null argument so use "" for the newSuperior
-        // instead of null
+        // testNG does not like null argument so use "" for the newSuperior instead of null
         {"dc=test,dc=com", "dc=new", false, "", mods3, true, AssuredMode.SAFE_READ_MODE, (byte)3, entryAttrList},
         {"dc=delete,dc=an,dc=entry,dc=with,dc=a,dc=long dn",
                    "dc=new", true, "", mods4, true, AssuredMode.SAFE_DATA_MODE, (byte)99, null},
@@ -431,7 +379,7 @@
   {
     InternalClientConnection connection =
       InternalClientConnection.getRootConnection();
-    ModifyDNOperationBasis op =
+    ModifyDNOperation op =
       new ModifyDNOperationBasis(connection, 1, 1, null,
                   DN.decode(rawDN), RDN.decode(newRdn), deleteOldRdn,
                   (newSuperior.length() != 0 ? DN.decode(newSuperior) : null));
@@ -464,21 +412,7 @@
     assertEquals(generatedMsg.getSafeDataLevel(), safeDataLevel);
 
     // Get ECL entry attributes
-    ArrayList<RawAttribute> genAttrList = generatedMsg.getEclIncludes();
-    if (entryAttrList==null)
-      assertTrue(genAttrList.size()==0);
-    else
-    {
-      assertTrue(genAttrList.size()==entryAttrList.size());
-      int i=0;
-      for (Attribute attr : entryAttrList)
-      {
-        assertTrue(attr.getName().equalsIgnoreCase(genAttrList.get(i).toAttribute().getName()));
-        assertTrue(attr.toString().equalsIgnoreCase(genAttrList.get(i).toAttribute().toString()),
-            "Comparing: " + attr.toString() + " and " + genAttrList.get(i).toAttribute().toString());
-        i++;
-      }
-    }
+    assertAttributesEqual(entryAttrList, generatedMsg.getEclIncludes());
 
     Operation oriOp = msg.createOperation(connection);
     Operation generatedOperation = generatedMsg.createOperation(connection);
@@ -486,8 +420,8 @@
     assertEquals(oriOp.getClass(), ModifyDNOperationBasis.class);
     assertEquals(generatedOperation.getClass(), ModifyDNOperationBasis.class);
 
-    ModifyDNOperationBasis moddn1 = (ModifyDNOperationBasis) oriOp;
-    ModifyDNOperationBasis moddn2 = (ModifyDNOperationBasis) generatedOperation;
+    ModifyDNOperation moddn1 = (ModifyDNOperation) oriOp;
+    ModifyDNOperation moddn2 = (ModifyDNOperation) generatedOperation;
 
     assertEquals(msg.getChangeNumber(), generatedMsg.getChangeNumber());
     assertEquals(moddn1.getRawEntryDN(), moddn2.getRawEntryDN());
@@ -504,13 +438,7 @@
   @DataProvider(name = "createAddData")
   public Object[][] createAddData()
   {
-
-    // Entry attributes
-    Attribute eattr1 = Attributes.create("description", "eav description");
-    Attribute eattr2 = Attributes.create("namingcontexts", "eav naming contexts");
-    List<Attribute> entryAttrList = new ArrayList<Attribute>();
-    entryAttrList.add(eattr1);
-    entryAttrList.add(eattr2);
+    List<Attribute> entryAttrList = getEntryAttributes();
     return new Object[][] {
         {"dc=example,dc=com", false, AssuredMode.SAFE_DATA_MODE, (byte)0, entryAttrList},
         {"o=test", true, AssuredMode.SAFE_READ_MODE, (byte)1, null},
@@ -524,22 +452,22 @@
   {
     Attribute objectClass = Attributes.create(DirectoryServer
         .getObjectClassAttributeType(), "organization");
-    HashMap<ObjectClass, String> objectClassList = new HashMap<ObjectClass, String>();
+    Map<ObjectClass, String> objectClassList =
+        new HashMap<ObjectClass, String>();
     objectClassList.put(DirectoryServer.getObjectClass("organization"),
         "organization");
 
-    ArrayList<Attribute> userAttributes = new ArrayList<Attribute>(1);
     Attribute attr = Attributes.create("o", "com");
-    userAttributes.add(attr);
-    HashMap<AttributeType, List<Attribute>> userAttList = new HashMap<AttributeType, List<Attribute>>();
+    List<Attribute> userAttributes = newList(attr);
+    Map<AttributeType, List<Attribute>> userAttList =
+        new HashMap<AttributeType, List<Attribute>>();
     userAttList.put(attr.getAttributeType(), userAttributes);
 
 
-    ArrayList<Attribute> operationalAttributes = new ArrayList<Attribute>(1);
     attr = Attributes.create("creatorsname", "dc=creator");
-    operationalAttributes.add(attr);
-    HashMap<AttributeType,List<Attribute>> opList=
-      new HashMap<AttributeType,List<Attribute>>();
+    List<Attribute> operationalAttributes = newList(attr);
+    Map<AttributeType, List<Attribute>> opList =
+        new HashMap<AttributeType, List<Attribute>>();
     opList.put(attr.getAttributeType(), operationalAttributes);
 
     ChangeNumber cn = new ChangeNumber(TimeThread.getTime(), 123,  45);
@@ -570,22 +498,7 @@
     assertEquals(generatedMsg.getSafeDataLevel(), safeDataLevel);
 
     // Get ECL entry attributes
-    ArrayList<RawAttribute> genAttrList = generatedMsg.getEclIncludes();
-    if (entryAttrList==null)
-      assertTrue(genAttrList.size()==0);
-    else
-    {
-      assertTrue(genAttrList.size()==entryAttrList.size());
-      int i=0;
-      for (Attribute eattr : entryAttrList)
-      {
-        assertTrue(eattr.getName().equalsIgnoreCase(genAttrList.get(i).toAttribute().getName()));
-        assertTrue(eattr.toString().equalsIgnoreCase(genAttrList.get(i).toAttribute().toString()),
-            "Comparing: " + eattr.toString() + " and " + genAttrList.get(i).toAttribute().toString());
-        i++;
-      }
-    }
-
+    assertAttributesEqual(entryAttrList, generatedMsg.getEclIncludes());
 
     // Create an new Add Operation from the current addMsg
     InternalClientConnection connection =
@@ -596,15 +509,14 @@
     assertEquals(op.getClass(), AddOperationBasis.class);
     assertEquals(generatedOperation.getClass(), AddOperationBasis.class);
 
-    AddOperationBasis addOpBasis = (AddOperationBasis) op;
-    AddOperationBasis genAddOpBasis = (AddOperationBasis) generatedOperation;
+    AddOperation addOp = (AddOperation) op;
+    AddOperation genAddOp = (AddOperation) generatedOperation;
 
-    assertEquals(addOpBasis.getRawEntryDN(), genAddOpBasis.getRawEntryDN());
-    assertEquals( addOpBasis.getAttachment(SYNCHROCONTEXT),
-                  genAddOpBasis.getAttachment(SYNCHROCONTEXT));
-    assertEquals(addOpBasis.getObjectClasses(), genAddOpBasis.getObjectClasses());
-    assertEquals(addOpBasis.getOperationalAttributes(), genAddOpBasis.getOperationalAttributes());
-    assertEquals(addOpBasis.getUserAttributes(), genAddOpBasis.getUserAttributes());
+    assertEquals(addOp.getRawEntryDN(), genAddOp.getRawEntryDN());
+    assertEquals(addOp.getAttachment(SYNCHROCONTEXT), genAddOp.getAttachment(SYNCHROCONTEXT));
+    assertEquals(addOp.getObjectClasses(), genAddOp.getObjectClasses());
+    assertEquals(addOp.getOperationalAttributes(), genAddOp.getOperationalAttributes());
+    assertEquals(addOp.getUserAttributes(), genAddOp.getUserAttributes());
 
     assertEquals(msg.getBytes(), generatedMsg.getBytes());
     assertEquals(msg.toString(), generatedMsg.toString());
@@ -614,12 +526,12 @@
 
     AddOperation addOpB = new AddOperationBasis(connection,
         1, 1, null, dn, objectClassList, userAttList, opList);
-    LocalBackendAddOperation addOp = new LocalBackendAddOperation(addOpB);
+    LocalBackendAddOperation localAddOp = new LocalBackendAddOperation(addOpB);
     OperationContext opCtx = new AddContext(cn, "thisIsaUniqueID",
         "parentUniqueId");
-    addOp.setAttachment(SYNCHROCONTEXT, opCtx);
+    localAddOp.setAttachment(SYNCHROCONTEXT, opCtx);
 
-    generatedMsg = new AddMsg(addOp);
+    generatedMsg = new AddMsg(localAddOp);
 
     generatedMsg.setAssured(isAssured);
     generatedMsg.setAssuredMode(assuredMode);
@@ -636,10 +548,31 @@
 
 
     // Create an update message from this op
-    AddMsg updateMsg = (AddMsg) LDAPUpdateMsg.generateMsg(addOp);
+    AddMsg updateMsg = (AddMsg) LDAPUpdateMsg.generateMsg(localAddOp);
     assertEquals(msg.getChangeNumber(), updateMsg.getChangeNumber());
   }
 
+  private void assertAttributesEqual(List<Attribute> entryAttrList,
+      List<RawAttribute> genAttrList) throws LDAPException
+  {
+    if (entryAttrList == null)
+    {
+      assertEquals(genAttrList.size(), 0);
+      return;
+    }
+
+    assertEquals(genAttrList.size(), entryAttrList.size());
+    int i = 0;
+    for (Attribute eattr : entryAttrList)
+    {
+      final Attribute genAttr = genAttrList.get(i).toAttribute();
+      assertTrue(eattr.getName().equalsIgnoreCase(genAttr.getName()));
+      assertTrue(eattr.toString().equalsIgnoreCase(genAttr.toString()),
+          "Comparing: " + eattr + " and " + genAttr);
+      i++;
+    }
+  }
+
   /**
    * Build some data for the AckMsg test below.
    */
@@ -649,22 +582,10 @@
     ChangeNumber cn2 = new ChangeNumber(TimeThread.getTime(), 123, 45);
     ChangeNumber cn3 = new ChangeNumber(TimeThread.getTime(), 1234567, 45678);
 
-    ArrayList<Integer> fservers1 = new ArrayList<Integer>();
-    fservers1.add(12345);
-    fservers1.add(-12345);
-    fservers1.add(31657);
-    fservers1.add(-28456);
-    fservers1.add(0);
-    ArrayList<Integer> fservers2 = new ArrayList<Integer>();
-    ArrayList<Integer> fservers3 = new ArrayList<Integer>();
-    fservers3.add(0);
-    ArrayList<Integer> fservers4 = new ArrayList<Integer>();
-    fservers4.add(100);
-    fservers4.add(2000);
-    fservers4.add(30000);
-    fservers4.add(-100);
-    fservers4.add(-2000);
-    fservers4.add(-30000);
+    List<Integer> fservers1 = newList(12345, -12345, 31657, -28456, 0);
+    List<Integer> fservers2 = newList();
+    List<Integer> fservers3 = newList(0);
+    List<Integer> fservers4 = newList(100, 2000, 30000, -100, -2000, -30000);
 
     return new Object[][] {
         {cn1, true, false, false, fservers1},
@@ -695,22 +616,22 @@
     assertFalse(msg1.hasTimeout());
     assertFalse(msg1.hasWrongStatus());
     assertFalse(msg1.hasReplayError());
-    assertTrue(msg1.getFailedServers().size() == 0);
+    assertEquals(msg1.getFailedServers().size(), 0);
 
     // Check constructor with error info
     msg1 = new  AckMsg(cn, hasTimeout, hasWrongStatus, hasReplayError, failedServers);
     assertEquals(msg1.getChangeNumber().compareTo(cn), 0);
-    assertTrue(msg1.hasTimeout() == hasTimeout);
-    assertTrue(msg1.hasWrongStatus() == hasWrongStatus);
-    assertTrue(msg1.hasReplayError() == hasReplayError);
+    assertEquals(msg1.hasTimeout(), hasTimeout);
+    assertEquals(msg1.hasWrongStatus(), hasWrongStatus);
+    assertEquals(msg1.hasReplayError(), hasReplayError);
     assertEquals(msg1.getFailedServers(), failedServers);
 
     // Constructor test (with byte[])
     msg2 = new  AckMsg(msg1.getBytes(getCurrentVersion()));
     assertEquals(msg2.getChangeNumber().compareTo(cn), 0);
-    assertTrue(msg1.hasTimeout() == msg2.hasTimeout());
-    assertTrue(msg1.hasWrongStatus() == msg2.hasWrongStatus());
-    assertTrue(msg1.hasReplayError() == msg2.hasReplayError());
+    assertEquals(msg1.hasTimeout(), msg2.hasTimeout());
+    assertEquals(msg1.hasWrongStatus(), msg2.hasWrongStatus());
+    assertEquals(msg1.hasReplayError(), msg2.hasReplayError());
     assertEquals(msg1.getFailedServers(), msg2.getFailedServers());
 
     // Check invalid bytes for constructor
@@ -739,9 +660,9 @@
     // create a msg to put in the eclupdatemsg
     InternalClientConnection connection =
       InternalClientConnection.getRootConnection();
-    DeleteOperationBasis opBasis =
+    DeleteOperation deleteOp =
       new DeleteOperationBasis(connection, 1, 1,null, DN.decode("cn=t1"));
-    LocalBackendDeleteOperation op = new LocalBackendDeleteOperation(opBasis);
+    LocalBackendDeleteOperation op = new LocalBackendDeleteOperation(deleteOp);
     ChangeNumber cn = new ChangeNumber(TimeThread.getTime(), 123,  45);
     op.setAttachment(SYNCHROCONTEXT, new DeleteContext(cn, "uniqueid"));
     DeleteMsg delmsg = new DeleteMsg(op);
@@ -819,7 +740,7 @@
         newMsg.getServerState().getChangeNumber(1));
     assertEquals(newMsg.getVersion(), getCurrentVersion());
     assertEquals(msg.getGenerationId(), newMsg.getGenerationId());
-    assertTrue(msg.getGroupId() == newMsg.getGroupId());
+    assertEquals(msg.getGroupId(), newMsg.getGroupId());
   }
 
   @DataProvider(name="createReplServerStartData")
@@ -862,9 +783,9 @@
     assertEquals(newMsg.getVersion(), getCurrentVersion());
     assertEquals(msg.getGenerationId(), newMsg.getGenerationId());
     assertEquals(msg.getSSLEncryption(), newMsg.getSSLEncryption());
-    assertTrue(msg.getGroupId() == newMsg.getGroupId());
-    assertTrue(msg.getDegradedStatusThreshold() ==
-      newMsg.getDegradedStatusThreshold());
+    assertEquals(msg.getGroupId(), newMsg.getGroupId());
+    assertEquals(msg.getDegradedStatusThreshold(),
+                 newMsg.getDegradedStatusThreshold());
   }
 
   @DataProvider(name="createReplServerStartDSData")
@@ -908,9 +829,9 @@
     assertEquals(newMsg.getVersion(), getCurrentVersion());
     assertEquals(msg.getGenerationId(), newMsg.getGenerationId());
     assertEquals(msg.getSSLEncryption(), newMsg.getSSLEncryption());
-    assertTrue(msg.getGroupId() == newMsg.getGroupId());
-    assertTrue(msg.getDegradedStatusThreshold() ==
-      newMsg.getDegradedStatusThreshold());
+    assertEquals(msg.getGroupId(), newMsg.getGroupId());
+    assertEquals(msg.getDegradedStatusThreshold(),
+                 newMsg.getDegradedStatusThreshold());
     assertEquals(msg.getWeight(), newMsg.getWeight());
     assertEquals(msg.getConnectedDSNumber(), newMsg.getConnectedDSNumber());
   }
@@ -968,13 +889,10 @@
     urls4.add("ldaps://host:port/dc=foobar2??sub?(sn=Another Entry 2)");
 
 
-    Set<String> a1 = new HashSet<String>();
-    Set<String> a2 = new HashSet<String>();
-    a2.add("dc");
-    Set<String> a3 = new HashSet<String>();
-    a3.add("dc");
-    a3.add("uid");
-    Set<String> a4 = new HashSet<String>();
+    Set<String> a1 = newSet();
+    Set<String> a2 = newSet("dc");
+    Set<String> a3 = newSet("dc", "uid");
+    Set<String> a4 = newSet();
 
     DSInfo dsInfo1 = new DSInfo(13, "dsHost1:111", 26, 154631, ServerStatus.FULL_UPDATE_STATUS,
       false, AssuredMode.SAFE_DATA_MODE, (byte)12, (byte)132, urls1, a1, a1, (short)1);
@@ -990,37 +908,18 @@
     DSInfo dsInfo5 = new DSInfo(452436, "dsHost5:555", 45591, 0, ServerStatus.NORMAL_STATUS,
         false, AssuredMode.SAFE_READ_MODE, (byte)17, (byte)0, urls3, a1, a1, (short)5);
 
-    List<DSInfo> dsList1 = new ArrayList<DSInfo>();
-    dsList1.add(dsInfo1);
-
-    List<DSInfo> dsList2 = new ArrayList<DSInfo>();
-
-    List<DSInfo> dsList3 = new ArrayList<DSInfo>();
-    dsList3.add(dsInfo2);
-
-    List<DSInfo> dsList4 = new ArrayList<DSInfo>();
-    dsList4.add(dsInfo5);
-    dsList4.add(dsInfo4);
-    dsList4.add(dsInfo3);
-    dsList4.add(dsInfo2);
-    dsList4.add(dsInfo1);
+    List<DSInfo> dsList1 = newList(dsInfo1);
+    List<DSInfo> dsList2 = newList();
+    List<DSInfo> dsList3 = newList(dsInfo2);
+    List<DSInfo> dsList4 = newList(dsInfo5, dsInfo4, dsInfo3, dsInfo2, dsInfo1);
 
     RSInfo rsInfo1 = new RSInfo(4527, "rsHost1:123", 45316, (byte)103, 1);
-
     RSInfo rsInfo2 = new RSInfo(4527, "rsHost2:456", 0, (byte)0, 1);
-
     RSInfo rsInfo3 = new RSInfo(0, "rsHost3:789", -21113, (byte)98, 1);
-
     RSInfo rsInfo4 = new RSInfo(45678, "rsHost4:1011", -21113, (byte)98, 1);
 
-    List<RSInfo> rsList1 = new ArrayList<RSInfo>();
-    rsList1.add(rsInfo1);
-
-    List<RSInfo> rsList2 = new ArrayList<RSInfo>();
-    rsList2.add(rsInfo1);
-    rsList2.add(rsInfo2);
-    rsList2.add(rsInfo3);
-    rsList2.add(rsInfo4);
+    List<RSInfo> rsList1 = newList(rsInfo1);
+    List<RSInfo> rsList2 = newList(rsInfo1, rsInfo2, rsInfo3, rsInfo4);
 
     return new Object [][] {
       {dsList1, rsList1, a1},
@@ -1033,6 +932,16 @@
     };
   }
 
+  private <T> Set<T> newSet(T... elems)
+  {
+    return new HashSet<T>(Arrays.asList(elems));
+  }
+
+  private <T> List<T> newList(T... elems)
+  {
+    return Arrays.asList(elems);
+  }
+
   /**
    * Test TopologyMsg encoding and decoding.
    */
@@ -1080,12 +989,9 @@
     urls6.add("ldaps://host:port/dc=foo??sub?(sn=Fourth Entry)");
     urls6.add("ldaps://host:port/dc=foo??sub?(sn=Fifth Entry)");
 
-    Set<String> a1 = new HashSet<String>();
-    Set<String> a2 = new HashSet<String>();
-    a2.add("dc");
-    Set<String> a3 = new HashSet<String>();
-    a3.add("dc");
-    a3.add("uid");
+    Set<String> a1 = newSet();
+    Set<String> a2 = newSet("dc");
+    Set<String> a3 = newSet("dc", "uid");
 
     return new Object[][]{
       {ServerStatus.NORMAL_STATUS, urls1, true, AssuredMode.SAFE_DATA_MODE, (byte)1, a1},
@@ -1112,9 +1018,9 @@
     StartSessionMsg newMsg =
       new StartSessionMsg(msg.getBytes(getCurrentVersion()),getCurrentVersion());
     assertEquals(msg.getStatus(), newMsg.getStatus());
-    assertTrue(msg.isAssured() == newMsg.isAssured());
+    assertEquals(msg.isAssured(), newMsg.isAssured());
     assertEquals(msg.getAssuredMode(), newMsg.getAssuredMode());
-    assertTrue(msg.getSafeDataLevel() == newMsg.getSafeDataLevel());
+    assertEquals(msg.getSafeDataLevel(), newMsg.getSafeDataLevel());
     assertEquals(msg.getReferralsURLs(), newMsg.getReferralsURLs());
     assertTrue(attrs.equals(newMsg.getEclIncludes()));
     assertTrue(attrs.equals(newMsg.getEclIncludesForDeletes()));
@@ -1237,12 +1143,12 @@
       if (sid == sid1)
       {
         assertEquals(s.toString(), s1.toString(), "");
-        assertEquals((Long)(now+1), newMsg.getLDAPApproxFirstMissingDate(sid), "");
+        assertEquals(now + 1, newMsg.getLDAPApproxFirstMissingDate(sid), "");
       }
       else if (sid == sid2)
       {
         assertEquals(s.toString(), s2.toString());
-        assertEquals((Long)(now+2), newMsg.getLDAPApproxFirstMissingDate(sid), "");
+        assertEquals(now + 2, newMsg.getLDAPApproxFirstMissingDate(sid), "");
       }
       else
       {
@@ -1258,7 +1164,7 @@
       if (sid == sid3)
       {
         assertEquals(s.toString(), s3.toString(), "");
-        assertEquals((Long)(now+3), newMsg.getRSApproxFirstMissingDate(sid), "");
+        assertEquals(now + 3, newMsg.getRSApproxFirstMissingDate(sid), "");
       }
       else
       {
@@ -1374,10 +1280,8 @@
   public void UpdateMsgTest() throws Exception
   {
     final String test = "string used for test";
-    UpdateMsg msg =
-      new UpdateMsg(
-          new ChangeNumber(1, 2 , 39123),
-          test.getBytes());
+    ChangeNumber cn = new ChangeNumber(1, 2 , 39123);
+    UpdateMsg msg = new UpdateMsg(cn, test.getBytes());
     UpdateMsg newMsg = new UpdateMsg(msg.getBytes());
     assertEquals(test.getBytes(), newMsg.getPayload());
   }
@@ -1406,7 +1310,7 @@
         newMsg.getServerState().getChangeNumber(1));
     assertEquals(newMsg.getVersion(), getCurrentVersion());
     assertEquals(msg.getGenerationId(), newMsg.getGenerationId());
-    assertTrue(msg.getGroupId() == newMsg.getGroupId());
+    assertEquals(msg.getGroupId(), newMsg.getGroupId());
   }
 
   /**
@@ -1418,41 +1322,32 @@
   {
     // data
     ChangeNumber changeNumber = new ChangeNumber(TimeThread.getTime(), 123,  45);
-    String generalizedState = "fakegenstate";
     ServerState state = new ServerState();
     assertTrue(state.update(new ChangeNumber(75, 5,263)));
-    short mode = 3;
-    int firstDraftChangeNumber = 13;
-    int lastDraftChangeNumber  = 14;
-    String myopid = "fakeopid";
+
     // create original
     StartECLSessionMsg msg = new StartECLSessionMsg();
     msg.setChangeNumber(changeNumber);
-    msg.setCrossDomainServerState(generalizedState);
+    msg.setCrossDomainServerState("fakegenstate");
     msg.setPersistent(StartECLSessionMsg.PERSISTENT);
-    msg.setFirstDraftChangeNumber(firstDraftChangeNumber);
-    msg.setLastDraftChangeNumber(lastDraftChangeNumber);
-    msg.setECLRequestType(mode);
-    msg.setOperationId(myopid);
+    msg.setFirstDraftChangeNumber(13);
+    msg.setLastDraftChangeNumber(14);
+    msg.setECLRequestType((short) 3);
+    msg.setOperationId("fakeopid");
     String dn1 = "cn=admin data";
     String dn2 = "cn=config";
-    Set<String> dns = new HashSet<String>();
-    dns.add(dn1);
-    dns.add(dn2);
-    msg.setExcludedDNs(dns);
+    msg.setExcludedDNs(newSet(dn1, dn2));
+
     // create copy
     StartECLSessionMsg newMsg = new StartECLSessionMsg(msg.getBytes(getCurrentVersion()));
     // test equality between the two copies
     assertEquals(msg.getChangeNumber(), newMsg.getChangeNumber());
     assertEquals(msg.isPersistent(), newMsg.isPersistent());
-    assertEquals(msg.getFirstDraftChangeNumber(), newMsg
-        .getFirstDraftChangeNumber());
+    assertEquals(msg.getFirstDraftChangeNumber(), newMsg.getFirstDraftChangeNumber());
     assertEquals(msg.getECLRequestType(), newMsg.getECLRequestType());
     assertEquals(msg.getLastDraftChangeNumber(), newMsg.getLastDraftChangeNumber());
-    assertTrue(
-        msg.getCrossDomainServerState().equalsIgnoreCase(newMsg.getCrossDomainServerState()));
-    assertTrue(
-        msg.getOperationId().equalsIgnoreCase(newMsg.getOperationId()));
+    assertTrue(msg.getCrossDomainServerState().equalsIgnoreCase(newMsg.getCrossDomainServerState()));
+    assertTrue(msg.getOperationId().equalsIgnoreCase(newMsg.getOperationId()));
     Set<String> dns2 = newMsg.getExcludedBaseDNs();
     assertEquals(dns2.size(), 2);
     boolean dn1found=false,dn2found=false;
@@ -1481,21 +1376,21 @@
     long buildnew = 0;
     long t1,t2,t3,t31,t4,t5,t6 = 0;
 
-    HashMap<ObjectClass, String> objectClassList = new HashMap<ObjectClass, String>();
+    Map<ObjectClass, String> objectClassList =
+        new HashMap<ObjectClass, String>();
     objectClassList.put(DirectoryServer.getObjectClass("organization"),
         "organization");
 
-    ArrayList<Attribute> userAttributes = new ArrayList<Attribute>(1);
     Attribute attr = Attributes.create("o", "com");
-    userAttributes.add(attr);
-    HashMap<AttributeType, List<Attribute>> userAttList = new HashMap<AttributeType, List<Attribute>>();
+    List<Attribute> userAttributes = newList(attr);
+    Map<AttributeType, List<Attribute>> userAttList =
+        new HashMap<AttributeType, List<Attribute>>();
     userAttList.put(attr.getAttributeType(), userAttributes);
 
 
-    ArrayList<Attribute> operationalAttributes = new ArrayList<Attribute>(1);
     attr = Attributes.create("creatorsname", "dc=creator");
-    operationalAttributes.add(attr);
-    HashMap<AttributeType,List<Attribute>> opList=
+    List<Attribute> operationalAttributes = newList(attr);
+    Map<AttributeType, List<Attribute>> opList =
       new HashMap<AttributeType,List<Attribute>>();
     opList.put(attr.getAttributeType(), operationalAttributes);
 
@@ -1658,9 +1553,10 @@
       t1 = System.nanoTime();
 
       // create op
-      DeleteOperationBasis opBasis =
+      DeleteOperation deleteOp =
         new DeleteOperationBasis(connection, 1, 1,null, DN.decode(rawDN));
-      LocalBackendDeleteOperation op = new LocalBackendDeleteOperation(opBasis);
+      LocalBackendDeleteOperation op =
+          new LocalBackendDeleteOperation(deleteOp);
       ChangeNumber cn = new ChangeNumber(TimeThread.getTime(), 123, 45);
       op.setAttachment(SYNCHROCONTEXT, new DeleteContext(cn, "uniqueid"));
       t2 = System.nanoTime();

--
Gitblit v1.10.0