You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ma...@apache.org on 2010/12/09 17:23:18 UTC

svn commit: r1044020 - in /incubator/aries/trunk/jndi/jndi-core/src: main/java/org/apache/aries/jndi/DelegateContext.java test/java/org/apache/aries/jndi/InitialContextTest.java

Author: mahrwald
Date: Thu Dec  9 16:23:18 2010
New Revision: 1044020

URL: http://svn.apache.org/viewvc?rev=1044020&view=rev
Log:
ARIES-513: Fix faulty interaction with InitialLdapContext

Modified:
    incubator/aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/DelegateContext.java
    incubator/aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/InitialContextTest.java

Modified: incubator/aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/DelegateContext.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/DelegateContext.java?rev=1044020&r1=1044019&r2=1044020&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/DelegateContext.java (original)
+++ incubator/aries/trunk/jndi/jndi-core/src/main/java/org/apache/aries/jndi/DelegateContext.java Thu Dec  9 16:23:18 2010
@@ -35,17 +35,21 @@ import javax.naming.directory.DirContext
 import javax.naming.directory.ModificationItem;
 import javax.naming.directory.SearchControls;
 import javax.naming.directory.SearchResult;
+import javax.naming.ldap.Control;
+import javax.naming.ldap.ExtendedRequest;
+import javax.naming.ldap.ExtendedResponse;
+import javax.naming.ldap.LdapContext;
 
 import org.osgi.framework.BundleContext;
 
-public class DelegateContext implements DirContext {
+public class DelegateContext implements DirContext, LdapContext {
     
-    private Hashtable<Object, Object> env = new Hashtable<Object, Object>();
+    private final Hashtable<Object, Object> env = new Hashtable<Object, Object>();
 
-    private BundleContext bundleContext;
+    private final BundleContext bundleContext;
     private ContextProvider contextProvider;
-    private Map<String, ContextProvider> urlContexts = new HashMap<String, ContextProvider>();
-    private boolean rebind;
+    private final Map<String, ContextProvider> urlContexts = new HashMap<String, ContextProvider>();
+    private final boolean rebind;
 
     public DelegateContext(BundleContext bundleContext, Hashtable<?, ?> theEnv) {
         this.bundleContext = bundleContext;
@@ -374,4 +378,35 @@ public class DelegateContext implements 
                                     SearchControls cons) throws NamingException {
         return ((DirContext) findContext(name)).search(name, filterExpr, filterArgs, cons);
     }
+
+    public ExtendedResponse extendedOperation(ExtendedRequest request)
+        throws NamingException {
+      return ((LdapContext) getDefaultContext()).extendedOperation(request);
+    }
+
+    public Control[] getConnectControls() throws NamingException {
+      return ((LdapContext) getDefaultContext()).getConnectControls();
+    }
+
+    public Control[] getRequestControls() throws NamingException {
+      return ((LdapContext) getDefaultContext()).getRequestControls();
+    }
+
+    public Control[] getResponseControls() throws NamingException {
+      return ((LdapContext) getDefaultContext()).getResponseControls();
+    }
+
+    public LdapContext newInstance(Control[] requestControls)
+        throws NamingException {
+      return ((LdapContext) getDefaultContext()).newInstance(requestControls);
+    }
+
+    public void reconnect(Control[] connCtls) throws NamingException {
+      ((LdapContext) getDefaultContext()).reconnect(connCtls);
+    }
+
+    public void setRequestControls(Control[] requestControls)
+        throws NamingException {
+      ((LdapContext) getDefaultContext()).setRequestControls(requestControls);
+    }
 }
\ No newline at end of file

Modified: incubator/aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/InitialContextTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/InitialContextTest.java?rev=1044020&r1=1044019&r2=1044020&view=diff
==============================================================================
--- incubator/aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/InitialContextTest.java (original)
+++ incubator/aries/trunk/jndi/jndi-core/src/test/java/org/apache/aries/jndi/InitialContextTest.java Thu Dec  9 16:23:18 2010
@@ -11,7 +11,12 @@ import javax.naming.InitialContext;
 import javax.naming.Name;
 import javax.naming.NamingException;
 import javax.naming.NoInitialContextException;
+import javax.naming.ldap.Control;
+import javax.naming.ldap.ExtendedRequest;
+import javax.naming.ldap.InitialLdapContext;
+import javax.naming.ldap.LdapContext;
 import javax.naming.spi.InitialContextFactory;
+import javax.naming.spi.InitialContextFactoryBuilder;
 import javax.naming.spi.ObjectFactory;
 
 import org.apache.aries.jndi.startup.Activator;
@@ -101,4 +106,28 @@ public class InitialContextTest 
     Object someObject = initialCtx.lookup("testURL:somedata");
     assertEquals("Expected to be given a string, but got something else.", "someText", someObject);
   }
+  
+  @Test
+  public void testLookFromLdapICF() throws Exception
+  {
+    InitialContextFactoryBuilder icf = Skeleton.newMock(InitialContextFactoryBuilder.class);
+    bc.registerService(new String[] {InitialContextFactoryBuilder.class.getName(), icf.getClass().getName()}, icf, new Properties());
+    
+    LdapContext backCtx = Skeleton.newMock(LdapContext.class);
+    InitialContextFactory fac = Skeleton.newMock(InitialContextFactory.class);
+    Skeleton.getSkeleton(fac).setReturnValue(
+        new MethodCall(InitialContextFactory.class, "getInitialContext", Hashtable.class), 
+        backCtx);
+    Skeleton.getSkeleton(icf).setReturnValue(
+        new MethodCall(InitialContextFactoryBuilder.class, "createInitialContextFactory", Hashtable.class), 
+        fac);
+    
+    Properties props = new Properties();
+    props.put(JNDIConstants.BUNDLE_CONTEXT, bc);
+    InitialLdapContext ilc = new InitialLdapContext(props, new Control[0]);
+    
+    ExtendedRequest req = Skeleton.newMock(ExtendedRequest.class);
+    ilc.extendedOperation(req);
+    Skeleton.getSkeleton(backCtx).assertCalled(new MethodCall(LdapContext.class, "extendedOperation", req));
+  }
 }
\ No newline at end of file