You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2019/07/19 19:01:51 UTC
[activemq-artemis] 01/03: ARTEMIS-2408 Changing FileDescriptors
rule as classRule
This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
commit 89cc07c7d8bf12d83d7a81eb8f71ee9746c5fb8e
Author: Clebert Suconic <cl...@apache.org>
AuthorDate: Thu Jul 18 23:34:33 2019 -0400
ARTEMIS-2408 Changing FileDescriptors rule as classRule
---
.../artemis/tests/util/ActiveMQTestBase.java | 5 +-
.../artemis/tests/util/NoProcessFilesBehind.java | 98 ++++------------------
2 files changed, 17 insertions(+), 86 deletions(-)
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
index 19a3919..22b3173 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
@@ -171,8 +171,8 @@ public abstract class ActiveMQTestBase extends Assert {
@ClassRule
public static ThreadLeakCheckRule leakCheckRule = new ThreadLeakCheckRule();
- @Rule
- public NoProcessFilesBehind noProcessFilesBehind = new NoProcessFilesBehind(-1, 1000);
+ @ClassRule
+ public static NoProcessFilesBehind noProcessFilesBehind = new NoProcessFilesBehind(1000);
/** We should not under any circunstance create data outside of ./target
* if you have a test failing because because of this rule for any reason,
@@ -279,7 +279,6 @@ public abstract class ActiveMQTestBase extends Assert {
@After
public void tearDown() throws Exception {
- noProcessFilesBehind.tearDown();
closeAllSessionFactories();
closeAllServerLocatorsFactories();
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/NoProcessFilesBehind.java b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/NoProcessFilesBehind.java
index fe28ad7..e04b6ce 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/NoProcessFilesBehind.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/NoProcessFilesBehind.java
@@ -19,16 +19,18 @@ package org.apache.activemq.artemis.tests.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import com.sun.management.UnixOperatingSystemMXBean;
import org.apache.activemq.artemis.nativo.jlibaio.LibaioContext;
import org.apache.activemq.artemis.utils.Wait;
import org.jboss.logging.Logger;
+import org.junit.Assert;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
@@ -42,17 +44,13 @@ public class NoProcessFilesBehind extends TestWatcher {
/**
* -1 on maxVariance means no check
*/
- public NoProcessFilesBehind(int maxVariance, long maxFiles) {
+ public NoProcessFilesBehind(long maxFiles) {
- this.maxVariance = maxVariance;
this.maxFiles = maxFiles;
}
long fdBefore;
- int maxVariance;
long maxFiles;
- List<String> openFilesBefore;
- List<String> openFilesAfter;
static OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
@@ -68,7 +66,6 @@ public class NoProcessFilesBehind extends TestWatcher {
protected void starting(Description description) {
LibaioContext.isLoaded();
fdBefore = getOpenFD();
- openFilesBefore = getOpenFiles(true);
}
public static List<String> getOpenFiles(boolean filtered) {
@@ -92,27 +89,6 @@ public class NoProcessFilesBehind extends TestWatcher {
return openFiles;
}
-
- private static List<String> getDiffFiles(List<String> xOpenFiles, List<String> yOpenFiles) {
- ArrayList<String> diffOpenFiles = new ArrayList<>();
- for (String xOpenFile : xOpenFiles) {
- boolean found = false;
- Iterator<String> yOpenFilesIterator = yOpenFiles.iterator();
- String xOpenFileS = xOpenFile.replaceAll("\\s+", "\\\\s+");
-
- while (yOpenFilesIterator.hasNext() && !found) {
- String yOpenFileS = yOpenFilesIterator.next().replaceAll("\\s+", "\\\\s+");
- found = yOpenFileS.equals(xOpenFileS);
- }
-
- if (!found) {
- diffOpenFiles.add(xOpenFile);
- }
- }
-
- return diffOpenFiles;
- }
-
private static int getProcessId() throws ReflectiveOperationException {
java.lang.management.RuntimeMXBean runtime = java.lang.management.ManagementFactory.getRuntimeMXBean();
java.lang.reflect.Field jvmField = runtime.getClass().getDeclaredField("jvm");
@@ -123,9 +99,6 @@ public class NoProcessFilesBehind extends TestWatcher {
return (Integer) getProcessIdMethod.invoke(jvm);
}
- public void tearDown() {
- openFilesAfter = getOpenFiles(true);
- }
@Override
protected void failed(Throwable e, Description description) {
@@ -135,68 +108,27 @@ public class NoProcessFilesBehind extends TestWatcher {
protected void succeeded(Description description) {
}
- List<String> getVariance() {
-
- long fdAfter = getOpenFD();
-
- long variance = fdAfter - fdBefore;
-
- if (variance > 0) {
- List<String> currOpenFiles = getOpenFiles(true);
- List<String> diffOpenFiles = getDiffFiles(currOpenFiles, openFilesBefore);
- List<String> skippingOpenFiles = getDiffFiles(currOpenFiles, openFilesAfter);
- List<String> leavingOpenFiles = getDiffFiles(diffOpenFiles, skippingOpenFiles);
-
- return leavingOpenFiles;
- } else {
- return new ArrayList<>();
- }
- }
-
/**
* Override to tear down your specific external resource.
*/
@Override
protected void finished(Description description) {
- long fdAfter = getOpenFD();
- List<String> variance = getVariance();
-
- if (variance.size() > 0) {
- log.warn("test " + description.toString() + " is leaving " + variance.size() + " files open with a total number of files open = " + fdAfter);
- System.err.println("test " + description.toString() + " is leaving " + variance.size() + " files open with a total number of files open = " + fdAfter);
-
- for (String openFile : variance) {
- System.err.println(openFile);
+ Wait.waitFor(() -> getOpenFD() < maxFiles, 5000, 0);
+ if (getOpenFD() >= maxFiles) {
+ List<String> openFiles = getOpenFiles(true);
+ StringWriter stringWriter = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(stringWriter);
+ boolean first = true;
+ for (String str : openFiles) {
+ if (!first) printWriter.print(", ");
+ first = false;
+ printWriter.print(str);
}
+ Assert.fail("Too many files open (" + maxFiles + "). A possible list: " + stringWriter.toString());
}
-
- if (maxVariance > 0) {
- VarianceCondition varianceCondition = new VarianceCondition();
- Wait.assertTrue("The test " + description.toString() + " is leaving " + varianceCondition.getVarianceSize() + " files open, which is more than " + maxVariance + " max open", varianceCondition, 5000, 0);
- }
-
Wait.assertTrue("Too many open files", () -> getOpenFD() < maxFiles, 5000, 0);
}
- class VarianceCondition implements Wait.Condition {
- private List<String> variance = null;
-
- public long getVarianceSize() {
- if (variance != null) {
- return variance.size();
- } else {
- return 0;
- }
- }
-
- @Override
- public boolean isSatisfied() throws Exception {
- variance = getVariance();
-
- return variance.size() < maxVariance;
- }
- }
-
}