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.BufferedInputStream; 21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayOutputStream; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileInputStream; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileNotFoundException; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileOutputStream; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStream; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.PrintStream; 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Properties; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.FileHandler; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Filter; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Formatter; 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Handler; 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.Level; 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LogManager; 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.LogRecord; 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.logging.XMLFormatter; 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.logging.tests.java.util.logging.HandlerTest.NullOutputStream; 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.logging.tests.java.util.logging.util.EnvironmentHelper; 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class FileHandlerTest extends TestCase { 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 4784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller final static LogManager manager = LogManager.getLogManager(); 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final static Properties props = new Properties(); 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final static String className = FileHandlerTest.class.getName(); 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final static String USR_HOME_KEY = "user.home"; 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final static String TMP_DIR_KEY = "java.io.tmpdir"; 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final static String SEP = File.separator; 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final PrintStream err = System.err; 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private OutputStream errSubstituteStream = null; 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 5784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller String homePath; 5884bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller String tempPath; 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler handler; 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LogRecord r; 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void setUp() throws Exception { 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setUp(); 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes manager.reset(); 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes initProps(); 6684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller homePath = System.getProperty(USR_HOME_KEY); 6784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller tempPath = System.getProperty(TMP_DIR_KEY); 6884bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller 6984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller File file = new File(tempPath + SEP + "log"); 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file.mkdir(); 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes manager.readConfiguration(EnvironmentHelper 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .PropertiesToInputStream(props)); 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler(); 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes r = new LogRecord(Level.CONFIG, "msg"); 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes errSubstituteStream = new NullOutputStream(); 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.setErr(new PrintStream(errSubstituteStream)); 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void initProps() { 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.clear(); 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.level", "FINE"); 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.filter", className 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "$MockFilter"); 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.formatter", className 85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "$MockFormatter"); 86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.encoding", "iso-8859-1"); 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // limit to only two message 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.limit", "1000"); 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // rotation count is 2 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.count", "2"); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // using append mode 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.append", "true"); 9384bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller props.put("java.util.logging.FileHandler.pattern", "%t/log/java%u.test"); 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes protected void tearDown() throws Exception { 97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (null != handler) { 98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 10084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller reset(tempPath + SEP + "log", ""); 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.setErr(err); 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.tearDown(); 103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testConstructor_NoUsrHome() throws IOException { 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.clearProperty(USR_HOME_KEY); 107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler("%h/log_NoUsrHome.log"); 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw NullPointerException"); 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 11484bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller if (homePath != null) { 11584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller System.setProperty(USR_HOME_KEY, homePath); 116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testConstructor_NoTmpDir() throws IOException { 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.clearProperty(TMP_DIR_KEY); 122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler("%t/log_NoTmpDir.log"); 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 12684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller if (tempPath != null) { 12784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller System.setProperty(TMP_DIR_KEY, tempPath); 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 13084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFalse(new File(tempPath, "log_NoTmpDir.log").exists()); 13184bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertTrue(new File(homePath, "log_NoTmpDir.log").exists()); 13284bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller new File(homePath, "log_NoTmpDir.log").delete(); 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testConstructor_NoTmpDir_NoUsrHome() throws IOException { 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.clearProperty(TMP_DIR_KEY); 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.clearProperty(USR_HOME_KEY); 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler("%t/log_NoTmpDir_NoUsrHome.log"); 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw NullPointerException"); 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 14584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller if (tempPath != null) { 14684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller System.setProperty(TMP_DIR_KEY, tempPath); 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 14884bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller if (homePath != null) { 14984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller System.setProperty(USR_HOME_KEY, homePath); 150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testLock() throws Exception { 15584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller FileOutputStream output = new FileOutputStream(tempPath + SEP + "log" 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + SEP + "java1.test.0"); 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h = new FileHandler(); 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h.publish(r); 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h.close(); 16084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath + SEP + "log", "java1.test.0", h 161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getFormatter(), "UTF-8"); 162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes output.close(); 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for void FileHandler() 167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testFileHandler() throws Exception { 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(handler.getEncoding(), "iso-8859-1"); 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(handler.getFilter() instanceof MockFilter); 171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(handler.getFormatter() instanceof MockFormatter); 172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(handler.getLevel(), Level.FINE); 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(handler.getErrorManager()); 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(r); 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // output 3 times, and all records left 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // append mode is true 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 3; i++) { 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler(); 180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(r); 181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 18384bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath + SEP + "log", "java0.test.0", 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LogRecord[] { r, null, r, null, r, null, r }, 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new MockFormatter(), "UTF-8"); 186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testDefaultValue() throws Exception { 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(r); 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.clear(); 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes manager.readConfiguration(EnvironmentHelper 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .PropertiesToInputStream(props)); 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler(); 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(handler.getEncoding()); 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(handler.getFilter()); 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(handler.getFormatter() instanceof XMLFormatter); 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(handler.getLevel(), Level.ALL); 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(handler.getErrorManager()); 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(r); 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // output 3 times, and only one record left 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // default append mode is false 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 3; i++) { 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler(); 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(r); 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 20984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(homePath, "java0.log", new XMLFormatter(), null); 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void assertFileContent(String homepath, String filename, 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Formatter formatter, String encoding) throws Exception { 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFileContent(homepath, filename, new LogRecord[] { r }, formatter, encoding); 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void assertFileContent(String homepath, String filename, 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LogRecord[] lr, Formatter formatter, String encoding) throws Exception { 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String msg = ""; 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // if formatter is null, the file content should be empty 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // else the message should be formatted given records 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (null != formatter) { 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes StringBuffer sb = new StringBuffer(); 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sb.append(formatter.getHead(handler)); 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < lr.length; i++) { 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (null == lr[i] && i < lr.length - 1) { 228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // if one record is null and is not the last record, means 229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // here is 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // output completion point, should output tail, then output 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // head 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // (ready for next output) 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sb.append(formatter.getTail(handler)); 234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sb.append(formatter.getHead(handler)); 235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sb.append(formatter.format(lr[i])); 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes sb.append(formatter.getTail(handler)); 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes msg = sb.toString(); 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes byte[] bytes = new byte[msg.length()]; 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InputStream inputStream = null; 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes inputStream = new BufferedInputStream(new FileInputStream(homepath 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + SEP + filename)); 247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes inputStream.read(bytes); 248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (encoding == null) { 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(msg, new String(bytes)); 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else { 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(msg, new String(bytes, encoding)); 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // assert has reached the end of the file 254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(-1, inputStream.read()); 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (inputStream != null) { 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes inputStream.close(); 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // ignored 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes reset(homepath, filename); 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Does a cleanup of given file 269fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes * 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @param homepath 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * @param filename 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private void reset(String homepath, String filename) { 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File file = null; 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file = new File(homepath + SEP + filename); 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (file.isFile()) { 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file.delete(); 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } else if (file.isDirectory()) { 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes File[] files = file.listFiles(); 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < files.length; i++) { 282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes files[i].delete(); 283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file.delete(); 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes e.printStackTrace(); 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file = new File(homepath + SEP + filename + ".lck"); 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes file.delete(); 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes e.printStackTrace(); 294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testLimitAndCount() throws Exception { 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // very small limit value, count=2 300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // output, rename current output file to the second generation file 301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // close it and open a new file as rotation output 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler("%t/testLimitCount%g", 1, 2, false); 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(r); 304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 30584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath, "testLimitCount1", handler.getFormatter(), "UTF-8"); 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // very small limit value, count=1 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // output once, rotate(equals to nothing output) 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler("%t/testLimitCount%g", 1, 1, false); 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(r); 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 31284bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath, "testLimitCount0", new LogRecord[0], 313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.getFormatter(), "UTF-8"); 314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case, limit is 60(>2*msg length <3*msg length), append is 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // false 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler("%t/testLimitCount%u", 60, 3, false); 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes LogRecord[] rs = new LogRecord[10]; 319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // batch output twice to test the append mode 320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 5; i++) { 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes rs[i] = new LogRecord(Level.SEVERE, "msg" + i); 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(rs[i]); 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler("%t/testLimitCount%u", 60, 3, false); 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 5; i < 10; i++) { 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes rs[i] = new LogRecord(Level.SEVERE, "msg" + i); 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(rs[i]); 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 33184bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath, "testLimitCount0.1", new LogRecord[] { 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes rs[5], rs[6], rs[7] }, handler.getFormatter(), "UTF-8"); 33384bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath, "testLimitCount0.0", new LogRecord[] { 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes rs[8], rs[9] }, handler.getFormatter(), "UTF-8"); 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // normal case, limit is 60(>2*msg length <3*msg length), append is true 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler("%t/testLimitCount%u", 60, 3, false); 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // batch output twice to test the append mode 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 0; i < 5; i++) { 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes rs[i] = new LogRecord(Level.SEVERE, "msg" + i); 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(rs[i]); 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler("%t/testLimitCount%u", 60, 3, true); 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes for (int i = 5; i < 10; i++) { 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes rs[i] = new LogRecord(Level.SEVERE, "msg" + i); 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(rs[i]); 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 35084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath, "testLimitCount0.2", new LogRecord[] { 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes rs[3], rs[4], null, rs[5] }, handler.getFormatter(), "UTF-8"); 35284bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath, "testLimitCount0.1", new LogRecord[] { 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes rs[6], rs[7], rs[8] }, handler.getFormatter(), "UTF-8"); 35484bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath, "testLimitCount0.0", 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new LogRecord[] { rs[9] }, handler.getFormatter(), "UTF-8"); 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h1 = null; 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h2 = null; 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 36084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller File logDir = new File(tempPath, "log"); 36184bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller reset(tempPath, "log"); 362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes logDir.mkdir(); 36384bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller h1 = new FileHandler("%t/log/a", 0, 1); 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(h1); 36584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller h2 = new FileHandler("%t/log/a", 0, 1, false); 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(h2); 367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1.close(); 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h2.close(); 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 37684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller reset(tempPath, "log"); 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testInvalidProperty() throws Exception { 381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.level", "null"); 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.filter", className 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "$MockFilte"); 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.formatter", className 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "$MockFormatte"); 386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.encoding", "ut"); 387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // limit to only two message 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.limit", "-1"); 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // rotation count is 2 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.count", "-1"); 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // using append mode 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.append", "bad"); 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes manager.readConfiguration(EnvironmentHelper 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .PropertiesToInputStream(props)); 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler(); 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(Level.ALL, handler.getLevel()); 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(handler.getFilter()); 401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(handler.getFormatter() instanceof XMLFormatter); 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNull(handler.getEncoding()); 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes props.put("java.util.logging.FileHandler.pattern", ""); 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes manager.readConfiguration(EnvironmentHelper 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .PropertiesToInputStream(props)); 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler = new FileHandler(); 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("shouldn't open file with empty name"); 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testInvalidParams() throws IOException { 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // %t and %p parsing can add file separator automatically 418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h1 = new FileHandler("%taaa"); 419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1.close(); 42084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller File file = new File(tempPath + SEP + "aaa"); 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(file.exists()); 42284bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller reset(tempPath, "aaa"); 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 42484bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller // On platforms besides Android this test was probably checking a non-existent directory: 42584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller // i.e. when expanded %t/%h would have been a nonexistent path but would have contained 42684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller // multiple names separated by path separators. On Android %h is "/" so this test breaks. 42784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller // Removed for Android. 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // always parse special pattern 42984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller // try { 43084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller // h1 = new FileHandler("%t/%h"); 43184bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller // fail("should throw null exception"); 43284bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller //} catch (FileNotFoundException e) { 43384bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller //} 43484bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1 = new FileHandler("%t%g"); 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1.close(); 43784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller file = new File(tempPath + SEP + "0"); 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(file.exists()); 43984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller reset(tempPath, "0"); 440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1 = new FileHandler("%t%u%g"); 441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1.close(); 44284bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller file = new File(tempPath + SEP + "00"); 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(file.exists()); 44484bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller reset(tempPath, "00"); 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // this is normal case 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1 = new FileHandler("%t/%u%g%%g"); 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1.close(); 44984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller file = new File(tempPath + SEP + "00%g"); 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(file.exists()); 45184bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller reset(tempPath, "00%g"); 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // multi separator has no effect 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1 = new FileHandler("//%t//multi%g"); 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1.close(); 45684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller file = new File(tempPath + SEP + "multi0"); 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(file.exists()); 45884bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller reset(tempPath, "multi0"); 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // bad directory, IOException 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h1 = new FileHandler("%t/baddir/multi%g"); 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IO exception"); 464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 46684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller file = new File(tempPath + SEP + "baddir" + SEP + "multi0"); 467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(file.exists()); 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler(null); 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null exception"); 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(null); 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should not throw NPE"); 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler(null, false); 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw null exception"); 482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (NullPointerException e) { 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // regression test for Harmony-1299 486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler(""); 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // expected 490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler("%t/java%u", 0, 0); 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler("%t/java%u", -1, 1); 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should throw IllegalArgumentException"); 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // set output stream still works, just like super StreamHandler 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSetOutputStream() throws Exception { 50584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller MockFileHandler handler = new MockFileHandler("%t/setoutput.log"); 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.setFormatter(new MockFormatter()); 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(r); 508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ByteArrayOutputStream out = new ByteArrayOutputStream(); 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publicSetOutputStream(out); 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.publish(r); 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handler.close(); 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String msg = new String(out.toByteArray()); 514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Formatter f = handler.getFormatter(); 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertEquals(msg, f.getHead(handler) + f.format(r) + f.getTail(handler)); 51684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath, "setoutput.log", handler.getFormatter(), null); 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Class under test for void FileHandler(String) 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testFileHandlerString() throws Exception { 523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test if unique ids not specified, it will append at the end 524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // no generation number is used 525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h = new FileHandler("%t/log/string"); 526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h2 = new FileHandler("%t/log/string"); 527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h3 = new FileHandler("%t/log/string"); 528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h4 = new FileHandler("%t/log/string"); 529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h.publish(r); 530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h2.publish(r); 531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h3.publish(r); 532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h4.publish(r); 533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h.close(); 534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h2.close(); 535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h3.close(); 536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h4.close(); 53784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath + SEP + "log", "string", h.getFormatter(), "UTF-8"); 53884bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath + SEP + "log", "string.1", h.getFormatter(), "UTF-8"); 53984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath + SEP + "log", "string.2", h.getFormatter(), "UTF-8"); 54084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath + SEP + "log", "string.3", h.getFormatter(), "UTF-8"); 541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // default is append mode 543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h6 = new FileHandler("%t/log/string%u.log"); 544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h6.publish(r); 545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h6.close(); 546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h7 = new FileHandler("%t/log/string%u.log"); 547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h7.publish(r); 548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h7.close(); 549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 55084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath + SEP + "log", "string0.log", h 551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getFormatter(), "UTF-8"); 552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("should assertion failed"); 553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Error e) { 554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 55584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller File file = new File(tempPath + SEP + "log"); 556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(file.list().length <= 2); 557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // test unique ids 559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h8 = new FileHandler("%t/log/%ustring%u.log"); 560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h8.publish(r); 561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes FileHandler h9 = new FileHandler("%t/log/%ustring%u.log"); 562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h9.publish(r); 563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h9.close(); 564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes h8.close(); 56584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath + SEP + "log", "0string0.log", h 566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getFormatter(), "UTF-8"); 56784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller assertFileContent(tempPath + SEP + "log", "1string1.log", h 568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes .getFormatter(), "UTF-8"); 56984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller file = new File(tempPath + SEP + "log"); 570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue(file.list().length <= 2); 571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEmptyPattern_3params() throws SecurityException, 574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes IOException { 575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // regression HARMONY-2421 576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler(new String(), 1, 1); 578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected an IllegalArgumentException"); 579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEmptyPattern_2params() throws SecurityException, 585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes IOException { 586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // regression HARMONY-2421 587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler(new String(), true); 589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected an IllegalArgumentException"); 590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testEmptyPattern_4params() throws SecurityException, 596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes IOException { 597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // regression HARMONY-2421 598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new FileHandler(new String(), 1, 1, true); 600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected an IllegalArgumentException"); 601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // Expected 603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /* 607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * mock classes 608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class MockFilter implements Filter { 610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean isLoggable(LogRecord record) { 611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return !record.getMessage().equals("false"); 612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class MockFormatter extends Formatter { 616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String format(LogRecord r) { 617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (null == r) { 618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return ""; 619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return r.getMessage() + " by MockFormatter\n"; 621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String getTail(Handler h) { 624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return "tail\n"; 625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public String getHead(Handler h) { 628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return "head\n"; 629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static class MockFileHandler extends FileHandler { 633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MockFileHandler() throws IOException { 634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(); 635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public MockFileHandler(String pattern) throws IOException { 638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(pattern); 639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void publicSetOutputStream(OutputStream stream) { 642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super.setOutputStream(stream); 643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 646