/*
* ====================
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License("CDDL") (the "License"). You may not use this file
* except in compliance with the License.
*
* You can obtain a copy of the License at
* http://IdentityConnectors.dev.java.net/legal/license.txt
* See the License for the specific language governing permissions and limitations
* under the License.
*
* When distributing the Covered Code, include this CDDL Header Notice in each file
* and include the License file at identityconnectors/legal/license.txt.
* If applicable, add the following below this CDDL Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
* ====================
*/
package org.identityconnectors.ldap;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.Assert;
import static org.identityconnectors.common.CollectionUtil.newList;
import java.util.Arrays;
import org.identityconnectors.common.security.GuardedByteArray;
import org.identityconnectors.framework.common.exceptions.ConfigurationException;
import org.identityconnectors.test.common.TestHelpers;
public class LdapConfigurationTests {
private static final String INVALID_DN = "dc=a,,";
private LdapConfiguration config;
@BeforeMethod
public void before() throws Exception {
config = new LdapConfiguration();
config.setConnectorMessages(TestHelpers.createDummyMessages());
config.setHost("localhost");
config.setBaseContexts("dc=example,dc=com");
assertCanValidate(config);
}
@Test(expectedExceptions = ConfigurationException.class)
public void testBaseContextsNotEmpty() {
config.setBaseContexts();
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testBaseContextsItemNotNull() {
config.setBaseContexts((String) null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testBaseContextsItemNotBlank() {
config.setBaseContexts(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testBaseContextsValid() {
config.setBaseContexts(LdapConnectorTestBase.ACME_DN, INVALID_DN);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testPasswordAttributeNotNull() {
config.setPasswordAttribute(null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testPasswordAttributeNotBlank() {
config.setPasswordAttribute(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testAccountObjectClassesNotEmpty() {
config.setAccountObjectClasses();
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testAccountObjectClassesItemNotNull() {
config.setAccountObjectClasses((String) null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testAccountUserNameAttributesNotEmpty() {
config.setAccountUserNameAttributes();
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testAccountUserNameAttributesItemNotNull() {
config.setAccountUserNameAttributes((String) null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testGroupMemberAttributeNotNull() {
config.setGroupMemberAttribute(null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testGroupMemberAttributeNotBlank() {
config.setGroupMemberAttribute(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testBlockCountGreatherThanZero() {
config.setBlockSize(0);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testVlvSortAttributeNotNull() {
config.setUidAttribute(null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testVlvSortAttributeNotBlank() {
config.setUidAttribute(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testUidAttributeNotNull() {
config.setUidAttribute(null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testUidAttributeNotBlank() {
config.setUidAttribute(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testBaseContextsToSynchronizeItemNotNull() {
config.setBaseContextsToSynchronize((String) null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testBaseContextsToSynchronizeItemNotBlank() {
config.setBaseContextsToSynchronize(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testBaseContextsToSyncronizeValid() {
config.setBaseContextsToSynchronize(LdapConnectorTestBase.ACME_DN, INVALID_DN);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testObjectClassesToSynchronizeNotEmpty() {
config.setObjectClassesToSynchronize();
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testObjectClassesToSynchronizeItemNotNull() {
config.setObjectClassesToSynchronize((String) null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testObjectClassesToSynchronizeItemNotBlank() {
config.setObjectClassesToSynchronize(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testAttributesToSynchronizeItemNotNull() {
config.setAttributesToSynchronize((String) null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testAttributesToSynchronizeItemNotBlank() {
config.setAttributesToSynchronize(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testModifiersNamesToFilterOutItemNotNull() {
config.setModifiersNamesToFilterOut((String) null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testModifiersNamesToFilterOutItemNotBlank() {
config.setModifiersNamesToFilterOut(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testModifiersNamesToFilterOutValid() {
config.setModifiersNamesToFilterOut(LdapConnectorTestBase.ACME_DN, INVALID_DN);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testChangeNumberAttributeNotNull() {
config.setChangeNumberAttribute(null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testChangeNumberAttributeNotBlank() {
config.setChangeNumberAttribute(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testChangeLogBlockSizeGreatherThanZero() {
config.setChangeLogBlockSize(0);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testPasswordAttributeToSynchronizeNotNull() {
config.setSynchronizePasswords(true);
config.setPasswordAttributeToSynchronize(null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testPasswordAttributeToSynchronizeNotBlank() {
config.setSynchronizePasswords(true);
config.setPasswordAttributeToSynchronize(" ");
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testPasswordDecryptionKeyNotNull() {
config.setSynchronizePasswords(true);
config.setPasswordAttributeToSynchronize("somepassword");
config.setPasswordDecryptionKey(null);
config.setPasswordDecryptionInitializationVector(new GuardedByteArray(new byte[1]));
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testPasswordDecryptionKeyNotBlank() {
config.setSynchronizePasswords(true);
config.setPasswordAttributeToSynchronize("somepassword");
config.setPasswordDecryptionKey(new GuardedByteArray(new byte[0]));
config.setPasswordDecryptionInitializationVector(new GuardedByteArray(new byte[1]));
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testPasswordDecryptionInitializationVectorNotNull() {
config.setSynchronizePasswords(true);
config.setPasswordAttributeToSynchronize("somepassword");
config.setPasswordDecryptionKey(new GuardedByteArray(new byte[1]));
config.setPasswordDecryptionInitializationVector(null);
config.validate();
}
@Test(expectedExceptions = ConfigurationException.class)
public void testPasswordDecryptionInitializationVectorNotBlank() {
config.setSynchronizePasswords(true);
config.setPasswordAttributeToSynchronize("somepassword");
config.setPasswordDecryptionKey(new GuardedByteArray(new byte[1]));
config.setPasswordDecryptionInitializationVector(new GuardedByteArray(new byte[0]));
config.validate();
}
@Test
public void testDefaultValues() {
config = new LdapConfiguration();
assertNull(config.getHost());
assertEquals(LdapConfiguration.DEFAULT_PORT, config.getPort());
assertFalse(config.isSsl());
assertEquals(0, config.getFailover().length);
assertNull(config.getPrincipal());
assertNull(config.getCredentials());
assertEquals(0, config.getBaseContexts().length);
assertEquals("userPassword", config.getPasswordAttribute());
assertEquals(newList("top", "person", "organizationalPerson", "inetOrgPerson"), Arrays.asList(config.getAccountObjectClasses()));
assertEquals(newList("uid", "cn"), Arrays.asList(config.getAccountUserNameAttributes()));
assertNull(config.getAccountSearchFilter());
assertEquals("uniqueMember", config.getGroupMemberAttribute());
assertFalse(config.isMaintainLdapGroupMembership());
assertFalse(config.isMaintainPosixGroupMembership());
assertFalse(config.isRespectResourcePasswordPolicyChangeAfterReset());
assertNull(config.getPasswordHashAlgorithm());
assertTrue(config.isUseBlocks());
assertEquals(100, config.getBlockSize());
assertFalse(config.isUsePagedResultControl());
assertEquals("uid", config.getVlvSortAttribute());
assertEquals("entryUUID", config.getUidAttribute());
assertTrue(config.isReadSchema());
assertEquals(0, config.getBaseContextsToSynchronize().length);
assertTrue(Arrays.equals(new String[] { "inetOrgPerson" }, config.getObjectClassesToSynchronize()));
assertEquals(0, config.getAttributesToSynchronize().length);
assertEquals(0, config.getModifiersNamesToFilterOut().length);
assertNull(config.getAccountSynchronizationFilter());
assertEquals(100, config.getChangeLogBlockSize());
assertEquals("changeNumber", config.getChangeNumberAttribute());
assertFalse(config.isFilterWithOrInsteadOfAnd());
assertTrue(config.isRemoveLogEntryObjectClassFromFilter());
assertFalse(config.isSynchronizePasswords());
assertNull(config.getPasswordAttributeToSynchronize());
assertNull(config.getPasswordDecryptionKey());
assertNull(config.getPasswordDecryptionInitializationVector());
}
private static void assertCanValidate(LdapConfiguration config) {
try {
config.validate();
} catch (Exception e) {
Assert.fail();
}
}
}