From f5fd582f02ef755f438a7e73218a8cf94c2078ab Mon Sep 17 00:00:00 2001
From: davidely <davidely@localhost>
Date: Thu, 14 Sep 2006 03:37:09 +0000
Subject: [PATCH] Added convenience methods for converting LDIF StringS into EntryS.

---
 opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java |  137 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 137 insertions(+), 0 deletions(-)

diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
index de5af8e..8edef42 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
@@ -26,12 +26,19 @@
  */
 package org.opends.server;
 
+import org.opends.server.types.Entry;
+import org.opends.server.types.LDIFImportConfig;
+import org.opends.server.util.LDIFReader;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.StringReader;
+import java.util.List;
+import java.util.ArrayList;
 
 import org.opends.server.config.ConfigException;
 import org.opends.server.config.ConfigFileHandler;
@@ -274,4 +281,134 @@
   private TestCaseUtils() {
     // No implementation.
   }
+
+
+  ////////////////////////////////////////////////////////////////////////////
+  ////////////////////////////////////////////////////////////////////////////
+  //
+  // Various methods for converting LDIF Strings to Entries
+  //
+  ////////////////////////////////////////////////////////////////////////////
+  ////////////////////////////////////////////////////////////////////////////
+
+
+  /**
+   * Returns a modifiable List of entries parsed from the provided LDIF.
+   * It's best to call this after the server has been initialized so
+   * that schema checking happens.
+   * <p>
+   * Also take a look at the makeLdif method below since this makes
+   * expressing LDIF a little bit cleaner.
+   *
+   * @param ldif of the entries to parse.
+   * @return a List of EntryS parsed from the ldif string.
+   * @see #makeLdif
+   */
+  public static List<Entry> entriesFromLdifString(String ldif) throws Exception {
+    LDIFImportConfig ldifImportConfig = new LDIFImportConfig(new StringReader(ldif));
+    LDIFReader reader = new LDIFReader(ldifImportConfig);
+
+    List<Entry> entries = new ArrayList<Entry>();
+    Entry entry = null;
+    while ((entry = reader.readEntry()) != null) {
+      entries.add(entry);
+    }
+
+    return entries;
+  }
+
+  /**
+   * This is used as a convenience when and LDIF string only includes a single
+   * entry. It's best to call this after the server has been initialized so
+   * that schema checking happens.
+   * <p>
+   * Also take a look at the makeLdif method below since this makes
+   * expressing LDIF a little bit cleaner.
+   *
+   * @return the first Entry parsed from the ldif String
+   * @see #makeLdif
+   */
+  public static Entry entryFromLdifString(String ldif) throws Exception {
+    return entriesFromLdifString(ldif).get(0);
+  }
+
+  /**
+   * This method provides the minor convenience of not having to specify the
+   * newline character at the end of every line of LDIF in test code.
+   * This is an admittedly small advantage, but it does make things a little
+   * easier and less error prone.  For example, this
+   *
+     <code>
+       private static final String JOHN_SMITH_LDIF = TestCaseUtils.makeLdif(
+          "dn: cn=John Smith,dc=example,dc=com",
+          "objectclass: inetorgperson",
+          "cn: John Smith",
+          "sn: Smith",
+          "givenname: John");
+
+     </code>
+
+   is a <bold>little</bold> easier to work with than
+
+     <code>
+       private static final String JOHN_SMITH_LDIF =
+          "dn: cn=John Smith,dc=example,dc=com\n" +
+          "objectclass: inetorgperson\n" +
+          "cn: John Smith\n" +
+          "sn: Smith\n" +
+          "givenname: John\n";
+
+     </code>
+   *
+   * @return the concatenation of each line followed by a newline character
+   */
+  public static String makeLdif(String... lines) {
+    StringBuilder buffer = new StringBuilder();
+    for (int i = 0; i < lines.length; i++) {
+      buffer.append(lines[i]).append("\n");
+    }
+    return buffer.toString();
+  }
+
+  /**
+   * This is a convience method that constructs an Entry from the specified
+   * lines of LDIF.  Here's a sample usage
+   *
+   <code>
+   Entry john = TestCaseUtils.makeEntry(
+      "dn: cn=John Smith,dc=example,dc=com",
+      "objectclass: inetorgperson",
+      "cn: John Smith",
+      "sn: Smith",
+      "givenname: John");
+   </code>
+   * @see #makeLdif
+   */
+  public static Entry makeEntry(String... lines) throws Exception {
+     return entryFromLdifString(makeLdif(lines));
+  }
+
+  /**
+   * This is a convience method that constructs an List of EntryS from the
+   * specified lines of LDIF.  Here's a sample usage
+   *
+   <code>
+   List<Entry> smiths = TestCaseUtils.makeEntries(
+      "dn: cn=John Smith,dc=example,dc=com",
+      "objectclass: inetorgperson",
+      "cn: John Smith",
+      "sn: Smith",
+      "givenname: John",
+      "",
+      "dn: cn=Jane Smith,dc=example,dc=com",
+      "objectclass: inetorgperson",
+      "cn: Jane Smith",
+      "sn: Smith",
+      "givenname: Jane");
+   </code>
+   * @see #makeLdif
+   */
+  public static List<Entry> makeEntries(String... lines) throws Exception {
+     return entriesFromLdifString(makeLdif(lines));
+  }
 }

--
Gitblit v1.10.0