/* * ALMA - Atacama Large Millimiter Array * (c) European Southern Observatory, 2002 * Copyright by ESO (in the framework of the ALMA collaboration), * All rights reserved * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */ package alma.acs.logging; import java.io.PrintStream; import java.util.logging.Level; import alma.ACSErrTypeCommon.wrappers.AcsJIllegalArgumentEx; import alma.AcsLogLevels.ALERT_NAME; import alma.AcsLogLevels.ALERT_VAL; import alma.AcsLogLevels.CRITICAL_NAME; import alma.AcsLogLevels.CRITICAL_VAL; import alma.AcsLogLevels.DEBUG_NAME; import alma.AcsLogLevels.DEBUG_VAL; import alma.AcsLogLevels.DELOUSE_NAME; import alma.AcsLogLevels.DELOUSE_VAL; import alma.AcsLogLevels.EMERGENCY_NAME; import alma.AcsLogLevels.EMERGENCY_VAL; import alma.AcsLogLevels.ERROR_NAME; import alma.AcsLogLevels.ERROR_VAL; import alma.AcsLogLevels.INFO_NAME; import alma.AcsLogLevels.INFO_VAL; import alma.AcsLogLevels.NOTICE_NAME; import alma.AcsLogLevels.NOTICE_VAL; import alma.AcsLogLevels.OFF_NAME; import alma.AcsLogLevels.OFF_VAL; import alma.AcsLogLevels.TRACE_NAME; import alma.AcsLogLevels.TRACE_VAL; import alma.AcsLogLevels.WARNING_NAME; import alma.AcsLogLevels.WARNING_VAL; import alma.acs.logging.level.AcsLogLevelDefinition; import alma.acs.util.StringOutputStream; /** * * @author Matej Sekoranja (matej.sekoranja@cosylab.com) * *Tests the AcsLogLevel */ public class AcsLogLevelTest extends junit.framework.TestCase { public AcsLogLevelTest() { super("AcsLogLevelTest"); } /** * Test AcsLogLevel Mapping of levels. * {@link AcsLogLevel} stands between the JDK-defined {@link Level} which it inherits from, * and the "core" level integer constants defined in the ACS logging system, given in {@link ACSCoreLevel}. * Conversion from and to core levels is done separately in test {@link #testACSCoreLevels()}. */ public void testLevelMapping() { // ACS-level to ACS-level assertSame(AcsLogLevel.TRACE, AcsLogLevel.getNativeLevel(AcsLogLevel.TRACE)); assertSame(AcsLogLevel.WARNING, AcsLogLevel.getNativeLevel(AcsLogLevel.WARNING)); assertNotSame(AcsLogLevel.getNativeLevel(AcsLogLevel.WARNING), AcsLogLevel.TRACE); // JDK-Level to ACS-level assertSame(AcsLogLevel.EMERGENCY, AcsLogLevel.getNativeLevel(Level.SEVERE)); assertSame(AcsLogLevel.WARNING, AcsLogLevel.getNativeLevel(Level.WARNING)); assertSame(AcsLogLevel.INFO, AcsLogLevel.getNativeLevel(Level.INFO)); assertSame(AcsLogLevel.DEBUG, AcsLogLevel.getNativeLevel(Level.CONFIG)); assertSame(AcsLogLevel.DEBUG, AcsLogLevel.getNativeLevel(Level.FINE)); assertSame(AcsLogLevel.DELOUSE, AcsLogLevel.getNativeLevel(Level.FINER)); assertSame(AcsLogLevel.TRACE, AcsLogLevel.getNativeLevel(Level.FINEST)); assertSame(AcsLogLevel.TRACE, AcsLogLevel.getNativeLevel(Level.ALL)); assertSame(AcsLogLevel.OFF, AcsLogLevel.getNativeLevel(Level.OFF)); // some repetitions to test lookup assertSame(AcsLogLevel.TRACE, AcsLogLevel.getNativeLevel(AcsLogLevel.TRACE)); assertSame(AcsLogLevel.WARNING, AcsLogLevel.getNativeLevel(AcsLogLevel.WARNING)); assertNotSame(AcsLogLevel.getNativeLevel(AcsLogLevel.WARNING), AcsLogLevel.TRACE); assertSame(AcsLogLevel.EMERGENCY, AcsLogLevel.getNativeLevel(Level.SEVERE)); assertSame(AcsLogLevel.WARNING, AcsLogLevel.getNativeLevel(Level.WARNING)); assertSame(AcsLogLevel.INFO, AcsLogLevel.getNativeLevel(Level.INFO)); // compare expected and actual levels assertEquals(300, AcsLogLevel.getNativeLevel(AcsLogLevel.ALL).intValue()); assertEquals(300, AcsLogLevel.getNativeLevel(AcsLogLevel.TRACE).intValue()); assertEquals(400, AcsLogLevel.getNativeLevel(AcsLogLevel.DELOUSE).intValue()); assertEquals(700, AcsLogLevel.getNativeLevel(AcsLogLevel.DEBUG).intValue()); assertEquals(800, AcsLogLevel.getNativeLevel(AcsLogLevel.INFO).intValue()); assertEquals(801, AcsLogLevel.getNativeLevel(AcsLogLevel.NOTICE).intValue()); assertEquals(900, AcsLogLevel.getNativeLevel(AcsLogLevel.WARNING).intValue()); assertEquals(901, AcsLogLevel.getNativeLevel(AcsLogLevel.ERROR).intValue()); assertEquals(902, AcsLogLevel.getNativeLevel(AcsLogLevel.CRITICAL).intValue()); assertEquals(903, AcsLogLevel.getNativeLevel(AcsLogLevel.ALERT).intValue()); assertEquals(1000, AcsLogLevel.getNativeLevel(AcsLogLevel.EMERGENCY).intValue()); } /** * Test AcsLogLevel Entry names. */ public void testLevelEntryNames() { // test some assertEquals("Trace", AcsLogLevel.TRACE.getEntryName()); assertEquals("Delouse", AcsLogLevel.DELOUSE.getEntryName()); assertEquals("Debug", AcsLogLevel.DEBUG.getEntryName()); assertEquals("Warning", AcsLogLevel.WARNING.getEntryName()); assertEquals("Info", AcsLogLevel.INFO.getEntryName()); assertEquals("Notice", AcsLogLevel.NOTICE.getEntryName()); assertEquals("Error", AcsLogLevel.ERROR.getEntryName()); assertEquals("Critical", AcsLogLevel.CRITICAL.getEntryName()); assertEquals("Alert", AcsLogLevel.ALERT.getEntryName()); assertEquals("Emergency", AcsLogLevel.EMERGENCY.getEntryName()); assertEquals("TRACE", AcsLogLevel.TRACE.getName()); assertEquals("DELOUSE", AcsLogLevel.DELOUSE.getName()); assertEquals("DEBUG", AcsLogLevel.DEBUG.getName()); assertEquals("INFO", AcsLogLevel.INFO.getName()); assertEquals("NOTICE", AcsLogLevel.NOTICE.getName()); assertEquals("WARNING", AcsLogLevel.WARNING.getName()); assertEquals("ERROR", AcsLogLevel.ERROR.getName()); assertEquals("CRITICAL", AcsLogLevel.CRITICAL.getName()); assertEquals("ALERT", AcsLogLevel.ALERT.getName()); assertEquals("EMERGENCY", AcsLogLevel.EMERGENCY.getName()); } /** * Tests the encapsulation and conversion between the JDK-Logger-like levels used inside Java, * and the ACS-levels defined as IDL constants and enum {@link AcsLogLevelDefinition} * that are used for communication outside of the JVM. */ public void testAcsCoreLevels() throws Exception { // Checks that our loglevel-enum correctly encapsulates the IDL-defined constants assertEquals(TRACE_VAL.value, AcsLogLevelDefinition.TRACE.value); assertEquals(DELOUSE_VAL.value, AcsLogLevelDefinition.DELOUSE.value); assertEquals(DEBUG_VAL.value, AcsLogLevelDefinition.DEBUG.value); assertEquals(INFO_VAL.value, AcsLogLevelDefinition.INFO.value); assertEquals(NOTICE_VAL.value, AcsLogLevelDefinition.NOTICE.value); assertEquals(WARNING_VAL.value, AcsLogLevelDefinition.WARNING.value); assertEquals(ERROR_VAL.value, AcsLogLevelDefinition.ERROR.value); assertEquals(CRITICAL_VAL.value, AcsLogLevelDefinition.CRITICAL.value); assertEquals(ALERT_VAL.value, AcsLogLevelDefinition.ALERT.value); assertEquals(EMERGENCY_VAL.value, AcsLogLevelDefinition.EMERGENCY.value); assertEquals(OFF_VAL.value, AcsLogLevelDefinition.OFF.value); assertEquals("Number of log levels has changed, need to update this test.", 11, AcsLogLevelDefinition.values().length); // check integer value to enum conversion assertSame(AcsLogLevelDefinition.TRACE, AcsLogLevelDefinition.fromInteger(TRACE_VAL.value)); assertSame(AcsLogLevelDefinition.DELOUSE, AcsLogLevelDefinition.fromInteger(DELOUSE_VAL.value)); assertSame(AcsLogLevelDefinition.DEBUG, AcsLogLevelDefinition.fromInteger(DEBUG_VAL.value)); assertSame(AcsLogLevelDefinition.INFO, AcsLogLevelDefinition.fromInteger(INFO_VAL.value)); assertSame(AcsLogLevelDefinition.NOTICE, AcsLogLevelDefinition.fromInteger(NOTICE_VAL.value)); assertSame(AcsLogLevelDefinition.WARNING, AcsLogLevelDefinition.fromInteger(WARNING_VAL.value)); assertSame(AcsLogLevelDefinition.ERROR, AcsLogLevelDefinition.fromInteger(ERROR_VAL.value)); assertSame(AcsLogLevelDefinition.CRITICAL, AcsLogLevelDefinition.fromInteger(CRITICAL_VAL.value)); assertSame(AcsLogLevelDefinition.ALERT, AcsLogLevelDefinition.fromInteger(ALERT_VAL.value)); assertSame(AcsLogLevelDefinition.EMERGENCY, AcsLogLevelDefinition.fromInteger(EMERGENCY_VAL.value)); assertSame(AcsLogLevelDefinition.OFF, AcsLogLevelDefinition.fromInteger(OFF_VAL.value)); try { AcsLogLevelDefinition.fromInteger(0); fail("undefined log level not allowed."); } catch (AcsJIllegalArgumentEx ex) { // good } try { AcsLogLevelDefinition.fromInteger(Integer.MAX_VALUE); fail("undefined log level not allowed."); } catch (AcsJIllegalArgumentEx ex) { // good assertEquals("val", ex.getVariable()); assertEquals(String.valueOf(Integer.MAX_VALUE), ex.getValue()); } // check name to enum conversion assertSame(AcsLogLevelDefinition.TRACE, AcsLogLevelDefinition.fromName(TRACE_NAME.value)); assertSame(AcsLogLevelDefinition.DELOUSE, AcsLogLevelDefinition.fromName(DELOUSE_NAME.value)); assertSame(AcsLogLevelDefinition.DEBUG, AcsLogLevelDefinition.fromName(DEBUG_NAME.value)); assertSame(AcsLogLevelDefinition.INFO, AcsLogLevelDefinition.fromName(INFO_NAME.value)); assertSame(AcsLogLevelDefinition.NOTICE, AcsLogLevelDefinition.fromName(NOTICE_NAME.value)); assertSame(AcsLogLevelDefinition.WARNING, AcsLogLevelDefinition.fromName(WARNING_NAME.value)); assertSame(AcsLogLevelDefinition.ERROR, AcsLogLevelDefinition.fromName(ERROR_NAME.value)); assertSame(AcsLogLevelDefinition.CRITICAL, AcsLogLevelDefinition.fromName(CRITICAL_NAME.value)); assertSame(AcsLogLevelDefinition.ALERT, AcsLogLevelDefinition.fromName(ALERT_NAME.value)); assertSame(AcsLogLevelDefinition.EMERGENCY, AcsLogLevelDefinition.fromName(EMERGENCY_NAME.value)); assertSame(AcsLogLevelDefinition.OFF, AcsLogLevelDefinition.fromName(OFF_NAME.value)); try { AcsLogLevelDefinition.fromName(null); fail("null log level name not allowed."); } catch (AcsJIllegalArgumentEx ex) { // good } try { AcsLogLevelDefinition.fromName(""); fail("empty log level name not allowed."); } catch (AcsJIllegalArgumentEx ex) { // good } try { AcsLogLevelDefinition.fromName(" " + TRACE_NAME.value); fail("whitespace in log level name not allowed."); } catch (AcsJIllegalArgumentEx ex) { // good } try { AcsLogLevelDefinition.fromName("hmpfgrnzlsm"); fail("illegal log level name not allowed."); } catch (AcsJIllegalArgumentEx ex) { // good } // test the next-level method that should only be used by other tests assertSame(AcsLogLevelDefinition.DELOUSE, AcsLogLevelDefinition.TRACE.getNextHigherLevel()); assertSame(AcsLogLevelDefinition.ERROR, AcsLogLevelDefinition.WARNING.getNextHigherLevel()); // values 6 -> 8 assertNull(AcsLogLevelDefinition.EMERGENCY.getNextHigherLevel()); assertNull(AcsLogLevelDefinition.OFF.getNextHigherLevel()); // AcsLogLevel (which extends/overwrites some of the JDK log Levels) each maps to exactly one AcsLogLevelDefinition enum assertSame(AcsLogLevelDefinition.TRACE, AcsLogLevel.TRACE.getAcsLevel()); assertSame(AcsLogLevelDefinition.DELOUSE, AcsLogLevel.DELOUSE.getAcsLevel()); assertSame(AcsLogLevelDefinition.DEBUG, AcsLogLevel.DEBUG.getAcsLevel()); assertSame(AcsLogLevelDefinition.INFO, AcsLogLevel.INFO.getAcsLevel()); assertSame(AcsLogLevelDefinition.NOTICE, AcsLogLevel.NOTICE.getAcsLevel()); assertSame(AcsLogLevelDefinition.WARNING, AcsLogLevel.WARNING.getAcsLevel()); assertSame(AcsLogLevelDefinition.ERROR, AcsLogLevel.ERROR.getAcsLevel()); assertSame(AcsLogLevelDefinition.CRITICAL, AcsLogLevel.CRITICAL.getAcsLevel()); assertSame(AcsLogLevelDefinition.ALERT, AcsLogLevel.ALERT.getAcsLevel()); assertSame(AcsLogLevelDefinition.EMERGENCY, AcsLogLevel.EMERGENCY.getAcsLevel()); assertSame(AcsLogLevelDefinition.OFF, AcsLogLevel.OFF.getAcsLevel()); // ACS-core-level to ACS-Level assertSame(AcsLogLevel.TRACE, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.TRACE)); assertSame(AcsLogLevel.DELOUSE, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.DELOUSE)); assertSame(Level.FINE, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.DEBUG)); assertSame(AcsLogLevel.INFO, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.INFO)); assertSame(AcsLogLevel.NOTICE, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.NOTICE)); assertSame(AcsLogLevel.WARNING, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.WARNING)); assertSame(AcsLogLevel.ERROR, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.ERROR)); assertSame(AcsLogLevel.CRITICAL, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.CRITICAL)); assertSame(AcsLogLevel.ALERT, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.ALERT)); assertSame(AcsLogLevel.EMERGENCY, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.EMERGENCY)); assertSame(AcsLogLevel.OFF, AcsLogLevel.getLowestMatchingJdkLevel(AcsLogLevelDefinition.OFF)); } public void testPrintMappings() { StringOutputStream stringOut = new StringOutputStream(); AcsLogLevel.printMappings(new PrintStream(stringOut)); System.out.println("Printed level mappings:\n" + stringOut); String sep = System.getProperty("line.separator"); String expected = "Trace" + '\t' + "300" + '\t' + "1" + sep + "Delouse" + '\t' + "400" + '\t' + "2" + sep + "Debug" + '\t' + "700" + '\t' + "3" + sep + "Info" + '\t' + "800" + '\t' + "4" + sep + "Notice" + '\t' + "801" + '\t' + "5" + sep + "Warning" + '\t' + "900" + '\t' + "6" + sep + "Error" + '\t' + "901" + '\t' + "8" + sep + "Critical" + '\t' + "902" + '\t' + "9" + sep + "Alert" + '\t' + "903" + '\t' + "10" + sep + "Emergency" + '\t' + "1000" + '\t' + "11" + sep + "Off" + '\t' + "2147483647" + '\t' + "99" + sep; assertEquals(expected, stringOut.toString()); } }