/* * Copyright (C) 2012 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.crsh.command.base; import org.crsh.shell.AbstractShellTestCase; import org.crsh.text.renderers.BindingRenderer; import javax.naming.Context; import java.util.*; /** * @author <a href="mailto:alain.defrance@exoplatform.com">Alain Defrance</a> */ public class JNDICommandTestCase extends AbstractShellTestCase { private String defaultFactory; public static List<BindingRenderer.BindingData> output = new ArrayList<BindingRenderer.BindingData>(); private final String consume_command = "class consume_command {\n" + "@Command\n" + "public org.crsh.command.Pipe<org.crsh.text.renderers.BindingRenderer.BindingData, Object> main() {\n" + "return new org.crsh.command.Pipe<org.crsh.text.renderers.BindingRenderer.BindingData, Object>() {\n" + "public void provide(org.crsh.text.renderers.BindingRenderer.BindingData element) {\n" + "org.crsh.command.base.JNDICommandTestCase.output.add(element)\n" + "}\n" + "}\n" + "}\n" + "}"; @Override protected void tearDown() throws Exception { super.tearDown(); if (defaultFactory == null) { System.clearProperty(Context.INITIAL_CONTEXT_FACTORY); } else { System.setProperty(Context.INITIAL_CONTEXT_FACTORY, defaultFactory); } } public void testSimple() throws Exception { setFactory("org.crsh.command.base.factory.SimpleInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find | consume_command"); assertEquals(2, output.size()); assertEquals("Foo", output.get(0).name); assertEquals("Bar", output.get(0).type); assertEquals("java:global/Foo", output.get(1).name); assertEquals("Bar", output.get(1).type); } public void testNested() throws Exception { setFactory("org.crsh.command.base.factory.NestedInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find | consume_command"); assertEquals(3, output.size()); assertEquals("java:global/Foo", output.get(0).name); assertEquals("Bar", output.get(0).type); assertEquals("java:global/Foo2", output.get(1).name); assertEquals("Bar2", output.get(1).type); assertEquals("java:global/Foo2/Foo", output.get(2).name); assertEquals("Bar", output.get(2).type); } public void testError() throws Exception { setFactory("org.crsh.command.base.factory.ErrorInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find | consume_command"); assertEquals(2, output.size()); assertEquals("Empty", output.get(0).name); assertEquals("Empty2", output.get(0).type); assertEquals("java:module/Module", output.get(1).name); assertEquals("Module2", output.get(1).type); } public void testFilter() throws Exception { setFactory("org.crsh.command.base.factory.TypedInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find -f java.lang.String | consume_command"); assertEquals(1, output.size()); assertEquals("String", output.get(0).name); assertEquals("Bar", output.get(0).type); } public void testFilterMany() throws Exception { setFactory("org.crsh.command.base.factory.TypedInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find -f java.lang.String -f java.util.List | consume_command"); assertEquals(2, output.size()); assertEquals("String", output.get(0).name); assertEquals("Bar", output.get(0).type); assertEquals("ArrayList", output.get(1).name); assertEquals("Bar", output.get(1).type); } public void testFilterInterface() throws Exception { setFactory("org.crsh.command.base.factory.TypedInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find -f java.util.List | consume_command"); assertEquals(1, output.size()); assertEquals("ArrayList", output.get(0).name); assertEquals("Bar", output.get(0).type); } public void testFilterSuperType() throws Exception { setFactory("org.crsh.command.base.factory.TypedInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find -f java.util.AbstractList | consume_command"); assertEquals(1, output.size()); assertEquals("ArrayList", output.get(0).name); assertEquals("Bar", output.get(0).type); } public void testNameExact() throws Exception { setFactory("org.crsh.command.base.factory.SimpleInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find -n Foo | consume_command"); assertEquals(1, output.size()); assertEquals("Foo", output.get(0).name); assertEquals("Bar", output.get(0).type); } public void testNameBegin() throws Exception { setFactory("org.crsh.command.base.factory.SimpleInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find -n F* | consume_command"); assertEquals(1, output.size()); assertEquals("Foo", output.get(0).name); assertEquals("Bar", output.get(0).type); } public void testNameEnd() throws Exception { setFactory("org.crsh.command.base.factory.SimpleInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find -n *o | consume_command"); assertEquals(2, output.size()); assertEquals("Foo", output.get(0).name); assertEquals("Bar", output.get(0).type); assertEquals("java:global/Foo", output.get(1).name); assertEquals("Bar", output.get(1).type); } public void testNameNoBeginEnd() throws Exception { setFactory("org.crsh.command.base.factory.SimpleInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find -n *global* | consume_command"); assertEquals(1, output.size()); assertEquals("java:global/Foo", output.get(0).name); assertEquals("Bar", output.get(0).type); } public void testNameWildcard() throws Exception { setFactory("org.crsh.command.base.factory.SimpleInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find -n java:*/Foo | consume_command"); assertEquals(1, output.size()); assertEquals("java:global/Foo", output.get(0).name); assertEquals("Bar", output.get(0).type); } public void testNameWildcardBeginEnd() throws Exception { setFactory("org.crsh.command.base.factory.SimpleInitialContextFactory"); output.clear(); lifeCycle.bindGroovy("consume_command", consume_command); assertOk("jndi find -n *:*/* | consume_command"); assertEquals(1, output.size()); assertEquals("java:global/Foo", output.get(0).name); assertEquals("Bar", output.get(0).type); } private void setFactory(String name) { defaultFactory = System.getProperty(Context.INITIAL_CONTEXT_FACTORY); System.setProperty(Context.INITIAL_CONTEXT_FACTORY, name); } }