From cc595890af3004096b2494bdcf8c4bc8008c75f4 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 06 Dec 2013 17:44:53 +0000
Subject: [PATCH] Improve accuracy of timestamps and thread count changes.
---
opends/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java | 61 +++++++++++++++++++++++++++++-
1 files changed, 58 insertions(+), 3 deletions(-)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java
index cd46626..ccc1159 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java
@@ -23,16 +23,21 @@
*
*
* Copyright 2006-2008 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
*/
package org.opends.server;
import org.testng.annotations.AfterSuite;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import org.testng.annotations.AfterClass;
import org.opends.messages.Message;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.IdentityHashMap;
+import java.util.List;
import java.util.Set;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
@@ -45,7 +50,9 @@
* have them include the class name.
*/
@Test(sequential=true)
+@SuppressWarnings("javadoc")
public abstract class DirectoryServerTestCase {
+
@BeforeSuite
public final void suppressOutput() {
TestCaseUtils.suppressOutput();
@@ -129,9 +136,9 @@
*/
@AfterClass(alwaysRun = true)
public void nullMemberVariablesAfterTest() {
- Class cls = this.getClass();
+ Class<?> cls = this.getClass();
// Iterate through all of the fields in all subclasses of
- // DirectoryServerTestCase, but not DirectoryServerTestCase itself.
+ // DirectoryServerTestCase, but not DirectoryServerTestCase itself.
while (DirectoryServerTestCase.class.isAssignableFrom(cls) &&
!DirectoryServerTestCase.class.equals(cls))
{
@@ -139,7 +146,8 @@
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
int modifiers = field.getModifiers();
- Class fieldClass = field.getType();
+ Class<?> fieldClass = field.getType();
+
// If it's a non-static non-final non-primitive type, then null it out
// so that the garbage collector can reclaim it and everything it
// references.
@@ -160,4 +168,51 @@
cls = cls.getSuperclass();
}
}
+
+ // Accessed by listener on test class completion.
+ long startTime;
+ long endTime;
+ List<String> threadNamesBeforeClass;
+ List<String> threadNamesAfterClass;
+
+ @BeforeClass(alwaysRun = true)
+ public void captureEnvironmentStateBeforeClass()
+ {
+ startTime = System.currentTimeMillis();
+ threadNamesBeforeClass = listAllThreadNames();
+ }
+
+ @AfterClass(alwaysRun = true)
+ public void captureEnvironmentStateAfterClass()
+ {
+ endTime = System.currentTimeMillis();
+ threadNamesAfterClass = listAllThreadNames();
+ }
+
+ private List<String> listAllThreadNames()
+ {
+ Thread currentThread = Thread.currentThread();
+ ThreadGroup topGroup = currentThread.getThreadGroup();
+ while (topGroup.getParent() != null)
+ {
+ topGroup = topGroup.getParent();
+ }
+
+ Thread threads[] = new Thread[topGroup.activeCount() * 2];
+ int numThreads = topGroup.enumerate(threads);
+
+ List<String> activeThreads = new ArrayList<String>();
+ for (int i = 0; i < numThreads; i++)
+ {
+ Thread thread = threads[i];
+ if (thread.isAlive())
+ {
+ String fullName = thread.getName();
+ activeThreads.add(fullName);
+ }
+ }
+
+ Collections.sort(activeThreads);
+ return activeThreads;
+ }
}
--
Gitblit v1.10.0