summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2013-05-01 12:14:40 +0000
committerRobert Gemmell <robbie@apache.org>2013-05-01 12:14:40 +0000
commit23973109351c29388f3d45a0e275295f3df46cd1 (patch)
tree44517f3da3612447e48ccdd29b40f2637dd36abf /java
parent4ce34b5e1943c3e3ad383c90f4ce3f30a7c4af1d (diff)
downloadqpid-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')
-rw-r--r--java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/mbeans/UserManagementMBean.java17
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java14
-rw-r--r--java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java19
-rw-r--r--java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ServerInformation.java2
-rw-r--r--java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/UserManagement.java9
-rw-r--r--java/systests/src/main/java/org/apache/qpid/systest/management/jmx/UserManagementTest.java12
-rw-r--r--java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java17
-rw-r--r--java/systests/src/main/java/org/apache/qpid/test/utils/JMXTestUtils.java5
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);
}