/** * Copyright (c) 2008-2011 Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://www.sonatype.com/products/nexus/attributions. * * This program is free software: you can redistribute it and/or modify it only under the terms of the GNU Affero General * Public License Version 3 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License Version 3 * for more details. * * You should have received a copy of the GNU Affero General Public License Version 3 along with this program. If not, see * http://www.gnu.org/licenses. * * Sonatype Nexus (TM) Open Source Version is available from Sonatype, Inc. Sonatype and Sonatype Nexus are trademarks of * Sonatype, Inc. Apache Maven is a trademark of the Apache Foundation. M2Eclipse is a trademark of the Eclipse Foundation. * All other trademarks are the property of their respective owners. */ package org.sonatype.nexus.security.ldap.realms.api; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import junit.framework.Assert; import org.codehaus.plexus.context.Context; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.sonatype.nexus.AbstractNexusTestCase; import org.sonatype.nexus.security.ldap.realms.api.dto.LdapUserAndGroupConfigurationDTO; import org.sonatype.nexus.security.ldap.realms.api.dto.LdapUserAndGroupConfigurationResponse; import org.sonatype.plexus.rest.resource.PlexusResource; import org.sonatype.security.ldap.realms.persist.model.CUserAndGroupAuthConfiguration; import org.sonatype.security.ldap.realms.persist.model.Configuration; import org.sonatype.security.ldap.realms.persist.model.io.xpp3.LdapConfigurationXpp3Reader; public class LdapUserGroupConfNotConfiguredTest extends AbstractNexusTestCase { private PlexusResource getResource() throws Exception { return this.lookup( PlexusResource.class, "LdapUserAndGroupsConfigurationPlexusResource" ); } public void testGetNotConfigured() throws Exception { PlexusResource resource = getResource(); // none of these args are used, but if they start being used, we will need to change this. LdapUserAndGroupConfigurationResponse response = (LdapUserAndGroupConfigurationResponse) resource.get( null, null, null, null ); // the default configuration is returned. LdapUserAndGroupConfigurationDTO dto = response.getData(); Assert.assertNotNull( dto ); Assert.assertEquals( "ou=groups", dto.getGroupBaseDn() ); Assert.assertEquals( "cn", dto.getGroupIdAttribute() ); Assert.assertEquals( "uniqueMember", dto.getGroupMemberAttribute() ); Assert.assertEquals( "${username}", dto.getGroupMemberFormat() ); Assert.assertEquals( "groupOfUniqueNames", dto.getGroupObjectClass() ); Assert.assertEquals( "ou=people", dto.getUserBaseDn() ); Assert.assertEquals( "uid", dto.getUserIdAttribute() ); Assert.assertEquals( "inetOrgPerson", dto.getUserObjectClass() ); Assert.assertNull( dto.getUserPasswordAttribute() ); // Assert.assertEquals("userPassword", dto.getUserPasswordAttribute()); Assert.assertEquals( "cn", dto.getUserRealNameAttribute() ); Assert.assertEquals( "mail", dto.getEmailAddressAttribute() ); Assert.assertNull( dto.getUserMemberOfAttribute() ); Assert.assertTrue( dto.isLdapGroupsAsRoles() ); Assert.assertFalse( dto.isGroupSubtree() ); Assert.assertFalse( dto.isUserSubtree() ); } private void validateConfigFile( LdapUserAndGroupConfigurationDTO dto ) throws Exception { String configFileName = CONF_HOME.getAbsolutePath() + "/no-conf" + "/ldap.xml";// this.getNexusLdapConfiguration(); LdapConfigurationXpp3Reader reader = new LdapConfigurationXpp3Reader(); FileInputStream fis = new FileInputStream( configFileName ); Configuration config = reader.read( fis ); CUserAndGroupAuthConfiguration userGroupConfig = config.getUserAndGroupConfig(); Assert.assertEquals( dto.getGroupBaseDn(), userGroupConfig.getGroupBaseDn() ); Assert.assertEquals( dto.getGroupIdAttribute(), userGroupConfig.getGroupIdAttribute() ); Assert.assertEquals( dto.getGroupMemberAttribute(), userGroupConfig.getGroupMemberAttribute() ); Assert.assertEquals( dto.getGroupMemberFormat(), userGroupConfig.getGroupMemberFormat() ); Assert.assertEquals( dto.getGroupObjectClass(), userGroupConfig.getGroupObjectClass() ); Assert.assertEquals( dto.getUserBaseDn(), userGroupConfig.getUserBaseDn() ); Assert.assertEquals( dto.getUserIdAttribute(), userGroupConfig.getUserIdAttribute() ); Assert.assertEquals( dto.getUserObjectClass(), userGroupConfig.getUserObjectClass() ); Assert.assertEquals( dto.getUserPasswordAttribute(), userGroupConfig.getUserPasswordAttribute() ); Assert.assertEquals( dto.getUserRealNameAttribute(), userGroupConfig.getUserRealNameAttribute() ); Assert.assertEquals( dto.getEmailAddressAttribute(), userGroupConfig.getEmailAddressAttribute() ); Assert.assertEquals( dto.getUserMemberOfAttribute(), userGroupConfig.getUserMemberOfAttribute() ); Assert.assertEquals( dto.isLdapGroupsAsRoles(), userGroupConfig.isLdapGroupsAsRoles() ); Assert.assertEquals( dto.isGroupSubtree(), userGroupConfig.isGroupSubtree() ); Assert.assertEquals( dto.isUserSubtree(), userGroupConfig.isUserSubtree() ); } public void testPutNotConfigured() throws Exception { PlexusResource resource = getResource(); LdapUserAndGroupConfigurationResponse response = new LdapUserAndGroupConfigurationResponse(); LdapUserAndGroupConfigurationDTO userGroupConf = new LdapUserAndGroupConfigurationDTO(); response.setData( userGroupConf ); userGroupConf.setGroupMemberFormat( "uid=${username},ou=people,o=sonatype" ); userGroupConf.setGroupObjectClass( "groupOfUniqueNames" ); userGroupConf.setGroupBaseDn( "ou=groups" ); userGroupConf.setGroupIdAttribute( "cn" ); userGroupConf.setGroupMemberAttribute( "uniqueMember" ); userGroupConf.setUserObjectClass( "inetOrgPerson" ); userGroupConf.setUserBaseDn( "ou=people" ); userGroupConf.setUserIdAttribute( "uid" ); userGroupConf.setUserPasswordAttribute( "userPassword" ); userGroupConf.setUserRealNameAttribute( "cn" ); userGroupConf.setEmailAddressAttribute( "mail" ); userGroupConf.setGroupSubtree( false ); userGroupConf.setUserSubtree( true ); LdapUserAndGroupConfigurationResponse result = (LdapUserAndGroupConfigurationResponse) resource.put( null, null, null, response ); Assert.assertEquals( userGroupConf, result.getData() ); // now how about that get result = (LdapUserAndGroupConfigurationResponse) resource.get( null, null, null, null ); Assert.assertEquals( userGroupConf, result.getData() ); this.validateConfigFile( userGroupConf ); } /* * (non-Javadoc) * @see com.sonatype.nexus.AbstractNexusTestCase#customizeContext(org.codehaus.plexus.context.Context) */ @Override protected void customizeContext( Context ctx ) { super.customizeContext( ctx ); ctx.put( LDAP_CONFIGURATION_KEY, CONF_HOME.getAbsolutePath() + "/no-conf/" ); } public void tearDown() throws Exception { super.tearDown(); // delete the ldap.xml file File confFile = new File( CONF_HOME.getAbsolutePath() + "/no-conf/", "ldap.xml" ); confFile.delete(); } }