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();
+ }
+ }
+ };
+ }
+}