You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/10/05 15:44:08 UTC

svn commit: r1629496 - in /tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded: ClasspathAsWebappTest.java ThreadStackRule.java

Author: rmannibucau
Date: Sun Oct  5 13:44:08 2014
New Revision: 1629496

URL: http://svn.apache.org/r1629496
Log:
adding a rule to get some info when the server is hanging

Added:
    tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ThreadStackRule.java
Modified:
    tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java

Modified: tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java?rev=1629496&r1=1629495&r2=1629496&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java (original)
+++ tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ClasspathAsWebappTest.java Sun Oct  5 13:44:08 2014
@@ -19,6 +19,7 @@ package org.apache.tomee.embedded;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.JarLocation;
 import org.apache.openejb.util.NetworkUtil;
+import org.junit.Rule;
 import org.junit.Test;
 
 import javax.ejb.EJB;
@@ -45,9 +46,11 @@ import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.core.Application;
 import java.io.IOException;
+import java.lang.reflect.Modifier;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
+import java.util.Iterator;
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -65,6 +68,9 @@ public class ClasspathAsWebappTest {
     @EJB
     private Task2 anEjb;
 
+    @Rule
+    public final ThreadStackRule debugWatcher = new ThreadStackRule();
+
     @Test
     public void run() throws MalformedURLException {
         MyInitializer.found = null;
@@ -78,6 +84,13 @@ public class ClasspathAsWebappTest {
 
             // Servlet (initializer, servlet)
             assertNotNull(MyInitializer.found);
+            final Iterator<Class<?>> it = MyInitializer.found.iterator();
+            while (it.hasNext()) { // ThreadStackRule defines one for instance
+                final Class<?> next = it.next();
+                if (next.getEnclosingClass() != null && !Modifier.isStatic(next.getModifiers())) {
+                    it.remove();
+                }
+            }
             assertEquals(1, MyInitializer.found.size());
             assertEquals(Task1.class, MyInitializer.found.iterator().next());
             try {

Added: tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ThreadStackRule.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ThreadStackRule.java?rev=1629496&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ThreadStackRule.java (added)
+++ tomee/tomee/trunk/tomee/tomee-embedded/src/test/java/org/apache/tomee/embedded/ThreadStackRule.java Sun Oct  5 13:44:08 2014
@@ -0,0 +1,69 @@
+/**
+ * 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.tomee.embedded;
+
+import org.apache.openejb.util.DaemonThreadFactory;
+import org.apache.openejb.util.Pipe;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+// only for debugging purpose (mainly on buildbot)
+public class ThreadStackRule implements TestRule {
+    @Override
+    public Statement apply(final Statement base, final Description description) {
+        if (System.getProperty("os.name", "unknown").toLowerCase().startsWith("windows")) {
+            return base;
+        }
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                final ScheduledExecutorService ses = Executors.newScheduledThreadPool(1, new DaemonThreadFactory(ThreadStackRule.class.getSimpleName() + "-"));
+                final ScheduledFuture<?> task = ses.scheduleAtFixedRate(new Runnable() {
+                    @Override
+                    public void run() {
+                        final RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
+
+                        String pid = bean.getName();
+                        if (pid.contains("@")) {
+                            pid = pid.substring(0, pid.indexOf("@"));
+                        }
+
+                        try {
+                            Pipe.pipe(Runtime.getRuntime().exec("kill -3 " + pid));
+                        } catch (final Exception exception) {
+                            exception.printStackTrace();
+                        }
+                    }
+                }, 2, 2, TimeUnit.MINUTES);
+                try {
+                    base.evaluate();
+                } finally {
+                    task.cancel(true);
+                    ses.shutdownNow();
+                }
+            }
+        };
+    }
+}