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