diff --git a/webapp/test/stubs/javax/naming/ContextStub.java b/webapp/test/stubs/javax/naming/ContextStub.java new file mode 100644 index 000000000..d80569a4e --- /dev/null +++ b/webapp/test/stubs/javax/naming/ContextStub.java @@ -0,0 +1,215 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package stubs.javax.naming; + +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; + +import javax.naming.Binding; +import javax.naming.Context; +import javax.naming.Name; +import javax.naming.NameClassPair; +import javax.naming.NameParser; +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; + +/** + * In order to use this and the other naming stubs.javax.naming classes, do + * this: + * + *
+ * System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
+ * 		InitialContextFactoryStub.class.getName());
+ * 
+ */ +public class ContextStub implements Context { + + // ---------------------------------------------------------------------- + // Stub infrastructure + // ---------------------------------------------------------------------- + + /** + * Keep a single context instance for each path. + */ + private static final Map instances = new HashMap(); + + /** + * Get the context instance for this path. Create one if necessary. + */ + static ContextStub getInstance(String contextPath, InitialContextStub parent) { + if (!instances.containsKey(contextPath)) { + instances.put(contextPath, new ContextStub(contextPath, parent)); + } + return instances.get(contextPath); + } + + private final String contextPath; + private final InitialContextStub parent; + + private ContextStub(String contextPath, InitialContextStub parent) { + this.contextPath = contextPath; + this.parent = parent; + } + + // ---------------------------------------------------------------------- + // Stub methods + // ---------------------------------------------------------------------- + + /** + * Let the parent handle it. + */ + public void rebind(String name, Object obj) throws NamingException { + if (name == null) { + throw new NullPointerException("ContextStub: name may not be null."); + } + if (name.isEmpty()) { + throw new NamingException("ContextStub: name may not be empty."); + } + parent.rebind(contextPath + "/" + name, obj); + } + + /** + * In most cases, just let the parent handle it. + */ + public Object lookup(String name) throws NamingException { + if (name == null) { + throw new NamingException("ContextStub: name may not be null."); + } + if (name.isEmpty()) { + return this; + } + return parent.lookup(contextPath + "/" + name); + } + + // ---------------------------------------------------------------------- + // Un-implemented methods + // ---------------------------------------------------------------------- + + public Object addToEnvironment(String propName, Object propVal) + throws NamingException { + throw new RuntimeException( + "ContextStub.addToEnvironment() not implemented."); + } + + public void bind(Name name, Object obj) throws NamingException { + throw new RuntimeException("ContextStub.bind() not implemented."); + } + + public void bind(String name, Object obj) throws NamingException { + throw new RuntimeException("ContextStub.bind() not implemented."); + } + + public void close() throws NamingException { + throw new RuntimeException("ContextStub.close() not implemented."); + } + + public Name composeName(Name name, Name prefix) throws NamingException { + throw new RuntimeException("ContextStub.composeName() not implemented."); + } + + public String composeName(String name, String prefix) + throws NamingException { + throw new RuntimeException("ContextStub.composeName() not implemented."); + } + + public Context createSubcontext(Name name) throws NamingException { + throw new RuntimeException( + "ContextStub.createSubcontext() not implemented."); + } + + public Context createSubcontext(String name) throws NamingException { + throw new RuntimeException( + "ContextStub.createSubcontext() not implemented."); + } + + public void destroySubcontext(Name name) throws NamingException { + throw new RuntimeException( + "ContextStub.destroySubcontext() not implemented."); + } + + public void destroySubcontext(String name) throws NamingException { + throw new RuntimeException( + "ContextStub.destroySubcontext() not implemented."); + } + + public Hashtable getEnvironment() throws NamingException { + throw new RuntimeException( + "ContextStub.getEnvironment() not implemented."); + } + + public String getNameInNamespace() throws NamingException { + throw new RuntimeException( + "ContextStub.getNameInNamespace() not implemented."); + } + + public NameParser getNameParser(Name name) throws NamingException { + throw new RuntimeException( + "ContextStub.getNameParser() not implemented."); + } + + public NameParser getNameParser(String name) throws NamingException { + throw new RuntimeException( + "ContextStub.getNameParser() not implemented."); + } + + public NamingEnumeration list(Name name) + throws NamingException { + throw new RuntimeException("ContextStub.list() not implemented."); + } + + public NamingEnumeration list(String name) + throws NamingException { + throw new RuntimeException("ContextStub.list() not implemented."); + } + + public NamingEnumeration listBindings(Name name) + throws NamingException { + throw new RuntimeException( + "ContextStub.listBindings() not implemented."); + } + + public NamingEnumeration listBindings(String name) + throws NamingException { + throw new RuntimeException( + "ContextStub.listBindings() not implemented."); + } + + public Object lookup(Name name) throws NamingException { + throw new RuntimeException("ContextStub.lookup() not implemented."); + } + + public Object lookupLink(Name name) throws NamingException { + throw new RuntimeException("ContextStub.lookupLink() not implemented."); + } + + public Object lookupLink(String name) throws NamingException { + throw new RuntimeException("ContextStub.lookupLink() not implemented."); + } + + public void rebind(Name name, Object obj) throws NamingException { + throw new RuntimeException("ContextStub.rebind() not implemented."); + } + + public Object removeFromEnvironment(String propName) throws NamingException { + throw new RuntimeException( + "ContextStub.removeFromEnvironment() not implemented."); + } + + public void rename(Name oldName, Name newName) throws NamingException { + throw new RuntimeException("ContextStub.rename() not implemented."); + } + + public void rename(String oldName, String newName) throws NamingException { + throw new RuntimeException("ContextStub.rename() not implemented."); + } + + public void unbind(Name name) throws NamingException { + throw new RuntimeException("ContextStub.unbind() not implemented."); + } + + public void unbind(String name) throws NamingException { + throw new RuntimeException("ContextStub.unbind() not implemented."); + } + +} diff --git a/webapp/test/stubs/javax/naming/InitialContextStub.java b/webapp/test/stubs/javax/naming/InitialContextStub.java new file mode 100644 index 000000000..affd9887e --- /dev/null +++ b/webapp/test/stubs/javax/naming/InitialContextStub.java @@ -0,0 +1,304 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package stubs.javax.naming; + +import java.util.Hashtable; +import java.util.Map; +import java.util.TreeMap; + +import javax.naming.Binding; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.Name; +import javax.naming.NameClassPair; +import javax.naming.NameParser; +import javax.naming.NamingEnumeration; +import javax.naming.NamingException; + +/** + * In order to use this and the other naming stubs.javax.naming classes, do + * this: + * + *
+ * System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
+ * 		InitialContextFactoryStub.class.getName());
+ * 
+ * + * The bindings are static, so you will probablly want to call {@link #reset()} + * before each test. + */ +public class InitialContextStub extends InitialContext { + + // ---------------------------------------------------------------------- + // Stub infrastructure + // ---------------------------------------------------------------------- + + private static Map bindings = new TreeMap(); + + /** + * Make sure we start the next test with a fresh instance. + */ + public static void reset() { + bindings.clear(); + } + + /** + * If we have properties that are bound to a level below this name, then + * this name represents a sub-context. + */ + private boolean isSubContext(String name) { + String path = name.endsWith("/") ? name : name + "/"; + + for (String key : bindings.keySet()) { + if (key.startsWith(path)) { + return true; + } + } + return false; + } + + // ---------------------------------------------------------------------- + // Stub methods + // ---------------------------------------------------------------------- + + public InitialContextStub() throws NamingException { + super(); + } + + @Override + protected void init(Hashtable environment) throws NamingException { + } + + @Override + protected Context getURLOrDefaultInitCtx(String name) + throws NamingException { + return super.getURLOrDefaultInitCtx(name); + } + + @Override + protected Context getDefaultInitCtx() throws NamingException { + return ContextStub.getInstance("", this); + } + + @Override + public void bind(String name, Object obj) throws NamingException { + if (name == null) { + throw new NullPointerException( + "InitialContextStub: name may not be null."); + } + if (name.isEmpty()) { + throw new NamingException( + "InitialContextStub: name may not be empty."); + } + if (bindings.containsKey(name)) { + throw new NamingException( + "InitialContextStub: name is already bound."); + } + + bindings.put(name, obj); + } + + @Override + public void rebind(String name, Object obj) throws NamingException { + if (name == null) { + throw new NullPointerException( + "InitialContextStub: name may not be null."); + } + if (name.isEmpty()) { + throw new NamingException( + "InitialContextStub: name may not be empty."); + } + + bindings.put(name, obj); + } + + @Override + public Object lookup(String name) throws NamingException { + if (name == null) { + throw new NullPointerException( + "InitialContextStub: name may not be null"); + } + if (name.isEmpty()) { + return this; + } + if (bindings.containsKey(name)) { + return bindings.get(name); + } + if (isSubContext(name)) { + return ContextStub.getInstance(name, this); + } + + throw new NamingException("InitialContextStub: No binding for '" + name + + "'"); + } + + // ---------------------------------------------------------------------- + // Un-implemented methods + // ---------------------------------------------------------------------- + + @Override + public Object addToEnvironment(String propName, Object propVal) + throws NamingException { + throw new RuntimeException( + "InitialContextStub.addToEnvironment() not implemented."); + } + + @Override + public void bind(Name name, Object obj) throws NamingException { + throw new RuntimeException("InitialContextStub.bind() not implemented."); + } + + @Override + public void close() throws NamingException { + throw new RuntimeException( + "InitialContextStub.close() not implemented."); + } + + @Override + public Name composeName(Name name, Name prefix) throws NamingException { + throw new RuntimeException( + "InitialContextStub.composeName() not implemented."); + } + + @Override + public String composeName(String name, String prefix) + throws NamingException { + throw new RuntimeException( + "InitialContextStub.composeName() not implemented."); + } + + @Override + public Context createSubcontext(Name name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.createSubcontext() not implemented."); + } + + @Override + public Context createSubcontext(String name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.createSubcontext() not implemented."); + } + + @Override + public void destroySubcontext(Name name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.destroySubcontext() not implemented."); + } + + @Override + public void destroySubcontext(String name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.destroySubcontext() not implemented."); + } + + @Override + public Hashtable getEnvironment() throws NamingException { + throw new RuntimeException( + "InitialContextStub.getEnvironment() not implemented."); + } + + @Override + public String getNameInNamespace() throws NamingException { + throw new RuntimeException( + "InitialContextStub.getNameInNamespace() not implemented."); + } + + @Override + public NameParser getNameParser(Name name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.getNameParser() not implemented."); + } + + @Override + public NameParser getNameParser(String name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.getNameParser() not implemented."); + } + + @Override + protected Context getURLOrDefaultInitCtx(Name name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.getURLOrDefaultInitCtx() not implemented."); + } + + @Override + public NamingEnumeration list(Name name) + throws NamingException { + throw new RuntimeException("InitialContextStub.list() not implemented."); + } + + @Override + public NamingEnumeration list(String name) + throws NamingException { + throw new RuntimeException("InitialContextStub.list() not implemented."); + } + + @Override + public NamingEnumeration listBindings(Name name) + throws NamingException { + throw new RuntimeException( + "InitialContextStub.listBindings() not implemented."); + } + + @Override + public NamingEnumeration listBindings(String name) + throws NamingException { + throw new RuntimeException( + "InitialContextStub.listBindings() not implemented."); + } + + @Override + public Object lookup(Name name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.lookup() not implemented."); + } + + @Override + public Object lookupLink(Name name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.lookupLink() not implemented."); + } + + @Override + public Object lookupLink(String name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.lookupLink() not implemented."); + } + + @Override + public void rebind(Name name, Object obj) throws NamingException { + throw new RuntimeException( + "InitialContextStub.rebind() not implemented."); + } + + @Override + public Object removeFromEnvironment(String propName) throws NamingException { + throw new RuntimeException( + "InitialContextStub.removeFromEnvironment() not implemented."); + } + + @Override + public void rename(Name oldName, Name newName) throws NamingException { + throw new RuntimeException( + "InitialContextStub.rename() not implemented."); + } + + @Override + public void rename(String oldName, String newName) throws NamingException { + throw new RuntimeException( + "InitialContextStub.rename() not implemented."); + } + + @Override + public void unbind(Name name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.unbind() not implemented."); + } + + @Override + public void unbind(String name) throws NamingException { + throw new RuntimeException( + "InitialContextStub.unbind() not implemented."); + } + +} diff --git a/webapp/test/stubs/javax/naming/spi/InitialContextFactoryStub.java b/webapp/test/stubs/javax/naming/spi/InitialContextFactoryStub.java new file mode 100644 index 000000000..654185982 --- /dev/null +++ b/webapp/test/stubs/javax/naming/spi/InitialContextFactoryStub.java @@ -0,0 +1,30 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package stubs.javax.naming.spi; + +import java.util.Hashtable; + +import javax.naming.Context; +import javax.naming.NamingException; +import javax.naming.spi.InitialContextFactory; + +import stubs.javax.naming.InitialContextStub; + +/** + * In order to use this and the other naming stubs.javax.naming classes, do + * this: + * + *
+ * System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
+ * 		InitialContextFactoryStub.class.getName());
+ * 
+ */ +public class InitialContextFactoryStub implements InitialContextFactory { + /** + * It's just this easy. + */ + public Context getInitialContext(Hashtable environment) + throws NamingException { + return new InitialContextStub(); + } +}