From 75fceea66e311b3de58d76a4c993af0fec13dd3d Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 27 Apr 2015 13:20:04 +0000
Subject: [PATCH] OPENDJ-1870 CR-6581 Update BackupManager to generic tool

---
 opendj-server-legacy/src/test/java/org/opends/server/backends/jeb/TestBackendImpl.java |  114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 114 insertions(+), 0 deletions(-)

diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/jeb/TestBackendImpl.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/jeb/TestBackendImpl.java
index 6f41e8d..c06cef4 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/backends/jeb/TestBackendImpl.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/jeb/TestBackendImpl.java
@@ -26,6 +26,10 @@
  */
 package org.opends.server.backends.jeb;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -43,6 +47,7 @@
 import org.opends.server.admin.server.AdminTestCaseUtils;
 import org.opends.server.admin.std.meta.LocalDBBackendCfgDefn;
 import org.opends.server.admin.std.server.LocalDBBackendCfg;
+import org.opends.server.backends.jeb.BackendImpl.JELogFilesIterator;
 import org.opends.server.controls.SubtreeDeleteControl;
 import org.opends.server.core.DeleteOperationBasis;
 import org.opends.server.core.DirectoryServer;
@@ -63,6 +68,7 @@
 import org.opends.server.types.RDN;
 import org.opends.server.types.SearchResultEntry;
 import org.opends.server.util.Base64;
+import org.opends.server.util.StaticUtils;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
@@ -81,6 +87,7 @@
 import static org.opends.server.protocols.internal.InternalClientConnection.*;
 import static org.opends.server.protocols.internal.Requests.*;
 import static org.opends.server.types.Attributes.*;
+import static org.opends.server.util.StaticUtils.*;
 import static org.testng.Assert.*;
 
 /**
@@ -1406,4 +1413,111 @@
     }
   }
 
+  @Test
+  public void testJELogFilesIterator() throws Exception
+  {
+    File rootDir = TestCaseUtils.createTemporaryDirectory("jeLogFilesIterator");
+    try
+    {
+      createLogFilesInDirectory(rootDir.toPath(), "content", 0, 3);
+      JELogFilesIterator iterator = new BackendImpl.JELogFilesIterator(rootDir, "backendID");
+
+      assertLogFilesIterator(iterator, rootDir, 0, 2);
+      assertThat(iterator.hasNext()).isFalse();
+    }
+    finally
+    {
+      StaticUtils.recursiveDelete(rootDir);
+    }
+  }
+
+  @Test
+  public void testJELogFilesIteratorWhenFileIsDeletedAndNewOneAdded() throws Exception
+  {
+    File rootDir = TestCaseUtils.createTemporaryDirectory("jeLogFilesIteratorDelete");
+    try
+    {
+      createLogFilesInDirectory(rootDir.toPath(), "content", 0, 2);
+      JELogFilesIterator iterator = new BackendImpl.JELogFilesIterator(rootDir, "backendID");
+
+      assertLogFilesIterator(iterator, rootDir, 0, 1);
+      assertThat(iterator.hasNext()).isFalse();
+
+      // delete first file log0.jdb and create a new one log2.jdb
+      new File(rootDir, "log0.jdb").delete();
+      createLogFilesInDirectory(rootDir.toPath(), "content", 2, 1);
+
+      assertLogFilesIterator(iterator, rootDir, 2, 2);
+      assertThat(iterator.hasNext()).isFalse();
+    }
+    finally
+    {
+      StaticUtils.recursiveDelete(rootDir);
+    }
+  }
+
+  @Test
+  public void testJELogFilesIteratorWhenFileIsDeletedAndLastOneHasLargerSize() throws Exception
+  {
+    File rootDir = TestCaseUtils.createTemporaryDirectory("jeLogFilesIteratorDelete2");
+    try
+    {
+      createLogFilesInDirectory(rootDir.toPath(), "content", 0, 2);
+      JELogFilesIterator iterator = new BackendImpl.JELogFilesIterator(rootDir, "backendID");
+
+      assertLogFilesIterator(iterator, rootDir, 0, 1);
+
+      // delete first file log0.jdb and update last one with larger content
+      new File(rootDir, "log0.jdb").delete();
+      new File(rootDir, "log1.jdb").delete();
+      createLogFilesInDirectory(rootDir.toPath(), "morecontent", 1, 1);
+
+      assertLogFilesIterator(iterator, rootDir, 1, 1);
+      assertThat(iterator.hasNext()).isFalse();
+    }
+    finally
+    {
+      StaticUtils.recursiveDelete(rootDir);
+    }
+  }
+
+  private void assertLogFilesIterator(JELogFilesIterator iterator, File rootDir, int from, int to)
+  {
+    for (int i = from; i <= to; i++)
+    {
+      assertThat(iterator.hasNext()).as("hasNext expected to be true for " + i).isTrue();
+      assertThat(iterator.next().toFile()).isEqualTo(new File(rootDir, "log" + i + ".jdb"));
+    }
+  }
+
+  /**
+   * Creates dummy "logN.jdb" (where N is a number) files in given directory
+   * with provided label as content for files.
+   */
+  private List<Path> createLogFilesInDirectory(Path directory, String label, int start, int numberOfFiles)
+      throws Exception
+  {
+    List<Path> files = new ArrayList<>();
+    for (int i = start; i < start+numberOfFiles; i++)
+    {
+      String filename = "log" + i + ".jdb";
+      Path file = directory.resolve(filename);
+      createFile(file, StaticUtils.getBytes(label));
+      files.add(file);
+    }
+    return files;
+  }
+
+  private void createFile(Path file, byte[] content) throws Exception {
+    OutputStream output = new FileOutputStream(file.toFile(), false);
+    try
+    {
+      output.write(content);
+    }
+    finally {
+      close(output);
+    }
+  }
+
+
 }

--
Gitblit v1.10.0