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 2018/03/09 17:58:49 UTC
[1/2] qpid-broker-j git commit: QPID-7197: [Broker-J] Generalize a
validation of references to the object being deleted
Repository: qpid-broker-j
Updated Branches:
refs/heads/master cfeabcce7 -> 39c228b52
QPID-7197: [Broker-J] Generalize a validation of references to the object being deleted
Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/e776ae64
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/e776ae64
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/e776ae64
Branch: refs/heads/master
Commit: e776ae641c7f49c461c641b0e3533ea3c8ce47b2
Parents: cfeabcc
Author: Alex Rudyy <or...@apache.org>
Authored: Wed Mar 7 18:05:30 2018 +0000
Committer: Alex Rudyy <or...@apache.org>
Committed: Fri Mar 9 14:25:13 2018 +0000
----------------------------------------------------------------------
.../server/model/AbstractConfiguredObject.java | 110 +++++++++++++++++++
.../qpid/server/model/port/AbstractPort.java | 3 -
.../qpid/server/security/AbstractKeyStore.java | 25 -----
.../server/security/AbstractTrustStore.java | 56 ----------
.../manager/AbstractAuthenticationManager.java | 22 ----
.../qpid/server/model/BrokerTestHelper.java | 2 +
.../adapter/FileBasedGroupProviderImplTest.java | 14 +--
.../qpid/server/security/FileKeyStoreTest.java | 30 ++---
.../server/security/FileTrustStoreTest.java | 31 +++---
.../ManagedAuthenticationManagerTestBase.java | 4 +
...sswordDatabaseAuthenticationManagerTest.java | 13 +--
11 files changed, 149 insertions(+), 161 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java b/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
index f6bbb78..13a4d4c 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/AbstractConfiguredObject.java
@@ -29,6 +29,7 @@ import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Proxy;
import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
import java.security.AccessControlContext;
import java.security.AccessControlException;
import java.security.AccessController;
@@ -57,6 +58,7 @@ import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Predicate;
import java.util.regex.Pattern;
import javax.security.auth.Subject;
@@ -2225,6 +2227,7 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im
ConfiguredObject<?> proxyForValidation = createProxyForValidation(attributes);
authoriseSetAttributes(proxyForValidation, attributes);
validateChange(proxyForValidation, attributes.keySet());
+ validateReferredBy(getModel().getAncestor(getModel().getRootCategory(), this), this);
// for DELETED state we should invoke transition method first to make sure that object can be deleted.
// If method results in exception being thrown due to various integrity violations
@@ -2243,6 +2246,113 @@ public abstract class AbstractConfiguredObject<X extends ConfiguredObject<X>> im
return deleteNoChecks();
}
+ private void validateReferredBy(final ConfiguredObject<?> object,
+ final ConfiguredObject<?> lookupReference)
+ {
+ if (isReferredBy(object, lookupReference))
+ {
+ throw new IntegrityViolationException(String.format("Configured object %s is referred by %s",
+ lookupReference,
+ object));
+ }
+
+ getModel().getChildTypes(object.getCategoryClass())
+ .forEach(childClass -> object.getChildren(childClass)
+ .forEach(child -> validateReferredBy(child, lookupReference)));
+
+
+ }
+
+ private boolean isReferredBy(final ConfiguredObject<?> object,
+ final ConfiguredObject<?> lookupReference)
+ {
+ if (object instanceof AbstractConfiguredObject)
+ {
+ return getModel().getTypeRegistry()
+ .getAttributes(object.getClass())
+ .stream()
+ .anyMatch(attribute -> {
+
+ Object value = object.getAttribute(attribute.getName());
+ Class<?> type = attribute.getType();
+ Type genericType = attribute.getGenericType();
+
+ return isReferred(value, type, genericType, lookupReference);
+ });
+ }
+ else
+ {
+ return object.getAttributeNames().stream().anyMatch(name -> {
+ Object value = object.getAttribute(name);
+ if (value != null)
+ {
+ Class<?> type = value.getClass();
+ return isReferred(value, type, type, lookupReference);
+ }
+ return false;
+ });
+ }
+
+ }
+
+ private boolean isReferred(final Object value,
+ final Class<?> type,
+ final Type genericType,
+ final ConfiguredObject<?> lookupReference)
+ {
+ final Class<? extends ConfiguredObject> lookupCategory = lookupReference.getCategoryClass();
+ if (lookupCategory.isAssignableFrom(type) && value == lookupReference)
+ {
+ return true;
+ }
+ else if (hasMemberOfType(genericType, lookupCategory))
+ {
+ if (value instanceof Collection)
+ {
+ return ((Collection<?>) value).stream().anyMatch(m -> m == lookupReference);
+ }
+ else if (value instanceof Object[])
+ {
+ return Arrays.stream((Object[]) value).anyMatch(m -> m == lookupReference);
+ }
+ else if (value instanceof Map)
+ {
+ return ((Map<?, ?>) value).entrySet()
+ .stream()
+ .anyMatch(e -> e.getKey() == lookupReference
+ || e.getValue() == lookupReference);
+ }
+ }
+ return false;
+ }
+
+ private boolean hasMemberOfType(Type returnType, Class<?> classType)
+ {
+ if (returnType instanceof ParameterizedType)
+ {
+ Type[] types = ((ParameterizedType) returnType).getActualTypeArguments();
+ return Arrays.stream(types).anyMatch((Predicate<? super Type>) type -> {
+ if (type instanceof Class && classType.isAssignableFrom((Class) type))
+ {
+ return true;
+ }
+ else if (type instanceof ParameterizedType)
+ {
+ Type rawType = ((ParameterizedType) type).getRawType();
+ return rawType instanceof Class && classType.isAssignableFrom((Class) rawType);
+ }
+ else if (type instanceof TypeVariable)
+ {
+ Type[] bounds = ((TypeVariable) type).getBounds();
+ return Arrays.stream(bounds).anyMatch(boundType -> hasMemberOfType(boundType, classType));
+
+ }
+ return false;
+ });
+ }
+ return false;
+ }
+
protected ListenableFuture<Void> deleteNoChecks()
{
final String simpleClassName = AbstractConfiguredObject.this.getClass().getSimpleName();
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java b/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
index 45efb41..6f08b44 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/port/AbstractPort.java
@@ -300,9 +300,6 @@ public abstract class AbstractPort<X extends AbstractPort<X>> extends AbstractCo
Collection<Transport> transports = updated.getTransports();
- Collection<Protocol> protocols = updated.getProtocols();
-
-
boolean usesSsl = isUsingTLSTransport(transports);
if (usesSsl)
{
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java b/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java
index 453399a..d240849 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/security/AbstractKeyStore.java
@@ -80,31 +80,6 @@ public abstract class AbstractKeyStore<X extends AbstractKeyStore<X>>
}
@Override
- protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes)
- {
- super.validateChange(proxyForValidation, changedAttributes);
-
- if (changedAttributes.contains(ConfiguredObject.DESIRED_STATE) && proxyForValidation.getDesiredState() == State.DELETED)
- {
- // verify that it is not in use
- String storeName = getName();
-
- Collection<Port> ports = new ArrayList<>(getBroker().getPorts());
- for (Port port : ports)
- {
- if (port.getKeyStore() == this)
- {
- throw new IntegrityViolationException(String.format(
- "Key store '%s' can't be deleted as it is in use by a port: %s",
- storeName,
- port.getName()));
- }
- }
- }
-
- }
-
- @Override
protected ListenableFuture<Void> onClose()
{
if(_checkExpiryTaskFuture != null)
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/main/java/org/apache/qpid/server/security/AbstractTrustStore.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/security/AbstractTrustStore.java b/broker-core/src/main/java/org/apache/qpid/server/security/AbstractTrustStore.java
index fe4655a..e0760a4 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/security/AbstractTrustStore.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/security/AbstractTrustStore.java
@@ -107,62 +107,6 @@ public abstract class AbstractTrustStore<X extends AbstractTrustStore<X>>
return _eventLogger;
}
-
- @Override
- protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes)
- {
- super.validateChange(proxyForValidation, changedAttributes);
-
- if (changedAttributes.contains(ConfiguredObject.DESIRED_STATE)
- && proxyForValidation.getDesiredState() == State.DELETED)
- {
- // verify that it is not in use
- String storeName = getName();
-
- Collection<Port<?>> ports = new ArrayList<>(_broker.getPorts());
- for (Port<?> port : ports)
- {
- Collection<TrustStore> trustStores = port.getTrustStores();
- if (trustStores != null)
- {
- for (TrustStore store : trustStores)
- {
- if (storeName.equals(store.getAttribute(TrustStore.NAME)))
- {
- throw new IntegrityViolationException(String.format(
- "Trust store '%s' can't be deleted as it is in use by a port: %s",
- storeName,
- port.getName()));
- }
- }
- }
- }
-
- Collection<AuthenticationProvider> authenticationProviders =
- new ArrayList<>(_broker.getAuthenticationProviders());
- for (AuthenticationProvider authProvider : authenticationProviders)
- {
- TrustStore otherTrustStore = null;
- if (authProvider instanceof SimpleLDAPAuthenticationManager)
- {
- otherTrustStore = ((SimpleLDAPAuthenticationManager) authProvider).getTrustStore();
- }
- else if (authProvider instanceof OAuth2AuthenticationProvider)
- {
- otherTrustStore = ((OAuth2AuthenticationProvider) authProvider).getTrustStore();
- }
-
- if (otherTrustStore == this)
- {
- throw new IntegrityViolationException(String.format(
- "Trust store '%s' can't be deleted as it is in use by an authentication manager: '%s'",
- getName(),
- authProvider.getName()));
- }
- }
- }
- }
-
@Override
protected ListenableFuture<Void> onClose()
{
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java b/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java
index 5b8b219..337b109 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractAuthenticationManager.java
@@ -81,28 +81,6 @@ public abstract class AbstractAuthenticationManager<T extends AbstractAuthentica
}
@Override
- protected void validateChange(final ConfiguredObject<?> proxyForValidation, final Set<String> changedAttributes)
- {
- super.validateChange(proxyForValidation, changedAttributes);
-
- if (changedAttributes.contains(ConfiguredObject.DESIRED_STATE) && proxyForValidation.getDesiredState() == State.DELETED)
- {
- String providerName = getName();
- // verify that provider is not in use
- Collection<Port> ports = new ArrayList<>(_container.getChildren(Port.class));
- for (Port<?> port : ports)
- {
- if (port.getAuthenticationProvider() == this)
- {
- throw new IntegrityViolationException(String.format("Authentication provider '%s' is set on port %s",
- providerName,
- port.getName()));
- }
- }
- }
- }
-
- @Override
public List<String> getAvailableMechanisms(boolean secure)
{
List<String> mechanisms = getMechanisms();
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTestHelper.java
----------------------------------------------------------------------
diff --git a/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTestHelper.java b/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTestHelper.java
index f1958ff..6376ff1 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTestHelper.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/model/BrokerTestHelper.java
@@ -149,6 +149,8 @@ public class BrokerTestHelper
when(broker.getChildExecutor()).thenReturn(TASK_EXECUTOR);
when(systemConfig.getChildExecutor()).thenReturn(TASK_EXECUTOR);
when(systemConfig.createPreferenceStore()).thenReturn(mock(PreferenceStore.class));
+ when(systemConfig.getChildren(Broker.class)).thenReturn(Collections.singleton(broker));
+ when(broker.getTypeClass()).thenReturn(Broker.class);
return broker;
}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
----------------------------------------------------------------------
diff --git a/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java b/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
index 6f6e4d3..b11d19b 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileBasedGroupProviderImplTest.java
@@ -44,9 +44,9 @@ import com.google.common.collect.Sets;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor;
import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.BrokerModel;
+import org.apache.qpid.server.model.BrokerTestHelper;
import org.apache.qpid.server.model.ConfiguredObjectFactory;
import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl;
import org.apache.qpid.server.model.Group;
@@ -58,7 +58,6 @@ import org.apache.qpid.test.utils.TestFileUtils;
public class FileBasedGroupProviderImplTest extends QpidTestCase
{
- private TaskExecutor _taskExecutor;
private Broker<?> _broker;
private File _groupFile;
private ConfiguredObjectFactory _objectFactory;
@@ -67,15 +66,9 @@ public class FileBasedGroupProviderImplTest extends QpidTestCase
public void setUp() throws Exception
{
super.setUp();
- _taskExecutor = CurrentThreadTaskExecutor.newStartedInstance();
- final Model model = BrokerModel.getInstance();
- _objectFactory = new ConfiguredObjectFactoryImpl(model);
-
- _broker = mock(Broker.class);
- when(_broker.getTaskExecutor()).thenReturn(_taskExecutor);
- when(_broker.getChildExecutor()).thenReturn(_taskExecutor);
- when(_broker.getModel()).thenReturn(model);
+ _broker = BrokerTestHelper.createBrokerMock();
+ _objectFactory = _broker.getObjectFactory();
}
@Override
@@ -87,7 +80,6 @@ public class FileBasedGroupProviderImplTest extends QpidTestCase
{
_groupFile.delete();
}
- _taskExecutor.stop();
}
finally
{
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/test/java/org/apache/qpid/server/security/FileKeyStoreTest.java
----------------------------------------------------------------------
diff --git a/broker-core/src/test/java/org/apache/qpid/server/security/FileKeyStoreTest.java b/broker-core/src/test/java/org/apache/qpid/server/security/FileKeyStoreTest.java
index e950ef4..a0496b3 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/security/FileKeyStoreTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/security/FileKeyStoreTest.java
@@ -23,6 +23,7 @@ package org.apache.qpid.server.security;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -30,27 +31,21 @@ import java.util.Map;
import javax.net.ssl.KeyManager;
import org.apache.qpid.server.configuration.IllegalConfigurationException;
-import org.apache.qpid.server.configuration.updater.CurrentThreadTaskExecutor;
-import org.apache.qpid.server.configuration.updater.TaskExecutor;
-import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.BrokerModel;
+import org.apache.qpid.server.model.BrokerTestHelper;
import org.apache.qpid.server.model.ConfiguredObjectFactory;
import org.apache.qpid.server.model.IntegrityViolationException;
import org.apache.qpid.server.model.KeyStore;
-import org.apache.qpid.server.model.Model;
import org.apache.qpid.server.model.Port;
-import org.apache.qpid.test.utils.QpidTestCase;
-import org.apache.qpid.test.utils.TestSSLConstants;
import org.apache.qpid.server.util.DataUrlUtils;
import org.apache.qpid.server.util.FileUtils;
+import org.apache.qpid.test.utils.QpidTestCase;
+import org.apache.qpid.test.utils.TestSSLConstants;
public class FileKeyStoreTest extends QpidTestCase
{
- private final Broker _broker = mock(Broker.class);
- private final TaskExecutor _taskExecutor = CurrentThreadTaskExecutor.newStartedInstance();
- private final Model _model = BrokerModel.getInstance();
- private final ConfiguredObjectFactory _factory = _model.getObjectFactory();
+ private Broker _broker;
+ private ConfiguredObjectFactory _factory;
@Override
@@ -58,12 +53,8 @@ public class FileKeyStoreTest extends QpidTestCase
{
super.setUp();
- when(_broker.getTaskExecutor()).thenReturn(_taskExecutor);
- when(_broker.getChildExecutor()).thenReturn(_taskExecutor);
- when(_broker.getModel()).thenReturn(_model);
- when(_broker.getCategoryClass()).thenReturn(Broker.class);
- when(_broker.getEventLogger()).thenReturn(new EventLogger());
- when(_broker.getTypeClass()).thenReturn(Broker.class);
+ _broker = BrokerTestHelper.createBrokerMock();
+ _factory = _broker.getObjectFactory();
}
public void testCreateKeyStoreFromFile_Success() throws Exception
@@ -297,8 +288,11 @@ public class FileKeyStoreTest extends QpidTestCase
Port<?> port = mock(Port.class);
when(port.getKeyStore()).thenReturn(fileKeyStore);
+ when(port.getAttributeNames()).thenReturn(Arrays.asList("keyStore"));
+ when(port.getAttribute("keyStore")).thenReturn(fileKeyStore);
- when(_broker.getPorts()).thenReturn(Collections.<Port<?>>singletonList(port));
+ when(_broker.getPorts()).thenReturn(Collections.singleton(port));
+ when(_broker.getChildren(Port.class)).thenReturn(Collections.singleton(port));
try
{
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/test/java/org/apache/qpid/server/security/FileTrustStoreTest.java
----------------------------------------------------------------------
diff --git a/broker-core/src/test/java/org/apache/qpid/server/security/FileTrustStoreTest.java b/broker-core/src/test/java/org/apache/qpid/server/security/FileTrustStoreTest.java
index 9d184be..5af4f35 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/security/FileTrustStoreTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/security/FileTrustStoreTest.java
@@ -27,6 +27,7 @@ import java.security.KeyStore;
import java.security.cert.CertificateException;
import java.security.cert.CertificateExpiredException;
import java.security.cert.X509Certificate;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -42,6 +43,7 @@ import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.BrokerModel;
+import org.apache.qpid.server.model.BrokerTestHelper;
import org.apache.qpid.server.model.ConfiguredObjectFactory;
import org.apache.qpid.server.model.IntegrityViolationException;
import org.apache.qpid.server.model.Model;
@@ -57,23 +59,16 @@ import org.apache.qpid.test.utils.TestSSLConstants;
public class FileTrustStoreTest extends QpidTestCase
{
- private final Broker _broker = mock(Broker.class);
- private final TaskExecutor _taskExecutor = CurrentThreadTaskExecutor.newStartedInstance();
- private final Model _model = BrokerModel.getInstance();
- private final ConfiguredObjectFactory _factory = _model.getObjectFactory();
+ private Broker _broker;
+ private ConfiguredObjectFactory _factory;
@Override
public void setUp() throws Exception
{
super.setUp();
- when(_broker.getTaskExecutor()).thenReturn(_taskExecutor);
- when(_broker.getChildExecutor()).thenReturn(_taskExecutor);
-
- when(_broker.getModel()).thenReturn(_model);
- when(_broker.getCategoryClass()).thenReturn(Broker.class);
- when(_broker.getEventLogger()).thenReturn(new EventLogger());
- when(_broker.getTypeClass()).thenReturn(Broker.class);
+ _broker = BrokerTestHelper.createBrokerMock();
+ _factory = _broker.getObjectFactory();
}
public void testCreateTrustStoreFromFile_Success() throws Exception
@@ -314,9 +309,10 @@ public class FileTrustStoreTest extends QpidTestCase
SimpleLDAPAuthenticationManager ldap = mock(SimpleLDAPAuthenticationManager.class);
when(ldap.getTrustStore()).thenReturn(fileTrustStore);
-
- Collection<AuthenticationProvider<?>> authenticationProviders = Collections.<AuthenticationProvider<?>>singletonList(ldap);
- when(_broker.getAuthenticationProviders()).thenReturn(authenticationProviders);
+ when(ldap.getAttributeNames()).thenReturn(Arrays.asList("trustStore"));
+ when(ldap.getAttribute("trustStore")).thenReturn(fileTrustStore);
+ when(_broker.getAuthenticationProviders()).thenReturn(Collections.<AuthenticationProvider<?>>singleton(ldap));
+ when(_broker.getChildren(AuthenticationProvider.class)).thenReturn(Collections.singleton(ldap));
try
{
@@ -339,9 +335,12 @@ public class FileTrustStoreTest extends QpidTestCase
TrustStore<?> fileTrustStore = _factory.create(TrustStore.class, attributes, _broker);
Port<?> port = mock(Port.class);
- when(port.getTrustStores()).thenReturn(Collections.<TrustStore>singletonList(fileTrustStore));
+ when(port.getTrustStores()).thenReturn(Collections.singleton(fileTrustStore));
+ when(port.getAttribute("trustStore")).thenReturn(fileTrustStore);
+ when(port.getAttributeNames()).thenReturn(Collections.singleton("trustStore"));
- when(_broker.getPorts()).thenReturn(Collections.<Port<?>>singletonList(port));
+ when(_broker.getPorts()).thenReturn(Collections.singleton(port));
+ when(_broker.getChildren(Port.class)).thenReturn(Collections.singletonList(port));
try
{
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ManagedAuthenticationManagerTestBase.java
----------------------------------------------------------------------
diff --git a/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ManagedAuthenticationManagerTestBase.java b/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ManagedAuthenticationManagerTestBase.java
index 444c6be..e369a6e 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ManagedAuthenticationManagerTestBase.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/ManagedAuthenticationManagerTestBase.java
@@ -24,6 +24,7 @@ import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -71,6 +72,7 @@ abstract class ManagedAuthenticationManagerTestBase extends QpidTestCase
attributesMap.put(AuthenticationProvider.ID, UUID.randomUUID());
_authManager = createAuthManager(attributesMap);
_authManager.open();
+ when(_broker.getChildren(AuthenticationProvider.class)).thenReturn(Collections.singleton(_authManager));
}
@@ -274,6 +276,8 @@ abstract class ManagedAuthenticationManagerTestBase extends QpidTestCase
AmqpPort port = mock(AmqpPort.class);
when(port.getAuthenticationProvider()).thenReturn(_authManager);
when(port.getName()).thenReturn("mockPort");
+ when(port.getAttributeNames()).thenReturn(Arrays.asList("authenticationProvider"));
+ when(port.getAttribute("authenticationProvider")).thenReturn(_authManager);
final List<AmqpPort> portList = Collections.singletonList(port);
when(_broker.getChildren(eq(Port.class))).thenReturn(portList);
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/e776ae64/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PlainPasswordDatabaseAuthenticationManagerTest.java
----------------------------------------------------------------------
diff --git a/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PlainPasswordDatabaseAuthenticationManagerTest.java b/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PlainPasswordDatabaseAuthenticationManagerTest.java
index aeb48ea..57d4e7f 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PlainPasswordDatabaseAuthenticationManagerTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/security/auth/manager/PlainPasswordDatabaseAuthenticationManagerTest.java
@@ -39,6 +39,7 @@ import org.apache.qpid.server.logging.EventLogger;
import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.BrokerModel;
+import org.apache.qpid.server.model.BrokerTestHelper;
import org.apache.qpid.server.model.ConfiguredObjectFactory;
import org.apache.qpid.server.model.ConfiguredObjectFactoryImpl;
import org.apache.qpid.server.model.Model;
@@ -50,7 +51,6 @@ import org.apache.qpid.test.utils.TestFileUtils;
public class PlainPasswordDatabaseAuthenticationManagerTest extends QpidTestCase
{
- private TaskExecutor _taskExecutor;
private Broker<?> _broker;
private File _passwordFile;
private ConfiguredObjectFactory _objectFactory;
@@ -59,16 +59,10 @@ public class PlainPasswordDatabaseAuthenticationManagerTest extends QpidTestCase
public void setUp() throws Exception
{
super.setUp();
- _taskExecutor = CurrentThreadTaskExecutor.newStartedInstance();
- final Model model = BrokerModel.getInstance();
- _objectFactory = new ConfiguredObjectFactoryImpl(model);
- _broker = mock(Broker.class);
- when(_broker.getTaskExecutor()).thenReturn(_taskExecutor);
- when(_broker.getChildExecutor()).thenReturn(_taskExecutor);
- when(_broker.getModel()).thenReturn(model);
- when(_broker.getEventLogger()).thenReturn(mock(EventLogger.class));
+ _broker = BrokerTestHelper.createBrokerMock();
+ _objectFactory = _broker.getObjectFactory();
}
@Override
@@ -80,7 +74,6 @@ public class PlainPasswordDatabaseAuthenticationManagerTest extends QpidTestCase
{
_passwordFile.delete();
}
- _taskExecutor.stop();
}
finally
{
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[2/2] qpid-broker-j git commit: QPID-8083: [Broker-J] Move structure
test into module 'qpid-systests-http'
Posted by or...@apache.org.
QPID-8083: [Broker-J] Move structure test into module 'qpid-systests-http'
Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/39c228b5
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/39c228b5
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/39c228b5
Branch: refs/heads/master
Commit: 39c228b52c7e817d33b9c8ab393311fa6b3a6516
Parents: e776ae6
Author: Alex Rudyy <or...@apache.org>
Authored: Fri Mar 9 17:58:24 2018 +0000
Committer: Alex Rudyy <or...@apache.org>
Committed: Fri Mar 9 17:58:24 2018 +0000
----------------------------------------------------------------------
.../qpid/tests/http/service/StructureTest.java | 148 +++++++++++++++++++
.../qpid/systest/rest/StructureRestTest.java | 108 --------------
2 files changed, 148 insertions(+), 108 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/39c228b5/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/service/StructureTest.java
----------------------------------------------------------------------
diff --git a/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/service/StructureTest.java b/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/service/StructureTest.java
new file mode 100644
index 0000000..eeb6f99
--- /dev/null
+++ b/systests/qpid-systests-http-management/src/test/java/org/apache/qpid/tests/http/service/StructureTest.java
@@ -0,0 +1,148 @@
+/*
+ *
+ * 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.tests.http.service;
+
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Test;
+
+import org.apache.qpid.tests.http.HttpTestBase;
+import org.apache.qpid.tests.http.HttpTestHelper;
+
+public class StructureTest extends HttpTestBase
+{
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testGet() throws Exception
+ {
+ String nodeName = getVirtualHostNode();
+ String hostName = getVirtualHost();
+ HttpTestHelper helper = getHelper();
+ Map<String, Object> structure = helper.getJsonAsMap("/service/structure");
+
+ assertNotNull("Structure data cannot be null", structure);
+ assertEquals("Unexpected name", "Broker", structure.get("name"));
+ assertNotNull("Unexpected id", structure.get("id"));
+
+ List<Map<String, Object>> virtualhostnodes = (List<Map<String, Object>>) structure.get("virtualhostnodes");
+ assertNotNull("Virtual host nodes not present", virtualhostnodes);
+
+ Map<String, Object> testNode = assertPresent(nodeName, virtualhostnodes);
+
+ List<Map<String, Object>> virtualhosts = (List<Map<String, Object>>) testNode.get("virtualhosts");
+ assertNotNull("Virtual host not present", virtualhosts);
+ assertEquals(String.format("VH %s not found", hostName), 1, virtualhosts.size());
+
+ Map<String, Object> testHost = assertPresent(hostName, virtualhosts);
+
+ List<Map<String, Object>> exchanges = (List<Map<String, Object>>) testHost.get("exchanges");
+ assertNotNull("Exchanges not present", exchanges);
+ assertPresent("Exchange amq.direct is not found","amq.direct", exchanges);
+ assertPresent("Exchange amq.topic is not found","amq.topic", exchanges);
+ assertPresent("Exchange amq.fanout is not found","amq.fanout", exchanges);
+ assertPresent("Exchange amq.match is not found","amq.match", exchanges);
+
+ List<Map<String, Object>> queues = (List<Map<String, Object>>) testHost.get("queues");
+ assertNull("Unexpected queues", queues);
+
+ List<Map<String, Object>> ports = (List<Map<String, Object>>) structure.get("ports");
+ assertNotNull("Ports not present", ports);
+ Map<String, Object> amqpPort = assertPresent("AMQP", ports);
+ assertNotNull("Port AMQP is not found", amqpPort);
+ assertPresent("Port ANONYMOUS_AMQP is not found", "ANONYMOUS_AMQP", ports);
+ assertPresent("Port HTTP is not found", "HTTP", ports);
+
+ List<Map<String, Object>> aliases = (List<Map<String, Object>>) amqpPort.get("virtualhostaliases");
+ assertNotNull("Virtual host aliases not found", aliases);
+ assertPresent("Alias defaultAlias is not found","defaultAlias", aliases);
+ assertPresent("Alias hostnameAlias is not found","hostnameAlias", aliases);
+ assertPresent("Alias nameAlias is not found","nameAlias", aliases);
+
+ List<Map<String, Object>> providers = (List<Map<String, Object>>) structure.get("authenticationproviders");
+ assertNotNull("Authentication providers not present", providers);
+ assertPresent("Authentication provider 'anon' is not found", "anon", providers);
+ assertPresent("Authentication provider 'plain' is not found", "plain", providers);
+
+ Map<String, Object> plainProvider = assertPresent("plain", providers);
+ List<Map<String, Object>> users = (List<Map<String, Object>>) plainProvider.get("users");
+ assertNotNull("Authentication provider users not present", users);
+ assertPresent("User 'admin' not found","admin", users);
+ assertPresent("User 'guest' not found","guest", users);
+
+ List<Map<String, Object>> keystores = (List<Map<String, Object>>) structure.get("keystores");
+ assertNotNull("Key stores not present", keystores);
+ assertPresent("systestsKeyStore not found","systestsKeyStore", keystores);
+
+ List<Map<String, Object>> plugins = (List<Map<String, Object>>) structure.get("plugins");
+ assertNotNull("Plugins not present", plugins);
+ assertPresent("httpManagement not found","httpManagement", plugins);
+
+ String queueName = getTestName() + "Queue";
+ helper.submitRequest(String.format("queue/%s/%s/%s", nodeName, hostName, queueName),
+ "PUT",
+ Collections.singletonMap("name", queueName));
+
+ structure = helper.getJsonAsMap("/service/structure");
+
+ virtualhostnodes = (List<Map<String, Object>>) structure.get("virtualhostnodes");
+ assertNotNull("Virtual host nodes not present", virtualhostnodes);
+
+ testNode = assertPresent(hostName, virtualhostnodes);
+
+ virtualhosts = (List<Map<String, Object>>) testNode.get("virtualhosts");
+ assertNotNull("Virtual host not present", virtualhosts);
+ assertEquals(String.format("VH %s not found", hostName), 1, virtualhosts.size());
+
+ testHost = assertPresent(hostName, virtualhosts);
+
+ queues = (List<Map<String, Object>>) testHost.get("queues");
+ assertNotNull("Queues not present", queues);
+ assertPresent(String.format("Queue %s not found", queueName), queueName, queues);
+ }
+
+ private Map<String, Object> assertPresent(final String entryName,
+ final List<Map<String, Object>> entries)
+ {
+ return assertPresent(null, entryName, entries);
+ }
+
+ private Map<String, Object> assertPresent(final String notFoundErrorMessage,
+ final String entryName,
+ final List<Map<String, Object>> entries)
+ {
+ Iterator<Map<String, Object>> it = entries.stream().filter(e -> entryName.equals(e.get("name"))).iterator();
+ assertTrue(notFoundErrorMessage == null ? String.format("Entry with name '%s' is not found", entryName) : notFoundErrorMessage, it.hasNext());
+ Map<String, Object> data = it.next();
+ assertFalse(String.format("More than one entry found with name %s", entryName), it.hasNext());
+ return data;
+ }
+}
http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/39c228b5/systests/src/test/java/org/apache/qpid/systest/rest/StructureRestTest.java
----------------------------------------------------------------------
diff --git a/systests/src/test/java/org/apache/qpid/systest/rest/StructureRestTest.java b/systests/src/test/java/org/apache/qpid/systest/rest/StructureRestTest.java
deleted file mode 100644
index 28ee1d0..0000000
--- a/systests/src/test/java/org/apache/qpid/systest/rest/StructureRestTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *
- * 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.systest.rest;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.qpid.exchange.ExchangeDefaults;
-import org.apache.qpid.server.model.Port;
-import org.apache.qpid.test.utils.TestBrokerConfiguration;
-
-public class StructureRestTest extends QpidRestTestCase
-{
-
- @Override
- public void setUp() throws Exception
- {
- super.setUp();
- getRestTestHelper().createTestQueues();
- }
-
- public void testGet() throws Exception
- {
- Map<String, Object> structure = getRestTestHelper().getJsonAsMap("/service/structure");
- assertNotNull("Structure data cannot be null", structure);
- assertNode(structure, "Broker");
-
- @SuppressWarnings("unchecked")
- List<Map<String, Object>> virtualhostnodes = (List<Map<String, Object>>) structure.get("virtualhostnodes");
- assertEquals("Unexpected number of virtual hosts", 3, virtualhostnodes.size());
-
- @SuppressWarnings("unchecked")
- List<Map<String, Object>> ports = (List<Map<String, Object>>) structure.get("ports");
- assertEquals("Unexpected number of ports", 2, ports.size());
-
- @SuppressWarnings("unchecked")
- List<Map<String, Object>> providers = (List<Map<String, Object>>) structure.get("authenticationproviders");
- assertEquals("Unexpected number of authentication providers", 1, providers.size());
-
- for (String nodeName : EXPECTED_VIRTUALHOSTS)
- {
- Map<String, Object> node = getRestTestHelper().find("name", nodeName, virtualhostnodes);
- assertNotNull("Node " + nodeName + " is not found ", node);
- assertNode(node, nodeName);
- }
-
- String hostName = "test";
- Map<String, Object> node = getRestTestHelper().find("name", hostName, virtualhostnodes);
-
- @SuppressWarnings("unchecked")
- List<Map<String, Object>> virtualhosts = (List<Map<String, Object>>) node.get("virtualhosts");
-
- Map<String, Object> host = getRestTestHelper().find("name", hostName, virtualhosts);
- @SuppressWarnings("unchecked")
- List<Map<String, Object>> queues = (List<Map<String, Object>>) host.get("queues");
- assertNotNull("Host " + hostName + " queues are not found ", queues);
- for (String queueName : RestTestHelper.EXPECTED_QUEUES)
- {
- Map<String, Object> queue = getRestTestHelper().find("name", queueName, queues);
- assertNotNull(hostName + " queue " + queueName + " is not found ", queue);
- assertNode(queue, queueName);
- }
-
- @SuppressWarnings("unchecked")
- List<Map<String, Object>> exchanges = (List<Map<String, Object>>) host.get("exchanges");
- assertNotNull("Host " + hostName + " exchanges are not found ", exchanges);
- for (String exchangeName : EXPECTED_EXCHANGES)
- {
- Map<String, Object> exchange = getRestTestHelper().find("name", exchangeName, exchanges);
- assertNotNull("Exchange " + exchangeName + " is not found ", exchange);
- assertNode(exchange, exchangeName);
- }
-
- String httpPortName = TestBrokerConfiguration.ENTRY_NAME_HTTP_PORT;
- Map<String, Object> portData = getRestTestHelper().find(Port.NAME, httpPortName, ports);
- assertNotNull("Http Port " + httpPortName + " is not found", portData);
- assertNode(portData, httpPortName);
-
- String amqpPortName = TestBrokerConfiguration.ENTRY_NAME_AMQP_PORT;
- Map<String, Object> amqpPortData = getRestTestHelper().find(Port.NAME, amqpPortName, ports);
- assertNotNull("Amqp port " + amqpPortName + " is not found", amqpPortData);
- assertNode(amqpPortData, amqpPortName);
- }
-
- private void assertNode(Map<String, Object> node, String name)
- {
- assertEquals("Unexpected name", name, node.get("name"));
- assertNotNull("Unexpected id", node.get("id"));
- }
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org