diff options
author | Robert Gemmell <robbie@apache.org> | 2013-05-01 12:14:40 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2013-05-01 12:14:40 +0000 |
commit | 23973109351c29388f3d45a0e275295f3df46cd1 (patch) | |
tree | 44517f3da3612447e48ccdd29b40f2637dd36abf /java | |
parent | 4ce34b5e1943c3e3ad383c90f4ce3f30a7c4af1d (diff) | |
download | qpid-python-23973109351c29388f3d45a0e275295f3df46cd1.tar.gz |
QPID-4795: update naming of the UserManagement MBeans to remove restriction preventing there being multiple AuthenticationProviders capable of user management
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1477965 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
8 files changed, 43 insertions, 52 deletions
diff --git a/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/UserManagementMBean.java b/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/UserManagementMBean.java index c7aade34b4..cce38d26b1 100644 --- a/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/UserManagementMBean.java +++ b/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/UserManagementMBean.java @@ -27,9 +27,11 @@ import org.apache.qpid.management.common.mbeans.annotations.MBeanDescription; import org.apache.qpid.server.jmx.AMQManagedObject; import org.apache.qpid.server.jmx.ManagedObject; import org.apache.qpid.server.jmx.ManagedObjectRegistry; +import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.PasswordCredentialManagingAuthenticationProvider; import javax.management.JMException; +import javax.management.ObjectName; import javax.management.openmbean.CompositeData; import javax.management.openmbean.CompositeDataSupport; import javax.management.openmbean.CompositeType; @@ -51,6 +53,9 @@ public class UserManagementMBean extends AMQManagedObject implements UserManagem private PasswordCredentialManagingAuthenticationProvider _authProvider; + private String _mbeanName; + private String _type; + // Setup for the TabularType private static final TabularType _userlistDataType; // Datatype for representing User Lists private static final CompositeType _userDataType; // Composite type for representing User @@ -81,14 +86,16 @@ public class UserManagementMBean extends AMQManagedObject implements UserManagem public UserManagementMBean(PasswordCredentialManagingAuthenticationProvider provider, ManagedObjectRegistry registry) throws JMException { super(UserManagement.class, UserManagement.TYPE, registry); - register(); _authProvider = provider; + _mbeanName = UserManagement.TYPE + "-" + _authProvider.getName(); + _type = String.valueOf(_authProvider.getAttribute(AuthenticationProvider.TYPE)); + register(); } @Override public String getObjectInstanceName() { - return UserManagement.TYPE; + return ObjectName.quote(_mbeanName); } @Override @@ -176,4 +183,10 @@ public class UserManagementMBean extends AMQManagedObject implements UserManagem { return null; } + + @Override + public String getAuthenticationProviderType() + { + return _type; + } } diff --git a/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java b/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java index 4dfcaab8ef..7efb71d78b 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java +++ b/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java @@ -88,20 +88,6 @@ public class AuthenticationProviderFactory AuthenticationProviderAdapter<?> authenticationProvider; if (manager instanceof PrincipalDatabaseAuthenticationManager) { - // a temporary restriction to prevent creation of several instances - // of PlainPasswordFileAuthenticationProvider/Base64MD5PasswordFileAuthenticationProvider - // due to current limitation of JMX management which cannot cope - // with several user management MBeans as MBean type is used as a name. - - // TODO: Remove this check after fixing of JMX management - for (AuthenticationProvider provider : broker.getAuthenticationProviders()) - { - if (provider instanceof PasswordCredentialManagingAuthenticationProvider) - { - throw new IllegalConfigurationException("An authentication provider which can manage users already exists [" - + provider.getName() + "]. Only one instance is allowed."); - } - } authenticationProvider = new PrincipalDatabaseAuthenticationManagerAdapter(id, broker, (PrincipalDatabaseAuthenticationManager) manager, attributes, factory.getAttributeNames()); } diff --git a/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java b/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java index 4a76c1837c..fbb1e4105f 100644 --- a/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java +++ b/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java @@ -33,7 +33,6 @@ import java.util.UUID; import junit.framework.TestCase; -import org.apache.qpid.server.configuration.IllegalConfigurationException; import org.apache.qpid.server.model.AuthenticationProvider; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.PasswordCredentialManagingAuthenticationProvider; @@ -114,8 +113,7 @@ public class AuthenticationProviderFactoryTest extends TestCase return provider; } - @SuppressWarnings("unchecked") - public void testCreatePasswordCredentialManagingAuthenticationProviderFailsWhenAnotherOneAlreadyExist() + public void testCreatePasswordCredentialManagingAuthenticationProviderFailsWhenAnotherOneAlready() { Broker broker = mock(Broker.class); PasswordCredentialManagingAuthenticationProvider anotherProvider = mock(PasswordCredentialManagingAuthenticationProvider.class); @@ -127,15 +125,12 @@ public class AuthenticationProviderFactoryTest extends TestCase when(loader.atLeastOneInstanceOf(AuthenticationManagerFactory.class)).thenReturn(Collections.singleton(managerFactory)); AuthenticationProviderFactory providerFactory = new AuthenticationProviderFactory(loader); - try - { - providerFactory.create(UUID.randomUUID(), broker, new HashMap<String, Object>()); - fail("Creation of anaother PasswordCredentialManagingAuthenticationProvider should fail"); - } - catch (IllegalConfigurationException e) - { - // pass - } + + UUID randomUUID = UUID.randomUUID(); + AuthenticationProvider provider = providerFactory.create(randomUUID, broker, new HashMap<String, Object>()); + + assertNotNull("Provider is not created", provider); + assertEquals("Unexpected ID", randomUUID, provider.getId()); } @SuppressWarnings("unchecked") diff --git a/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ServerInformation.java b/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ServerInformation.java index 1a4715224f..43249ea004 100644 --- a/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ServerInformation.java +++ b/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ServerInformation.java @@ -46,7 +46,7 @@ public interface ServerInformation * Qpid JMX API 1.1 can be assumed. */ int QPID_JMX_API_MAJOR_VERSION = 2; - int QPID_JMX_API_MINOR_VERSION = 5; + int QPID_JMX_API_MINOR_VERSION = 6; /** diff --git a/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/UserManagement.java b/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/UserManagement.java index 540ae3ee6a..657f9f90e4 100644 --- a/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/UserManagement.java +++ b/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/UserManagement.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.management.common.mbeans; +import org.apache.qpid.management.common.mbeans.annotations.MBeanAttribute; import org.apache.qpid.management.common.mbeans.annotations.MBeanOperation; import org.apache.qpid.management.common.mbeans.annotations.MBeanOperationParameter; @@ -118,5 +119,11 @@ public interface UserManagement impact = MBeanOperationInfo.INFO) TabularData viewUsers(); - + /** + * The type of the underlying authentication provider being managed. + * + * @since Qpid JMX API 2.6 + */ + @MBeanAttribute(name="AuthenticationProviderType", description="The type of the underlying authentication provider being managed.") + String getAuthenticationProviderType(); } diff --git a/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/UserManagementTest.java b/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/UserManagementTest.java index 9fc92c98a3..9ab88f8bbf 100644 --- a/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/UserManagementTest.java +++ b/java/systests/src/main/java/org/apache/qpid/systest/management/jmx/UserManagementTest.java @@ -23,7 +23,6 @@ import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -31,9 +30,6 @@ import javax.jms.Connection; import javax.jms.JMSException; import org.apache.qpid.management.common.mbeans.UserManagement; -import org.apache.qpid.server.model.Port; -import org.apache.qpid.server.model.Protocol; -import org.apache.qpid.server.model.Transport; import org.apache.qpid.server.plugin.AuthenticationManagerFactory; import org.apache.qpid.server.security.auth.manager.AbstractPrincipalDatabaseAuthManagerFactory; import org.apache.qpid.server.security.auth.manager.PlainPasswordFileAuthenticationManagerFactory; @@ -74,7 +70,7 @@ public class UserManagementTest extends QpidBrokerTestCase _testUserName = getTestName() + System.currentTimeMillis(); - _userManagement = _jmxUtils.getUserManagement(); + _userManagement = _jmxUtils.getUserManagement(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER); } @@ -160,6 +156,12 @@ public class UserManagementTest extends QpidBrokerTestCase assertJmsConnectionSucceeds(_testUserName, TEST_PASSWORD); } + public void testGetAuthenticationProviderType() throws Exception + { + String actualType = _userManagement.getAuthenticationProviderType(); + assertEquals("unexpected authentication provider type", getAuthenticationManagerType(), actualType); + } + protected Passwd createPasswordEncodingUtility() { return new Passwd() diff --git a/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java b/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java index 97c75d8d80..4ff0db8bc3 100644 --- a/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java +++ b/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java @@ -60,7 +60,7 @@ public class AuthenticationProviderRestTest extends QpidRestTestCase } } - public void testPutCreateSecondPlainPrincipalDatabaseProviderFails() throws Exception + public void testPutCreateSecondPlainPrincipalDatabaseProviderSucceeds() throws Exception { File principalDatabase = getRestTestHelper().createTemporaryPasswdFile(new String[]{"admin2", "guest2", "test2"}); @@ -71,7 +71,7 @@ public class AuthenticationProviderRestTest extends QpidRestTestCase attributes.put(PlainPasswordFileAuthenticationManagerFactory.ATTRIBUTE_PATH, principalDatabase.getAbsolutePath()); int responseCode = getRestTestHelper().submitRequest("/rest/authenticationprovider/" + providerName, "PUT", attributes); - assertEquals("Expected to fail because we can have only one password provider", 409, responseCode); + assertEquals("failed to create authentication provider", 201, responseCode); } public void testPutCreateNewAnonymousProvider() throws Exception @@ -107,19 +107,6 @@ public class AuthenticationProviderRestTest extends QpidRestTestCase assertEquals("Update with new ID should fail", 409, responseCode); } - public void testDeleteOfDefaultAuthenticationProviderFails() throws Exception - { - String providerName = TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER; - - int responseCode = getRestTestHelper().submitRequest("/rest/authenticationprovider/" + providerName , "DELETE", null); - assertEquals("Unexpected response code", 409, responseCode); - - List<Map<String, Object>> providerDetails = getRestTestHelper().getJsonAsList("/rest/authenticationprovider/" + providerName); - assertNotNull("Providers details cannot be null", providerDetails); - assertEquals("Unexpected number of providers", 1, providerDetails.size()); - assertProvider(true, PlainPasswordFileAuthenticationManagerFactory.PROVIDER_TYPE, providerDetails.get(0)); - } - public void testDeleteOfUsedAuthenticationProviderFails() throws Exception { // create provider diff --git a/java/systests/src/main/java/org/apache/qpid/test/utils/JMXTestUtils.java b/java/systests/src/main/java/org/apache/qpid/test/utils/JMXTestUtils.java index b8ca4b3f7f..4e5c4ca034 100644 --- a/java/systests/src/main/java/org/apache/qpid/test/utils/JMXTestUtils.java +++ b/java/systests/src/main/java/org/apache/qpid/test/utils/JMXTestUtils.java @@ -381,9 +381,10 @@ public class JMXTestUtils return getManagedObject(LoggingManagement.class, objectName); } - public UserManagement getUserManagement() throws MalformedObjectNameException + public UserManagement getUserManagement(String name) throws MalformedObjectNameException { - ObjectName objectName = new ObjectName("org.apache.qpid:type=UserManagement,name=UserManagement"); + String umName = ObjectName.quote(UserManagement.TYPE + "-" + name); + ObjectName objectName = new ObjectName("org.apache.qpid:type=UserManagement,name=" + umName); return getManagedObject(UserManagement.class, objectName); } |