1fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License.  You may obtain a copy of the License at
8fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.logging.tests.java.util.logging;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStream;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PrintStream;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.StringWriter;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Permission;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Properties;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Filter;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Formatter;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Handler;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Level;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LogManager;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LogRecord;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LoggingPermission;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.MemoryHandler;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.SimpleFormatter;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.logging.tests.java.util.logging.HandlerTest.NullOutputStream;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.logging.tests.java.util.logging.util.EnvironmentHelper;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
42fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes *
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class MemoryHandlerTest extends TestCase {
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    final static LogManager manager = LogManager.getLogManager();
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    final static Properties props = new Properties();
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    final static String baseClassName = MemoryHandlerTest.class.getName();
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    final static StringWriter writer = new StringWriter();
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private final PrintStream err = System.err;
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
56fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes    private OutputStream errSubstituteStream = null;
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    MemoryHandler handler;
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    Handler target = new MockHandler();
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * @see TestCase#setUp()
648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    protected void setUp() throws Exception {
668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        super.setUp();
678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.reset();
688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        initProps();
698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .PropertiesToInputStream(props));
718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MemoryHandler();
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        errSubstituteStream = new NullOutputStream();
73fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes        System.setErr(new PrintStream(errSubstituteStream));
748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /**
778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     *
788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     */
798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    private void initProps() {
808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.level", "FINE");
818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.filter", baseClassName
828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFilter");
838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.size", "2");
848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.push", "WARNING");
858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.target", baseClassName
868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockHandler");
878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.formatter", baseClassName
888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockFormatter");
898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * @see TestCase#tearDown()
938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    protected void tearDown() throws Exception {
958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        super.tearDown();
968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration();
978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.clear();
98fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes        System.setErr(err);
998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testClose() {
1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Filter filter = handler.getFilter();
1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Formatter formatter = handler.getFormatter();
1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        writer.getBuffer().setLength(0);
1058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.close();
1068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(writer.toString(), "close");
1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getFilter(), filter);
1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getFormatter(), formatter);
1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(handler.getEncoding());
1108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(handler.getErrorManager());
1118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getLevel(), Level.OFF);
1128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getPushLevel(), Level.WARNING);
1138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertFalse(handler.isLoggable(new LogRecord(Level.SEVERE, "test")));
1148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testFlush() {
1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Filter filter = handler.getFilter();
1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        Formatter formatter = handler.getFormatter();
1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        writer.getBuffer().setLength(0);
1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.flush();
1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(writer.toString(), "flush");
1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getFilter(), filter);
1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getFormatter(), formatter);
1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(handler.getEncoding());
1258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(handler.getErrorManager());
1268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getLevel(), Level.FINE);
1278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getPushLevel(), Level.WARNING);
1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.isLoggable(new LogRecord(Level.SEVERE, "test")));
1298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testIsLoggable() {
1328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
1338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            handler.isLoggable(null);
1348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("should throw NullPointerException");
1358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (NullPointerException e) {
1368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            // expected
1378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
1388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogRecord record = new LogRecord(Level.FINER, "MSG1");
1398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertFalse(handler.isLoggable(record));
1408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        record = new LogRecord(Level.FINE, "MSG2");
1428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.isLoggable(record));
1438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        record = new LogRecord(Level.CONFIG, "MSG3");
1458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.isLoggable(record));
1468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        record = new LogRecord(Level.CONFIG, "false");
1488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertFalse(handler.isLoggable(record));
1498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.setFilter(null);
1518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        record = new LogRecord(Level.CONFIG, "false");
1528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.isLoggable(record));
1538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
1568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Class under test for void MemoryHandler()
1578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
1588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testMemoryHandler() {
1598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.getFilter() instanceof MockFilter);
1608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.getFormatter() instanceof MockFormatter);
1618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(handler.getEncoding());
1628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(handler.getErrorManager());
1638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getLevel(), Level.FINE);
1648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getPushLevel(), Level.WARNING);
1658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
1668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testMemoryHandlerInvalidProps() throws IOException {
1688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // null target
1698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
1708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            props.remove("java.util.logging.MemoryHandler.target");
1718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            manager.readConfiguration(EnvironmentHelper
1728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    .PropertiesToInputStream(props));
1738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            handler = new MemoryHandler();
1748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("should throw RuntimeException: target must be set");
1758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (RuntimeException e) {
1768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
1778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // invalid target
1798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
1808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            props.put("java.util.logging.MemoryHandler.target", "badname");
1818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            manager.readConfiguration(EnvironmentHelper
1828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    .PropertiesToInputStream(props));
1838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            handler = new MemoryHandler();
1848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("should throw RuntimeException: target must be valid");
1858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (RuntimeException e) {
1868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
1878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // invalid formatter
1898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        initProps();
1908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.formatter", "badname");
1918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper
1928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .PropertiesToInputStream(props));
1938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MemoryHandler();
1948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.getFormatter() instanceof SimpleFormatter);
1958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
1968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // invalid level
1978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        initProps();
1988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.level", "badname");
1998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper
2008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .PropertiesToInputStream(props));
2018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MemoryHandler();
2028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getLevel(), Level.ALL);
2038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // invalid pushlevel
2058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        initProps();
2068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.push", "badname");
2078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper
2088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .PropertiesToInputStream(props));
2098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MemoryHandler();
2108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getPushLevel(), Level.SEVERE);
2118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // invalid filter
2138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        initProps();
2148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.filter", "badname");
2158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper
2168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .PropertiesToInputStream(props));
2178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MemoryHandler();
2188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(handler.getFilter());
2198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // invalid size
2218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        initProps();
2228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.size", "-1");
2238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper
2248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .PropertiesToInputStream(props));
2258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MemoryHandler();
2268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        initProps();
2278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.size", "badsize");
2288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper
2298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .PropertiesToInputStream(props));
2308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MemoryHandler();
2318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testMemoryHandlerDefaultValue() throws SecurityException,
2358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            IOException {
2368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.clear();
2378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        props.put("java.util.logging.MemoryHandler.target", baseClassName
2388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                + "$MockHandler");
2398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        manager.readConfiguration(EnvironmentHelper
2418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                .PropertiesToInputStream(props));
2428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MemoryHandler();
2438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(handler.getFilter());
2448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.getFormatter() instanceof SimpleFormatter);
2458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(handler.getEncoding());
2468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(handler.getErrorManager());
2478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getLevel(), Level.ALL);
2488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getPushLevel(), Level.SEVERE);
2498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
2528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * Class under test for void MemoryHandler(Handler, int, Level)
2538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
2548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testMemoryHandlerHandlerintLevel() {
2558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler = new MemoryHandler(target, 2, Level.FINEST);
2568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.getFilter() instanceof MockFilter);
2578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.getFormatter() instanceof MockFormatter);
2588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(handler.getEncoding());
2598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNotNull(handler.getErrorManager());
2608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getLevel(), Level.FINE);
2618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getPushLevel(), Level.FINEST);
2628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertNull(target.getFormatter());
2638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
2658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            handler = new MemoryHandler(null, 2, Level.FINEST);
2668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("should throw NullPointerException");
2678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (NullPointerException e) {
2688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
2698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
2708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            handler = new MemoryHandler(target, 2, null);
2718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("should throw NullPointerException");
2728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (NullPointerException e) {
2738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
2748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
2758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            handler = new MemoryHandler(target, 0, Level.FINEST);
2768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("should throw IllegalArgumentException");
2778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (IllegalArgumentException e) {
2788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
2798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
2808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            handler = new MemoryHandler(target, -1, Level.FINEST);
2818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("should throw IllegalArgumentException");
2828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (IllegalArgumentException e) {
2838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
2848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testGetPushLevel() {
2888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        try {
2898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            handler.setPushLevel(null);
2908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            fail("should throw NullPointerException");
2918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        } catch (NullPointerException e) {
2928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
2938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.setPushLevel(Level.parse("123"));
2948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(handler.getPushLevel(), Level.parse("123"));
2958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
2968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
2978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testSetPushLevel() {
2988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // change push level don't trigger push action
2998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        writer.getBuffer().setLength(0);
3008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        LogRecord lr = new LogRecord(Level.CONFIG, "lr");
3018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertTrue(handler.isLoggable(lr));
3028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.publish(lr);
3038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(writer.toString(), "");
3048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // assertEquals(writer.toString(), "flush");
3058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        writer.getBuffer().setLength(0);
3068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.setPushLevel(Level.FINE);
3078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(writer.toString(), "");
3088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.publish(lr);
3098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(writer.toString(), lr.getMessage() + lr.getMessage());
3108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public void testPushPublic() {
3138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        writer.getBuffer().setLength(0);
3148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // loggable but don't trig push
3158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.publish(new LogRecord(Level.CONFIG, "MSG1"));
3168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", writer.toString());
3178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // trig push
3188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.publish(new LogRecord(Level.SEVERE, "MSG2"));
3198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(writer.toString(), "MSG1MSG2");
3208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        writer.getBuffer().setLength(0);
321fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // regression test for Harmony-1292
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        handler.publish(new LogRecord(Level.WARNING, "MSG"));
3248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("MSG", writer.toString());
325fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writer.getBuffer().setLength(0);
3278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // push nothing
3288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.push();
3298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", writer.toString());
3308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // loggable but not push
3318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.publish(new LogRecord(Level.CONFIG, "MSG3"));
3328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", writer.toString());
3338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // not loggable
3348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.publish(new LogRecord(Level.FINEST, "MSG4"));
3358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", writer.toString());
3368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // loggable but not push
3378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.publish(new LogRecord(Level.CONFIG, "MSG5"));
3388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", writer.toString());
3398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // not loggable
3408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.publish(new LogRecord(Level.FINER, "MSG6"));
3418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", writer.toString());
3428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // not loggable
3438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.publish(new LogRecord(Level.FINER, "false"));
3448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", writer.toString());
3458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // loggable but not push
3468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.publish(new LogRecord(Level.CONFIG, "MSG8"));
3478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", writer.toString());
3488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        // push all
3498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.push();
3508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals(writer.toString(), "MSG5MSG8");
3518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        writer.getBuffer().setLength(0);
3528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        handler.push();
3538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        assertEquals("", writer.toString());
3548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    /*
3578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      * mock classes
3588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath      */
3598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockFilter implements Filter {
3608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public boolean isLoggable(LogRecord record) {
3618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return !record.getMessage().equals("false");
3628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockHandler extends Handler {
3668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void close() {
3678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            writer.write("close");
3688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void flush() {
3718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            writer.write("flush");
3728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public void publish(LogRecord record) {
3758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            writer.write(record.getMessage());
3768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
3798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
3808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static class MockFormatter extends Formatter {
3818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        public String format(LogRecord r) {
3828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            return r.getMessage();
3838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
3848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
387