| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| */ |
| package org.apache.directory.server; |
| |
| |
| import org.apache.directory.server.unit.AbstractServerTest; |
| |
| import netscape.ldap.LDAPAttribute; |
| import netscape.ldap.LDAPAttributeSet; |
| import netscape.ldap.LDAPConnection; |
| import netscape.ldap.LDAPEntry; |
| import netscape.ldap.LDAPException; |
| import netscape.ldap.LDAPModification; |
| |
| |
| /** |
| * A test taken from DIRSERVER-630: If one tries to add an attribute to an |
| * entry, and does not provide a value, it is assumed that the server does |
| * not modify the entry. We have a situation here using Sun ONE Directory |
| * SDK for Java, where adding a description attribute without value to a |
| * person entry like this, |
| * <code> |
| * dn: cn=Kate Bush,dc=example,dc=com |
| * objectclass: person |
| * objectclass: top |
| * sn: Bush |
| * cn: Kate Bush |
| * </code> |
| * does not fail (modify call does not result in an exception). Instead, a |
| * description attribute is created within the entry. At least the new |
| * attribute is readable with Netscape SDK (it is not visible to most UIs, |
| * because it is invalid ...). |
| * |
| * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> |
| * @version $Rev: $ |
| */ |
| public class IllegalModificationITest extends AbstractServerTest |
| { |
| static final String DN = "cn=Kate Bush,ou=system"; |
| static final String USER = "uid=admin,ou=system"; |
| static final String PASSWORD = "secret"; |
| static final String HOST = "localhost"; |
| |
| private LDAPConnection con = null; |
| |
| |
| protected void setUp() throws Exception |
| { |
| super.setUp(); |
| con = new LDAPConnection(); |
| con.connect( 3, HOST, super.port, USER, PASSWORD ); |
| |
| // Create a person entry |
| LDAPAttributeSet attrs = new LDAPAttributeSet(); |
| attrs.add( new LDAPAttribute( "sn", "Bush" ) ); |
| attrs.add( new LDAPAttribute( "cn", "Kate Bush" ) ); |
| LDAPAttribute oc = new LDAPAttribute( "objectClass" ); |
| oc.addValue( "top" ); |
| oc.addValue( "person" ); |
| attrs.add( oc ); |
| LDAPEntry entry = new LDAPEntry( DN, attrs ); |
| con.add( entry ); |
| } |
| |
| |
| protected void tearDown() throws Exception |
| { |
| // Remove the person entry and disconnect |
| con.delete( DN ); |
| con.disconnect(); |
| super.tearDown(); |
| } |
| |
| |
| public void testIllegalModification() throws LDAPException |
| { |
| LDAPAttribute attr = new LDAPAttribute( "description" ); |
| LDAPModification mod = new LDAPModification( LDAPModification.ADD, attr ); |
| |
| try |
| { |
| con.modify( "cn=Kate Bush,ou=system", mod ); |
| fail( "error expected due to empty attribute value" ); |
| } |
| catch ( LDAPException e ) |
| { |
| // expected |
| } |
| |
| // Check whether entry is unmodified, i.e. no description |
| LDAPEntry entry = con.read( DN ); |
| assertEquals( "description exists?", null, entry.getAttribute( "description" ) ); |
| } |
| |
| |
| public void testIllegalModification2() throws LDAPException |
| { |
| // first a valid attribute |
| LDAPAttribute attr = new LDAPAttribute( "description", "The description" ); |
| LDAPModification mod = new LDAPModification( LDAPModification.ADD, attr ); |
| // then an invalid one without any value |
| attr = new LDAPAttribute( "displayName" ); |
| LDAPModification mod2 = new LDAPModification( LDAPModification.ADD, attr ); |
| |
| try |
| { |
| con.modify( "cn=Kate Bush,ou=system", new LDAPModification[] { mod, mod2 } ); |
| fail( "error expected due to empty attribute value" ); |
| } |
| catch ( LDAPException e ) |
| { |
| // expected |
| } |
| |
| // Check whether entry is unmodified, i.e. no displayName |
| LDAPEntry entry = con.read( DN ); |
| assertEquals( "displayName exists?", null, entry.getAttribute( "displayName" ) ); |
| } |
| } |