Simplify the test and add test case for listBindings()

Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/da488afb
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/da488afb
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/da488afb

Branch: refs/heads/master
Commit: da488afbd93489a65b483ce1ac35052728f2a9d6
Parents: 52c72b6
Author: Svetlin Zarev <svetlin.za...@sap.com>
Authored: Tue Jul 11 10:20:08 2017 +0300
Committer: Svetlin Zarev <svetlin.za...@sap.com>
Committed: Tue Jul 11 10:20:08 2017 +0300

----------------------------------------------------------------------
 .../tests/naming/IvmContextServlet.java         | 55 -------------------
 .../arquillian/tests/naming/IvmContextTest.java | 55 +++----------------
 .../arquillian/tests/naming/NamingBean.java     | 58 +++++++++++++++++---
 3 files changed, 59 insertions(+), 109 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/da488afb/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/IvmContextServlet.java
----------------------------------------------------------------------
diff --git 
a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/IvmContextServlet.java
 
b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/IvmContextServlet.java
deleted file mode 100644
index d4db5c8..0000000
--- 
a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/IvmContextServlet.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.openejb.arquillian.tests.naming;
-
-
-import javax.ejb.EJB;
-import javax.naming.NamingException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-public class IvmContextServlet extends HttpServlet {
-    @EJB
-    NamingBean namingBean;
-
-    @Override
-    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException {
-        final PrintWriter writer = resp.getWriter();
-        final String testToExecute = req.getParameter("test");
-
-        try {
-            final Method method = 
this.getClass().getDeclaredMethod(testToExecute, PrintWriter.class);
-            method.invoke(this, writer);
-            writer.println(testToExecute + "=true");
-        } catch (Exception ex) {
-            final Throwable rootCause = ex instanceof 
InvocationTargetException ? ex.getCause() : ex;
-            writer.println(testToExecute + "=false");
-            rootCause.printStackTrace(writer);
-        }
-    }
-
-    public void testListContextTree(PrintWriter printWriter) throws 
NamingException {
-        namingBean.verifyListContext(printWriter);
-    }
-}

http://git-wip-us.apache.org/repos/asf/tomee/blob/da488afb/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/IvmContextTest.java
----------------------------------------------------------------------
diff --git 
a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/IvmContextTest.java
 
b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/IvmContextTest.java
index 5459ac5..a3eef2c 100644
--- 
a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/IvmContextTest.java
+++ 
b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/IvmContextTest.java
@@ -21,22 +21,13 @@ import org.apache.openejb.arquillian.tests.Runner;
 import org.apache.ziplock.JarLocation;
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.junit.Arquillian;
-import org.jboss.arquillian.test.api.ArquillianResource;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset;
-import org.jboss.shrinkwrap.api.asset.StringAsset;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
-import org.jboss.shrinkwrap.descriptor.api.Descriptors;
-import org.jboss.shrinkwrap.descriptor.api.webapp30.WebAppDescriptor;
-import org.jboss.shrinkwrap.descriptor.api.webcommon30.WebAppVersionType;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.logging.Level;
+import javax.ejb.EJB;
 import java.util.logging.Logger;
 
 import static org.junit.Assert.assertNotNull;
@@ -46,59 +37,31 @@ import static org.junit.Assert.assertTrue;
 public class IvmContextTest {
     private static final Logger logger = 
Logger.getLogger(IvmContextTest.class.getName());
     private static final String TEST_NAME = 
IvmContextTest.class.getSimpleName();
-    private static final String SERVLET_NAME = "TestServlet";
     private static final String RESOURCE_EJB_JAR_XML = "ejb-jar.xml";
     private static final String CONTENT_LOCATION_EJB_JAR_XML = 
"org/apache/openejb/arquillian/tests/naming/list-context-ejbjar.xml";
 
-    @ArquillianResource
-    private URL url;
+    @EJB
+    NamingBean namingBean;
 
     @Deployment(testable = false)
     public static WebArchive createDeployment() {
-        WebAppDescriptor descriptor = 
Descriptors.create(WebAppDescriptor.class)
-                .version(WebAppVersionType._3_0)
-                .createServlet()
-                .servletName(SERVLET_NAME)
-                .servletClass(IvmContextServlet.class.getName()).up()
-                .createServletMapping()
-                .servletName(SERVLET_NAME)
-                .urlPattern("/" + TEST_NAME).up();
-
         WebArchive archive = ShrinkWrap.create(WebArchive.class, TEST_NAME + 
".war")
                 .addClass(IvmContextTest.class)
-                .addClass(IvmContextServlet.class)
                 .addClass(NamingBean.class)
                 .addClass(Runner.class)
                 .addAsLibraries(JarLocation.jarLocation(Test.class))
-                .addAsWebInfResource(new 
ClassLoaderAsset(CONTENT_LOCATION_EJB_JAR_XML), RESOURCE_EJB_JAR_XML)
-                .setWebXML(new StringAsset(descriptor.exportAsString()));
-
+                .addAsWebInfResource(new 
ClassLoaderAsset(CONTENT_LOCATION_EJB_JAR_XML), RESOURCE_EJB_JAR_XML);
         return archive;
     }
 
-    private void validateTest(String testName) throws IOException {
-        final String expectedOutput = testName + "=true";
-
-        try (InputStream is = new URL(url.toExternalForm() + TEST_NAME + 
"?test=" + testName).openStream()) {
-            final ByteArrayOutputStream os = new ByteArrayOutputStream();
 
-            int bytesRead;
-            byte[] buffer = new byte[8192];
-            while ((bytesRead = is.read(buffer)) > -1) {
-                os.write(buffer, 0, bytesRead);
-            }
-
-            final String output = new String(os.toByteArray(), "UTF-8");
-            logger.log(Level.FINE, output);
-
-            assertNotNull("Response shouldn't be null", output);
-            assertTrue("Output should contain: " + expectedOutput
-                    + "\nActual output:\n" + output, 
output.contains(expectedOutput));
-        }
+    @Test
+    public void testListContextTree() throws Exception {
+        namingBean.verifyContextList();
     }
 
     @Test
-    public void testListContextTree() throws IOException, InterruptedException 
{
-        validateTest("testListContextTree");
+    public void testContextListBindings() throws Exception {
+        namingBean.verifyContextListBindings();
     }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/da488afb/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/NamingBean.java
----------------------------------------------------------------------
diff --git 
a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/NamingBean.java
 
b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/NamingBean.java
index 9a7daf2..abf2d8d 100644
--- 
a/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/NamingBean.java
+++ 
b/arquillian/arquillian-tomee-tests/arquillian-tomee-webprofile-tests/src/test/java/org/apache/openejb/arquillian/tests/naming/NamingBean.java
@@ -17,43 +17,80 @@
 
 package org.apache.openejb.arquillian.tests.naming;
 
+import org.apache.openejb.core.interceptor.Interceptor;
 import org.apache.openejb.core.ivm.naming.SystemComponentReference;
 
 import javax.ejb.LocalBean;
 import javax.ejb.Stateless;
 import javax.naming.*;
+import java.io.ByteArrayOutputStream;
 import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 
 @Stateless
 @LocalBean
 public class NamingBean {
+    private interface ListOperation {
+        NamingEnumeration<? extends NameClassPair> execute(Context context, 
String address) throws NamingException;
+    }
+
+    public void verifyContextList() throws NamingException {
+        verifyContextListInternal(new ListOperation() {
+            @Override
+            public NamingEnumeration<NameClassPair> execute(Context context, 
String address) throws NamingException {
+                return context.list(address);
+            }
+        });
+    }
+
+    public void verifyContextListBindings() throws NamingException {
+        verifyContextListInternal(new ListOperation() {
+            @Override
+            public NamingEnumeration<Binding> execute(Context context, String 
address) throws NamingException {
+                return context.listBindings(address);
+            }
+        });
+    }
+
+    private void verifyContextListInternal(ListOperation listOperation) throws 
NamingException {
+        final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+        final PrintWriter logSink = new PrintWriter(buffer);
 
-    public void verifyListContext(PrintWriter out) throws NamingException {
         final InitialContext ctx = new InitialContext();
-        final boolean hasErrors = listContext(ctx, "", out);
+        final boolean hasErrors = listContext(ctx, "", listOperation, logSink);
+        logSink.flush();
 
         if (hasErrors) {
-            throw new IllegalStateException("Failed to lookup some of the 
listed entries");
+            throw new IllegalStateException("Failed to lookup some of the 
listed entries:\n" + getPrintedJndiTree(buffer));
+        }
+    }
+
+    private String getPrintedJndiTree(ByteArrayOutputStream buffer) {
+        try {
+            return buffer.toString("utf-8");
+        } catch (UnsupportedEncodingException e) {
+            return null; //should never happen
         }
     }
 
     /*
     * Verifies TOMEE-2087: context.list()/listBindings()
     * returns more entries than it should. The false positives
-    * cannot be looked up, so try to list the context and look
-    * up every name-class pair. If the lookup fails, then list()
+    * cannot be looked up, so try to execute the context and look
+    * up every name-class pair. If the lookup fails, then execute()
     * returns incorrect results.
     */
-    public static boolean listContext(Context context, String ctxName, 
PrintWriter writer) throws javax.naming.NamingException {
+    private static boolean listContext(Context context, String ctxName, 
ListOperation listOperation, PrintWriter writer) throws 
javax.naming.NamingException {
         writer.println("\n### Context: " + ctxName);
         boolean hasErrors = false;
 
         final Map<Context, String> subContexts = new HashMap<>();
         final String namespace = context instanceof InitialContext ? "java:" : 
"";
 
-        final NamingEnumeration<NameClassPair> content = 
context.list(namespace);
+        final NamingEnumeration<? extends NameClassPair> content = 
listOperation.execute(context, namespace);
         while (content.hasMoreElements()) {
             final NameClassPair nameClassPair = content.nextElement();
             final String name = nameClassPair.getName();
@@ -63,6 +100,11 @@ public class NamingBean {
             writer.print("\tClass=" + className);
             writer.print("\t[looking up: " + (namespace + name) + "]");
 
+            /*
+             *  Skip the SystemComponentReference because they might internally
+             *  throw NameNotFoundException althoug being correctly bound to 
the
+             *  provided name.
+             */
             if (!SystemComponentReference.class.getName().equals(className)) {
                 try {
                     final Object object = context.lookup(namespace + name);
@@ -86,7 +128,7 @@ public class NamingBean {
         writer.println();
 
         for (Context subContext : subContexts.keySet()) {
-            hasErrors |= listContext(subContext, subContexts.get(subContext), 
writer);
+            hasErrors |= listContext(subContext, subContexts.get(subContext), 
listOperation, writer);
         }
 
         return hasErrors;

Reply via email to