@Test
public void testFailureWithUnsupportedControl() throws Exception
{
Control unsupported = new OpaqueControl( "1.1.1.1" );
unsupported.setCritical( true );
getLdapServer().getDirectoryService().setAllowAnonymousAccess( true );
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put( Context.PROVIDER_URL, "ldap://localhost:" + getLdapServer().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( getLdapServer().getDirectoryService().getLdapCodecService(),
new Control[]
{ unsupported } ) );
try
{
ctx.createSubcontext( "cn=Kate Bush", user );
fail();
}
catch ( OperationNotSupportedException e )
{
}
unsupported.setCritical( false );
ctx.setRequestControls( JndiUtils.toJndiControls( getLdapServer().getDirectoryService().getLdapCodecService(),
new Control[]
{ unsupported } ) );
DirContext kate = ctx.createSubcontext( "cn=Kate Bush", user );