1021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson/*
2021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more
3021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * contributor license agreements.  See the NOTICE file distributed with
4021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * this work for additional information regarding copyright ownership.
5021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0
6021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * (the "License"); you may not use this file except in compliance with
7021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * the License.  You may obtain a copy of the License at
8021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson *
9021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
10021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson *
11021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * Unless required by applicable law or agreed to in writing, software
12021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
13021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * See the License for the specific language governing permissions and
15021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson * limitations under the License.
16021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson */
17021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
18021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonpackage libcore.java.util.logging;
19021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
20021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.io.ByteArrayInputStream;
21021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.io.ByteArrayOutputStream;
22021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.io.IOException;
23021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.io.InputStream;
24021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.Properties;
25021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.Filter;
26021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.Handler;
27021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.Level;
28021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.LogManager;
29021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.LogRecord;
30021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport java.util.logging.MemoryHandler;
31021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonimport junit.framework.TestCase;
32021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
33021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilsonpublic class OldMemoryHandlerTest extends TestCase {
34021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
35021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    final static LogManager manager = LogManager.getLogManager();
36021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    final static Properties props = new Properties();
37021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    final static String baseClassName = OldMemoryHandlerTest.class.getName();
38021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    MemoryHandler handler;
39021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
40021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    @Override protected void setUp() throws Exception {
41021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        super.setUp();
42021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        manager.reset();
43021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        initProps();
44021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        manager.readConfiguration(propertiesToInputStream(props));
45021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        handler = new MemoryHandler();
46021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
47021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
48021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    @Override protected void tearDown() throws Exception {
49021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        super.tearDown();
50021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        manager.readConfiguration();
51021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.clear();
52021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
53021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
54021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static InputStream propertiesToInputStream(Properties p) throws IOException {
55021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        ByteArrayOutputStream bos = new ByteArrayOutputStream();
56021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        p.store(bos, "");
57021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        return new ByteArrayInputStream(bos.toByteArray());
58021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
59021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
60021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    private void initProps() {
61021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.MemoryHandler.level", "FINE");
62021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.MemoryHandler.filter", baseClassName + "$MockFilter");
63021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.MemoryHandler.size", "2");
64021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.MemoryHandler.push", "WARNING");
65021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.MemoryHandler.target", baseClassName + "$MockHandler");
66021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        props.put("java.util.logging.MemoryHandler.formatter", baseClassName + "$MockFormatter");
67021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
68021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
69021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testIsLoggable() {
70021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(handler.isLoggable(new LogRecord(Level.INFO, "1")));
71021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(handler.isLoggable(new LogRecord(Level.WARNING, "2")));
72021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertTrue(handler.isLoggable(new LogRecord(Level.SEVERE, "3")));
73021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
74021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
75021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public void testMemoryHandler() throws IOException {
76021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNotNull("Filter should not be null", handler.getFilter());
77021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNotNull("Formatter should not be null", handler.getFormatter());
78021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNull("character encoding should be null", handler.getEncoding());
79021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertNotNull("ErrorManager should not be null", handler.getErrorManager());
80021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("Level should be FINE", Level.FINE, handler.getLevel());
81021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        assertEquals("Level should be WARNING", Level.WARNING, handler.getPushLevel());
82021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
83021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
84021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static class MockFilter implements Filter {
85021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public boolean isLoggable(LogRecord record) {
86021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson            return !record.getMessage().equals("false");
87021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        }
88021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
89021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson
90021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    public static class MockHandler extends Handler {
91021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public void close() {}
92021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public void flush() {}
93021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson        public void publish(LogRecord record) {}
94021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson    }
95021f5003db85c4fbdc597aa7bb8fbb1e1dc9ab6bJesse Wilson}
96