| | |
| | | import org.testng.annotations.AfterSuite; |
| | | import org.testng.annotations.BeforeSuite; |
| | | |
| | | import java.io.PrintStream; |
| | | import java.util.Enumeration; |
| | | import java.util.HashMap; |
| | | import java.util.logging.ConsoleHandler; |
| | | import java.util.logging.Handler; |
| | | import java.util.logging.Logger; |
| | | import java.util.logging.LogManager; |
| | | |
| | | import org.opends.server.types.NullOutputStream; |
| | | |
| | | /** |
| | | * This class defines a base test case that should be subclassed by all |
| | | * unit tests used by the Directory Server. |
| | |
| | | * have them include the class name. |
| | | */ |
| | | public abstract class DirectoryServerTestCase { |
| | | // The set of loggers for which the console logger has been disabled. |
| | | private HashMap<Logger,Handler> disabledLogHandlers; |
| | | |
| | | // The print stream to use for printing error messages. |
| | | private PrintStream errorStream; |
| | | |
| | | // The original System.err print stream. |
| | | private PrintStream originalSystemErr; |
| | | |
| | | // The original System.out print stream. |
| | | private PrintStream originalSystemOut; |
| | | |
| | | @BeforeSuite |
| | | public final void suppressOutput() { |
| | | String suppressStr = System.getProperty("org.opends.test.suppressOutput"); |
| | | if ((suppressStr != null) && suppressStr.equalsIgnoreCase("true")) |
| | | { |
| | | System.setOut(NullOutputStream.printStream()); |
| | | System.setErr(NullOutputStream.printStream()); |
| | | errorStream = NullOutputStream.printStream(); |
| | | |
| | | LogManager logManager = LogManager.getLogManager(); |
| | | Enumeration<String> loggerNames = logManager.getLoggerNames(); |
| | | while (loggerNames.hasMoreElements()) |
| | | { |
| | | String loggerName = loggerNames.nextElement(); |
| | | Logger logger = logManager.getLogger(loggerName); |
| | | for (Handler h : logger.getHandlers()) |
| | | { |
| | | if (h instanceof ConsoleHandler) |
| | | { |
| | | disabledLogHandlers.put(logger, h); |
| | | logger.removeHandler(h); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | TestCaseUtils.suppressOutput(); |
| | | } |
| | | |
| | | @AfterSuite |
| | | public final void shutdownServer() { |
| | | TestCaseUtils.shutdownServer("The current test suite has finished."); |
| | | |
| | | System.setOut(originalSystemOut); |
| | | System.setErr(originalSystemErr); |
| | | errorStream = originalSystemErr; |
| | | |
| | | for (Logger l : disabledLogHandlers.keySet()) |
| | | { |
| | | Handler h = disabledLogHandlers.get(l); |
| | | l.addHandler(h); |
| | | } |
| | | disabledLogHandlers.clear(); |
| | | TestCaseUtils.unsupressOutput(); |
| | | } |
| | | |
| | | /** |
| | | * Creates a new instance of this test case with the provided name. |
| | | */ |
| | | protected DirectoryServerTestCase() { |
| | | this.errorStream = System.err; |
| | | |
| | | disabledLogHandlers = new HashMap<Logger,Handler>(); |
| | | originalSystemOut = System.out; |
| | | originalSystemErr = System.err; |
| | | } |
| | | |
| | | /** |
| | | * Prints the provided message to the error stream, prepending the |
| | | * fully-qualified class name. |
| | | * |
| | | * @param message |
| | | * The message to be printed to the error stream. |
| | | */ |
| | | public final void printError(String message) { |
| | | errorStream.print(getClass().getName()); |
| | | errorStream.print(" -- "); |
| | | errorStream.println(message); |
| | | } |
| | | |
| | | /** |
| | | * Prints the stack trace for the provided exception to the error |
| | | * stream. |
| | | * |
| | | * @param exception |
| | | * The exception to be printed to the error stream. |
| | | */ |
| | | public final void printException(Throwable exception) { |
| | | exception.printStackTrace(errorStream); |
| | | } |
| | | |
| | | /** |
| | | * Specifies the error stream to which messages will be printed. |
| | | * |
| | | * @param errorStream |
| | | * The error stream to which messages will be printed. |
| | | */ |
| | | public final void setErrorStream(PrintStream errorStream) { |
| | | this.errorStream = errorStream; |
| | | } |
| | | |
| | | } |