blob: 0f33e78d03a1bd8633f7d934b79bd8642afb8f98 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*
*/
package org.apache.qpid.server.jmx.mbeans;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Matchers.anyString;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.TabularData;
import junit.framework.TestCase;
import org.apache.qpid.management.common.mbeans.LoggingManagement;
import org.apache.qpid.server.jmx.ManagedObjectRegistry;
import org.apache.qpid.server.logging.log4j.LoggingManagementFacade;
public class LoggingManagementMBeanTest extends TestCase
{
private static final String TEST_LEVEL1 = "LEVEL1";
private static final String TEST_LEVEL2 = "LEVEL2";
private LoggingManagementMBean _loggingMBean;
private LoggingManagementFacade _mockLoggingFacade;
private ManagedObjectRegistry _mockManagedObjectRegistry;
@Override
protected void setUp() throws Exception
{
_mockLoggingFacade = mock(LoggingManagementFacade.class);
final List<String> listOfLevels = new ArrayList<String>()
{{
add(TEST_LEVEL1);
add(TEST_LEVEL2);
}};
when(_mockLoggingFacade.getAvailableLoggerLevels()).thenReturn(listOfLevels);
_mockManagedObjectRegistry = mock(ManagedObjectRegistry.class);
_loggingMBean = new LoggingManagementMBean(_mockLoggingFacade, _mockManagedObjectRegistry);
}
public void testMBeanRegistersItself() throws Exception
{
LoggingManagementMBean connectionMBean = new LoggingManagementMBean(_mockLoggingFacade, _mockManagedObjectRegistry);
verify(_mockManagedObjectRegistry).registerObject(connectionMBean);
}
public void testLog4jLogWatchInterval() throws Exception
{
final Integer value = 5000;
when(_mockLoggingFacade.getLog4jLogWatchInterval()).thenReturn(value);
assertEquals("Unexpected watch interval",value, _loggingMBean.getLog4jLogWatchInterval());
}
public void testGetAvailableLoggerLevels() throws Exception
{
String[] actualLevels = _loggingMBean.getAvailableLoggerLevels();
assertEquals(3, actualLevels.length);
assertEquals(TEST_LEVEL1, actualLevels[0]);
assertEquals(TEST_LEVEL2, actualLevels[1]);
assertEquals(LoggingManagementMBean.INHERITED_PSUEDO_LOG_LEVEL, actualLevels[2]);
}
public void testViewEffectiveRuntimeLoggerLevels() throws Exception
{
Map<String, String> loggerLevels = new TreeMap<String, String>();
loggerLevels.put("a.b.D", TEST_LEVEL2);
loggerLevels.put("a.b.C", TEST_LEVEL1);
loggerLevels.put("a.b.c.E", TEST_LEVEL2);
when(_mockLoggingFacade.retrieveRuntimeLoggersLevels()).thenReturn(loggerLevels );
TabularData table = _loggingMBean.viewEffectiveRuntimeLoggerLevels();
assertEquals(3, table.size());
final CompositeData row1 = table.get(new String[] {"a.b.C"} );
final CompositeData row2 = table.get(new String[] {"a.b.D"} );
final CompositeData row3 = table.get(new String[] {"a.b.c.E"} );
assertChannelRow(row1, "a.b.C", TEST_LEVEL1);
assertChannelRow(row2, "a.b.D", TEST_LEVEL2);
assertChannelRow(row3, "a.b.c.E", TEST_LEVEL2);
}
public void testGetRuntimeRootLoggerLevel() throws Exception
{
when(_mockLoggingFacade.retrieveRuntimeRootLoggerLevel()).thenReturn(TEST_LEVEL1);
assertEquals(TEST_LEVEL1, _loggingMBean.getRuntimeRootLoggerLevel());
}
public void testSetRuntimeRootLoggerLevel() throws Exception
{
_loggingMBean.setRuntimeRootLoggerLevel(TEST_LEVEL1);
verify(_mockLoggingFacade).setRuntimeRootLoggerLevel(TEST_LEVEL1);
}
public void testSetRuntimeRootLoggerLevelWhenLoggingLevelUnknown() throws Exception
{
boolean result = _loggingMBean.setRuntimeRootLoggerLevel("unknown");
assertFalse(result);
verify(_mockLoggingFacade, never()).setRuntimeRootLoggerLevel("unknown");
}
public void testSetRuntimeRootLoggerLevelWhenLoggingLevelInherited() throws Exception
{
boolean result = _loggingMBean.setRuntimeRootLoggerLevel(LoggingManagementMBean.INHERITED_PSUEDO_LOG_LEVEL);
assertFalse(result);
verify(_mockLoggingFacade, never()).setRuntimeRootLoggerLevel(anyString());
}
public void testSetRuntimeLoggerLevel() throws Exception
{
_loggingMBean.setRuntimeLoggerLevel("a.b.c.D", TEST_LEVEL1);
verify(_mockLoggingFacade).setRuntimeLoggerLevel("a.b.c.D", TEST_LEVEL1);
}
public void testSetRuntimeLoggerLevelWhenLoggingLevelUnknown() throws Exception
{
boolean result = _loggingMBean.setRuntimeLoggerLevel("a.b.c.D", "unknown");
assertFalse(result);
verify(_mockLoggingFacade, never()).setRuntimeLoggerLevel(anyString(), anyString());
}
public void testSetRuntimeLoggerLevelWhenLoggingLevelInherited() throws Exception
{
boolean result = _loggingMBean.setRuntimeLoggerLevel("a.b.c.D", LoggingManagementMBean.INHERITED_PSUEDO_LOG_LEVEL);
assertTrue(result);
verify(_mockLoggingFacade).setRuntimeLoggerLevel("a.b.c.D", null);
}
public void testViewEffectiveConfigFileLoggerLevels() throws Exception
{
Map<String, String> loggerLevels = new TreeMap<String, String>();
loggerLevels.put("a.b.D", "level2");
loggerLevels.put("a.b.C", TEST_LEVEL1);
loggerLevels.put("a.b.c.E", "level2");
when(_mockLoggingFacade.retrieveConfigFileLoggersLevels()).thenReturn(loggerLevels );
TabularData table = _loggingMBean.viewConfigFileLoggerLevels();
assertEquals(3, table.size());
final CompositeData row1 = table.get(new String[] {"a.b.C"} );
final CompositeData row2 = table.get(new String[] {"a.b.D"} );
final CompositeData row3 = table.get(new String[] {"a.b.c.E"} );
assertChannelRow(row1, "a.b.C", TEST_LEVEL1);
assertChannelRow(row2, "a.b.D", TEST_LEVEL2);
assertChannelRow(row3, "a.b.c.E", TEST_LEVEL2);
}
public void testGetConfigFileRootLoggerLevel() throws Exception
{
when(_mockLoggingFacade.retrieveConfigFileRootLoggerLevel()).thenReturn(TEST_LEVEL1);
assertEquals(TEST_LEVEL1, _loggingMBean.getConfigFileRootLoggerLevel());
}
public void testSetConfigFileRootLoggerLevel() throws Exception
{
when(_mockLoggingFacade.getAvailableLoggerLevels()).thenReturn(Collections.singletonList(TEST_LEVEL1));
_loggingMBean.setConfigFileRootLoggerLevel(TEST_LEVEL1);
verify(_mockLoggingFacade).setConfigFileRootLoggerLevel(TEST_LEVEL1);
}
public void testSetConfigFileRootLoggerLevelWhenLoggingLevelUnknown() throws Exception
{
when(_mockLoggingFacade.getAvailableLoggerLevels()).thenReturn(Collections.singletonList(TEST_LEVEL1));
boolean result = _loggingMBean.setConfigFileRootLoggerLevel("unknown");
assertFalse(result);
verify(_mockLoggingFacade, never()).setConfigFileRootLoggerLevel("unknown");
}
public void testSetConfigFileRootLoggerLevelWhenLoggingLevelInherited() throws Exception
{
when(_mockLoggingFacade.getAvailableLoggerLevels()).thenReturn(Collections.singletonList(TEST_LEVEL1));
boolean result = _loggingMBean.setConfigFileRootLoggerLevel(LoggingManagementMBean.INHERITED_PSUEDO_LOG_LEVEL);
assertFalse(result);
verify(_mockLoggingFacade, never()).setConfigFileRootLoggerLevel(anyString());
}
public void testSetConfigFileLoggerLevel() throws Exception
{
when(_mockLoggingFacade.getAvailableLoggerLevels()).thenReturn(Collections.singletonList(TEST_LEVEL1));
_loggingMBean.setConfigFileLoggerLevel("a.b.c.D", TEST_LEVEL1);
verify(_mockLoggingFacade).setConfigFileLoggerLevel("a.b.c.D", TEST_LEVEL1);
}
public void testSetConfigFileLoggerLevelWhenLoggingLevelUnknown() throws Exception
{
when(_mockLoggingFacade.getAvailableLoggerLevels()).thenReturn(Collections.singletonList(TEST_LEVEL1));
boolean result = _loggingMBean.setConfigFileLoggerLevel("a.b.c.D", "unknown");
assertFalse(result);
verify(_mockLoggingFacade, never()).setConfigFileLoggerLevel("a.b.c.D", "unknown");
}
public void testSetConfigFileLoggerLevelWhenLoggingLevelInherited() throws Exception
{
when(_mockLoggingFacade.getAvailableLoggerLevels()).thenReturn(Collections.singletonList(TEST_LEVEL1));
boolean result = _loggingMBean.setConfigFileLoggerLevel("a.b.c.D", LoggingManagementMBean.INHERITED_PSUEDO_LOG_LEVEL);
assertTrue(result);
verify(_mockLoggingFacade).setConfigFileLoggerLevel("a.b.c.D", null);
}
public void testReloadConfigFile() throws Exception
{
_loggingMBean.reloadConfigFile();
verify(_mockLoggingFacade).reload();
}
private void assertChannelRow(final CompositeData row, String logger, String level)
{
assertNotNull("No row for " + logger, row);
assertEquals("Unexpected logger name", logger, row.get(LoggingManagement.LOGGER_NAME));
assertEquals("Unexpected level", level, row.get(LoggingManagement.LOGGER_LEVEL));
}
}