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 2013/04/25 17:35:26 UTC

svn commit: r1475825 - in /qpid/trunk/qpid/java: broker-plugins/management-http/src/main/java/resources/js/qpid/management/ broker/src/main/java/org/apache/qpid/server/configuration/startup/ broker/src/main/java/org/apache/qpid/server/model/adapter/ br...

Author: orudyy
Date: Thu Apr 25 15:35:25 2013
New Revision: 1475825

URL: http://svn.apache.org/r1475825
Log:
QPID-4596: Call AuthenticationManager#onCreate() only when authentication provider is created

Modified:
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
    qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
    qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PlainPasswordFileAuthenticationManagerFactoryTest.java
    qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js?rev=1475825&r1=1475824&r2=1475825&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js Thu Apr 25 15:35:25 2013
@@ -357,11 +357,25 @@ define(["dojo/_base/xhr",
                             var deleteProviderButton = query(".deleteAuthenticationProvider", contentPane.containerNode)[0];
                             connect.connect(registry.byNode(deleteProviderButton), "onClick",
                                     function(evt){
+                                        var warning = "";
+                                        var data = that.brokerUpdater.authenticationProvidersGrid.grid.selection.getSelected();
+                                        if(data.length && data.length > 0)
+                                        {
+                                          for(var i = 0; i<data.length; i++)
+                                          {
+                                              if (data[i].type.indexOf("File") != -1)
+                                              {
+                                                warning = "NOTE: provider deletion will also remove the password file on disk.\n\n"
+                                                break;
+                                              }
+                                          }
+                                        }
+
                                         util.deleteGridSelections(
                                                 that.brokerUpdater,
                                                 that.brokerUpdater.authenticationProvidersGrid.grid,
                                                 "rest/authenticationprovider",
-                                                "Are you sure you want to delete authentication provider");
+                                                warning + "Are you sure you want to delete authentication provider");
                                 }
                             );
 

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java?rev=1475825&r1=1475824&r2=1475825&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java Thu Apr 25 15:35:25 2013
@@ -44,10 +44,7 @@ public class AuthenticationProviderRecov
     {
         Broker broker = RecovererHelper.verifyOnlyBrokerIsParent(parents);
         Map<String, Object> attributes = configurationEntry.getAttributes();
-        AuthenticationProvider authenticationProvider = _authenticationProviderFactory.create(
-                configurationEntry.getId(),
-                broker,
-                attributes);
+        AuthenticationProvider authenticationProvider = _authenticationProviderFactory.recover(configurationEntry.getId(), attributes, broker);
 
         return authenticationProvider;
     }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java?rev=1475825&r1=1475824&r2=1475825&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java Thu Apr 25 15:35:25 2013
@@ -253,10 +253,11 @@ public abstract class AuthenticationProv
     @Override
     protected void changeAttributes(Map<String, Object> attributes)
     {
-        AuthenticationManager manager = validateAttributes(attributes);
+        Map<String, Object> effectiveAttributes = super.generateEffectiveAttributes(attributes);
+        AuthenticationManager manager = validateAttributes(effectiveAttributes);
         manager.initialise();
         _authManager = (T)manager;
-        String type = (String)attributes.get(AuthenticationManagerFactory.ATTRIBUTE_TYPE);
+        String type = (String)effectiveAttributes.get(AuthenticationManagerFactory.ATTRIBUTE_TYPE);
         AuthenticationManagerFactory managerFactory = _factories.get(type);
         _supportedAttributes = createSupportedAttributes(managerFactory.getAttributeNames());
         super.changeAttributes(attributes);

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java?rev=1475825&r1=1475824&r2=1475825&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java Thu Apr 25 15:35:25 2013
@@ -62,6 +62,24 @@ public class AuthenticationProviderFacto
      */
     public AuthenticationProvider create(UUID id, Broker broker, Map<String, Object> attributes)
     {
+        AuthenticationProviderAdapter<?> provider = createAuthenticationProvider(id, broker, attributes);
+        provider.getAuthManager().onCreate();
+        return provider;
+    }
+
+    /**
+     * Recovers {@link AuthenticationProvider} for given ID, attributes and {@link Broker}.
+     * <p>
+     * The configured {@link AuthenticationManagerFactory}'s are used to try to create the {@link AuthenticationProvider}.
+     * The first non-null instance is returned. The factories are used in non-deterministic order.
+     */
+    public AuthenticationProvider recover(UUID id, Map<String, Object> attributes, Broker broker)
+    {
+        return createAuthenticationProvider(id, broker, attributes);
+    }
+
+    private AuthenticationProviderAdapter<?> createAuthenticationProvider(UUID id, Broker broker, Map<String, Object> attributes)
+    {
         for (AuthenticationManagerFactory factory : _factories)
         {
             AuthenticationManager manager = factory.createInstance(attributes);
@@ -80,18 +98,15 @@ public class AuthenticationProviderFacto
                     {
                         if (provider instanceof PasswordCredentialManagingAuthenticationProvider)
                         {
-                            throw new IllegalConfigurationException("An authentication provider which can manage users alredy exists ["
+                            throw new IllegalConfigurationException("An authentication provider which can manage users already exists ["
                                     + provider.getName() + "]. Only one instance is allowed.");
                         }
                     }
-
-                    manager.onCreate();
                     authenticationProvider = new PrincipalDatabaseAuthenticationManagerAdapter(id, broker,
                             (PrincipalDatabaseAuthenticationManager) manager, attributes, factory.getAttributeNames());
                 }
                 else
                 {
-                    manager.onCreate();
                     authenticationProvider = new SimpleAuthenticationProviderAdapter(id, broker, manager, attributes, factory.getAttributeNames());
                 }
                 return authenticationProvider;

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1475825&r1=1475824&r2=1475825&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java Thu Apr 25 15:35:25 2013
@@ -536,13 +536,9 @@ public class BrokerAdapter extends Abstr
 
     private AuthenticationProvider createAuthenticationProvider(Map<String, Object> attributes)
     {
-        AuthenticationProvider authenticationProvider = null;
-        synchronized (_authenticationProviders)
-        {
-            authenticationProvider = _authenticationProviderFactory.create(UUID.randomUUID(), this, attributes);
-            addAuthenticationProvider(authenticationProvider);
-        }
+        AuthenticationProvider authenticationProvider = _authenticationProviderFactory.create(UUID.randomUUID(), this, attributes);
         authenticationProvider.setDesiredState(State.INITIALISING, State.ACTIVE);
+        addAuthenticationProvider(authenticationProvider);
         return authenticationProvider;
     }
 

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java?rev=1475825&r1=1475824&r2=1475825&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java Thu Apr 25 15:35:25 2013
@@ -21,6 +21,7 @@
 package org.apache.qpid.server.security.auth.manager;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.security.Principal;
 import org.apache.log4j.Logger;
@@ -79,6 +80,19 @@ public class PrincipalDatabaseAuthentica
 
     public void initialise()
     {
+        try
+        {
+            _principalDatabase.open(new File(_passwordFile));
+        }
+        catch (FileNotFoundException e)
+        {
+            throw new IllegalConfigurationException("Exception opening password database: " + e.getMessage(), e);
+        }
+        catch (IOException e)
+        {
+            throw new IllegalConfigurationException("Cannot use password database at :" + _passwordFile, e);
+        }
+
         final Map<String, Class<? extends SaslServerFactory>> providerMap = new TreeMap<String, Class<? extends SaslServerFactory>>();
 
         initialiseAuthenticationMechanisms(providerMap, _principalDatabase);
@@ -224,8 +238,6 @@ public class PrincipalDatabaseAuthentica
             {
                 throw new IllegalConfigurationException("Cannot read password file" + _passwordFile + ". Check permissions.");
             }
-
-            _principalDatabase.open(passwordFile);
         }
         catch (IOException e)
         {

Modified: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java?rev=1475825&r1=1475824&r2=1475825&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java (original)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java Thu Apr 25 15:35:25 2013
@@ -23,6 +23,8 @@ package org.apache.qpid.server.model.ada
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.never;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -45,20 +47,42 @@ public class AuthenticationProviderFacto
 
     public void testCreatePasswordCredentialManagingAuthenticationProvider()
     {
-        AuthenticationProvider provider = testForFactory(mock(PrincipalDatabaseAuthenticationManager.class));
+        AuthenticationManager am = mock(PrincipalDatabaseAuthenticationManager.class);
+        AuthenticationProvider provider = testForFactory(am, true);
         assertTrue("The created provider should match the factory's AuthenticationManager type",
                 provider instanceof PasswordCredentialManagingAuthenticationProvider);
+        verify(am).onCreate();
     }
 
     public void testCreateNonPasswordCredentialManagingAuthenticationProvider()
     {
-        AuthenticationProvider provider = testForFactory(mock(AuthenticationManager.class));
+        AuthenticationManager am = mock(AuthenticationManager.class);
+        AuthenticationProvider provider = testForFactory(am, true);
         assertFalse("The created provider should match the factory's AuthenticationManager type",
                 provider instanceof PasswordCredentialManagingAuthenticationProvider);
+        verify(am).onCreate();
+    }
+
+    public void testRecoverPasswordCredentialManagingAuthenticationProvider()
+    {
+        AuthenticationManager am = mock(PrincipalDatabaseAuthenticationManager.class);
+        AuthenticationProvider provider = testForFactory(am, false);
+        assertTrue("The created provider should match the factory's AuthenticationManager type",
+                provider instanceof PasswordCredentialManagingAuthenticationProvider);
+        verify(am, never()).onCreate();
+    }
+
+    public void testRecoverNonPasswordCredentialManagingAuthenticationProvider()
+    {
+        AuthenticationManager am = mock(AuthenticationManager.class);
+        AuthenticationProvider provider = testForFactory(am, false);
+        assertFalse("The created provider should match the factory's AuthenticationManager type",
+                provider instanceof PasswordCredentialManagingAuthenticationProvider);
+        verify(am, never()).onCreate();
     }
 
     @SuppressWarnings("unchecked")
-    private AuthenticationProvider testForFactory(AuthenticationManager authenticationManager)
+    private AuthenticationProvider testForFactory(AuthenticationManager authenticationManager, boolean create)
     {
         UUID id = UUID.randomUUID();
         Map<String, Object> attributes = new HashMap<String, Object>();
@@ -73,7 +97,16 @@ public class AuthenticationProviderFacto
         when(authenticationManagerFactory.createInstance(attributes)).thenReturn(authenticationManager);
 
         AuthenticationProviderFactory providerFactory = new AuthenticationProviderFactory(authManagerFactoryServiceLoader);
-        AuthenticationProvider provider = providerFactory.create(id, broker, attributes);
+
+        AuthenticationProvider provider = null;
+        if (create)
+        {
+            provider = providerFactory.create(id, broker, attributes);
+        }
+        else
+        {
+            provider = providerFactory.recover(id, attributes, broker);
+        }
 
         assertNotNull("Provider is not created", provider);
         assertEquals("Unexpected ID", id, provider.getId());

Modified: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PlainPasswordFileAuthenticationManagerFactoryTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PlainPasswordFileAuthenticationManagerFactoryTest.java?rev=1475825&r1=1475824&r2=1475825&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PlainPasswordFileAuthenticationManagerFactoryTest.java (original)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PlainPasswordFileAuthenticationManagerFactoryTest.java Thu Apr 25 15:35:25 2013
@@ -20,7 +20,6 @@
 package org.apache.qpid.server.security.auth.manager;
 
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -62,14 +61,11 @@ public class PlainPasswordFileAuthentica
         _configuration.put(AbstractPrincipalDatabaseAuthManagerFactory.ATTRIBUTE_TYPE, PlainPasswordFileAuthenticationManagerFactory.PROVIDER_TYPE);
         _configuration.put(AbstractPrincipalDatabaseAuthManagerFactory.ATTRIBUTE_PATH, _emptyPasswordFile.getAbsolutePath());
 
-        try
-        {
-            _factory.createInstance(_configuration);
-        }
-        catch (RuntimeException re)
-        {
-            assertTrue(re.getCause() instanceof FileNotFoundException);
-        }
+        AuthenticationManager manager = _factory.createInstance(_configuration);
+
+        assertNotNull(manager);
+        assertTrue(manager instanceof PrincipalDatabaseAuthenticationManager);
+        assertTrue(((PrincipalDatabaseAuthenticationManager)manager).getPrincipalDatabase() instanceof PlainPasswordFilePrincipalDatabase);
     }
 
     public void testReturnsNullWhenNoConfig() throws Exception

Modified: qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java?rev=1475825&r1=1475824&r2=1475825&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java (original)
+++ qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java Thu Apr 25 15:35:25 2013
@@ -25,10 +25,14 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.security.Principal;
 import java.security.Provider;
 import java.security.Security;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.security.auth.callback.CallbackHandler;
@@ -36,9 +40,11 @@ import javax.security.sasl.SaslException
 import javax.security.sasl.SaslServer;
 import javax.security.sasl.SaslServerFactory;
 
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.security.auth.AuthenticationResult;
 import org.apache.qpid.server.security.auth.AuthenticationResult.AuthenticationStatus;
 import org.apache.qpid.server.security.auth.UsernamePrincipal;
+import org.apache.qpid.server.security.auth.database.PlainPasswordFilePrincipalDatabase;
 import org.apache.qpid.server.security.auth.database.PrincipalDatabase;
 import org.apache.qpid.server.security.auth.sasl.AuthenticationProviderInitialiser;
 import org.apache.qpid.server.security.auth.sasl.UsernamePasswordInitialiser;
@@ -121,8 +127,51 @@ public class PrincipalDatabaseAuthentica
 
         usernamePasswordInitialiser.initialise(_principalDatabase);
 
-        _manager = new PrincipalDatabaseAuthenticationManager(_principalDatabase, null);
+        _manager = new PrincipalDatabaseAuthenticationManager(_principalDatabase, _passwordFileLocation);
+        _manager.initialise();
+    }
+
+    public void testInitialiseWhenPasswordFileNotFound() throws Exception
+    {
+        _principalDatabase = new PlainPasswordFilePrincipalDatabase();
+        _manager = new PrincipalDatabaseAuthenticationManager(_principalDatabase, _passwordFileLocation);
+
+        try
+        {
+            _manager.initialise();
+            fail("Initialisiation should fail when users file does not exist");
+        }
+        catch (IllegalConfigurationException e)
+        {
+            assertTrue(e.getCause() instanceof FileNotFoundException);
+        }
+    }
+
+    public void testInitialiseWhenPasswordFileExists() throws Exception
+    {
+        _principalDatabase = new PlainPasswordFilePrincipalDatabase();
+        _manager = new PrincipalDatabaseAuthenticationManager(_principalDatabase, _passwordFileLocation);
+
+        File f = new File(_passwordFileLocation);
+        f.createNewFile();
+        FileOutputStream fos = null;
+        try
+        {
+            fos = new FileOutputStream(f);
+            fos.write("admin:admin".getBytes());
+        }
+        finally
+        {
+            if (fos != null)
+            {
+                fos.close();
+            }
+        }
         _manager.initialise();
+        List<Principal> users = _principalDatabase.getUsers();
+        assertEquals("Unexpected uses size", 1, users.size());
+        Principal p = _principalDatabase.getUser("admin");
+        assertEquals("Unexpected principal name", "admin", p.getName());
     }
 
     /**

Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java?rev=1475825&r1=1475824&r2=1475825&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java Thu Apr 25 15:35:25 2013
@@ -169,6 +169,52 @@ public class AuthenticationProviderRestT
         assertEquals("Unexpected number of providers", 0, providerDetails.size());
     }
 
+    public void testCreateAndDeletePasswordAuthenticationProviderWithNonExistingFile() throws Exception
+    {
+        stopBroker();
+        getBrokerConfiguration().setSaved(false);
+        getBrokerConfiguration().removeObjectConfiguration(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER);
+        getBrokerConfiguration().setObjectAttribute(TestBrokerConfiguration.ENTRY_NAME_AMQP_PORT, Port.AUTHENTICATION_PROVIDER, ANONYMOUS_AUTHENTICATION_PROVIDER);
+        getBrokerConfiguration().setObjectAttribute(TestBrokerConfiguration.ENTRY_NAME_HTTP_PORT, Port.AUTHENTICATION_PROVIDER, ANONYMOUS_AUTHENTICATION_PROVIDER);
+
+        startBroker();
+
+        File file = new File(TMP_FOLDER + File.separator + getTestName());
+        if (file.exists())
+        {
+            file.delete();
+        }
+        assertFalse("File " + file.getAbsolutePath() + " should not exist", file.exists());
+
+        // create provider
+        String providerName = "test-provider";
+        Map<String, Object> attributes = new HashMap<String, Object>();
+        attributes.put(AuthenticationProvider.NAME, providerName);
+        attributes.put(AuthenticationProvider.TYPE, PlainPasswordFileAuthenticationManagerFactory.PROVIDER_TYPE);
+        attributes.put(PlainPasswordFileAuthenticationManagerFactory.ATTRIBUTE_PATH, file.getAbsolutePath());
+
+        int responseCode = getRestTestHelper().submitRequest("/rest/authenticationprovider/" + providerName, "PUT", attributes);
+        assertEquals("Password provider was not created", 201, responseCode);
+
+
+        Map<String, Object> providerDetails = getRestTestHelper().getJsonAsSingletonList("/rest/authenticationprovider/" + providerName);
+        assertNotNull("Providers details cannot be null", providerDetails);
+        assertEquals("Unexpected name", providerName, providerDetails.get(AuthenticationProvider.NAME));
+        assertEquals("Unexpected type", PlainPasswordFileAuthenticationManagerFactory.PROVIDER_TYPE, providerDetails.get(AuthenticationProvider.TYPE));
+        assertEquals("Unexpected path", file.getAbsolutePath(), providerDetails.get(PlainPasswordFileAuthenticationManagerFactory.ATTRIBUTE_PATH));
+
+        assertTrue("User file should be created", file.exists());
+
+        responseCode = getRestTestHelper().submitRequest("/rest/authenticationprovider/" + providerName , "DELETE", null);
+        assertEquals("Unexpected response code for provider deletion", 200, responseCode);
+
+        List<Map<String, Object>> providers = getRestTestHelper().getJsonAsList("/rest/authenticationprovider/" + providerName);
+        assertNotNull("Providers details cannot be null", providers);
+        assertEquals("Unexpected number of providers", 0, providers.size());
+
+        assertFalse("File " + file.getAbsolutePath() + " should be deleted", file.exists());
+    }
+
     private void assertProvider(boolean managesPrincipals, String type, Map<String, Object> provider)
     {
         Asserts.assertAttributesPresent(provider, AuthenticationProvider.AVAILABLE_ATTRIBUTES,



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org