/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt * or http://forgerock.org/license/CDDLv1.0.html. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at legal-notices/CDDLv1_0.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2012 ForgeRock AS. */ package org.forgerock.opendj.ldap; import static org.fest.assertions.Assertions.assertThat; import java.util.NoSuchElementException; import org.fest.util.Collections; import org.forgerock.i18n.LocalizedIllegalArgumentException; import org.testng.annotations.Test; /** * Test {@code AttributeParser}. */ @SuppressWarnings("javadoc") public final class AttributeParserTestCase extends SdkTestCase { @Test public void testAsBooleanTrue() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "enabled: true"); assertThat(e.parseAttribute("enabled").asBoolean()).isTrue(); } @Test public void testAsBooleanFalse() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "enabled: false"); assertThat(e.parseAttribute("enabled").asBoolean()).isFalse(); } @Test public void testAsBooleanTrueDefaultFalse() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "enabled: true"); assertThat(e.parseAttribute("enabled").asBoolean(false)).isTrue(); } @Test public void testAsBooleanFalseDefaultTrue() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "enabled: false"); assertThat(e.parseAttribute("enabled").asBoolean(true)).isFalse(); } @Test public void testAsBooleanMissing() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("enabled").asBoolean()).isNull(); } @Test public void testAsBooleanMissingDefaultTrue() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("enabled").asBoolean(true)).isTrue(); } @Test public void testAsBooleanMissingDefaultFalse() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("enabled").asBoolean(false)).isFalse(); } @Test(expectedExceptions = { NoSuchElementException.class }) public void testAsBooleanMissingRequired() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); e.parseAttribute("enabled").requireValue().asBoolean(); } @Test(expectedExceptions = { IllegalArgumentException.class }) public void testAsBooleanInvalid() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "enabled: xxx"); e.parseAttribute("enabled").asBoolean(); } @Test public void testAsInteger99() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "age: 99"); assertThat(e.parseAttribute("age").asInteger()).isEqualTo(99); } @Test public void testAsInteger99Default100() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "age: 99"); assertThat(e.parseAttribute("age").asInteger(100)).isEqualTo(99); } @Test public void testAsIntegerMissing() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("age").asInteger()).isNull(); } @Test public void testAsIntegerMissingDefault100() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("age").asInteger(100)).isEqualTo(100); } @Test(expectedExceptions = { NoSuchElementException.class }) public void testAsIntegerMissingRequired() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); e.parseAttribute("age").requireValue().asInteger(); } @Test(expectedExceptions = { IllegalArgumentException.class }) public void testAsIntegerInvalid() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "age: xxx"); e.parseAttribute("age").asInteger(); } @Test public void testAsLong99() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "age: 99"); assertThat(e.parseAttribute("age").asLong()).isEqualTo(99); } @Test public void testAsLong99Default100() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "age: 99"); assertThat(e.parseAttribute("age").asLong(100)).isEqualTo(99); } @Test public void testAsLongMissing() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("age").asLong()).isNull(); } @Test public void testAsLongMissingDefault100() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("age").asLong(100)).isEqualTo(100); } @Test(expectedExceptions = { NoSuchElementException.class }) public void testAsLongMissingRequired() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); e.parseAttribute("age").requireValue().asLong(); } @Test(expectedExceptions = { IllegalArgumentException.class }) public void testAsLongInvalid() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "age: xxx"); e.parseAttribute("age").asLong(); } @Test public void testAsDN() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "manager: cn=manager"); assertThat((Object) e.parseAttribute("manager").asDN()).isEqualTo(DN.valueOf("cn=manager")); } @Test public void testAsDNDefault() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "manager: cn=manager"); assertThat((Object) e.parseAttribute("manager").asDN("cn=boss")).isEqualTo( DN.valueOf("cn=manager")); } @Test public void testAsDNMissing() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("manager").asDN()).isNull(); } @Test public void testAsDNMissingDefault() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat((Object) e.parseAttribute("manager").asDN(DN.valueOf("cn=boss"))).isEqualTo( DN.valueOf("cn=boss")); } @Test(expectedExceptions = { NoSuchElementException.class }) public void testAsDNMissingRequired() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); e.parseAttribute("manager").requireValue().asDN(); } @Test(expectedExceptions = { IllegalArgumentException.class }) public void testAsDNInvalid() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "manager: xxx"); e.parseAttribute("manager").asDN(); } @Test public void testAsAttributeDescription() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "type: cn"); assertThat(e.parseAttribute("type").asAttributeDescription()).isEqualTo( AttributeDescription.valueOf("cn")); } @Test public void testAsAttributeDescriptionDefault() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "type: cn"); assertThat(e.parseAttribute("type").asAttributeDescription("sn")).isEqualTo( AttributeDescription.valueOf("cn")); } @Test public void testAsAttributeDescriptionMissing() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("type").asAttributeDescription()).isNull(); } @Test public void testAsAttributeDescriptionMissingDefault() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat( e.parseAttribute("type").asAttributeDescription(AttributeDescription.valueOf("sn"))) .isEqualTo(AttributeDescription.valueOf("sn")); } @Test(expectedExceptions = { NoSuchElementException.class }) public void testAsAttributeDescriptionMissingRequired() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); e.parseAttribute("type").requireValue().asAttributeDescription(); } @Test(expectedExceptions = { IllegalArgumentException.class }) public void testAsAttributeDescriptionInvalid() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "type: ;x"); e.parseAttribute("type").asAttributeDescription(); } @Test public void testAsString() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "type: cn"); assertThat(e.parseAttribute("type").asString()).isEqualTo(String.valueOf("cn")); } @Test public void testAsStringDefault() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "type: cn"); assertThat(e.parseAttribute("type").asString("sn")).isEqualTo(String.valueOf("cn")); } @Test public void testAsStringMissing() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("type").asString()).isNull(); } @Test public void testAsStringMissingDefault() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("type").asString(String.valueOf("sn"))).isEqualTo( String.valueOf("sn")); } @Test(expectedExceptions = { NoSuchElementException.class }) public void testAsStringMissingRequired() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); e.parseAttribute("type").requireValue().asString(); } @Test public void testAsByteString() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "type: cn"); assertThat(e.parseAttribute("type").asByteString()).isEqualTo(ByteString.valueOf("cn")); } @Test public void testAsByteStringDefault() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test", "type: cn"); assertThat(e.parseAttribute("type").asByteString(ByteString.valueOf("sn"))).isEqualTo( ByteString.valueOf("cn")); } @Test public void testAsByteStringMissing() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("type").asByteString()).isNull(); } @Test public void testAsByteStringMissingDefault() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); assertThat(e.parseAttribute("type").asByteString(ByteString.valueOf("sn"))).isEqualTo( ByteString.valueOf("sn")); } @Test(expectedExceptions = { NoSuchElementException.class }) public void testAsByteStringMissingRequired() { Entry e = new LinkedHashMapEntry("dn: cn=test", "objectClass: test"); e.parseAttribute("type").requireValue().asByteString(); } // Smoke test for set of methods: use one type only since the code is common // and we've already tested the parsing. @Test public void testAsSetOfDN() { Entry e = new LinkedHashMapEntry("dn: cn=group", "objectClass: group", "member: cn=member1", "member: cn=member2", "member: cn=member3"); assertThat(e.parseAttribute("member").asSetOfDN()).isEqualTo( Collections.set(DN.valueOf("cn=member1"), DN.valueOf("cn=member2"), DN .valueOf("cn=member3"))); } @Test public void testAsSetOfDNDefault() { Entry e = new LinkedHashMapEntry("dn: cn=group", "objectClass: group", "member: cn=member1", "member: cn=member2", "member: cn=member3"); assertThat(e.parseAttribute("member").asSetOfDN("cn=dummy1", "cn=dummy2")).isEqualTo( Collections.set(DN.valueOf("cn=member1"), DN.valueOf("cn=member2"), DN .valueOf("cn=member3"))); } @Test public void testAsSetOfDNMissing() { Entry e = new LinkedHashMapEntry("dn: cn=group", "objectClass: group"); assertThat(e.parseAttribute("member").asSetOfDN()).isEqualTo( java.util.Collections.emptySet()); } @Test public void testAsSetOfDNMissingDefault() { Entry e = new LinkedHashMapEntry("dn: cn=group", "objectClass: group"); assertThat(e.parseAttribute("member").asSetOfDN("cn=dummy1", "cn=dummy2")).isEqualTo( Collections.set(DN.valueOf("cn=dummy1"), DN.valueOf("cn=dummy2"))); } @Test(expectedExceptions = { NoSuchElementException.class }) public void testAsSetOfDNMissingRequired() { Entry e = new LinkedHashMapEntry("dn: cn=group", "objectClass: group"); e.parseAttribute("member").requireValue().asSetOfDN(); } @Test(expectedExceptions = { LocalizedIllegalArgumentException.class }) public void testAsSetOfDNInvalid() { Entry e = new LinkedHashMapEntry("dn: cn=group", "objectClass: group", "member: cn=member1", "member: xxxx"); e.parseAttribute("member").asSetOfDN(); } }