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.beans.PropertyChangeEvent;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.beans.PropertyChangeListener;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileNotFoundException;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PrintStream;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Permission;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Enumeration;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Properties;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.ConsoleHandler;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Handler;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Level;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LogManager;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LogRecord;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Logger;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LoggingPermission;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.logging.tests.java.util.logging.HandlerTest.NullOutputStream;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.logging.tests.java.util.logging.util.EnvironmentHelper;
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * add/get logger(dot)
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class LogManagerTest extends TestCase {
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static final String FOO = "LogManagerTestFoo";
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    LogManager mockManager;
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    LogManager manager = LogManager.getLogManager();
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    MockPropertyChangeListener listener;
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    Properties props;
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static String className = LogManagerTest.class.getName();
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    static Handler handler = null;
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    static final String CONFIG_CLASS = "java.util.logging.config.class";
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    static final String CONFIG_FILE = "java.util.logging.config.file";
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    static final String MANAGER_CLASS = "java.util.logging.config.manager";
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    static final String clearPath = System.getProperty("clearpath");
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * @see TestCase#setUp()
728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    protected void setUp() throws Exception {
748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        super.setUp();
758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager = new MockLogManager();
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        listener = new MockPropertyChangeListener();
778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MockHandler();
788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props = initProps();
798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    static Properties initProps() throws Exception {
828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Properties props = new Properties();
838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("handlers", className + "$MockHandler " + className
848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockHandler");
858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.FileHandler.pattern", "%h/java%u.log");
868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.FileHandler.limit", "50000");
878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.FileHandler.count", "5");
888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.FileHandler.formatter",
898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.XMLFormatter");
908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put(".level", "FINE");
918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.ConsoleHandler.level", "OFF");
928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.ConsoleHandler.formatter",
938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.SimpleFormatter");
948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("LogManagerTestFoo.handlers", "java.util.logging.ConsoleHandler");
958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("LogManagerTestFoo.level", "WARNING");
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return props;
978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * @see TestCase#tearDown()
1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    protected void tearDown() throws Exception {
1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        super.tearDown();
1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = null;
1058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testAddGetLogger() {
1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger log = new MockLogger(FOO, null);
1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foo = mockManager.getLogger(FOO);
1108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(foo);
1118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(log));
1128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        foo = mockManager.getLogger(FOO);
1138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, log);
1148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(foo.getParent());
1158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            mockManager.addLogger(null);
1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("add null should throw NullPointerException");
1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (NullPointerException e) {
1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            mockManager.getLogger(null);
1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("get null should throw NullPointerException");
1258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (NullPointerException e) {
1268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
1278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(mockManager.getLogger("bad name"));
1298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Enumeration<String> enumar = mockManager.getLoggerNames();
1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int i = 0;
1328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        while (enumar.hasMoreElements()) {
1338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            String name = (String) enumar.nextElement();
1348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            i++;
1358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(FOO, name);
1368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
1378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(i, 1);
1388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testAddGetLogger_duplicateName() {
1418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // add logger with duplicate name has no effect
1428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foo = new MockLogger(FOO, null);
1438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foo2 = new MockLogger(FOO, null);
1448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(foo));
1458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, mockManager.getLogger(FOO));
1468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertFalse(mockManager.addLogger(foo2));
1478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, mockManager.getLogger(FOO));
1488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Enumeration<String> enumar = mockManager.getLoggerNames();
1498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int i = 0;
1508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        while (enumar.hasMoreElements()) {
1518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            enumar.nextElement();
1528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            i++;
1538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
1548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(1, i);
1558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testAddGetLogger_Hierachy() {
1588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foo = new MockLogger("testAddGetLogger_Hierachy.foo", null);
1598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger child = new MockLogger("testAddGetLogger_Hierachy.foo.child",
1608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                null);
1618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fakeChild = new MockLogger(
1628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "testAddGetLogger_Hierachy.foo2.child", null);
1638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger grandson = new MockLogger(
1648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "testAddGetLogger_Hierachy.foo.child.grandson", null);
1658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger otherChild = new MockLogger(
1668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "testAddGetLogger_Hierachy.foo.child", null);
1678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(foo.getParent());
1688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(child.getParent());
1698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(grandson.getParent());
1708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(otherChild.getParent());
1718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // whenever a logger is added to a LogManager, hierarchy will be updated
1738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // accordingly
1748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(child));
1758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(child.getParent());
1768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(fakeChild));
1788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(fakeChild.getParent());
1798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(grandson));
1818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(child, grandson.getParent());
1828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(foo));
1848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, child.getParent());
1858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(foo.getParent());
1868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(fakeChild.getParent());
1878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // but for non-mock LogManager, foo's parent should be root
1898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(manager.addLogger(foo));
1908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(manager.getLogger(""), manager.getLogger(
1918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "testAddGetLogger_Hierachy.foo").getParent());
1928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // if we add one logger to two LogManager, parent will changed
1948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(manager.addLogger(otherChild));
1958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(manager.addLogger(grandson));
1968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, otherChild.getParent());
1978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(otherChild, grandson.getParent());
1988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testAddLoggerReverseOrder() {
2018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger root = new MockLogger("testAddLoggerReverseOrder", null);
2028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foo = new MockLogger("testAddLoggerReverseOrder.foo", null);
2038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fooChild = new MockLogger("testAddLoggerReverseOrder.foo.child",
2048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                null);
2058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fooGrandChild = new MockLogger(
2068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "testAddLoggerReverseOrder.foo.child.grand", null);
2078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fooGrandChild2 = new MockLogger(
2088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "testAddLoggerReverseOrder.foo.child.grand2", null);
2098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger realRoot = manager.getLogger("");
2118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(fooGrandChild);
2138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(realRoot, fooGrandChild.getParent());
2148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(root);
2168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, fooGrandChild.getParent());
2178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(realRoot, root.getParent());
2188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(foo);
2208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, foo.getParent());
2218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, fooGrandChild.getParent());
2228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(fooGrandChild2);
2248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, fooGrandChild2.getParent());
2258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, fooGrandChild.getParent());
2268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(fooChild);
2288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(fooChild, fooGrandChild2.getParent());
2298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(fooChild, fooGrandChild.getParent());
2308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, fooChild.getParent());
2318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, foo.getParent());
2328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(realRoot, root.getParent());
2338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testAddSimiliarLogger() {
2368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger root = new MockLogger("testAddSimiliarLogger", null);
2378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foo = new MockLogger("testAddSimiliarLogger.foo", null);
2388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger similiarFoo = new MockLogger("testAddSimiliarLogger.fop", null);
2398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fooo = new MockLogger("testAddSimiliarLogger.fooo", null);
2408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fooChild = new MockLogger("testAddSimiliarLogger.foo.child",
2418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                null);
2428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger similiarFooChild = new MockLogger(
2438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "testAddSimiliarLogger.fop.child", null);
2448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foooChild = new MockLogger("testAddSimiliarLogger.fooo.child",
2458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                null);
2468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(root);
2488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(fooChild);
2498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(similiarFooChild);
2508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(foooChild);
2518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, fooChild.getParent());
2528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, similiarFooChild.getParent());
2538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, foooChild.getParent());
2548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(foo);
2568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, fooChild.getParent());
2578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, similiarFooChild.getParent());
2588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, foooChild.getParent());
2598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(similiarFoo);
2618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, fooChild.getParent());
2628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(similiarFoo, similiarFooChild.getParent());
2638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, foooChild.getParent());
2648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(fooo);
2668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(fooo, foooChild.getParent());
2678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testAddGetLogger_nameWithSpace() {
2708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foo = new MockLogger(FOO, null);
2718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fooBeforeSpace = new MockLogger(FOO + " ", null);
2728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fooAfterSpace = new MockLogger(" " + FOO, null);
2738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fooWithBothSpace = new MockLogger(" " + FOO + " ", null);
2748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(foo));
2758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(fooBeforeSpace));
2768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(fooAfterSpace));
2778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(fooWithBothSpace));
2788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, mockManager.getLogger(FOO));
2808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(fooBeforeSpace, mockManager.getLogger(FOO + " "));
2818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(fooAfterSpace, mockManager.getLogger(" " + FOO));
2828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(fooWithBothSpace, mockManager.getLogger(" " + FOO + " "));
2838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testAddGetLogger_addRoot() throws IOException {
2868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foo = new MockLogger(FOO, null);
2878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fooChild = new MockLogger(FOO + ".child", null);
2888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger other = new MockLogger("other", null);
2898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger root = new MockLogger("", null);
2908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(foo.getParent());
2918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(root.getParent());
2928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(other.getParent());
2938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // add root to mock logmanager and it works as "root" logger
2958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(foo));
2968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(other));
2978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(fooChild));
2988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(foo.getParent());
2998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(other.getParent());
3008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(foo, fooChild.getParent());
3018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(root));
3038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, foo.getParent());
3048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, other.getParent());
3058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(root.getParent());
3068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // try to add root logger to non-mock LogManager, no effect
3088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertFalse(manager.addLogger(root));
3098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotSame(root, manager.getLogger(""));
3108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testDefaultLoggerProperties() throws Exception {
3138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // mock LogManager has no default logger
3148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(mockManager.getLogger(""));
3158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(mockManager.getLogger("global"));
3168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // non-mock LogManager has two default logger
3188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger global = manager.getLogger("global");
3198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger root = manager.getLogger("");
3208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(global, Logger.global);
3228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, global.getParent());
3238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // root properties
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
3268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(root.getFilter());
3278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(2, root.getHandlers().length);
3288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(Level.FINE, root.getLevel());
3298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", root.getName());
3308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root.getParent(), null);
3318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(root.getResourceBundle());
3328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(root.getResourceBundleName());
3338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(root.getUseParentHandlers());
3348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testMockGetProperty() throws Exception {
3388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // mock manager doesn't read configuration until you call
3398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // readConfiguration()
3408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger root = new MockLogger("", null);
3418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(root));
3428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        root = mockManager.getLogger("");
3438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        checkPropertyNull(mockManager);
3448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(0, root.getHandlers().length);
3458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(root.getLevel());
3468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
3478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(Level.FINE, root.getLevel());
3488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        checkProperty(mockManager);
3498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.reset();
3508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        checkPropertyNull(mockManager);
3518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(Level.INFO, root.getLevel());
3528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(0, mockManager.getLogger("").getHandlers().length);
3538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testGetProperty() throws SecurityException, IOException {
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//      //FIXME: move it to exec
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //        manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//		Logger root = manager.getLogger("");
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes////		checkProperty(manager);
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//		assertEquals(Level.FINE, root.getLevel());
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//		assertEquals(2, root.getHandlers().length);
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // but non-mock manager DO read it from the very beginning
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Logger root = manager.getLogger("");
3658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
3668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        checkProperty(manager);
3678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(2, root.getHandlers().length);
3688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(Level.FINE, root.getLevel());
3698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.reset();
3718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        checkPropertyNull(manager);
3728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(0, root.getHandlers().length);
3738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(Level.INFO, root.getLevel());
3748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
3758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testReadConfiguration_null() throws SecurityException,
3788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            IOException {
3798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
3808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            manager.readConfiguration(null);
3818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("should throw null pointer exception");
3828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (NullPointerException e) {
3838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testReadConfiguration() throws SecurityException,
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            IOException {
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockConfigLogManager lm = new MockConfigLogManager();
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(lm.isCalled);
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        lm.readConfiguration();
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(lm.isCalled);
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
3978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static void checkPropertyNull(LogManager m) {
3988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertNull(m.getProperty(".level"));
3998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(m.getProperty("java.util.logging.FileHandler.limit"));
4008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(m.getProperty("java.util.logging.ConsoleHandler.formatter"));
4018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertNull(m.getProperty("handlers"));
4028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(m.getProperty("java.util.logging.FileHandler.count"));
4038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(m.getProperty("com.xyz.foo.level"));
4048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(m.getProperty("java.util.logging.FileHandler.formatter"));
4058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(m.getProperty("java.util.logging.ConsoleHandler.level"));
4068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(m.getProperty("java.util.logging.FileHandler.pattern"));
4078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
4088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private static void checkProperty(LogManager m) {
4108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertEquals(m.getProperty(".level"), "INFO");
4118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(m.getProperty("java.util.logging.FileHandler.limit"),
4128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "50000");
4138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(m
4148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .getProperty("java.util.logging.ConsoleHandler.formatter"),
4158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.SimpleFormatter");
4168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertEquals(m.getProperty("handlers"),
4178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // "java.util.logging.ConsoleHandler");
4188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(m.getProperty("java.util.logging.FileHandler.count"), "5");
4198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(m.getProperty("LogManagerTestFoo.level"), "WARNING");
4208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(m.getProperty("java.util.logging.FileHandler.formatter"),
4218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "java.util.logging.XMLFormatter");
4228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(m.getProperty("java.util.logging.ConsoleHandler.level"),
4238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "OFF");
4248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(m.getProperty("java.util.logging.FileHandler.pattern"),
4258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "%h/java%u.log");
4268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//	public void testReadConfiguration() throws SecurityException, IOException {
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//          FIXME: move the support_exec
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			Logger foo = new MockLogger("foo", null);
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			assertNull(foo.getLevel());
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			assertTrue(mockManager.addLogger(foo));
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			Logger fo = new MockLogger("foo2", null);
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			fo.setLevel(Level.ALL);
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			assertTrue(mockManager.addLogger(fo));
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			Handler h = new ConsoleHandler();
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			Level l = h.getLevel();
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			assertNotSame(Level.OFF, h.getLevel());
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			// read configuration
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			mockManager.readConfiguration();
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			// level DO has effect
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			assertEquals(Level.WARNING, foo.getLevel());
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			// for non specified logger, level is reset to null
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			assertNull(fo.getLevel());
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			// read properties don't affect handler
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			assertNotSame(Level.OFF, h.getLevel());
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//			assertSame(l, h.getLevel());
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//	}
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
4558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
4568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Class under test for void readConfiguration(InputStream)
4578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
4588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testReadConfigurationInputStream() throws IOException {
4598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // mock LogManager
4608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        InputStream stream = EnvironmentHelper.PropertiesToInputStream(props);
4618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foo = new MockLogger(FOO, null);
4638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(foo.getLevel());
4648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(foo));
4658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger fo = new MockLogger("LogManagerTestFoo2", null);
4678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        fo.setLevel(Level.ALL);
4688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(fo));
4698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Handler h = new ConsoleHandler();
4718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Level l = h.getLevel();
4728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotSame(Level.OFF, h.getLevel());
4738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // read configuration from stream
4758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.readConfiguration(stream);
4768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        stream.close();
4778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // level DO has effect
4798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(Level.WARNING, foo.getLevel());
4808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // for non specified logger, level is reset to null
4828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(fo.getLevel());
4838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // read properties don't affect handler
4858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotSame(Level.OFF, h.getLevel());
4868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(l, h.getLevel());
4878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
4888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testReadConfigurationInputStream_null()
4908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            throws SecurityException, IOException {
4918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
4928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            mockManager.readConfiguration(null);
4938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("should throw null pointer exception");
4948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (NullPointerException e) {
4958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
4968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
4988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
4998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testReadConfigurationInputStream_root() throws IOException {
5008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        InputStream stream = EnvironmentHelper.PropertiesToInputStream(props);
5018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
5028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
5038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger logger = new MockLogger(
5048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                "testReadConfigurationInputStream_root.foo", null);
5058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger root = manager.getLogger("");
5068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger logger2 = Logger
5078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .getLogger("testReadConfigurationInputStream_root.foo2");
5088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
5098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.addLogger(logger);
5108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(logger.getLevel());
5118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(0, logger.getHandlers().length);
5128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, logger.getParent());
5138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
5148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(logger2.getLevel());
5158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(0, logger2.getHandlers().length);
5168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertSame(root, logger2.getParent());
5178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // if (!hasConfigClass) {
5188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(Level.FINE, root.getLevel());
5198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(2, root.getHandlers().length);
5208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // }
5218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
5228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // after read stream
5238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(stream);
5248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(Level.FINE, root.getLevel());
5258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(2, root.getHandlers().length);
5268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(logger.getLevel());
5278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(0, logger.getHandlers().length);
5288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        stream.close();
5298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testReadConfigurationUpdatesRootLoggersHandlers()
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws IOException {
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Properties properties = new Properties();
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        LogManager.getLogManager().readConfiguration(
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EnvironmentHelper.PropertiesToInputStream(properties));
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Logger root = Logger.getLogger("");
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, root.getHandlers().length);
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        properties.put("handlers", "java.util.logging.ConsoleHandler");
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        LogManager.getLogManager().readConfiguration(
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EnvironmentHelper.PropertiesToInputStream(properties));
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, root.getHandlers().length);
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testReadConfigurationDoesNotUpdateOtherLoggers()
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws IOException {
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Properties properties = new Properties();
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        LogManager.getLogManager().readConfiguration(
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EnvironmentHelper.PropertiesToInputStream(properties));
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Logger logger = Logger.getLogger("testReadConfigurationDoesNotUpdateOtherLoggers");
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, logger.getHandlers().length);
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        properties.put("testReadConfigurationDoesNotUpdateOtherLoggers.handlers",
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "java.util.logging.ConsoleHandler");
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        LogManager.getLogManager().readConfiguration(
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EnvironmentHelper.PropertiesToInputStream(properties));
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, logger.getHandlers().length);
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
5648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testAddRemovePropertyChangeListener() throws Exception {
5658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        MockPropertyChangeListener listener1 = new MockPropertyChangeListener();
5668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        MockPropertyChangeListener listener2 = new MockPropertyChangeListener();
5678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // add same listener1 two times
5688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.addPropertyChangeListener(listener1);
5698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.addPropertyChangeListener(listener1);
5708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.addPropertyChangeListener(listener2);
5718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
5728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(listener1.getEvent());
5738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(listener2.getEvent());
5748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
5758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // if (!hasConfigClass) {
5768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(listener1.getEvent());
5778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(listener2.getEvent());
5788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // }
5798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
5808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        listener1.reset();
5818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        listener2.reset();
5828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
5838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // remove listener1, no effect
5848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.removePropertyChangeListener(listener1);
5858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.readConfiguration(EnvironmentHelper
5868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .PropertiesToInputStream(props));
5878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(listener1.getEvent());
5888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(listener2.getEvent());
5898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        listener1.reset();
5908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        listener2.reset();
5918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
5928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // remove listener1 again and it works
5938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.removePropertyChangeListener(listener1);
5948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.readConfiguration(EnvironmentHelper
5958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .PropertiesToInputStream(props));
5968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(listener1.getEvent());
5978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(listener2.getEvent());
5988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        listener2.reset();
5998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
6008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // reset don't produce event
6018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.reset();
6028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(listener2.getEvent());
6038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
6048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.removePropertyChangeListener(listener2);
6058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
6068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(listener1.getEvent());
6078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(listener2.getEvent());
6088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
6098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
6108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testAddRemovePropertyChangeListener_null() {
6118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // seems nothing happened
6128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            mockManager.addPropertyChangeListener(null);
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NPE");
6158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (NullPointerException e) {
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
6178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.removePropertyChangeListener(null);
6188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
6198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
6208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testReset() throws SecurityException, IOException {
6218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // mock LogManager
6228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.readConfiguration(EnvironmentHelper.PropertiesToInputStream(props));
6238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(mockManager.getProperty("handlers"));
6248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger foo = new MockLogger(FOO, null);
6258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(foo.getLevel());
6268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(0, foo.getHandlers().length);
6278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        foo.setLevel(Level.ALL);
6288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        foo.addHandler(new ConsoleHandler());
6298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(mockManager.addLogger(foo));
6308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(Level.WARNING, foo.getLevel());
6318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(2, foo.getHandlers().length);
6328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
6338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // reset
6348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        mockManager.reset();
6358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
6368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // properties is cleared
6378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(mockManager.getProperty("handlers"));
6388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
6398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // level is null
6408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(foo.getLevel());
6418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // handlers are all closed
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, foo.getHandlers().length);
6438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
6448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // for root logger
6458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.reset();
6468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(manager.getProperty("handlers"));
6478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Logger root = manager.getLogger("");
6488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // level reset to info
6498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(Level.INFO, root.getLevel());
6508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // also close root's handler
6518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(0, root.getHandlers().length);
6528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
6538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
6548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testGlobalPropertyConfig() throws Exception {
655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PrintStream err = System.err;
656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setErr(new PrintStream(new NullOutputStream()));
658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // before add config property, root has two handler
659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(2, manager.getLogger("").getHandlers().length);
662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // one valid config class
664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", className + "$MockValidConfig");
665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(3, manager.getLogger("").getHandlers().length);
668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // two config class take effect orderly
670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", className + "$MockValidConfig "
671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + className + "$MockValidConfig2");
672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(2, manager.getLogger("").getHandlers().length);
675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", className + "$MockValidConfig2 "
677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + className + "$MockValidConfig");
678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(3, manager.getLogger("").getHandlers().length);
681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // invalid config class which throw exception, just print exception
683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // and
684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // message
685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", className
686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "$MockInvalidConfigException");
687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // invalid config class without default constructor, just print
691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // exception and message
692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", className
693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "$MockInvalidConfigNoDefaultConstructor");
694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // bad config class name, just print exception and message
698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", "badname");
699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // invalid separator, nothing happened
703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", className + "$MockValidConfig2;"
704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + className + "$MockValidConfig");
705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(2, manager.getLogger("").getHandlers().length);
708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", className + "$MockValidConfig2;"
709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + className + "$MockValidConfig " + className
710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "$MockValidConfig");
711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(3, manager.getLogger("").getHandlers().length);
714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // duplicate config class, take effect twice
716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", className + "$MockValidConfig "
717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + className + "$MockValidConfig");
718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(4, manager.getLogger("").getHandlers().length);
721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // invalid config classes mixed with valid config classes, valid
723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // config
724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // classes take effect
725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", "badname " + className
726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "$MockValidConfig " + className
727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "$MockInvalidConfigNoDefaultConstructor " + className
728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "$MockValidConfig");
729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(4, manager.getLogger("").getHandlers().length);
732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // global property take effect before logger specified property
734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.setProperty("config", className + "$MockValidConfig");
735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration(EnvironmentHelper
736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .PropertiesToInputStream(props));
737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(Level.FINE, manager.getLogger("").getLevel());
738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setErr(err);
740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testValidConfigClass() throws Exception {
745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String oldPropertyValue = System.getProperty(CONFIG_CLASS);
746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.setProperty(CONFIG_CLASS, this.getClass().getName()
748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + "$ConfigClass");
749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertNull(manager.getLogger("testConfigClass.foo"));
750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            manager.readConfiguration();
752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertNull(manager.getLogger("testConfigClass.foo"));
753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Logger l = Logger.getLogger("testConfigClass.foo.child");
754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertSame(Level.FINEST, manager.getLogger("").getLevel());
755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(0, manager.getLogger("").getHandlers().length);
756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("testConfigClass.foo", l.getParent().getName());
757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Properties systemProperties = System.getProperties();
759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (oldPropertyValue != null) {
760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                systemProperties.setProperty(CONFIG_CLASS, oldPropertyValue);
761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } else {
762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                systemProperties.remove(CONFIG_CLASS);
763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testNotExistConfigFile() throws Exception {
768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String oldPropertyValue = System.getProperty(CONFIG_FILE);
769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        System.setProperty(CONFIG_FILE, "not.exist.config.file");
770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            LogManager.getLogManager().readConfiguration();
772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw FileNotFoundException");
773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (FileNotFoundException e) {
774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Properties systemProperties = System.getProperties();
777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (oldPropertyValue != null) {
778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                systemProperties.setProperty(CONFIG_FILE, oldPropertyValue);
779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } else {
780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                systemProperties.remove(CONFIG_FILE);
781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // regression for HARMONY-3075
7868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testGetLoggingMXBean() throws Exception {
787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(LogManager.getLoggingMXBean());
788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
789fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
7908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
7918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * ----------------------------------------------------
7928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * mock classes
7938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * ----------------------------------------------------
7948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class ConfigClass {
7968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public ConfigClass() throws Exception {
797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            LogManager man = LogManager.getLogManager();
798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Properties props = LogManagerTest.initProps();
799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.put("testConfigClass.foo.level", "OFF");
800fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes            props.put("testConfigClass.foo.handlers", "java.util.logging.ConsoleHandler");
801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.put(".level", "FINEST");
802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            props.remove("handlers");
803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            InputStream in = EnvironmentHelper.PropertiesToInputStream(props);
804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            man.readConfiguration(in);
805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
807fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
8088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockInvalidInitClass {
8098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public MockInvalidInitClass() {
8108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            throw new RuntimeException();
8118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
8128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
8138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
8148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class TestInvalidConfigFile {
8158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public static void main(String[] args) {
8168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            LogManager manager = LogManager.getLogManager();
8178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            Logger root = manager.getLogger("");
8188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            checkPropertyNull(manager);
8198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(0, root.getHandlers().length);
8208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(Level.INFO, root.getLevel());
8218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
8228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            try {
8238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                manager.readConfiguration();
8248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
8258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                e.printStackTrace();
8268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
8278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            checkProperty(manager);
8288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertNull(root.getHandlers()[0].getLevel());
8298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(1, root.getHandlers().length);
8308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(Level.INFO, root.getLevel());
8318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
8328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            manager.reset();
8338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            checkProperty(manager);
8348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(0, root.getHandlers().length);
8358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(Level.INFO, root.getLevel());
8368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            try {
8378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                manager.readConfiguration();
8388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
8398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                e.printStackTrace();
8408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
8418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
8428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
8438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
8448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class TestValidConfigFile {
8458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public static void main(String[] args) {
8468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            LogManager manager = LogManager.getLogManager();
8478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            Logger root = manager.getLogger("");
8488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            checkPropertyNull(manager);
8498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(2, root.getHandlers().length);
8508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(root.getHandlers()[0].getLevel(), Level.OFF);
8518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(Level.ALL, root.getLevel());
8528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
8538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            try {
8548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                manager.readConfiguration();
8558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
8568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                e.printStackTrace();
8578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
8588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            checkPropertyNull(manager);
8598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(root.getHandlers()[0].getLevel(), Level.OFF);
8608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(2, root.getHandlers().length);
8618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(Level.ALL, root.getLevel());
8628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
8638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            manager.reset();
8648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            checkPropertyNull(manager);
8658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(0, root.getHandlers().length);
8668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(Level.INFO, root.getLevel());
8678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            try {
8688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                manager.readConfiguration();
8698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
8708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                e.printStackTrace();
8718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
8728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
8738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
8748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
8758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class TestMockLogManager {
8768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public static void main(String[] args) {
8778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            LogManager manager = LogManager.getLogManager();
8788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertTrue(manager instanceof MockLogManager);
8798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
8808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
8818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
8828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class TestValidConfigClass {
8838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public static void main(String[] args) {
8848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            LogManager manager = LogManager.getLogManager();
8858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            Logger root = manager.getLogger("");
8868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            checkPropertyNull(manager);
8878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(1, root.getHandlers().length);
8888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(Level.OFF, root.getLevel());
8898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
8908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            try {
8918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                manager.readConfiguration();
8928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
8938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                e.printStackTrace();
8948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
8958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            checkPropertyNull(manager);
8968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(1, root.getHandlers().length);
8978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(Level.OFF, root.getLevel());
8988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
8998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            try {
9008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                manager.readConfiguration();
9018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
9028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                e.printStackTrace();
9038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
9048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            checkPropertyNull(manager);
9058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(1, root.getHandlers().length);
9068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(Level.OFF, root.getLevel());
9078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            manager.reset();
9098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            checkPropertyNull(manager);
9108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(0, root.getHandlers().length);
9118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            assertEquals(Level.INFO, root.getLevel());
9128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            try {
9138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                manager.readConfiguration();
9148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
9158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                e.printStackTrace();
9168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
9178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
9188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
9198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockLogger extends Logger {
9218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public MockLogger(String name, String rbName) {
9228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            super(name, rbName);
9238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
9248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
9258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockLogManager extends LogManager {
9278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
9288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockConfigLogManager extends LogManager {
930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public boolean isCalled = false;
931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void readConfiguration(InputStream ins) throws IOException {
933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            isCalled = true;
934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super.readConfiguration(ins);
935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
9388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockHandler extends Handler {
9398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        static int number = 0;
9408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public MockHandler() {
9428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            addNumber();
9438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            // System.out.println(this + ":start:" + number);
9448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
9458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        private synchronized void addNumber() {
9478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            number++;
9488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
9498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void close() {
9518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            minusNumber();
9528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            // System.out.println(this + ":close:" + number);
9538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
9548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        private synchronized void minusNumber() {
9568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            number--;
9578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
9588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void flush() {
9608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            // System.out.println(this + ":flush");
9618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
9628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void publish(LogRecord record) {
9648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
9658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
9678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockValidInitClass {
9698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public MockValidInitClass() {
9708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            Properties p = new Properties();
9718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            p.put("handlers", className + "$MockHandler");
9728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            p.put(".level", "OFF");
9738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            InputStream in = null;
9748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            try {
9758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                in = EnvironmentHelper.PropertiesToInputStream(p);
9768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                LogManager manager = LogManager.getLogManager();
9778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                manager.readConfiguration(in);
9788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
9798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                e.printStackTrace();
9808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } finally {
9818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                try {
9828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    in.close();
9838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                } catch (Exception e) {
9848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                }
9858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
9868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
9878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
9888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
9898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockValidConfig {
9908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public MockValidConfig() {
9918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            handler = new MockHandler();
9928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            LogManager manager = LogManager.getLogManager();
9938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            Logger root = null;
9948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            if (null != manager) {
9958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                root = manager.getLogger("");
9968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } else {
9978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                System.out.println("null manager");
9988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
9998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            if (null != root) {
10008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                root.addHandler(handler);
10018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                root.setLevel(Level.OFF);
10028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            }
10038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
10048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
10058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockValidConfig2 {
10078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        static Logger root = null;
10098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public MockValidConfig2() {
10118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            root = LogManager.getLogManager().getLogger("");
10128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            root.removeHandler(handler);
10138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
10148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
10158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockInvalidConfigException {
10178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public MockInvalidConfigException() {
10188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            throw new RuntimeException("invalid config class - throw exception");
10198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
10208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
10218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockInvalidConfigNoDefaultConstructor {
10238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public MockInvalidConfigNoDefaultConstructor(int i) {
10248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            throw new RuntimeException(
10258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    "invalid config class - no default constructor");
10268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
10278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
10288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockPropertyChangeListener implements
10308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            PropertyChangeListener {
10318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        PropertyChangeEvent event = null;
10338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void propertyChange(PropertyChangeEvent event) {
10358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            this.event = event;
10368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
10378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public PropertyChangeEvent getEvent() {
10398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return event;
10408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
10418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void reset() {
10438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            event = null;
10448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
10458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test config class loading
1050fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes     * java -Djava.util.logging.config.class=badConfigClassName ClassLoadingTest
1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
10528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class ClassLoadingTest {
1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static void main(String[] args) {
1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Thread.currentThread().setContextClassLoader(new MockErrorClassLoader());
10558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            try {
1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                LogManager.getLogManager();
1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Should throw mock error");
10588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (MockError e) {
1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
10618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        static class MockErrorClassLoader extends ClassLoader {
10638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            public Class<?> loadClass(String name) {
1064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new MockError();
1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
10678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
10688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        static class MockError extends Error {
1069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1070fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes    }
1071fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
1073