/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.testng.AssertJUnit;
import org.testng.annotations.Test;
/**
* Unit test for {@link LdapAttribute}.
*
* @author Middleware Services
*/
public class LdapAttributeTest
{
/** Tests default sort behavior. */
@Test(groups = {"bean"})
public void defaultSortBehavior()
{
final LdapAttribute la = new LdapAttribute("givenName");
AssertJUnit.assertEquals(SortBehavior.getDefaultSortBehavior(), la.getSortBehavior());
AssertJUnit.assertEquals(0, la.size());
AssertJUnit.assertNull(la.getStringValue());
AssertJUnit.assertNull(la.getBinaryValue());
AssertJUnit.assertEquals("givenName", la.getName());
la.setName("sn");
AssertJUnit.assertEquals("sn", la.getName());
la.clear();
AssertJUnit.assertEquals(0, la.size());
}
/** Tests ordered sort behavior. */
@Test(groups = {"bean"})
public void orderedSortBehavior()
{
final LdapAttribute la = new LdapAttribute(SortBehavior.ORDERED);
AssertJUnit.assertEquals(SortBehavior.ORDERED, la.getSortBehavior());
la.addStringValue("William", "Bill");
final String[] values = la.getStringValues().toArray(new String[2]);
AssertJUnit.assertEquals("William", values[0]);
AssertJUnit.assertEquals("Bill", values[1]);
la.clear();
AssertJUnit.assertEquals(0, la.size());
}
/** Tests sorted sort behavior. */
@Test(groups = {"bean"})
public void sortedSortBehavior()
{
final LdapAttribute la = new LdapAttribute(SortBehavior.SORTED);
AssertJUnit.assertEquals(SortBehavior.SORTED, la.getSortBehavior());
la.addStringValue("William", "Bill");
final String[] values = la.getStringValues().toArray(new String[2]);
AssertJUnit.assertEquals("Bill", values[0]);
AssertJUnit.assertEquals("William", values[1]);
la.clear();
AssertJUnit.assertEquals(0, la.size());
}
/** Tests create with one value. */
@Test(groups = {"bean"})
public void createOne()
{
final LdapAttribute la = new LdapAttribute("givenName", "William");
AssertJUnit.assertEquals("William", la.getStringValue());
AssertJUnit.assertEquals(1, la.getStringValues().size());
AssertJUnit.assertEquals("William", la.getStringValues().iterator().next());
AssertJUnit.assertTrue(Arrays.equals("William".getBytes(), la.getBinaryValue()));
AssertJUnit.assertEquals(1, la.size());
AssertJUnit.assertEquals(la, new LdapAttribute("givenName", "William"));
try {
la.addStringValue((String) null);
AssertJUnit.fail("Should have thrown IllegalArgumentException");
} catch (Exception e) {
AssertJUnit.assertEquals(IllegalArgumentException.class, e.getClass());
}
try {
la.addBinaryValue("Bill".getBytes());
AssertJUnit.fail("Should have thrown IllegalArgumentException");
} catch (Exception e) {
AssertJUnit.assertEquals(IllegalArgumentException.class, e.getClass());
}
la.clear();
AssertJUnit.assertEquals(0, la.size());
}
/** Tests create with two values. */
@Test(groups = {"bean"})
public void createTwo()
{
final LdapAttribute la = new LdapAttribute("givenName", "Bill", "William");
AssertJUnit.assertEquals(2, la.getStringValues().size());
AssertJUnit.assertEquals(2, la.size());
AssertJUnit.assertEquals(la, new LdapAttribute("givenName", "William", "Bill"));
la.removeStringValue("William");
AssertJUnit.assertEquals(1, la.size());
la.clear();
AssertJUnit.assertEquals(0, la.size());
}
/** Tests various string input. */
@Test(groups = {"bean"})
public void stringValue()
{
final LdapAttribute la = new LdapAttribute("cn", "William Wallace");
AssertJUnit.assertEquals("William Wallace", la.getStringValue());
AssertJUnit.assertEquals("William Wallace".getBytes(StandardCharsets.UTF_8), la.getBinaryValue());
AssertJUnit.assertEquals(1, la.getStringValues().size());
AssertJUnit.assertEquals(1, la.getBinaryValues().size());
AssertJUnit.assertEquals(la, new LdapAttribute("cn", "William Wallace"));
try {
la.addStringValue((String[]) null);
AssertJUnit.fail("Should have thrown NullPointerException");
} catch (Exception e) {
AssertJUnit.assertEquals(NullPointerException.class, e.getClass());
}
try {
la.addBinaryValue("Bill".getBytes());
AssertJUnit.fail("Should have thrown IllegalArgumentException");
} catch (Exception e) {
AssertJUnit.assertEquals(IllegalArgumentException.class, e.getClass());
}
la.clear();
AssertJUnit.assertEquals(0, la.size());
}
/** Tests multiple string input. */
@Test(groups = {"bean"})
public void stringValues()
{
final List<String> commonNames = new ArrayList<>();
commonNames.add("Bill Wallace");
commonNames.add("William Wallace");
final List<byte[]> binaryCommonNames = new ArrayList<>();
binaryCommonNames.add("Bill Wallace".getBytes(StandardCharsets.UTF_8));
binaryCommonNames.add("William Wallace".getBytes(StandardCharsets.UTF_8));
LdapAttribute la = new LdapAttribute(SortBehavior.UNORDERED);
la.setName("cn");
la.addStringValue(commonNames.get(0));
la.addStringValue(commonNames.get(1));
AssertJUnit.assertNotNull(la.getStringValue());
AssertJUnit.assertNotNull(la.getStringValues());
AssertJUnit.assertEquals(2, la.getStringValues().size());
AssertJUnit.assertNotNull(la.getBinaryValue());
AssertJUnit.assertNotNull(la.getBinaryValues());
AssertJUnit.assertEquals(2, la.getBinaryValues().size());
la.clear();
AssertJUnit.assertEquals(0, la.size());
la = new LdapAttribute(SortBehavior.ORDERED);
la.setName("cn");
la.addStringValue(commonNames.get(0));
la.addStringValue(commonNames.get(1));
AssertJUnit.assertEquals("Bill Wallace", la.getStringValue());
AssertJUnit.assertArrayEquals(commonNames.toArray(new String[2]), la.getStringValues().toArray(new String[2]));
AssertJUnit.assertEquals(2, la.getStringValues().size());
AssertJUnit.assertEquals("Bill Wallace".getBytes(StandardCharsets.UTF_8), la.getBinaryValue());
AssertJUnit.assertArrayEquals(
binaryCommonNames.toArray(new byte[2][0]),
la.getBinaryValues().toArray(new byte[2][0]));
AssertJUnit.assertEquals(2, la.getBinaryValues().size());
la.clear();
AssertJUnit.assertEquals(0, la.size());
la = new LdapAttribute(SortBehavior.SORTED);
la.setName("cn");
la.addStringValue(commonNames.get(0));
la.addStringValue(commonNames.get(1));
AssertJUnit.assertEquals("Bill Wallace", la.getStringValue());
AssertJUnit.assertArrayEquals(commonNames.toArray(new String[2]), la.getStringValues().toArray(new String[2]));
AssertJUnit.assertEquals(2, la.getStringValues().size());
AssertJUnit.assertEquals("Bill Wallace".getBytes(StandardCharsets.UTF_8), la.getBinaryValue());
AssertJUnit.assertArrayEquals(
binaryCommonNames.toArray(new byte[2][0]),
la.getBinaryValues().toArray(new byte[2][0]));
AssertJUnit.assertEquals(2, la.getBinaryValues().size());
la.clear();
AssertJUnit.assertEquals(0, la.size());
}
/** Tests various binary input. */
@Test(groups = {"bean"})
public void binaryValue()
{
final LdapAttribute la = new LdapAttribute("jpegPhoto", "image".getBytes());
AssertJUnit.assertTrue(Arrays.equals("image".getBytes(), la.getBinaryValue()));
AssertJUnit.assertEquals(1, la.getBinaryValues().size());
AssertJUnit.assertEquals("aW1hZ2U=", la.getStringValue());
AssertJUnit.assertEquals(1, la.getStringValues().size());
AssertJUnit.assertEquals(la, new LdapAttribute("jpegPhoto", "image".getBytes()));
try {
la.addBinaryValue((byte[][]) null);
AssertJUnit.fail("Should have thrown NullPointerException");
} catch (Exception e) {
AssertJUnit.assertEquals(NullPointerException.class, e.getClass());
}
try {
la.addStringValue("Bill");
AssertJUnit.fail("Should have thrown IllegalArgumentException");
} catch (Exception e) {
AssertJUnit.assertEquals(IllegalArgumentException.class, e.getClass());
}
la.clear();
AssertJUnit.assertEquals(0, la.size());
}
/** Tests multiple string input. */
@Test(groups = {"bean"})
public void binaryValues()
{
final List<byte[]> jpegPhotos = new ArrayList<>();
jpegPhotos.add("image1".getBytes());
jpegPhotos.add("image2".getBytes());
final List<String> stringJpegPhotos = new ArrayList<>();
stringJpegPhotos.add("aW1hZ2Ux");
stringJpegPhotos.add("aW1hZ2Uy");
LdapAttribute la = new LdapAttribute(SortBehavior.UNORDERED, true);
la.setName("jpegPhoto");
la.addBinaryValue(jpegPhotos.get(0));
la.addBinaryValue(jpegPhotos.get(1));
AssertJUnit.assertNotNull(la.getStringValue());
AssertJUnit.assertNotNull(la.getStringValues());
AssertJUnit.assertEquals(2, la.getStringValues().size());
AssertJUnit.assertNotNull(la.getBinaryValue());
AssertJUnit.assertNotNull(la.getBinaryValues());
AssertJUnit.assertEquals(2, la.getBinaryValues().size());
la.clear();
AssertJUnit.assertEquals(0, la.size());
la = new LdapAttribute(SortBehavior.ORDERED, true);
la.setName("jpegPhoto");
la.addBinaryValue(jpegPhotos.get(0));
la.addBinaryValue(jpegPhotos.get(1));
AssertJUnit.assertEquals("aW1hZ2Ux", la.getStringValue());
AssertJUnit.assertArrayEquals(stringJpegPhotos.toArray(new String[2]), la.getStringValues().toArray(new String[2]));
AssertJUnit.assertEquals(2, la.getStringValues().size());
AssertJUnit.assertEquals("image1".getBytes(), la.getBinaryValue());
AssertJUnit.assertArrayEquals(jpegPhotos.toArray(new byte[2][0]), la.getBinaryValues().toArray(new byte[2][0]));
AssertJUnit.assertEquals(2, la.getBinaryValues().size());
la.clear();
AssertJUnit.assertEquals(0, la.size());
la = new LdapAttribute(SortBehavior.SORTED, true);
la.setName("jpegPhoto");
la.addBinaryValue(jpegPhotos.get(0));
la.addBinaryValue(jpegPhotos.get(1));
AssertJUnit.assertEquals("aW1hZ2Ux", la.getStringValue());
AssertJUnit.assertArrayEquals(stringJpegPhotos.toArray(new String[2]), la.getStringValues().toArray(new String[2]));
AssertJUnit.assertEquals(2, la.getStringValues().size());
AssertJUnit.assertEquals("image1".getBytes(), la.getBinaryValue());
AssertJUnit.assertArrayEquals(jpegPhotos.toArray(new byte[2][0]), la.getBinaryValues().toArray(new byte[2][0]));
AssertJUnit.assertEquals(2, la.getBinaryValues().size());
la.clear();
AssertJUnit.assertEquals(0, la.size());
}
/** Tests attribute options. */
@Test(groups = {"bean"})
public void attributeOptions()
{
LdapAttribute la = new LdapAttribute("cn", "William Wallace");
AssertJUnit.assertEquals("cn", la.getName());
AssertJUnit.assertEquals("cn", la.getName(true));
AssertJUnit.assertEquals("cn", la.getName(false));
AssertJUnit.assertNotNull(la.getOptions());
AssertJUnit.assertEquals(0, la.getOptions().length);
la = new LdapAttribute("cn;lang-ru", "Уильям Уоллес");
AssertJUnit.assertEquals("cn;lang-ru", la.getName());
AssertJUnit.assertEquals("cn;lang-ru", la.getName(true));
AssertJUnit.assertEquals("cn", la.getName(false));
AssertJUnit.assertNotNull(la.getOptions());
AssertJUnit.assertEquals(1, la.getOptions().length);
AssertJUnit.assertEquals("lang-ru", la.getOptions()[0]);
la = new LdapAttribute("cn;lang-lv;dynamic", "Viljams Voless");
AssertJUnit.assertEquals("cn;lang-lv;dynamic", la.getName());
AssertJUnit.assertEquals("cn;lang-lv;dynamic", la.getName(true));
AssertJUnit.assertEquals("cn", la.getName(false));
AssertJUnit.assertNotNull(la.getOptions());
AssertJUnit.assertEquals(2, la.getOptions().length);
AssertJUnit.assertEquals("lang-lv", la.getOptions()[0]);
AssertJUnit.assertEquals("dynamic", la.getOptions()[1]);
}
}