@Test
public void testFailureWithUnsupportedControl() throws Exception
{
Control unsupported = new ControlImpl( "1.1.1.1" )
{
boolean isCritical = true;
private static final long serialVersionUID = 1L;
@SuppressWarnings("unused")
public String getType()
{
return "1.1.1.1";
}
public byte[] getValue()
{
return new byte[0];
}
public void setValue( byte[] value )
{
}
public boolean isCritical()
{
return isCritical;
}
public void setCritical( boolean isCritical )
{
this.isCritical = isCritical;
}
public String getOid()
{
return "1.1.1.1";
}
};
ldapServer.getDirectoryService().setAllowAnonymousAccess( true );
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put( Context.PROVIDER_URL, "ldap://localhost:" + ldapServer.getPort() + "/ou=system" );
env.put( "java.naming.ldap.version", "3" );
env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
env.put( Context.SECURITY_AUTHENTICATION, "simple" );
env.put( Context.SECURITY_CREDENTIALS, "secret" );
env.put( Context.SECURITY_PRINCIPAL, "uid=admin,ou=system" );
InitialLdapContext ctx = new InitialLdapContext( env, null );
Attributes user = new BasicAttributes( "cn", "Kate Bush", true );
Attribute oc = new BasicAttribute( "objectClass" );
oc.add( "top" );
oc.add( "person" );
oc.add( "organizationalPerson" );
oc.add( "inetOrgPerson" );
user.put( oc );
user.put( "sn", "Bush" );
user.put( "userPassword", "Aerial" );
ctx.setRequestControls( JndiUtils.toJndiControls( new Control[]
{unsupported} ) );
try
{
ctx.createSubcontext( "cn=Kate Bush", user );
fail();
}
catch ( OperationNotSupportedException e )
{
}
unsupported.setCritical( false );
ctx.setRequestControls( JndiUtils.toJndiControls( new Control[]{unsupported} ) );
DirContext kate = ctx.createSubcontext( "cn=Kate Bush", user );
assertNotNull( kate );
assertTrue( ArrayUtils.isEquals( Asn1StringUtils.getBytesUtf8( "Aerial" ), kate.getAttributes( "" ).get(