/* 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 Dsmlv1Reader} and {@link Dsmlv1Writer}.
*
* @author Middleware Services
*/
public class DsmlTest extends AbstractTest
{
/** Entry created for ldap tests. */
private static LdapEntry testLdapEntry;
/**
* @param ldifFile to create.
*
* @throws Exception On test failure.
*/
@Parameters("createEntry13")
@BeforeClass(groups = {"dsml"})
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 = {"dsml"})
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(
{
"dsmlSearchDn",
"dsmlSearchFilter"
})
@Test(groups = {"dsml"})
public void searchAndCompareDsmlv1(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 Dsmlv1Writer dsmlWriter = new Dsmlv1Writer(writer);
dsmlWriter.write(result1);
final StringReader reader = new StringReader(writer.toString());
final Dsmlv1Reader dsmlReader = new Dsmlv1Reader(reader);
final SearchResult result2 = dsmlReader.read();
TestUtils.assertEquals(result2, result1);
}
}
/**
* @param dsmlFile to test with.
* @param dsmlSortedFile to test with.
*
* @throws Exception On test failure.
*/
@Parameters(
{
"dsmlv1Entry",
"dsmlv1SortedEntry"
})
@Test(groups = {"dsml"})
public void readAndCompareDsmlv1(final String dsmlFile, final String dsmlSortedFile)
throws Exception
{
final String dsmlStringSorted = TestUtils.readFileIntoString(dsmlSortedFile);
final Dsmlv1Reader dsmlReader = new Dsmlv1Reader(
new StringReader(TestUtils.readFileIntoString(dsmlFile)),
SortBehavior.SORTED);
final SearchResult result = dsmlReader.read();
final StringWriter writer = new StringWriter();
final Dsmlv1Writer dsmlWriter = new Dsmlv1Writer(writer);
dsmlWriter.write(result);
AssertJUnit.assertEquals(dsmlStringSorted, writer.toString());
}
}