1021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson/*
2021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more
3021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * contributor license agreements.  See the NOTICE file distributed with
4021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * this work for additional information regarding copyright ownership.
5021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0
6021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * (the "License"); you may not use this file except in compliance with
7021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * the License.  You may obtain a copy of the License at
8021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson *
9021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
10021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson *
11021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * Unless required by applicable law or agreed to in writing, software
12021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
13021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * See the License for the specific language governing permissions and
15021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * limitations under the License.
16021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson */
17021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
18021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonpackage libcore.java.util.logging;
19021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
20021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
21021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.io.IOException;
22021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.io.InputStream;
23021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.Enumeration;
24021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.Properties;
25021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.Handler;
26021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.LogManager;
27021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.LogRecord;
28021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.Logger;
29021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport junit.framework.TestCase;
30021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
31021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonpublic class OldLogManagerTest extends TestCase {
32021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
33021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    private static final String FOO = "LogManagerTestFoo";
34021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
35021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    LogManager mockManager;
36021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
37021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    LogManager manager = LogManager.getLogManager();
38021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
39021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    Properties props;
40021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
41021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    private static String className = OldLogManagerTest.class.getName();
42021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
43021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    static Handler handler = null;
44021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
45021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    @Override protected void setUp() throws Exception {
46021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        super.setUp();
47021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        mockManager = new MockLogManager();
48021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        handler = new MockHandler();
49021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props = new Properties();
50021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("handlers", className + "$MockHandler " + className + "$MockHandler");
51021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.FileHandler.pattern", "%h/java%u.log");
52021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.FileHandler.limit", "50000");
53021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.FileHandler.count", "5");
54021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.FileHandler.formatter", "java.util.logging.XMLFormatter");
55021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put(".level", "FINE");
56021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.ConsoleHandler.level", "OFF");
57021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.ConsoleHandler.formatter","java.util.logging.SimpleFormatter");
58021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("LogManagerTestFoo.handlers", "java.util.logging.ConsoleHandler");
59021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("LogManagerTestFoo.level", "WARNING");
60021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
61021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
62021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
63021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
64021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    /*
65021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * @see TestCase#tearDown()
66021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     */
67021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    @Override
68021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    protected void tearDown() throws Exception {
69021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        super.tearDown();
70021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        handler = null;
71021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
72021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
73021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testLogManager() {
74021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson       class TestLogManager extends LogManager {
75021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson           public TestLogManager() {
76021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson               super();
77021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson           }
78021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson       }
79021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson       TestLogManager tlm = new TestLogManager();
80021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson       assertNotNull(tlm.toString());
81021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
82021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
83021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    /*
84021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * test for method public Logger getLogger(String name)
85021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * test covers following use cases:
86021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * case 1: test default and valid value
87021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * case 2: test throw NullPointerException
88021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * case 3: test bad name
89021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * case 4: check correct tested value
90021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     */
91021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
92021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testGetLogger() throws Exception {
93021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
94021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // case 1: test default and valid value
95021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger log = new MockLogger(FOO, null);
96021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger foo = mockManager.getLogger(FOO);
97021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull("Logger should be null", foo);
98021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue("logger wasn't registered successfully", mockManager.addLogger(log));
99021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        foo = mockManager.getLogger(FOO);
100021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame("two loggers not refer to the same object", foo, log);
101021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull("logger foo should not haven parent", foo.getParent());
102021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
103021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // case 2: test throw NullPointerException
104021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        try {
105021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            mockManager.getLogger(null);
106021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            fail("get null should throw NullPointerException");
107021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        } catch (NullPointerException e) {
108021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
109021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
110021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // case 3: test bad name
111021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull("LogManager should not have logger with unforeseen name", mockManager
112021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                .getLogger("bad name"));
113021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
114021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // case 4: check correct tested value
115021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Enumeration<String> enumar = mockManager.getLoggerNames();
116021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        int i = 0;
117021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        while (enumar.hasMoreElements()) {
118021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            String name = enumar.nextElement();
119021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            i++;
120021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            assertEquals("name logger should be equal to foreseen name", FOO, name);
121021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
122021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("LogManager should contain one element", 1, i);
123021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
124021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
125021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    /*
126021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * test for method public Logger getLogger(String name)
127021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     */
128021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testGetLogger_duplicateName() throws Exception {
129021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // test duplicate name
130021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // add logger with duplicate name has no effect
131021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        mockManager.reset();
132021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger foo2 = new MockLogger(FOO, null);
133021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger foo3 = new MockLogger(FOO, null);
134021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        mockManager.addLogger(foo2);
135021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(foo2, mockManager.getLogger(FOO));
136021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        mockManager.addLogger(foo3);
137021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(foo2, mockManager.getLogger(FOO));
138021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
139021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Enumeration<String> enumar2 = mockManager.getLoggerNames();
140021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        int i = 0;
141021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        while (enumar2.hasMoreElements()) {
142021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            enumar2.nextElement();
143021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            i++;
144021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
145021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals(1, i);
146021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
147021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
148021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    /*
149021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * test for method public Logger getLogger(String name)
150021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     */
151021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testGetLogger_hierarchy() throws Exception {
152021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // test hierarchy
153021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger foo = new MockLogger("testGetLogger_hierachy.foo", null);
154021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // but for non-mock LogManager, foo's parent should be root
155021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(manager.addLogger(foo));
156021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(manager.getLogger(""), manager.getLogger("testGetLogger_hierachy.foo")
157021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson                .getParent());
158021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
159021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
160021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    /*
161021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * test for method public Logger getLogger(String name)
162021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     */
163021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testGetLogger_nameSpace() throws Exception {
164021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        // test name with space
165021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger foo = new MockLogger(FOO, null);
166021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger fooBeforeSpace = new MockLogger(FOO + " ", null);
167021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger fooAfterSpace = new MockLogger(" " + FOO, null);
168021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        Logger fooWithBothSpace = new MockLogger(" " + FOO + " ", null);
169021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(mockManager.addLogger(foo));
170021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(mockManager.addLogger(fooBeforeSpace));
171021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(mockManager.addLogger(fooAfterSpace));
172021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(mockManager.addLogger(fooWithBothSpace));
173021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
174021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(foo, mockManager.getLogger(FOO));
175021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(fooBeforeSpace, mockManager.getLogger(FOO + " "));
176021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(fooAfterSpace, mockManager.getLogger(" " + FOO));
177021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertSame(fooWithBothSpace, mockManager.getLogger(" " + FOO + " "));
178021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
179021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
180021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    /*
181021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     * test for method public void checkAccess() throws SecurityException
182021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson     */
183021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testCheckAccess() {
184021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        try {
185021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            manager.checkAccess();
186021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        } catch (SecurityException e) {
187021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            fail("securityException should not be thrown");
188021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
189021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
190021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
191021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testReadConfiguration() throws SecurityException,
192021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            IOException {
193021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
194021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        MockConfigLogManager lm = new MockConfigLogManager();
195021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertFalse(lm.isCalled);
196021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
197021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        lm.readConfiguration();
198021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(lm.isCalled);
199021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
200021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
201021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testReadConfigurationInputStream_IOException_1parm() throws SecurityException {
202021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        try {
203021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            mockManager.readConfiguration(new MockInputStream());
204021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            fail("should throw IOException");
205021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        } catch (IOException expected) {
206021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
207021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
208021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
209021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static class MockInputStream extends InputStream {
210021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        @Override public int read() throws IOException {
211021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            throw new IOException();
212021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
213021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
214021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
215021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static class MockLogger extends Logger {
216021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public MockLogger(String name, String rbName) {
217021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            super(name, rbName);
218021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
219021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
220021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
221021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static class MockLogManager extends LogManager {}
222021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
223021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static class MockConfigLogManager extends LogManager {
224021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public boolean isCalled = false;
225021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
226021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public void readConfiguration(InputStream ins) throws IOException {
227021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            isCalled = true;
228021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            super.readConfiguration(ins);
229021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
230021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
231021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
232021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static class MockHandler extends Handler {
233021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        static int number = 0;
234021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
235021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public MockHandler() {
236021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            addNumber();
237021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
238021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
239021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        private synchronized void addNumber() {
240021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            number++;
241021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
242021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
243021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public void close() {
244021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            minusNumber();
245021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
246021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
247021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        private synchronized void minusNumber() {
248021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            number--;
249021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
250021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
251021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public void flush() {}
252021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
253021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public void publish(LogRecord record) {}
254021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
255021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson}
256