You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2015/06/15 17:43:54 UTC
svn commit: r1685599 [2/3] - in /qpid/java/trunk:
bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/
broker-core/src/main/java/org/apache/qpid/server/logging/
broker-core/src/main/java/org/apache/qpid/server/model/ broker-core/src/ma...
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java Mon Jun 15 15:43:53 2015
@@ -1150,7 +1150,7 @@ public abstract class AbstractQueue<X ex
{
if (action != null || (exclusiveSub == null && _queueRunner.isIdle()))
{
- Subject.doAs(SecurityManager.getSystemTaskSubject("Immediate Delivery"),
+ Subject.doAs(SecurityManager.getSystemTaskSubject("Immediate Delivery", _virtualHost.getPrincipal()),
new PrivilegedAction<Void>()
{
@Override
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRunner.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRunner.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRunner.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/QueueRunner.java Mon Jun 15 15:43:53 2015
@@ -66,7 +66,7 @@ public class QueueRunner implements Runn
{
if(_scheduled.compareAndSet(SCHEDULED,RUNNING))
{
- Subject.doAs(SecurityManager.getSystemTaskSubject("Queue Delivery"), new PrivilegedAction<Object>()
+ Subject.doAs(SecurityManager.getSystemTaskSubject("Queue Delivery", _queue.getVirtualHost().getPrincipal()), new PrivilegedAction<Object>()
{
@Override
public Object run()
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/security/SecurityManager.java Mon Jun 15 15:43:53 2015
@@ -59,6 +59,8 @@ import org.apache.qpid.server.model.Stat
import org.apache.qpid.server.model.User;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.model.VirtualHostAlias;
+import org.apache.qpid.server.model.VirtualHostLogger;
+import org.apache.qpid.server.model.VirtualHostLoggerFilter;
import org.apache.qpid.server.model.VirtualHostNode;
import org.apache.qpid.server.protocol.AMQConnectionModel;
import org.apache.qpid.server.queue.QueueConsumer;
@@ -108,8 +110,24 @@ public class SecurityManager
public static Subject getSystemTaskSubject(String taskName)
{
+ return getSystemSubject(new TaskPrincipal(taskName));
+ }
+
+ public static Subject getSystemTaskSubject(String taskName, Principal principal)
+ {
+ return getSystemSubject(new TaskPrincipal(taskName), principal);
+ }
+
+ private static Subject getSystemSubject(Principal... principals)
+ {
Subject subject = new Subject(false, SYSTEM.getPrincipals(), SYSTEM.getPublicCredentials(), SYSTEM.getPrivateCredentials());
- subject.getPrincipals().add(new TaskPrincipal(taskName));
+ if (principals !=null)
+ {
+ for (Principal principal:principals)
+ {
+ subject.getPrincipals().add(principal);
+ }
+ }
subject.setReadOnly();
return subject;
}
@@ -398,6 +416,7 @@ public class SecurityManager
return Broker.class.isAssignableFrom(category) ||
PreferencesProvider.class.isAssignableFrom(category) ||
BrokerLoggerFilter.class.isAssignableFrom(category) ||
+ VirtualHostAlias.class.isAssignableFrom(category) ||
( !VirtualHostNode.class.isAssignableFrom(category) && getModel().getChildTypes(Broker.class).contains(category));
}
@@ -447,6 +466,11 @@ public class SecurityManager
objectName);
properties = new OperationLoggingDetails(description);
}
+ else if (isVirtualHostType(configuredObjectType))
+ {
+ ConfiguredObject<?> virtualHost = getModel().getAncestor(VirtualHost.class, configuredObject);
+ properties = new ObjectProperties((String)virtualHost.getAttribute(ConfiguredObject.NAME));
+ }
return properties;
}
@@ -489,6 +513,10 @@ public class SecurityManager
{
return ObjectType.BROKER;
}
+ else if (isVirtualHostType(category))
+ {
+ return ObjectType.VIRTUALHOST;
+ }
else if (Group.class.isAssignableFrom(category))
{
return ObjectType.GROUP;
@@ -502,14 +530,6 @@ public class SecurityManager
{
return ObjectType.USER;
}
- else if (VirtualHost.class.isAssignableFrom(category))
- {
- return ObjectType.VIRTUALHOST;
- }
- else if (VirtualHostAlias.class.isAssignableFrom(category))
- {
- return ObjectType.VIRTUALHOST;
- }
else if (Queue.class.isAssignableFrom(category))
{
return ObjectType.QUEUE;
@@ -518,11 +538,6 @@ public class SecurityManager
{
return ObjectType.EXCHANGE;
}
- else if (Connection.class.isAssignableFrom(category))
- {
- // ACCESS VIRTUALHOST
- return ObjectType.VIRTUALHOST;
- }
else if (Session.class.isAssignableFrom(category))
{
// PUBLISH EXCHANGE
@@ -541,6 +556,14 @@ public class SecurityManager
return null;
}
+ private boolean isVirtualHostType(Class<? extends ConfiguredObject> category)
+ {
+ return VirtualHost.class.isAssignableFrom(category) ||
+ VirtualHostLogger.class.isAssignableFrom(category) ||
+ VirtualHostLoggerFilter.class.isAssignableFrom(category) ||
+ Connection.class.isAssignableFrom(category);
+ }
+
public void authoriseUserUpdate(final String userName)
{
AuthenticatedPrincipal principal = getCurrentUser();
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java Mon Jun 15 15:43:53 2015
@@ -21,6 +21,7 @@
package org.apache.qpid.server.virtualhost;
import java.io.File;
+import java.security.Principal;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Collection;
@@ -33,7 +34,6 @@ import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -153,6 +153,7 @@ public abstract class AbstractVirtualHos
private NetworkConnectionScheduler _networkConnectionScheduler;
+ private final VirtualHostPrincipal _principal;
@ManagedAttributeField
private boolean _queue_deadLetterQueueEnabled;
@@ -190,8 +191,9 @@ public abstract class AbstractVirtualHos
private MessageStore _messageStore;
private MessageStoreRecoverer _messageStoreRecoverer;
- private final FileSystemSpaceChecker _fileSystemSpaceChecker = new FileSystemSpaceChecker();
+ private final FileSystemSpaceChecker _fileSystemSpaceChecker;
private int _fileSystemMaxUsagePercent;
+ private Collection<VirtualHostLogger> _virtualHostLoggersToClose;
public AbstractVirtualHost(final Map<String, Object> attributes, VirtualHostNode<?> virtualHostNode)
{
@@ -214,6 +216,8 @@ public abstract class AbstractVirtualHos
_dataDelivered = new StatisticsCounter("bytes-delivered-" + getName());
_messagesReceived = new StatisticsCounter("messages-received-" + getName());
_dataReceived = new StatisticsCounter("bytes-received-" + getName());
+ _principal = new VirtualHostPrincipal(this);
+ _fileSystemSpaceChecker = new FileSystemSpaceChecker();
}
public void onValidate()
@@ -502,6 +506,10 @@ public abstract class AbstractVirtualHos
{
throw new UnsupportedOperationException();
}
+ else if(childClass == VirtualHostLogger.class)
+ {
+ return getObjectFactory().createAsync(childClass, attributes, this);
+ }
throw new IllegalArgumentException("Cannot create a child of class " + childClass.getSimpleName());
}
@@ -852,7 +860,7 @@ public abstract class AbstractVirtualHos
protected ListenableFuture<Void> beforeClose()
{
setState(State.UNAVAILABLE);
-
+ _virtualHostLoggersToClose = new ArrayList(getChildren(VirtualHostLogger.class));
return super.beforeClose();
}
@@ -870,6 +878,8 @@ public abstract class AbstractVirtualHos
_networkConnectionScheduler = null;
}
_eventLogger.message(VirtualHostMessages.CLOSED(getName()));
+
+ stopLogging(_virtualHostLoggersToClose);
}
private void closeMessageStore()
@@ -1375,6 +1385,7 @@ public abstract class AbstractVirtualHos
protected ListenableFuture<Void> doStop()
{
final SettableFuture<Void> returnVal = SettableFuture.create();
+ final List<VirtualHostLogger> loggers = new ArrayList<>(getChildren(VirtualHostLogger.class));
closeChildren().addListener(
new Runnable()
{
@@ -1392,6 +1403,7 @@ public abstract class AbstractVirtualHos
closeMessageStore();
setState(State.STOPPED);
+ stopLogging(loggers);
}
finally
{
@@ -1403,6 +1415,14 @@ public abstract class AbstractVirtualHos
return returnVal;
}
+ private void stopLogging(Collection<VirtualHostLogger> loggers)
+ {
+ for (VirtualHostLogger logger : loggers)
+ {
+ logger.stopLogging();
+ }
+ }
+
@StateTransition( currentState = { State.ACTIVE, State.ERRORED }, desiredState = State.DELETED )
private ListenableFuture<Void> doDelete()
{
@@ -1629,6 +1649,13 @@ public abstract class AbstractVirtualHos
return calculateTotalEnqueuedSize(getQueues());
}
+
+ @Override
+ public Principal getPrincipal()
+ {
+ return _principal;
+ }
+
private long calculateTotalEnqueuedSize(final Collection<AMQQueue<?>> queues)
{
long total = 0;
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/HouseKeepingTask.java Mon Jun 15 15:43:53 2015
@@ -41,7 +41,7 @@ public abstract class HouseKeepingTask i
public HouseKeepingTask(VirtualHost vhost)
{
_name = vhost.getName() + ":" + this.getClass().getSimpleName();
- _subject = SecurityManager.getSystemTaskSubject(_name);
+ _subject = SecurityManager.getSystemTaskSubject(_name, vhost.getPrincipal());
}
final public void run()
Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPrincipal.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPrincipal.java?rev=1685599&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPrincipal.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostPrincipal.java Mon Jun 15 15:43:53 2015
@@ -0,0 +1,67 @@
+/*
+ *
+ * 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.virtualhost;
+
+import java.security.Principal;
+import java.util.Objects;
+
+import org.apache.qpid.server.model.VirtualHost;
+
+public class VirtualHostPrincipal implements Principal
+{
+ private static String VIRTUALHOST_SUBJECT_TEMPLATE = "virtualhost:%s-%s";
+ private final VirtualHost<?,?,?> _virtualHost;
+ private final String _name;
+
+ public VirtualHostPrincipal(VirtualHost<?, ?, ?> virtualHost)
+ {
+ _virtualHost = virtualHost;
+ _name = String.format(VIRTUALHOST_SUBJECT_TEMPLATE, virtualHost.getName(), virtualHost.getId());
+ }
+
+ @Override
+ public String getName()
+ {
+ return _name;
+ }
+
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o)
+ {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass())
+ {
+ return false;
+ }
+
+ VirtualHostPrincipal that = (VirtualHostPrincipal) o;
+ return Objects.equals(_virtualHost, that._virtualHost);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return Objects.hash(_virtualHost);
+ }
+}
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java Mon Jun 15 15:43:53 2015
@@ -20,6 +20,7 @@
*/
package org.apache.qpid.server.virtualhostnode;
+import java.security.Principal;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -59,6 +60,7 @@ import org.apache.qpid.server.txn.DtxReg
import org.apache.qpid.server.virtualhost.ExchangeIsAlternateException;
import org.apache.qpid.server.virtualhost.HouseKeepingTask;
import org.apache.qpid.server.virtualhost.RequiredExchangeException;
+import org.apache.qpid.server.virtualhost.VirtualHostPrincipal;
@ManagedObject( category = false, type = RedirectingVirtualHostImpl.TYPE, register = false )
class RedirectingVirtualHostImpl
@@ -68,6 +70,7 @@ class RedirectingVirtualHostImpl
public static final String TYPE = "REDIRECTOR";
private final StatisticsCounter _messagesDelivered, _dataDelivered, _messagesReceived, _dataReceived;
private final Broker<?> _broker;
+ private final VirtualHostPrincipal _principal;
@ManagedAttributeField
private boolean _queue_deadLetterQueueEnabled;
@@ -108,6 +111,7 @@ class RedirectingVirtualHostImpl
_dataDelivered = new StatisticsCounter("bytes-delivered-" + getName());
_messagesReceived = new StatisticsCounter("messages-received-" + getName());
_dataReceived = new StatisticsCounter("bytes-received-" + getName());
+ _principal = new VirtualHostPrincipal(this);
setState(State.UNAVAILABLE);
}
@@ -532,6 +536,11 @@ class RedirectingVirtualHostImpl
return localAddress;
}
+ @Override
+ public Principal getPrincipal()
+ {
+ return _principal;
+ }
private void throwUnsupportedForRedirector()
{
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerLoggerTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerLoggerTest.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerLoggerTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerLoggerTest.java Mon Jun 15 15:43:53 2015
@@ -33,6 +33,7 @@ import java.util.Map;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
+import ch.qos.logback.core.Context;
import ch.qos.logback.core.read.ListAppender;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.configuration.updater.TaskExecutorImpl;
@@ -78,13 +79,12 @@ public class BrokerLoggerTest extends Qp
_brokerLogger = new AbstractBrokerLogger(attributes, broker)
{
@Override
- public Appender<ILoggingEvent> asAppender()
+ public Appender<ILoggingEvent> asAppender(Context context)
{
return _loggerAppender;
}
};
_brokerLogger.open();
- _loggerAppender.addFilter(_brokerLogger.getCompositeFilter());
}
@Override
@@ -92,14 +92,8 @@ public class BrokerLoggerTest extends Qp
{
try
{
+ _brokerLogger.delete();
_taskExecutor.stopImmediately();
-
- ch.qos.logback.classic.Logger rootLogger =
- (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
-
- _loggerAppender.clearAllFilters();
-
- rootLogger.detachAppender(_loggerAppender);
}
finally
{
@@ -156,7 +150,8 @@ public class BrokerLoggerTest extends Qp
public void testDeleteLogger()
{
- ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
+ ch.qos.logback.classic.Logger rootLogger =
+ (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
assertNotNull("Appender not found when it should have been created", rootLogger.getAppender(_brokerLogger.getName()));
_brokerLogger.delete();
assertEquals("Unexpected state after deletion", State.DELETED, _brokerLogger.getState());
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerNameAndLevelFilterTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerNameAndLevelFilterTest.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerNameAndLevelFilterTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/BrokerNameAndLevelFilterTest.java Mon Jun 15 15:43:53 2015
@@ -24,15 +24,13 @@ import static org.mockito.Mockito.doRetu
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.read.ListAppender;
+import ch.qos.logback.core.filter.Filter;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
import org.apache.qpid.server.configuration.updater.TaskExecutorImpl;
@@ -43,24 +41,16 @@ import org.apache.qpid.server.model.Mode
import org.apache.qpid.server.security.SecurityManager;
import org.apache.qpid.test.utils.QpidTestCase;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
public class BrokerNameAndLevelFilterTest extends QpidTestCase
{
- private Logger _logger = null;
- private Logger _nonQpidLogger = null;
-
private BrokerLogger<?> _brokerLogger;
- private BrokerNameAndLevelFilter<?> _brokerNameAndLevelFilter;
- private ListAppender _loggerAppender;
private TaskExecutor _taskExecutor;
+ private final Broker<?> _broker = mock(Broker.class);
@Override
public void setUp() throws Exception
{
super.setUp();
- _loggerAppender = new ListAppender();
_taskExecutor = new TaskExecutorImpl();
_taskExecutor.start();
@@ -68,54 +58,23 @@ public class BrokerNameAndLevelFilterTes
Model model = BrokerModel.getInstance();
SecurityManager securityManager = mock(SecurityManager.class);
- Broker<?> broker = mock(Broker.class);
- when(broker.getSecurityManager()).thenReturn(securityManager);
- when(broker.getModel()).thenReturn(model);
- doReturn(Broker.class).when(broker).getCategoryClass();
+ when(_broker.getSecurityManager()).thenReturn(securityManager);
+ when(_broker.getModel()).thenReturn(model);
+ doReturn(Broker.class).when(_broker).getCategoryClass();
_brokerLogger = mock(BrokerLogger.class);
when(_brokerLogger.getModel()).thenReturn(model);
when(_brokerLogger.getChildExecutor()).thenReturn(_taskExecutor);
- when(_brokerLogger.getParent(Broker.class)).thenReturn(broker);
+ when(_brokerLogger.getParent(Broker.class)).thenReturn(_broker);
doReturn(BrokerLogger.class).when(_brokerLogger).getCategoryClass();
-
-
- _logger = LoggerFactory.getLogger("org.apache.qpid.server.test");
- _nonQpidLogger = LoggerFactory.getLogger("org.apache.qpid.test");
- }
-
- private void setUpFilterAndAppender(String loggerName, LogLevel logLevel)
- {
- Map<String, Object> attributes = new HashMap<>();
- attributes.put("loggerName", loggerName);
- attributes.put("level", logLevel);
- attributes.put("name", "test");
-
- _brokerNameAndLevelFilter = new BrokerNameAndLevelFilterImplFactory().createInstance(attributes, _brokerLogger);
- _brokerNameAndLevelFilter.open();
- ch.qos.logback.classic.Logger rootLogger =
- (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
- rootLogger.addAppender(_loggerAppender);
- _loggerAppender.setContext(rootLogger.getLoggerContext());
- _loggerAppender.addFilter(_brokerNameAndLevelFilter.asFilter());
- _loggerAppender.addFilter(DenyAllFilter.getInstance());
- }
+ }
@Override
public void tearDown() throws Exception
{
try
{
- _brokerNameAndLevelFilter.close();
_taskExecutor.stopImmediately();
-
- ch.qos.logback.classic.Logger rootLogger =
- (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
-
- _loggerAppender.clearAllFilters();
-
- _loggerAppender.stop();
- rootLogger.detachAppender(_loggerAppender);
}
finally
{
@@ -123,85 +82,64 @@ public class BrokerNameAndLevelFilterTes
}
}
- public void testSetNameOnWildcardFilter() throws Exception
+
+ public void testAsFilter()
{
- setUpFilterAndAppender("org.apache.qpid.server.*", LogLevel.DEBUG);
- _loggerAppender.start();
- _logger.debug("Test1");
- _nonQpidLogger.debug("Test2");
- _loggerAppender.stop();
+ BrokerNameAndLevelFilter<?> filterObject = createFilter("org.apache.qpid", LogLevel.INFO);
- assertLoggedEvent(true, "Test1", _logger.getName(), Level.DEBUG);
- assertLoggedEvent(false, "Test2", _nonQpidLogger.getName(), Level.DEBUG);
+ Filter<ILoggingEvent> filter = filterObject.asFilter();
- try
- {
- _brokerNameAndLevelFilter.setAttributes(Collections.<String, Object>singletonMap("loggerName", "org.apache.qpid.*"));
- fail("Changing of logger name is unsupported");
- }
- catch (IllegalConfigurationException e)
- {
- // pass
- }
- }
+ assertTrue("Unexpected filter instance", filter instanceof LoggerNameAndLevelFilter);
- public void testSetLevelOnWildcardFilter() throws Exception
- {
- setUpFilterAndAppender("org.apache.qpid.server.*", LogLevel.DEBUG);
- doChangeLevelTest();
+ LoggerNameAndLevelFilter f = (LoggerNameAndLevelFilter)filter;
+ assertEquals("Unexpected log level", Level.INFO, f.getLevel());
+ assertEquals("Unexpected logger name", "org.apache.qpid", f.getLoggerName());
}
- public void testSetLevelOnEmptyLogNameFilter() throws Exception
+ public void testLevelChangeAffectsFilter()
{
- setUpFilterAndAppender("", LogLevel.DEBUG);
- doChangeLevelTest();
- }
+ BrokerNameAndLevelFilter<?> filterObject = createFilter("org.apache.qpid", LogLevel.INFO);
- public void testSetLevelOnNonEmptyAndNonWildCardLogNameFilter() throws Exception
- {
- setUpFilterAndAppender(_logger.getName(), LogLevel.DEBUG);
- doChangeLevelTest();
+ LoggerNameAndLevelFilter filter = (LoggerNameAndLevelFilter)filterObject.asFilter();
+
+ assertEquals("Unexpected log level", Level.INFO, filter.getLevel());
+
+ filterObject.setAttributes(Collections.<String, Object>singletonMap("level", LogLevel.DEBUG));
+ assertEquals("Unexpected log level attribute", Level.DEBUG, filter.getLevel());
}
- private void doChangeLevelTest()
+ public void testLoggerNameChangeNotAllowed()
{
- _loggerAppender.start();
- _logger.debug("Test1");
- _loggerAppender.stop();
+ BrokerNameAndLevelFilter<?> filterObject = createFilter("org.apache.qpid", LogLevel.INFO);
- assertLoggedEvent(true, "Test1", _logger.getName(), Level.DEBUG);
+ LoggerNameAndLevelFilter filter = (LoggerNameAndLevelFilter)filterObject.asFilter();
- _brokerNameAndLevelFilter.setAttributes(Collections.<String, Object>singletonMap("level", LogLevel.INFO));
- assertEquals("Unexpected log level attribute", LogLevel.INFO, _brokerNameAndLevelFilter.getLevel());
+ assertEquals("Unexpected logger name", "org.apache.qpid", filter.getLoggerName());
- _loggerAppender.start();
- _logger.debug("Test2");
- _logger.info("Test3");
- _loggerAppender.stop();
+ try
+ {
+ filterObject.setAttributes(Collections.<String,Object>singletonMap(BrokerNameAndLevelFilter.LOGGER_NAME, "org.apache.qpid.foo"));
+ fail("IllegalConfigurationException is expected to throw on attempt to change logger name");
+ }
+ catch(IllegalConfigurationException e)
+ {
+ // pass
+ }
- assertLoggedEvent(false, "Test2", _logger.getName(), Level.DEBUG);
- assertLoggedEvent(true, "Test3", _logger.getName(), Level.INFO);
+ assertEquals("Unexpected logger name", "org.apache.qpid", filter.getLoggerName());
}
- private void assertLoggedEvent(boolean exists, String message, String loggerName, Level level)
+
+ private BrokerNameAndLevelFilter createFilter(String loggerName, LogLevel logLevel)
{
- List<ILoggingEvent> events;
- synchronized(_loggerAppender)
- {
- events = new ArrayList<>(_loggerAppender.list);
- }
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put("loggerName", loggerName);
+ attributes.put("level", logLevel);
+ attributes.put("name", "test");
- boolean logged = false;
- for (ILoggingEvent event: events)
- {
- if (event.getFormattedMessage().equals(message) && event.getLoggerName().equals(loggerName) && event.getLevel() == level)
- {
- logged = true;
- break;
- }
- }
- assertEquals("Event " + message + " from logger " + loggerName + " of log level " + level
- + " is " + (exists ? "not" : "") + " found", exists, logged);
+ BrokerNameAndLevelFilter brokerNameAndLevelFilter = new BrokerNameAndLevelFilterImpl(attributes, _brokerLogger);
+ brokerNameAndLevelFilter.open();
+ return brokerNameAndLevelFilter;
}
}
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/CompositeFilterTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/CompositeFilterTest.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/CompositeFilterTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/CompositeFilterTest.java Mon Jun 15 15:43:53 2015
@@ -32,7 +32,6 @@ import java.util.Arrays;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.FilterReply;
-import org.apache.qpid.server.model.BrokerLoggerFilter;
import org.apache.qpid.test.utils.QpidTestCase;
public class CompositeFilterTest extends QpidTestCase
@@ -48,7 +47,7 @@ public class CompositeFilterTest extends
{
CompositeFilter compositeFilter = new CompositeFilter();
- compositeFilter.addFilter(createBrokerFilter(FilterReply.ACCEPT));
+ compositeFilter.addFilter(createFilter(FilterReply.ACCEPT));
FilterReply reply = compositeFilter.decide(mock(ILoggingEvent.class));
assertEquals("Unexpected reply with ACCEPT filter added", FilterReply.ACCEPT, reply);
@@ -58,7 +57,7 @@ public class CompositeFilterTest extends
{
CompositeFilter compositeFilter = new CompositeFilter();
- compositeFilter.addFilter(createBrokerFilter(FilterReply.NEUTRAL));
+ compositeFilter.addFilter(createFilter(FilterReply.NEUTRAL));
FilterReply reply = compositeFilter.decide(mock(ILoggingEvent.class));
assertEquals("Unexpected reply with NEUTRAL filter added", FilterReply.DENY, reply);
@@ -68,34 +67,34 @@ public class CompositeFilterTest extends
{
CompositeFilter compositeFilter = new CompositeFilter();
- BrokerLoggerFilter brokerFilterNeutral = createBrokerFilter(FilterReply.NEUTRAL);
+ LoggerFilter brokerFilterNeutral = createFilter(FilterReply.NEUTRAL);
compositeFilter.addFilter(brokerFilterNeutral);
- BrokerLoggerFilter brokerFilterDeny = createBrokerFilter(FilterReply.DENY);
+ LoggerFilter brokerFilterDeny = createFilter(FilterReply.DENY);
compositeFilter.addFilter(brokerFilterDeny);
- BrokerLoggerFilter brokerFilterAccept = createBrokerFilter(FilterReply.ACCEPT);
+ LoggerFilter brokerFilterAccept = createFilter(FilterReply.ACCEPT);
compositeFilter.addFilter(brokerFilterAccept);
FilterReply reply = compositeFilter.decide(mock(ILoggingEvent.class));
assertEquals("Unexpected reply", FilterReply.DENY, reply);
- verify(brokerFilterNeutral.asFilter()).decide(any());
- verify(brokerFilterDeny.asFilter()).decide(any());
- verify(brokerFilterAccept.asFilter(), never()).decide(any());
+ verify(brokerFilterNeutral.asFilter()).decide(any(ILoggingEvent.class));
+ verify(brokerFilterDeny.asFilter()).decide(any(ILoggingEvent.class));
+ verify(brokerFilterAccept.asFilter(), never()).decide(any(ILoggingEvent.class));
}
public void testRemoveFilterFromChain()
{
CompositeFilter compositeFilter = new CompositeFilter();
- BrokerLoggerFilter brokerFilterNeutral = createBrokerFilter(FilterReply.NEUTRAL, "neutral");
+ LoggerFilter brokerFilterNeutral = createFilter(FilterReply.NEUTRAL, "neutral");
compositeFilter.addFilter(brokerFilterNeutral);
- BrokerLoggerFilter brokerFilterDeny = createBrokerFilter(FilterReply.DENY, "deny");
+ LoggerFilter brokerFilterDeny = createFilter(FilterReply.DENY, "deny");
compositeFilter.addFilter(brokerFilterDeny);
- BrokerLoggerFilter brokerFilterAccept = createBrokerFilter(FilterReply.ACCEPT, "accept");
+ LoggerFilter brokerFilterAccept = createFilter(FilterReply.ACCEPT, "accept");
compositeFilter.addFilter(brokerFilterAccept);
FilterReply reply = compositeFilter.decide(mock(ILoggingEvent.class));
@@ -106,16 +105,16 @@ public class CompositeFilterTest extends
FilterReply reply2 = compositeFilter.decide(mock(ILoggingEvent.class));
assertEquals("Unexpected reply", FilterReply.ACCEPT, reply2);
- verify(brokerFilterNeutral.asFilter(), times(2)).decide(any());
- verify(brokerFilterDeny.asFilter()).decide(any());
- verify(brokerFilterAccept.asFilter()).decide(any());
+ verify(brokerFilterNeutral.asFilter(), times(2)).decide(any(ILoggingEvent.class));
+ verify(brokerFilterDeny.asFilter()).decide(any(ILoggingEvent.class));
+ verify(brokerFilterAccept.asFilter()).decide(any(ILoggingEvent.class));
}
public void testAddFilter()
{
CompositeFilter compositeFilter = new CompositeFilter();
- BrokerLoggerFilter brokerFilter = createBrokerFilter(FilterReply.ACCEPT, "accept");
+ LoggerFilter brokerFilter = createFilter(FilterReply.ACCEPT, "accept");
compositeFilter.addFilter(brokerFilter);
verify(brokerFilter.asFilter()).setName("accept");
@@ -125,32 +124,32 @@ public class CompositeFilterTest extends
{
CompositeFilter compositeFilter = new CompositeFilter();
- BrokerLoggerFilter brokerFilterNeutral = createBrokerFilter(FilterReply.NEUTRAL, "neutral");
- BrokerLoggerFilter brokerFilterAccept = createBrokerFilter(FilterReply.ACCEPT, "accept");
- BrokerLoggerFilter brokerFilterDeny = createBrokerFilter(FilterReply.DENY, "deny");
+ LoggerFilter brokerFilterNeutral = createFilter(FilterReply.NEUTRAL, "neutral");
+ LoggerFilter brokerFilterAccept = createFilter(FilterReply.ACCEPT, "accept");
+ LoggerFilter brokerFilterDeny = createFilter(FilterReply.DENY, "deny");
compositeFilter.addFilters(Arrays.asList(brokerFilterNeutral, brokerFilterAccept, brokerFilterDeny));
FilterReply reply = compositeFilter.decide(mock(ILoggingEvent.class));
assertEquals("Unexpected reply", FilterReply.ACCEPT, reply);
- verify(brokerFilterNeutral.asFilter()).decide(any());
- verify(brokerFilterAccept.asFilter()).decide(any());
- verify(brokerFilterDeny.asFilter(), never()).decide(any());
+ verify(brokerFilterNeutral.asFilter()).decide(any(ILoggingEvent.class));
+ verify(brokerFilterAccept.asFilter()).decide(any(ILoggingEvent.class));
+ verify(brokerFilterDeny.asFilter(), never()).decide(any(ILoggingEvent.class));
}
- private BrokerLoggerFilter createBrokerFilter(FilterReply decision)
+ private LoggerFilter createFilter(FilterReply decision)
{
- return createBrokerFilter(decision, "UNNAMED");
+ return createFilter(decision, "UNNAMED");
}
- private BrokerLoggerFilter createBrokerFilter(final FilterReply decision, String name)
+ private LoggerFilter createFilter(final FilterReply decision, String name)
{
- BrokerLoggerFilter brokerFilter = mock(BrokerLoggerFilter.class);
+ LoggerFilter brokerFilter = mock(LoggerFilter.class);
when(brokerFilter.getName()).thenReturn(name);
Filter filter = mock(Filter.class);
when(filter.getName()).thenReturn(name);
- when(filter.decide(any())).thenReturn(decision);
+ when(filter.decide(any(ILoggingEvent.class))).thenReturn(decision);
when(brokerFilter.asFilter()).thenReturn(filter);
return brokerFilter;
}
Added: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/LoggerNameAndLevelFilterTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/LoggerNameAndLevelFilterTest.java?rev=1685599&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/LoggerNameAndLevelFilterTest.java (added)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/LoggerNameAndLevelFilterTest.java Mon Jun 15 15:43:53 2015
@@ -0,0 +1,116 @@
+/*
+ *
+ * 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.logging;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.spi.FilterReply;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class LoggerNameAndLevelFilterTest extends QpidTestCase
+{
+
+ public void testDecideForWildcardLoggerName() throws Exception
+ {
+ LoggerNameAndLevelFilter filter = new LoggerNameAndLevelFilter("org.apache.qpid.server.*", Level.INFO);
+
+ ILoggingEvent event = mock(ILoggingEvent.class);
+ when(event.getLevel()).thenReturn(Level.INFO);
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.server.foo");
+ assertEquals("Unexpected reply for matching logger name and log level", FilterReply.ACCEPT, filter.decide(event));
+
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.foo");
+ assertEquals("Unexpected reply for non matching logger name but matching log level", FilterReply.NEUTRAL, filter.decide(event));
+
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.server.foo");
+ when(event.getLevel()).thenReturn(Level.DEBUG);
+ assertEquals("Unexpected reply for matching logger name but non matching log level", FilterReply.NEUTRAL, filter.decide(event));
+ }
+
+ public void testDecideForEmptyLoggerName() throws Exception
+ {
+ LoggerNameAndLevelFilter filter = new LoggerNameAndLevelFilter("", Level.INFO);
+
+ ILoggingEvent event = mock(ILoggingEvent.class);
+ when(event.getLevel()).thenReturn(Level.INFO);
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.server.foo");
+ assertEquals("Unexpected reply for matching log level and arbitrary logger name", FilterReply.ACCEPT, filter.decide(event));
+
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.foo");
+ assertEquals("Unexpected reply for matching log level and arbitrary logger namel", FilterReply.ACCEPT, filter.decide(event));
+
+ when(event.getLevel()).thenReturn(Level.DEBUG);
+ assertEquals("Unexpected reply for non matching log level", FilterReply.NEUTRAL, filter.decide(event));
+ }
+
+ public void testDecideForRootLoggerName() throws Exception
+ {
+ LoggerNameAndLevelFilter filter = new LoggerNameAndLevelFilter(Logger.ROOT_LOGGER_NAME, Level.INFO);
+
+ ILoggingEvent event = mock(ILoggingEvent.class);
+ when(event.getLevel()).thenReturn(Level.INFO);
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.server.foo");
+ assertEquals("Unexpected reply for matching log level and arbitrary logger name", FilterReply.ACCEPT, filter.decide(event));
+
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.foo");
+ assertEquals("Unexpected reply for matching log level and arbitrary logger name", FilterReply.ACCEPT, filter.decide(event));
+
+ when(event.getLevel()).thenReturn(Level.DEBUG);
+ assertEquals("Unexpected reply for non matching log level", FilterReply.NEUTRAL, filter.decide(event));
+ }
+
+ public void testDecideForNullLoggerName() throws Exception
+ {
+ LoggerNameAndLevelFilter filter = new LoggerNameAndLevelFilter(null, Level.INFO);
+
+ ILoggingEvent event = mock(ILoggingEvent.class);
+ when(event.getLevel()).thenReturn(Level.INFO);
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.server.foo");
+ assertEquals("Unexpected reply for matching log level and arbitrary logger name", FilterReply.ACCEPT, filter.decide(event));
+
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.foo");
+ assertEquals("Unexpected reply for matching log level and arbitrary logger name", FilterReply.ACCEPT, filter.decide(event));
+
+ when(event.getLevel()).thenReturn(Level.DEBUG);
+ assertEquals("Unexpected reply for non matching log level", FilterReply.NEUTRAL, filter.decide(event));
+ }
+
+ public void testDecideForNonWildCardLoggerName() throws Exception
+ {
+ LoggerNameAndLevelFilter filter = new LoggerNameAndLevelFilter("org.apache.qpid", Level.INFO);
+
+ ILoggingEvent event = mock(ILoggingEvent.class);
+ when(event.getLevel()).thenReturn(Level.INFO);
+ when(event.getLoggerName()).thenReturn("org.apache.qpid");
+ assertEquals("Unexpected reply for matching log level and same logger name", FilterReply.ACCEPT, filter.decide(event));
+
+ when(event.getLoggerName()).thenReturn("org.apache.qpid.foo");
+ assertEquals("Unexpected reply for matching log level and not same logger name", FilterReply.NEUTRAL, filter.decide(event));
+
+ when(event.getLevel()).thenReturn(Level.DEBUG);
+ when(event.getLoggerName()).thenReturn("org.apache.qpid");
+ assertEquals("Unexpected reply for non matching log leve and same logger namel", FilterReply.NEUTRAL, filter.decide(event));
+ }
+}
Added: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/PrincipalLogEventFilterTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/PrincipalLogEventFilterTest.java?rev=1685599&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/PrincipalLogEventFilterTest.java (added)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/PrincipalLogEventFilterTest.java Mon Jun 15 15:43:53 2015
@@ -0,0 +1,95 @@
+/*
+ *
+ * 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.logging;
+
+import static org.mockito.Mockito.mock;
+
+import java.security.Principal;
+import java.security.PrivilegedAction;
+
+import javax.security.auth.Subject;
+
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.spi.FilterReply;
+
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class PrincipalLogEventFilterTest extends QpidTestCase
+{
+
+ private PrincipalLogEventFilter _principalLogEventFilter;
+ private ILoggingEvent _event = mock(ILoggingEvent.class);
+ private Subject _subject;
+ private Principal _principal;
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ _subject = new Subject();
+ _principal = mock(Principal.class);
+ _principalLogEventFilter = new PrincipalLogEventFilter(_principal);
+ }
+
+ public void testPrincipalMatches()
+ {
+ _subject.getPrincipals().add(_principal);
+
+ FilterReply reply = doFilter();
+
+ assertEquals(FilterReply.NEUTRAL, reply);
+ }
+
+ public void testNoPrincipal()
+ {
+ FilterReply reply = doFilter();
+
+ assertEquals(FilterReply.DENY, reply);
+ }
+
+ public void testWrongPrincipal()
+ {
+ _subject.getPrincipals().add(mock(Principal.class));
+
+ FilterReply reply = doFilter();
+
+ assertEquals(FilterReply.DENY, reply);
+ }
+
+ public void testNoSubject()
+ {
+ _subject.getPrincipals().add(mock(Principal.class));
+
+ assertEquals(FilterReply.DENY, _principalLogEventFilter.decide(_event));
+ }
+
+ private FilterReply doFilter()
+ {
+ return Subject.doAs(_subject, new PrivilegedAction<FilterReply>()
+ {
+ @Override
+ public FilterReply run()
+ {
+ return _principalLogEventFilter.decide(_event);
+ }
+ });
+ }
+}
\ No newline at end of file
Added: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/RollingFileAppenderFactoryTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/RollingFileAppenderFactoryTest.java?rev=1685599&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/RollingFileAppenderFactoryTest.java (added)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/RollingFileAppenderFactoryTest.java Mon Jun 15 15:43:53 2015
@@ -0,0 +1,104 @@
+/*
+ *
+ * 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.logging;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.Context;
+import ch.qos.logback.core.encoder.Encoder;
+import ch.qos.logback.core.rolling.RollingFileAppender;
+import ch.qos.logback.core.rolling.RollingPolicy;
+import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
+import ch.qos.logback.core.rolling.TriggeringPolicy;
+import ch.qos.logback.core.rolling.helper.CompressionMode;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class RollingFileAppenderFactoryTest extends QpidTestCase
+{
+ public static final String FILE_NAME = "TEST";
+ public static final String LAYOUT = "%d %-5p [%t] \\(%c{2}\\) - %m%n";
+ public static final String MAX_FILE_SIZE = "100mb";
+ public static final int MAX_HISTORY = 10;
+
+ private RollingFileAppenderFactory _helper;
+ private FileLoggerSettings _settings;
+
+ @Override
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ _helper = new RollingFileAppenderFactory();
+ _settings = mock(FileLoggerSettings.class);
+ when(_settings.getFileName()).thenReturn(FILE_NAME);
+ when(_settings.getLayout()).thenReturn(LAYOUT);
+ when(_settings.getMaxFileSize()).thenReturn(MAX_FILE_SIZE);
+ when(_settings.isCompressOldFiles()).thenReturn(Boolean.TRUE);
+ when(_settings.isRollDaily()).thenReturn(Boolean.TRUE);
+ when(_settings.isRollOnRestart()).thenReturn(Boolean.TRUE);
+ when(_settings.getMaxHistory()).thenReturn(MAX_HISTORY);
+ }
+
+ public void testCreateRollingFileAppenderDailyRolling()
+ {
+ RollingFileAppender<ILoggingEvent> appender = _helper.createRollingFileAppender(_settings, mock(Context.class));
+
+ assertEquals("Unexpected appender file name", FILE_NAME, appender.getFile());
+
+ RollingPolicy rollingPolicy = appender.getRollingPolicy();
+ assertTrue("Unexpected rolling policy", rollingPolicy instanceof TimeBasedRollingPolicy);
+ assertEquals("Unexpected max history", MAX_HISTORY, ((TimeBasedRollingPolicy) rollingPolicy).getMaxHistory());
+ assertEquals("Unexpected file name pattern", FILE_NAME + ".%d{yyyy-MM-dd}.%i.gz", ((TimeBasedRollingPolicy) rollingPolicy).getFileNamePattern());
+ assertEquals("Unexpected compression mode", CompressionMode.GZ, rollingPolicy.getCompressionMode());
+
+ TriggeringPolicy triggeringPolicy = ((TimeBasedRollingPolicy) rollingPolicy).getTimeBasedFileNamingAndTriggeringPolicy();
+ assertTrue("Unexpected triggering policy", triggeringPolicy instanceof RollingFileAppenderFactory.DailyTriggeringPolicy);
+ assertEquals("Unexpected triggering policy", MAX_FILE_SIZE, ((RollingFileAppenderFactory.DailyTriggeringPolicy) triggeringPolicy).getMaxFileSize());
+ }
+
+ public void testCreateRollingFileAppenderNonDailyRolling()
+ {
+ when(_settings.isRollDaily()).thenReturn(Boolean.FALSE);
+ when(_settings.isCompressOldFiles()).thenReturn(Boolean.FALSE);
+
+ RollingFileAppender<ILoggingEvent> appender = _helper.createRollingFileAppender(_settings, mock(Context.class));
+
+ assertEquals("Unexpected appender file name", FILE_NAME, appender.getFile());
+
+ RollingPolicy rollingPolicy = appender.getRollingPolicy();
+ assertTrue("Unexpected rolling policy", rollingPolicy instanceof RollingFileAppenderFactory.SimpleRollingPolicy);
+ assertEquals("Unexpected max history", MAX_HISTORY, ((RollingFileAppenderFactory.SimpleRollingPolicy) rollingPolicy).getMaxIndex());
+ assertEquals("Unexpected file name pattern", FILE_NAME + ".%i", ((RollingFileAppenderFactory.SimpleRollingPolicy) rollingPolicy).getFileNamePattern());
+ assertEquals("Unexpected compression mode", CompressionMode.NONE, rollingPolicy.getCompressionMode());
+
+ TriggeringPolicy triggeringPolicy = appender.getTriggeringPolicy();
+ assertEquals("Unexpected triggering policy", MAX_FILE_SIZE, ((RollingFileAppenderFactory.SizeTriggeringPolicy) triggeringPolicy).getMaxFileSize());
+
+ Encoder encoder = appender.getEncoder();
+ assertTrue("Unexpected encoder", encoder instanceof PatternLayoutEncoder);
+ assertEquals("Unexpected layout pattern", LAYOUT, ((PatternLayoutEncoder)encoder).getPattern());
+
+ }
+
+}
Added: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/VirtualHostLoggerTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/VirtualHostLoggerTest.java?rev=1685599&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/VirtualHostLoggerTest.java (added)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/VirtualHostLoggerTest.java Mon Jun 15 15:43:53 2015
@@ -0,0 +1,181 @@
+/*
+ *
+ * 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.logging;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.Appender;
+import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.configuration.updater.TaskExecutorImpl;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.BrokerModel;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.Model;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.SystemConfig;
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostLogger;
+import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.security.SecurityManager;
+import org.apache.qpid.server.virtualhost.TestMemoryVirtualHost;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class VirtualHostLoggerTest extends QpidTestCase
+{
+ private VirtualHost<?,?,?> _virtualHost;
+ private TaskExecutor _taskExecutor;
+ private File _logFile;
+
+ @Override
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ _taskExecutor = new TaskExecutorImpl();
+ _taskExecutor.start();
+
+ Model model = BrokerModel.getInstance();
+
+ SecurityManager securityManager = mock(SecurityManager.class);
+ EventLogger eventLogger = mock(EventLogger.class);
+
+ SystemConfig<?> systemConfig = mock(SystemConfig.class);
+ when(systemConfig.getModel()).thenReturn(model);
+ when(systemConfig.getChildExecutor()).thenReturn(_taskExecutor);
+ when(systemConfig.getEventLogger()).thenReturn(eventLogger);
+ doReturn(SystemConfig.class).when(systemConfig).getCategoryClass();
+
+ Broker<?> broker = mock(Broker.class);
+ when(broker.getSecurityManager()).thenReturn(securityManager);
+ when(broker.getModel()).thenReturn(model);
+ when(broker.getChildExecutor()).thenReturn(_taskExecutor);
+ when(broker.getParent(SystemConfig.class)).thenReturn(systemConfig);
+ doReturn(Broker.class).when(broker).getCategoryClass();
+
+ VirtualHostNode<?> node = mock(VirtualHostNode.class);
+ when(node.getModel()).thenReturn(model);
+ when(node.getChildExecutor()).thenReturn(_taskExecutor);
+ when(node.getParent(Broker.class)).thenReturn(broker);
+ when(node.getConfigurationStore()).thenReturn(mock(DurableConfigurationStore.class));
+ doReturn(VirtualHostNode.class).when(node).getCategoryClass();
+
+ // use real VH object rather then mock in order to test create/start/stop functionality
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put(VirtualHost.NAME, getName());
+ attributes.put(VirtualHost.TYPE, TestMemoryVirtualHost.VIRTUAL_HOST_TYPE);
+ _virtualHost = new TestMemoryVirtualHost(attributes, node);
+ _virtualHost.open();
+
+ _logFile = new File(TMP_FOLDER, "tmp-virtual-host.log." + System.currentTimeMillis());
+ if (_logFile.exists())
+ {
+ assertTrue(String.format("Log file '%s' is not deleted in setUp", _logFile.getPath()), _logFile.delete());
+ }
+ }
+
+ @Override
+ public void tearDown() throws Exception
+ {
+ try
+ {
+ _virtualHost.close();
+ _taskExecutor.stopImmediately();
+ if (_logFile != null && _logFile.exists())
+ {
+ _logFile.delete();
+ }
+ }
+ finally
+ {
+ super.tearDown();
+ }
+ }
+
+ public void testAddLogger()
+ {
+ VirtualHostLogger logger = createVirtualHostLogger();
+
+ assertTrue("Unexpected logger created " + logger, logger instanceof VirtualHostFileLogger);
+ assertEquals("Unexpected log file", _logFile.getPath(), ((VirtualHostFileLogger<?>) logger).getFileName());
+ assertEquals("Unexpected state on creation", State.ACTIVE, logger.getState());
+
+ Appender<ILoggingEvent> appender = ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME))
+ .getAppender(logger.getName());
+ assertTrue("Appender was not started", appender.isStarted());
+ }
+
+ public void testDeleteLogger()
+ {
+ VirtualHostLogger logger = createVirtualHostLogger();
+ assertEquals("Unexpected state on creation", State.ACTIVE, logger.getState());
+
+ Appender<ILoggingEvent> appender = ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME))
+ .getAppender(logger.getName());
+ assertTrue("Appender is not started", appender.isStarted());
+
+ logger.delete();
+
+ appender = ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)).getAppender(logger.getName());
+ assertNull("Appender should be detached on logger deletion", appender);
+ }
+
+
+ public void testLoggersRemovedOnVirtualHostStop()
+ {
+ VirtualHostLogger logger = createVirtualHostLogger();
+ _virtualHost.stop();
+
+ Appender<ILoggingEvent> appender = ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME))
+ .getAppender(logger.getName());
+ assertNull("Appender was not deleted", appender);
+ }
+
+ public void testLoggersRemovedOnVirtualHostClose()
+ {
+ VirtualHostLogger logger = createVirtualHostLogger();
+ _virtualHost.close();
+
+ Appender<ILoggingEvent> appender = ((ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME))
+ .getAppender(logger.getName());
+ assertNull("Appender was not deleted", appender);
+ }
+
+
+ private VirtualHostLogger createVirtualHostLogger()
+ {
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put(VirtualHostLogger.NAME, getTestName());
+ attributes.put(ConfiguredObject.TYPE, VirtualHostFileLogger.TYPE);
+ attributes.put(VirtualHostFileLogger.FILE_NAME, _logFile.getPath());
+ return _virtualHost.createChild(VirtualHostLogger.class, attributes);
+ }
+
+}
Added: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/VirtualHostNameAndLevelFilterImplTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/VirtualHostNameAndLevelFilterImplTest.java?rev=1685599&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/VirtualHostNameAndLevelFilterImplTest.java (added)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/logging/VirtualHostNameAndLevelFilterImplTest.java Mon Jun 15 15:43:53 2015
@@ -0,0 +1,166 @@
+/*
+ *
+ * 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.logging;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.filter.Filter;
+
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
+import org.apache.qpid.server.configuration.updater.TaskExecutor;
+import org.apache.qpid.server.configuration.updater.TaskExecutorImpl;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.BrokerModel;
+import org.apache.qpid.server.model.Model;
+import org.apache.qpid.server.model.SystemConfig;
+import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostLogger;
+import org.apache.qpid.server.model.VirtualHostNode;
+import org.apache.qpid.server.security.*;
+import org.apache.qpid.server.security.SecurityManager;
+import org.apache.qpid.server.store.DurableConfigurationStore;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class VirtualHostNameAndLevelFilterImplTest extends QpidTestCase
+{
+ private VirtualHostLogger _virtualHostLogger;
+ private TaskExecutor _taskExecutor;
+ private final VirtualHost<?,?,?> _virtualhost = mock(VirtualHost.class);
+
+ @Override
+ public void setUp() throws Exception
+ {
+ super.setUp();
+
+ _taskExecutor = new TaskExecutorImpl();
+ _taskExecutor.start();
+
+ Model model = BrokerModel.getInstance();
+ org.apache.qpid.server.security.SecurityManager securityManager = mock(SecurityManager.class);
+
+ Broker broker = mock(Broker.class);
+ when(broker.getSecurityManager()).thenReturn(securityManager);
+ when(broker.getModel()).thenReturn(model);
+ when(broker.getChildExecutor()).thenReturn(_taskExecutor);
+ doReturn(Broker.class).when(broker).getCategoryClass();
+
+ VirtualHostNode<?> node = mock(VirtualHostNode.class);
+ when(node.getModel()).thenReturn(model);
+ when(node.getChildExecutor()).thenReturn(_taskExecutor);
+ when(node.getParent(Broker.class)).thenReturn(broker);
+ doReturn(VirtualHostNode.class).when(node).getCategoryClass();
+
+ when(_virtualhost.getModel()).thenReturn(model);
+ when(_virtualhost.getParent(VirtualHostNode.class)).thenReturn(node);
+ doReturn(VirtualHost.class).when(_virtualhost).getCategoryClass();
+
+ _virtualHostLogger = mock(VirtualHostLogger.class);
+ when(_virtualHostLogger.getModel()).thenReturn(model);
+ when(_virtualHostLogger.getChildExecutor()).thenReturn(_taskExecutor);
+ when(_virtualHostLogger.getParent(VirtualHost.class)).thenReturn(_virtualhost);
+ doReturn(VirtualHostLogger.class).when(_virtualHostLogger).getCategoryClass();
+ }
+
+ @Override
+ public void tearDown() throws Exception
+ {
+ try
+ {
+ _taskExecutor.stopImmediately();
+ }
+ finally
+ {
+ super.tearDown();
+ }
+ }
+
+
+ public void testAsFilter()
+ {
+ VirtualHostNameAndLevelFilter<?> filterObject = createFilter("org.apache.qpid", LogLevel.INFO);
+
+ Filter<ILoggingEvent> filter = filterObject.asFilter();
+
+ assertTrue("Unexpected filter instance", filter instanceof LoggerNameAndLevelFilter);
+
+ LoggerNameAndLevelFilter f = (LoggerNameAndLevelFilter)filter;
+ assertEquals("Unexpected log level", Level.INFO, f.getLevel());
+ assertEquals("Unexpected logger name", "org.apache.qpid", f.getLoggerName());
+ }
+
+ public void testLevelChangeAffectsFilter()
+ {
+ VirtualHostNameAndLevelFilter<?> filterObject = createFilter("org.apache.qpid", LogLevel.INFO);
+
+ LoggerNameAndLevelFilter filter = (LoggerNameAndLevelFilter)filterObject.asFilter();
+
+ assertEquals("Unexpected log level", Level.INFO, filter.getLevel());
+
+ filterObject.setAttributes(Collections.<String, Object>singletonMap("level", LogLevel.DEBUG));
+ assertEquals("Unexpected log level attribute", Level.DEBUG, filter.getLevel());
+ }
+
+ public void testLoggerNameChangeNotAllowed()
+ {
+ VirtualHostNameAndLevelFilter<?> filterObject = createFilter("org.apache.qpid", LogLevel.INFO);
+
+ LoggerNameAndLevelFilter filter = (LoggerNameAndLevelFilter)filterObject.asFilter();
+
+ assertEquals("Unexpected logger name", "org.apache.qpid", filter.getLoggerName());
+
+ try
+ {
+ filterObject.setAttributes(Collections.<String,Object>singletonMap(BrokerNameAndLevelFilter.LOGGER_NAME, "org.apache.qpid.foo"));
+ fail("IllegalConfigurationException is expected to throw on attempt to change logger name");
+ }
+ catch(IllegalConfigurationException e)
+ {
+ // pass
+ }
+
+ assertEquals("Unexpected logger name", "org.apache.qpid", filter.getLoggerName());
+ }
+
+
+ private VirtualHostNameAndLevelFilter createFilter(String loggerName, LogLevel logLevel)
+ {
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put("loggerName", loggerName);
+ attributes.put("level", logLevel);
+ attributes.put("name", "test");
+
+ VirtualHostNameAndLevelFilterImpl nameAndLevelFilter = new VirtualHostNameAndLevelFilterImpl(attributes,
+ _virtualHostLogger);
+ nameAndLevelFilter.open();
+ return nameAndLevelFilter;
+ }
+
+
+
+}
\ No newline at end of file
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTest.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTest.java Mon Jun 15 15:43:53 2015
@@ -72,19 +72,31 @@ public class BrokerTest extends QpidTest
public void testCreateBrokerLogger()
{
- Broker broker = _systemConfig.getBroker();
- Map<String,Object> attributes = new HashMap<>();
final String brokerLoggerName = "TestBrokerLogger";
- attributes.put(ConfiguredObject.NAME, brokerLoggerName);
- attributes.put(ConfiguredObject.TYPE, BrokerMemoryLogger.TYPE);
-
- BrokerLogger child = (BrokerLogger) broker.createChild(BrokerLogger.class, attributes);
- assertEquals("Created BrokerLoger has unexcpected name", brokerLoggerName, child.getName());
- assertTrue("BrokerLogger has unexpected type", child instanceof BrokerMemoryLogger);
-
ch.qos.logback.classic.Logger rootLogger =
(ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
- Appender appender = rootLogger.getAppender(brokerLoggerName);
- assertNotNull("Appender not attached to root logger after BrokerLogger creation", appender);
+ try
+ {
+ Broker broker = _systemConfig.getBroker();
+ Map<String, Object> attributes = new HashMap<>();
+ attributes.put(ConfiguredObject.NAME, brokerLoggerName);
+ attributes.put(ConfiguredObject.TYPE, BrokerMemoryLogger.TYPE);
+
+ BrokerLogger child = (BrokerLogger) broker.createChild(BrokerLogger.class, attributes);
+ assertEquals("Created BrokerLoger has unexcpected name", brokerLoggerName, child.getName());
+ assertTrue("BrokerLogger has unexpected type", child instanceof BrokerMemoryLogger);
+
+ Appender appender = rootLogger.getAppender(brokerLoggerName);
+ assertNotNull("Appender not attached to root logger after BrokerLogger creation", appender);
+ }
+ finally
+ {
+ Appender appender = rootLogger.getAppender(brokerLoggerName);
+ if (appender!= null)
+ {
+ appender.stop();
+ rootLogger.detachAppender(appender);
+ }
+ }
}
}
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/security/SecurityManagerTest.java Mon Jun 15 15:43:53 2015
@@ -24,6 +24,7 @@ import static org.apache.qpid.server.sec
import static org.apache.qpid.server.security.access.Operation.ACCESS_LOGS;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -55,9 +56,10 @@ import org.apache.qpid.server.model.Stat
import org.apache.qpid.server.model.TrustStore;
import org.apache.qpid.server.model.User;
import org.apache.qpid.server.model.VirtualHost;
+import org.apache.qpid.server.model.VirtualHostLogger;
+import org.apache.qpid.server.model.VirtualHostLoggerFilter;
import org.apache.qpid.server.model.VirtualHostNode;
import org.apache.qpid.server.protocol.AMQConnectionModel;
-import org.apache.qpid.server.queue.AMQQueue;
import org.apache.qpid.server.queue.QueueConsumer;
import org.apache.qpid.server.security.access.ObjectProperties;
import org.apache.qpid.server.security.access.ObjectProperties.Property;
@@ -92,6 +94,8 @@ public class SecurityManagerTest extends
when(_virtualHost.getName()).thenReturn(TEST_VIRTUAL_HOST);
when(_virtualHost.getAttribute(VirtualHost.NAME)).thenReturn(TEST_VIRTUAL_HOST);
+ when(_virtualHost.getModel()).thenReturn(BrokerModel.getInstance());
+ doReturn(VirtualHost.class).when(_virtualHost).getCategoryClass();
_broker = mock(Broker.class);
when(_broker.getAccessControlProviders()).thenReturn(Collections.singleton(aclProvider));
@@ -832,15 +836,64 @@ public class SecurityManagerTest extends
public void testAuthoriseBrokerLoggerFilterOperations()
{
+ BrokerLogger bl = mock(BrokerLogger.class);
+ when(bl.getAttribute(ConfiguredObject.NAME)).thenReturn("LOGGER");
+ when(bl.getCategoryClass()).thenReturn(BrokerLogger.class);
+ when(bl.getParent(Broker.class)).thenReturn(_broker);
+
BrokerLoggerFilter mock = mock(BrokerLoggerFilter.class);
when(mock.getAttribute(ConfiguredObject.NAME)).thenReturn("TEST");
- when(mock.getCategoryClass()).thenReturn(BrokerLogger.class);
- when(mock.getParent(Broker.class)).thenReturn(_broker);
- assertBrokerChildCreateAuthorization(mock);
+ when(mock.getCategoryClass()).thenReturn(BrokerLoggerFilter.class);
+ when(mock.getParent(BrokerLogger.class)).thenReturn(bl);
+ when(mock.getModel()).thenReturn(BrokerModel.getInstance());
+ assertBrokerChildCreateAuthorization(mock, bl);
when(mock.getAttribute(ConfiguredObject.NAME)).thenReturn("test");
- assertBrokerChildUpdateAuthorization(mock);
- assertBrokerChildDeleteAuthorization(mock);
+ assertBrokerChildUpdateAuthorization(mock, bl);
+ assertBrokerChildDeleteAuthorization(mock, bl);
+ }
+
+
+ public void testAuthoriseVirtualHostLoggerOperations()
+ {
+ ObjectProperties properties = new ObjectProperties(TEST_VIRTUAL_HOST);
+
+ VirtualHostLogger<?> mock = mock(VirtualHostLogger.class);
+ when(mock.getAttribute(ConfiguredObject.NAME)).thenReturn("TEST");
+ doReturn(VirtualHostLogger.class).when(mock).getCategoryClass();
+ when(mock.getParent(VirtualHost.class)).thenReturn(_virtualHost);
+ when(mock.getModel()).thenReturn(BrokerModel.getInstance());
+
+ assertCreateAuthorization(mock, Operation.CREATE, ObjectType.VIRTUALHOST, properties, _virtualHost);
+
+ when(mock.getAttribute(ConfiguredObject.NAME)).thenReturn("test");
+
+ assertUpdateAuthorization(mock, Operation.UPDATE, ObjectType.VIRTUALHOST, properties, _virtualHost);
+ assertDeleteAuthorization(mock, Operation.DELETE, ObjectType.VIRTUALHOST, properties, _virtualHost);
+ }
+
+ public void testAuthoriseVirtualHostLoggerFilterOperations()
+ {
+ ObjectProperties properties = new ObjectProperties(TEST_VIRTUAL_HOST);
+
+ VirtualHostLogger<?> vhl = mock(VirtualHostLogger.class);
+ when(vhl.getAttribute(ConfiguredObject.NAME)).thenReturn("LOGGER");
+ doReturn(VirtualHostLogger.class).when(vhl).getCategoryClass();
+ when(vhl.getParent(VirtualHost.class)).thenReturn(_virtualHost);
+ when(vhl.getModel()).thenReturn(BrokerModel.getInstance());
+
+ VirtualHostLoggerFilter<?> mock = mock(VirtualHostLoggerFilter.class);
+ when(mock.getAttribute(ConfiguredObject.NAME)).thenReturn("TEST");
+ doReturn(VirtualHostLoggerFilter.class).when(mock).getCategoryClass();
+ when(mock.getParent(VirtualHostLogger.class)).thenReturn(vhl);
+ when(mock.getModel()).thenReturn(BrokerModel.getInstance());
+
+ assertCreateAuthorization(mock, Operation.CREATE, ObjectType.VIRTUALHOST, properties, vhl);
+
+ when(mock.getAttribute(ConfiguredObject.NAME)).thenReturn("test");
+
+ assertUpdateAuthorization(mock, Operation.UPDATE, ObjectType.VIRTUALHOST, properties, vhl);
+ assertDeleteAuthorization(mock, Operation.DELETE, ObjectType.VIRTUALHOST, properties, vhl);
}
private VirtualHost getMockVirtualHost()
@@ -867,16 +920,26 @@ public class SecurityManagerTest extends
private void assertBrokerChildCreateAuthorization(ConfiguredObject object)
{
+ assertBrokerChildCreateAuthorization(object, _broker);
+ }
+
+ private void assertBrokerChildCreateAuthorization(ConfiguredObject object, ConfiguredObject parent)
+ {
String description = String.format("%s %s '%s'",
Operation.CREATE.name().toLowerCase(),
object.getCategoryClass().getSimpleName().toLowerCase(),
"TEST");
ObjectProperties properties = new OperationLoggingDetails(description);
- assertCreateAuthorization(object, Operation.CONFIGURE, ObjectType.BROKER, properties, _broker );
+ assertCreateAuthorization(object, Operation.CONFIGURE, ObjectType.BROKER, properties, parent);
}
private void assertBrokerChildUpdateAuthorization(ConfiguredObject configuredObject)
{
+ assertBrokerChildUpdateAuthorization(configuredObject, _broker);
+ }
+
+ private void assertBrokerChildUpdateAuthorization(ConfiguredObject configuredObject, ConfiguredObject parent)
+ {
String description = String.format("%s %s '%s'",
Operation.UPDATE.name().toLowerCase(),
configuredObject.getCategoryClass().getSimpleName().toLowerCase(),
@@ -884,11 +947,16 @@ public class SecurityManagerTest extends
ObjectProperties properties = new OperationLoggingDetails(description);
assertUpdateAuthorization(configuredObject, Operation.CONFIGURE, ObjectType.BROKER,
- properties, _broker );
+ properties, parent);
}
private void assertBrokerChildDeleteAuthorization(ConfiguredObject configuredObject)
{
+ assertBrokerChildDeleteAuthorization(configuredObject, _broker);
+ }
+
+ private void assertBrokerChildDeleteAuthorization(ConfiguredObject configuredObject, ConfiguredObject parent)
+ {
String description = String.format("%s %s '%s'",
Operation.DELETE.name().toLowerCase(),
configuredObject.getCategoryClass().getSimpleName().toLowerCase(),
@@ -896,7 +964,7 @@ public class SecurityManagerTest extends
ObjectProperties properties = new OperationLoggingDetails(description);
assertDeleteAuthorization(configuredObject, Operation.CONFIGURE, ObjectType.BROKER,
- properties, _broker );
+ properties, parent );
}
private void assertAuthorization(Operation operation, ConfiguredObject<?> configuredObject, Operation aclOperation, ObjectType aclObjectType, ObjectProperties expectedProperties, ConfiguredObject... objects)
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/HouseKeepingTaskTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/HouseKeepingTaskTest.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/HouseKeepingTaskTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/virtualhost/HouseKeepingTaskTest.java Mon Jun 15 15:43:53 2015
@@ -37,8 +37,9 @@ public class HouseKeepingTaskTest extend
String expectedThreadNameDuringExecution = vhostName + ":" + "ThreadNameRememberingTask";
- VirtualHost virtualHost = mock(VirtualHost.class);
+ VirtualHostImpl virtualHost = mock(VirtualHostImpl.class);
when(virtualHost.getName()).thenReturn(vhostName);
+ when(virtualHost.getPrincipal()).thenReturn(mock(VirtualHostPrincipal.class));
ThreadNameRememberingTask testTask = new ThreadNameRememberingTask(virtualHost);
testTask.run();
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java Mon Jun 15 15:43:53 2015
@@ -245,6 +245,7 @@ public class ServerConnection extends Co
{
_messageCompressionThreshold = Integer.MAX_VALUE;
}
+ _authorizedSubject.getPrincipals().add(_virtualHost.getPrincipal());
}
@Override
Modified: qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java Mon Jun 15 15:43:53 2015
@@ -1066,6 +1066,7 @@ public class AMQProtocolEngine implement
{
_messageCompressionThreshold = Integer.MAX_VALUE;
}
+ _authorizedSubject.getPrincipals().add(virtualHost.getPrincipal());
}
public void addDeleteTask(Action<? super AMQProtocolEngine> task)
Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Connection_1_0.java Mon Jun 15 15:43:53 2015
@@ -161,6 +161,7 @@ public class Connection_1_0 implements C
{
setUserPrincipal(user);
}
+ _subject.getPrincipals().add(_vhost.getPrincipal());
if(AuthenticatedPrincipal.getOptionalAuthenticatedPrincipalFromSubject(_subject) == null)
{
final Error err = new Error();
Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/test/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0Test.java Mon Jun 15 15:43:53 2015
@@ -42,6 +42,7 @@ import java.util.UUID;
import javax.security.auth.Subject;
import javax.security.sasl.Sasl;
+import org.apache.qpid.server.virtualhost.VirtualHostPrincipal;
import org.mockito.ArgumentCaptor;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@ -122,6 +123,7 @@ public class ProtocolEngine_1_0_0Test ex
}
}).when(_connectionRegistry).registerConnection(connectionCaptor.capture());
when(virtualHost.getConnectionRegistry()).thenReturn(_connectionRegistry);
+ when(virtualHost.getPrincipal()).thenReturn(mock(VirtualHostPrincipal.class));
when(_port.getVirtualHost(anyString())).thenReturn(virtualHost);
when(_authenticationProvider.getSubjectCreator(anyBoolean())).thenReturn(_subjectCreator);
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java?rev=1685599&r1=1685598&r2=1685599&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java Mon Jun 15 15:43:53 2015
@@ -302,7 +302,7 @@ public class HttpManagement extends Abst
root.addFilter(new FilterHolder(new RedirectingAuthorisationFilter()), "/", EnumSet.of(DispatcherType.REQUEST));
addRestServlet(root, Broker.class);
-
+
ServletHolder apiDocsServlet = new ServletHolder(new ApiDocsServlet(getModel(), Collections.<String>emptyList()));
root.addServlet(apiDocsServlet, "/apidocs");
root.addServlet(apiDocsServlet, "/apidocs/");
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org