/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.io;
import java.io.StringReader;
import java.io.StringWriter;
import org.ldaptive.AbstractTest;
import org.ldaptive.Connection;
import org.ldaptive.LdapEntry;
import org.ldaptive.SearchFilter;
import org.ldaptive.SearchOperation;
import org.ldaptive.SearchRequest;
import org.ldaptive.SearchResult;
import org.ldaptive.SortBehavior;
import org.ldaptive.TestControl;
import org.ldaptive.TestUtils;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
/**
* Unit test for {@link LdifReader} and {@link LdifWriter}.
*
* @author Middleware Services
*/
public class LdifTest extends AbstractTest
{
/** Entry created for ldap tests. */
private static LdapEntry testLdapEntry;
/**
* @param ldifFile to create.
*
* @throws Exception On test failure.
*/
@Parameters("createEntry14")
@BeforeClass(groups = {"ldif"})
public void createLdapEntry(final String ldifFile)
throws Exception
{
final String ldif = TestUtils.readFileIntoString(ldifFile);
testLdapEntry = TestUtils.convertLdifToResult(ldif).getEntry();
super.createLdapEntry(testLdapEntry);
}
/** @throws Exception On test failure. */
@AfterClass(groups = {"ldif"})
public void deleteLdapEntry()
throws Exception
{
super.deleteLdapEntry(testLdapEntry.getDn());
}
/**
* @param dn to search on.
* @param filter to search with.
*
* @throws Exception On test failure.
*/
@Parameters(
{
"ldifSearchDn",
"ldifSearchFilter"
})
@Test(groups = {"ldif"})
public void searchAndCompareLdif(final String dn, final String filter)
throws Exception
{
try (Connection conn = TestUtils.createConnection()) {
conn.open();
final SearchOperation search = new SearchOperation(conn);
final SearchRequest request = new SearchRequest(dn, new SearchFilter(filter));
if (TestControl.isActiveDirectory()) {
request.setBinaryAttributes("objectSid", "objectGUID", "jpegPhoto");
} else {
request.setBinaryAttributes("jpegPhoto");
}
final SearchResult result1 = search.execute(request).getResult();
final StringWriter writer = new StringWriter();
final LdifWriter ldifWriter = new LdifWriter(writer);
ldifWriter.write(result1);
final StringReader reader = new StringReader(writer.toString());
final LdifReader ldifReader = new LdifReader(reader);
final SearchResult result2 = ldifReader.read();
TestUtils.assertEquals(result2, result1);
}
}
/**
* @param ldifFile to create with
* @param ldifSortedFile to compare with
*
* @throws Exception On test failure.
*/
@Parameters(
{
"ldifEntry",
"ldifSortedEntry"
})
@Test(groups = {"ldif"})
public void readAndCompareSortedLdif(final String ldifFile, final String ldifSortedFile)
throws Exception
{
final String ldifStringSorted = TestUtils.readFileIntoString(ldifSortedFile);
final LdifReader ldifReader = new LdifReader(
new StringReader(TestUtils.readFileIntoString(ldifFile)),
SortBehavior.SORTED);
final SearchResult result = ldifReader.read();
final StringWriter writer = new StringWriter();
final LdifWriter ldifWriter = new LdifWriter(writer);
ldifWriter.write(result);
AssertJUnit.assertEquals(ldifStringSorted, writer.toString());
}
/**
* @param ldifFileIn to create with
* @param ldifFileOut to compare with
*
* @throws Exception On test failure.
*/
@Parameters(
{
"multipleLdifResultsIn",
"multipleLdifResultsOut"
})
@Test(groups = {"ldif"})
public void readAndCompareMultipleLdif(final String ldifFileIn, final String ldifFileOut)
throws Exception
{
final String ldifStringIn = TestUtils.readFileIntoString(ldifFileIn);
LdifReader ldifReader = new LdifReader(new StringReader(ldifStringIn));
final SearchResult result1 = ldifReader.read();
final String ldifStringOut = TestUtils.readFileIntoString(ldifFileOut);
ldifReader = new LdifReader(new StringReader(ldifStringOut));
final SearchResult result2 = ldifReader.read();
AssertJUnit.assertEquals(result1, result2);
}
}