1fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License.  You may obtain a copy of the License at
8fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.logging.tests.java.util.logging;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayOutputStream;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStream;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PrintStream;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Permission;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Properties;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.ConsoleHandler;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Filter;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Formatter;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Handler;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Level;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LogManager;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LogRecord;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LoggingPermission;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.SimpleFormatter;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.logging.tests.java.util.logging.util.EnvironmentHelper;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.util.CallVerificationStack;
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test class java.util.logging.ConsoleHandler
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class ConsoleHandlerTest extends TestCase {
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private final static String INVALID_LEVEL = "impossible_level";
488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private final PrintStream err = System.err;
508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private OutputStream errSubstituteStream = null;
528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static String className = ConsoleHandlerTest.class.getName();
548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * @see TestCase#setUp()
578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    protected void setUp() throws Exception {
598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        super.setUp();
608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        errSubstituteStream = new MockOutputStream();
618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        System.setErr(new PrintStream(errSubstituteStream));
628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().reset();
638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * @see TestCase#tearDown()
678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    protected void tearDown() throws Exception {
698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        super.tearDown();
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().reset();
718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        CallVerificationStack.getInstance().clear();
728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        System.setErr(err);
738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test the constructor with no relevant log manager properties are set.
778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testConstructor_NoProperties() {
798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(LogManager.getLogManager().getProperty(
808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.ConsoleHandler.level"));
818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(LogManager.getLogManager().getProperty(
828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.ConsoleHandler.filter"));
838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(LogManager.getLogManager().getProperty(
848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.ConsoleHandler.formatter"));
858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(LogManager.getLogManager().getProperty(
868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.ConsoleHandler.encoding"));
878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(h.getLevel(), Level.INFO);
908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(h.getFormatter() instanceof SimpleFormatter);
918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(h.getFilter());
928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(h.getEncoding(), null);
938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test the constructor with valid relevant log manager properties are set.
978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testConstructor_ValidProperties() throws Exception {
998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.level", "FINE");
1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.filter", className
1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFilter");
1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className
1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
1058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.encoding", "iso-8859-1");
1068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(LogManager.getLogManager().getProperty(
1108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.ConsoleHandler.level"), "FINE");
1118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(LogManager.getLogManager().getProperty(
1128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.ConsoleHandler.encoding"), "iso-8859-1");
1138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
1148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(h.getLevel(), Level.parse("FINE"));
1158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(h.getFormatter() instanceof MockFormatter);
1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(h.getFilter() instanceof MockFilter);
1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(h.getEncoding(), "iso-8859-1");
1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test the constructor with invalid relevant log manager properties are
1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * set.
1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testConstructor_InvalidProperties() throws Exception {
1258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
1268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.level", INVALID_LEVEL);
1278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.filter", className);
1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className);
1298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.encoding", "XXXX");
1308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
1328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(LogManager.getLogManager().getProperty(
1348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.ConsoleHandler.level"), INVALID_LEVEL);
1358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(LogManager.getLogManager().getProperty(
1368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.ConsoleHandler.encoding"), "XXXX");
1378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
1388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(h.getLevel(), Level.INFO);
1398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(h.getFormatter() instanceof SimpleFormatter);
1408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(h.getFilter());
1418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(h.getEncoding());
1428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(new LogRecord(Level.SEVERE, "test"));
1438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(h.getEncoding());
1448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
1478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test close() when having sufficient privilege, and a record has been
1488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * written to the output stream.
1498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
1508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testClose_SufficientPrivilege_NormalClose() throws Exception {
1518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
1528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className
1538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
1548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
1558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
1568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
1578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(new LogRecord(Level.SEVERE,
1588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "testClose_SufficientPrivilege_NormalClose msg"));
1598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.close();
1608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("flush", CallVerificationStack.getInstance()
1618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .getCurrentSourceMethod());
1628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(CallVerificationStack.getInstance().pop());
1638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.close();
1648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
1678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test close() when having sufficient privilege, and an output stream that
1688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * always throws exceptions.
1698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
1708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testClose_SufficientPrivilege_Exception() throws Exception {
1718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
1728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className
1738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
1748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
1758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
1768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
1778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(new LogRecord(Level.SEVERE,
1798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "testClose_SufficientPrivilege_Exception msg"));
1808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.flush();
1818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.close();
1828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
1858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test close() when having sufficient privilege, and no record has been
1868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * written to the output stream.
1878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
1888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testClose_SufficientPrivilege_DirectClose() throws Exception {
1898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
1908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className
1918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
1928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
1938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
1948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
1958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.close();
1978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("flush", CallVerificationStack.getInstance()
1988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .getCurrentSourceMethod());
1998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(CallVerificationStack.getInstance().pop());
2008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(CallVerificationStack.getInstance().empty());
2018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
2048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test publish(), use no filter, having output stream, normal log record.
2058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
2068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testPublish_NoFilter() throws Exception {
2078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
2088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className
2098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
2108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
2118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
2128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
2138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogRecord r = new LogRecord(Level.INFO, "testPublish_NoFilter");
2158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setLevel(Level.INFO);
2168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
2178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.flush();
2188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("MockFormatter_Head" + "testPublish_NoFilter",
2198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                this.errSubstituteStream.toString());
2208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setLevel(Level.WARNING);
2228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
2238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.flush();
2248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("MockFormatter_Head" + "testPublish_NoFilter",
2258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                this.errSubstituteStream.toString());
2268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setLevel(Level.CONFIG);
2288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
2298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.flush();
2308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("MockFormatter_Head" + "testPublish_NoFilter"
2318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "testPublish_NoFilter", this.errSubstituteStream.toString());
2328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        r.setLevel(Level.OFF);
2348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setLevel(Level.OFF);
2358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
2368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.flush();
2378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("MockFormatter_Head" + "testPublish_NoFilter"
2388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "testPublish_NoFilter", this.errSubstituteStream.toString());
2398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
2428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test publish(), after system err is reset.
2438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
2448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testPublish_AfterResetSystemErr() throws Exception {
2458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
2468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className
2478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
2488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
2498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
2508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
2518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setFilter(new MockFilter());
2528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        System.setErr(new PrintStream(new ByteArrayOutputStream()));
2548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogRecord r = new LogRecord(Level.INFO, "testPublish_WithFilter");
2568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setLevel(Level.INFO);
2578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
2588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(CallVerificationStack.getInstance().pop());
2598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(r, CallVerificationStack.getInstance().pop());
2608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", this.errSubstituteStream.toString());
2618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
2648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test publish(), use a filter, having output stream, normal log record.
2658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
2668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testPublish_WithFilter() throws Exception {
2678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
2688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className
2698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
2708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
2718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
2728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
2738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setFilter(new MockFilter());
2748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogRecord r = new LogRecord(Level.INFO, "testPublish_WithFilter");
2768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setLevel(Level.INFO);
2778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
2788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(CallVerificationStack.getInstance().pop());
2798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(r, CallVerificationStack.getInstance().pop());
2808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", this.errSubstituteStream.toString());
2818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setLevel(Level.WARNING);
2838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
2848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(CallVerificationStack.getInstance().pop());
2858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(CallVerificationStack.getInstance().empty());
2868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", this.errSubstituteStream.toString());
2878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setLevel(Level.CONFIG);
2898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
2908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(CallVerificationStack.getInstance().pop());
2918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(r, CallVerificationStack.getInstance().pop());
2928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", this.errSubstituteStream.toString());
2938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        r.setLevel(Level.OFF);
2958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setLevel(Level.OFF);
2968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
2978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(CallVerificationStack.getInstance().pop());
2988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", this.errSubstituteStream.toString());
2998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(CallVerificationStack.getInstance().empty());
3008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
3038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test publish(), null log record, having output stream, spec said
3048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * rather than throw exception, handler should call errormanager to handle
3058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * exception case, so NullPointerException shouldn't be thrown.
3068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
3078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testPublish_Null() throws Exception {
3088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
3098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className
3108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
3118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
3128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
3138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
3148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(null);
3158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
3188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test publish(), a log record with empty msg, having output stream
3198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
3208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testPublish_EmptyMsg() throws Exception {
3218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
3228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className
3238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
3248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
3258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
3268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
3278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogRecord r = new LogRecord(Level.INFO, "");
3288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
3298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.flush();
3308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("MockFormatter_Head", this.errSubstituteStream.toString());
3318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
3348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test publish(), a log record with null msg, having output stream
3358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
3368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testPublish_NullMsg() throws Exception {
3378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties p = new Properties();
3388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        p.put("java.util.logging.ConsoleHandler.formatter", className
3398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
3408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogManager.getLogManager().readConfiguration(
3418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                EnvironmentHelper.PropertiesToInputStream(p));
3428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ConsoleHandler h = new ConsoleHandler();
3438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogRecord r = new LogRecord(Level.INFO, null);
3448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
3458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.flush();
3468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertEquals("MockFormatter_Head",
3478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // this.errSubstituteStream.toString());
3488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testPublish_AfterClose() throws Exception {
3518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        PrintStream backup = System.err;
3528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
3538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            ByteArrayOutputStream bos = new ByteArrayOutputStream();
3548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            System.setErr(new PrintStream(bos));
3558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            Properties p = new Properties();
3568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            p.put("java.util.logging.ConsoleHandler.level", "FINE");
3578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            p.put("java.util.logging.ConsoleHandler.formatter", className
3588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    + "$MockFormatter");
3598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            LogManager.getLogManager().readConfiguration(
3608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    EnvironmentHelper.PropertiesToInputStream(p));
3618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            ConsoleHandler h = new ConsoleHandler();
3628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertSame(h.getLevel(), Level.FINE);
3638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            LogRecord r1 = new LogRecord(Level.INFO, "testPublish_Record1");
3648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            LogRecord r2 = new LogRecord(Level.INFO, "testPublish_Record2");
3658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertTrue(h.isLoggable(r1));
3668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            h.publish(r1);
3678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertTrue(bos.toString().indexOf("testPublish_Record1") >= 0);
3688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            h.close();
3698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            // assertFalse(h.isLoggable(r));
3708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertTrue(h.isLoggable(r2));
3718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            h.publish(r2);
3728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertTrue(bos.toString().indexOf("testPublish_Record2") >= 0);
3738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            h.flush();
3748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            // assertEquals("MockFormatter_Head",
3758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            // this.errSubstituteStream.toString());
3768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (IOException e) {
3778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            e.printStackTrace();
3788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } finally {
3798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            System.setErr(backup);
3808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
3848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Test setOutputStream() under normal condition.
3858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
3868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testSetOutputStream_Normal() {
3878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        MockStreamHandler h = new MockStreamHandler();
3888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setFormatter(new MockFormatter());
3898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogRecord r = new LogRecord(Level.INFO, "testSetOutputStream_Normal");
3918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.publish(r);
3928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(CallVerificationStack.getInstance().pop());
3938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(r, CallVerificationStack.getInstance().pop());
3948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(CallVerificationStack.getInstance().empty());
3958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal",
3968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                this.errSubstituteStream.toString());
3978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ByteArrayOutputStream aos2 = new ByteArrayOutputStream();
3998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        h.setOutputStream(aos2);
4008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertEquals("close", DelegationParameterStack.getInstance()
4028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // .getCurrentSourceMethod());
4038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertNull(DelegationParameterStack.getInstance().pop());
4048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertEquals("flush", DelegationParameterStack.getInstance()
4058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // .getCurrentSourceMethod());
4068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertNull(DelegationParameterStack.getInstance().pop());
4078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal"
4088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // + "MockFormatter_Tail", this.errSubstituteStream.toString());
4098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // r = new LogRecord(Level.INFO, "testSetOutputStream_Normal2");
4108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // h.publish(r);
4118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertSame(r, DelegationParameterStack.getInstance().pop());
4128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertTrue(DelegationParameterStack.getInstance().empty());
4138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal2",
4148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // aos2
4158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // .toString());
4168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertEquals("MockFormatter_Head" + "testSetOutputStream_Normal"
4178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // + "MockFormatter_Tail", this.errSubstituteStream.toString());
4188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
4198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
4218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * A mock filter, always return false.
4228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
4238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockFilter implements Filter {
4248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public boolean isLoggable(LogRecord record) {
4268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            CallVerificationStack.getInstance().push(record);
4278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            // System.out.println("filter called...");
4288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return false;
4298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
4308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
4318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
4338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * A mock formatter.
4348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
4358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockFormatter extends Formatter {
4368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public String format(LogRecord r) {
4378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            // System.out.println("formatter called...");
4388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return super.formatMessage(r);
4398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
4408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
4428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * (non-Javadoc)
4438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           *
4448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * @see java.util.logging.Formatter#getHead(java.util.logging.Handler)
4458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
4468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public String getHead(Handler h) {
4478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return "MockFormatter_Head";
4488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
4498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
4518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * (non-Javadoc)
4528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           *
4538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * @see java.util.logging.Formatter#getTail(java.util.logging.Handler)
4548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
4558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public String getTail(Handler h) {
4568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return "MockFormatter_Tail";
4578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
4588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
4598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
4618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * A mock output stream.
4628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
4638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockOutputStream extends ByteArrayOutputStream {
4648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
4668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * (non-Javadoc)
4678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           *
4688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * @see java.io.OutputStream#close()
4698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
4708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void close() throws IOException {
4718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            CallVerificationStack.getInstance().push(null);
4728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            super.close();
4738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
4748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
4768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * (non-Javadoc)
4778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           *
4788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * @see java.io.OutputStream#flush()
4798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
4808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void flush() throws IOException {
4818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            CallVerificationStack.getInstance().push(null);
4828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            super.flush();
4838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
4848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        /*
4868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * (non-Javadoc)
4878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           *
4888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           * @see java.io.OutputStream#write(int)
4898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath           */
4908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void write(int oneByte) {
4918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            // TODO Auto-generated method stub
4928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            super.write(oneByte);
4938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
4948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
4958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
4978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * A mock stream handler, expose setOutputStream.
4988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
4998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockStreamHandler extends ConsoleHandler {
5008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public MockStreamHandler() {
5018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            super();
5028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
5038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
5048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void setOutputStream(OutputStream out) {
5058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            super.setOutputStream(out);
5068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
5078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
5088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public boolean isLoggable(LogRecord r) {
5098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            CallVerificationStack.getInstance().push(r);
5108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return super.isLoggable(r);
5118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
5128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
515