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