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/09/14 13:29:25 UTC

svn commit: r1523221 - in /qpid/trunk/qpid/java: broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/ broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ systests/src/mai...

Author: orudyy
Date: Sat Sep 14 11:29:25 2013
New Revision: 1523221

URL: http://svn.apache.org/r1523221
Log:
QPID-5138: Add preferences REST interfaces to get, set and delete preferences

Added:
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/PreferencesServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesRestTest.java
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/UserPreferencesRestTest.java
Modified:
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java?rev=1523221&r1=1523220&r2=1523221&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java Sat Sep 14 11:29:25 2013
@@ -49,6 +49,8 @@ import org.apache.qpid.server.management
 import org.apache.qpid.server.management.plugin.servlet.rest.LogoutServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.MessageContentServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.MessageServlet;
+import org.apache.qpid.server.management.plugin.servlet.rest.PreferencesServlet;
+import org.apache.qpid.server.management.plugin.servlet.rest.UserPreferencesServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.RestServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.SaslServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.StructureServlet;
@@ -300,6 +302,8 @@ public class HttpManagement extends Abst
         addRestServlet(root, "plugin", Plugin.class);
         addRestServlet(root, "preferencesprovider", AuthenticationProvider.class, PreferencesProvider.class);
 
+        root.addServlet(new ServletHolder(new UserPreferencesServlet()), "/rest/userpreferences/*");
+        root.addServlet(new ServletHolder(new PreferencesServlet()), "/rest/preferences");
         root.addServlet(new ServletHolder(new StructureServlet()), "/rest/structure");
         root.addServlet(new ServletHolder(new MessageServlet()), "/rest/message/*");
         root.addServlet(new ServletHolder(new MessageContentServlet()), "/rest/message-content/*");

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java?rev=1523221&r1=1523220&r2=1523221&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/AbstractServlet.java Sat Sep 14 11:29:25 2013
@@ -21,6 +21,7 @@
 package org.apache.qpid.server.management.plugin.servlet.rest;
 
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 
@@ -40,6 +41,10 @@ import org.apache.qpid.server.management
 import org.apache.qpid.server.management.plugin.HttpManagementUtil;
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.security.SecurityManager;
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.SerializationConfig;
 
 public abstract class AbstractServlet extends HttpServlet
 {
@@ -254,4 +259,20 @@ public abstract class AbstractServlet ex
             throw new RuntimeException("Failed to send error response code " + errorCode, e);
         }
     }
+
+    protected void sendJsonResponse(Object object, HttpServletResponse response) throws IOException,
+            JsonGenerationException, JsonMappingException
+    {
+        response.setStatus(HttpServletResponse.SC_OK);
+
+        response.setHeader("Cache-Control","no-cache");
+        response.setHeader("Pragma","no-cache");
+        response.setDateHeader ("Expires", 0);
+        response.setContentType("application/json");
+
+        final PrintWriter writer = response.getWriter();
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
+        mapper.writeValue(writer, object);
+    }
 }

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/PreferencesServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/PreferencesServlet.java?rev=1523221&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/PreferencesServlet.java (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/PreferencesServlet.java Sat Sep 14 11:29:25 2013
@@ -0,0 +1,109 @@
+package org.apache.qpid.server.management.plugin.servlet.rest;
+
+import java.io.IOException;
+import java.net.SocketAddress;
+import java.security.Principal;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.security.auth.Subject;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.qpid.server.management.plugin.HttpManagementUtil;
+import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.PreferencesProvider;
+import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
+import org.codehaus.jackson.map.ObjectMapper;
+
+public class PreferencesServlet extends AbstractServlet
+{
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    protected void doGetWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response) throws IOException,
+            ServletException
+    {
+        PreferencesProvider preferencesProvider = getPreferencesProvider(request);
+        String userName = getAuthenticatedUserName(request);
+        Map<String, Object> preferences = preferencesProvider.getPreferences(userName);
+        if (preferences == null)
+        {
+            preferences = Collections.<String, Object>emptyMap();
+        }
+        sendJsonResponse(preferences, response);
+    }
+
+    /*
+     * replace preferences
+     */
+    @Override
+    protected void doPutWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response)
+            throws ServletException, IOException
+    {
+        PreferencesProvider preferencesProvider = getPreferencesProvider(request);
+        String userName = getAuthenticatedUserName(request);
+
+        ObjectMapper mapper = new ObjectMapper();
+
+        @SuppressWarnings("unchecked")
+        Map<String, Object> newPreferences = mapper.readValue(request.getInputStream(), LinkedHashMap.class);
+
+        preferencesProvider.deletePreferences(userName);
+        Map<String, Object> preferences = preferencesProvider.setPreferences(userName, newPreferences);
+        if (preferences == null)
+        {
+            preferences = Collections.<String, Object>emptyMap();
+        }
+        sendJsonResponse(preferences, response);
+    }
+
+    /*
+     * update preferences
+     */
+    @Override
+    protected void doPostWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response)
+            throws ServletException, IOException
+    {
+        PreferencesProvider preferencesProvider = getPreferencesProvider(request);
+        String userName = getAuthenticatedUserName(request);
+
+        ObjectMapper mapper = new ObjectMapper();
+
+        @SuppressWarnings("unchecked")
+        Map<String, Object> newPreferences = mapper.readValue(request.getInputStream(), LinkedHashMap.class);
+        Map<String, Object> preferences = preferencesProvider.setPreferences(userName, newPreferences);
+        if (preferences == null)
+        {
+            preferences = Collections.<String, Object>emptyMap();
+        }
+        sendJsonResponse(preferences, response);
+    }
+
+    private String getAuthenticatedUserName(HttpServletRequest request)
+    {
+        Subject subject = getAuthorisedSubject(request);
+        Principal principal = AuthenticatedPrincipal.getAuthenticatedPrincipalFromSubject(subject);
+        return principal.getName();
+    }
+
+    private AuthenticationProvider getAuthenticationProvider(HttpServletRequest request)
+    {
+        Broker broker = getBroker();
+        SocketAddress localAddress = HttpManagementUtil.getSocketAddress(request);
+        return broker.getAuthenticationProvider(localAddress);
+    }
+
+    private PreferencesProvider getPreferencesProvider(HttpServletRequest request)
+    {
+        PreferencesProvider preferencesProvider = getAuthenticationProvider(request).getPreferencesProvider();
+        if (preferencesProvider == null)
+        {
+            throw new IllegalStateException("Preferences provider is not configured");
+        }
+        return preferencesProvider;
+    }
+}

Added: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java?rev=1523221&view=auto
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java (added)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java Sat Sep 14 11:29:25 2013
@@ -0,0 +1,184 @@
+package org.apache.qpid.server.management.plugin.servlet.rest;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.log4j.Logger;
+import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.Broker;
+import org.apache.qpid.server.model.PreferencesProvider;
+import org.apache.qpid.server.model.User;
+
+public class UserPreferencesServlet extends AbstractServlet
+{
+    private static final Logger LOGGER = Logger.getLogger(UserPreferencesServlet.class);
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    protected void doGetWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response) throws IOException,
+            ServletException
+    {
+        String[] pathElements = null;
+        if (request.getPathInfo() != null && request.getPathInfo().length() > 0)
+        {
+            pathElements = request.getPathInfo().substring(1).split("/");
+        }
+        if (pathElements != null && pathElements.length > 1)
+        {
+            getUserPreferences(pathElements[0], pathElements[1], response);
+        }
+        else
+        {
+            getUserList(pathElements, response);
+        }
+    }
+
+    private void getUserPreferences(String authenticationProviderName, String userId, HttpServletResponse response)
+            throws IOException
+    {
+        Map<String, Object> preferences = null;
+        try
+        {
+            preferences = getUserPreferences(authenticationProviderName, userId);
+        }
+        catch (Exception e)
+        {
+            LOGGER.debug("Bad preferences request", e);
+            response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
+        }
+        sendJsonResponse(preferences, response);
+    }
+
+    private void getUserList(String[] pathElements, HttpServletResponse response) throws IOException
+    {
+        List<Map<String, Object>> users = null;
+        try
+        {
+            users = getUsers(pathElements);
+        }
+        catch (Exception e)
+        {
+            LOGGER.debug("Bad preferences request", e);
+            response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
+        }
+        sendJsonResponse(users, response);
+    }
+
+    private Map<String, Object> getUserPreferences(String authenticationProviderName, String userId)
+    {
+        AuthenticationProvider authenticationProvider = getAuthenticationProvider(authenticationProviderName);
+        if (authenticationProvider == null)
+        {
+            throw new IllegalArgumentException(String.format("Authentication provider '%s' is not found",
+                    authenticationProviderName));
+        }
+        PreferencesProvider preferencesProvider = authenticationProvider.getPreferencesProvider();
+        if (preferencesProvider == null)
+        {
+            throw new IllegalStateException(String.format(
+                    "Preferences provider is not set for authentication provider '%s'", authenticationProviderName));
+        }
+        return preferencesProvider.getPreferences(userId);
+    }
+
+    private AuthenticationProvider getAuthenticationProvider(String authenticationProviderName)
+    {
+        Broker broker = getBroker();
+        Collection<AuthenticationProvider> authenticationProviders = broker.getAuthenticationProviders();
+        for (AuthenticationProvider authenticationProvider : authenticationProviders)
+        {
+            if (authenticationProviderName.equals(authenticationProvider.getName()))
+            {
+                return authenticationProvider;
+            }
+        }
+        return null;
+    }
+
+    private List<Map<String, Object>> getUsers(String[] pathElements)
+    {
+        List<Map<String, Object>> users = new ArrayList<Map<String, Object>>();
+        String authenticationProviderName = pathElements != null && pathElements.length > 0 ? pathElements[0] : null;
+
+        Broker broker = getBroker();
+        Collection<AuthenticationProvider> authenticationProviders = broker.getAuthenticationProviders();
+        for (AuthenticationProvider authenticationProvider : authenticationProviders)
+        {
+            if (authenticationProviderName != null && !authenticationProvider.getName().equals(authenticationProviderName))
+            {
+                continue;
+            }
+            PreferencesProvider preferencesProvider = authenticationProvider.getPreferencesProvider();
+            if (preferencesProvider != null)
+            {
+                Set<String> usernames = preferencesProvider.listUserIDs();
+                for (String name : usernames)
+                {
+                    Map<String, Object> userMap = new HashMap<String, Object>();
+                    userMap.put(User.NAME, name);
+                    userMap.put("authenticationProvider", authenticationProvider.getName());
+                    users.add(userMap);
+                }
+            }
+        }
+        return users;
+    }
+
+    /*
+     * removes preferences
+     */
+    @Override
+    protected void doDeleteWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response)
+    {
+        final List<String[]> userData = new ArrayList<String[]>();
+        for (String name : request.getParameterValues("user"))
+        {
+            String[] elements = name.split("/");
+            if (elements.length != 2)
+            {
+                throw new IllegalArgumentException("Illegal parameter");
+            }
+            userData.add(elements);
+        }
+
+        if (!userData.isEmpty())
+        {
+            Broker broker = getBroker();
+            Collection<AuthenticationProvider> authenticationProviders = broker.getAuthenticationProviders();
+            for (Iterator<String[]> it = userData.iterator(); it.hasNext();)
+            {
+                String[] data = (String[]) it.next();
+                String authenticationProviderName = data[0];
+                String userId = data[1];
+
+                for (AuthenticationProvider authenticationProvider : authenticationProviders)
+                {
+                    if (authenticationProviderName.equals(authenticationProvider.getName()))
+                    {
+                        PreferencesProvider preferencesProvider = authenticationProvider.getPreferencesProvider();
+                        if (preferencesProvider != null)
+                        {
+                            Set<String> usernames = preferencesProvider.listUserIDs();
+                            if (usernames.contains(userId))
+                            {
+                                preferencesProvider.deletePreferences(userId);
+                            }
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+
+    }
+}

Added: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesRestTest.java?rev=1523221&view=auto
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesRestTest.java (added)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesRestTest.java Sat Sep 14 11:29:25 2013
@@ -0,0 +1,95 @@
+package org.apache.qpid.systest.rest;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.qpid.server.model.PreferencesProvider;
+import org.apache.qpid.server.model.adapter.FileSystemPreferencesProvider;
+import org.apache.qpid.test.utils.TestBrokerConfiguration;
+import org.apache.qpid.test.utils.TestFileUtils;
+
+public class PreferencesRestTest extends QpidRestTestCase
+{
+    private File _preferencesProviderFile;
+
+    public void setUp() throws Exception
+    {
+        _preferencesProviderFile = TestFileUtils.createTempFile(this, ".prefs.json",
+                "{\"webadmin\":{\"language\": \"en\", \"saveTabs\":true}}");
+        super.setUp();
+    }
+
+    public void tearDown() throws Exception
+    {
+        try
+        {
+            super.tearDown();
+        }
+        finally
+        {
+            if (_preferencesProviderFile != null)
+            {
+                _preferencesProviderFile.delete();
+            }
+        }
+    }
+
+    @Override
+    protected void customizeConfiguration() throws ConfigurationException, IOException
+    {
+        super.customizeConfiguration();
+
+        TestBrokerConfiguration brokerConfiguration = getBrokerConfiguration();
+        Map<String, Object> attributes = new HashMap<String, Object>();
+        attributes.put(PreferencesProvider.NAME, "test");
+        attributes.put(PreferencesProvider.TYPE, FileSystemPreferencesProvider.PROVIDER_TYPE);
+        attributes.put(FileSystemPreferencesProvider.PATH, _preferencesProviderFile.getAbsolutePath());
+        brokerConfiguration.addPreferencesProviderConfiguration(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER,
+                attributes);
+
+    }
+
+    public void testGetPreferences() throws Exception
+    {
+        Map<String, Object> preferences = getRestTestHelper().getJsonAsMap("/rest/preferences");
+        assertEquals("Unexpected number of preferences", 2, preferences.size());
+        assertEquals("Unexpected language preference", "en", preferences.get("language"));
+        assertEquals("Unexpected saveTabs preference", true, preferences.get("saveTabs"));
+    }
+
+    public void testUpdatePreferences() throws Exception
+    {
+        Map<String, Object> additionalPreferences = new HashMap<String, Object>();
+        additionalPreferences.put("timezone", "Europe/London");
+        additionalPreferences.put("test", 1);
+
+        int status = getRestTestHelper().submitRequest("/rest/preferences", "POST", additionalPreferences);
+        assertEquals("Unexpected response code", 200, status);
+
+        Map<String, Object> preferences = getRestTestHelper().getJsonAsMap("/rest/preferences");
+        assertEquals("Unexpected number of preferences", 4, preferences.size());
+        assertEquals("Unexpected language preference", "en", preferences.get("language"));
+        assertEquals("Unexpected saveTabs preference", true, preferences.get("saveTabs"));
+        assertEquals("Unexpected timezone preference", "Europe/London", preferences.get("timezone"));
+        assertEquals("Unexpected test preference", 1, preferences.get("test"));
+    }
+
+    public void testReplacePreferences() throws Exception
+    {
+        Map<String, Object> additionalPreferences = new HashMap<String, Object>();
+        additionalPreferences.put("timezone", "Europe/London");
+        additionalPreferences.put("test", 1);
+
+        int status = getRestTestHelper().submitRequest("/rest/preferences", "PUT", additionalPreferences);
+        assertEquals("Unexpected response code", 200, status);
+
+        Map<String, Object> preferences = getRestTestHelper().getJsonAsMap("/rest/preferences");
+        assertEquals("Unexpected number of preferences", 2, preferences.size());
+        assertEquals("Unexpected timezone preference", "Europe/London", preferences.get("timezone"));
+        assertEquals("Unexpected test preference", 1, preferences.get("test"));
+    }
+
+}

Added: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/UserPreferencesRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/UserPreferencesRestTest.java?rev=1523221&view=auto
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/UserPreferencesRestTest.java (added)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/UserPreferencesRestTest.java Sat Sep 14 11:29:25 2013
@@ -0,0 +1,119 @@
+package org.apache.qpid.systest.rest;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.qpid.server.model.PreferencesProvider;
+import org.apache.qpid.server.model.User;
+import org.apache.qpid.server.model.adapter.FileSystemPreferencesProvider;
+import org.apache.qpid.test.utils.TestBrokerConfiguration;
+import org.apache.qpid.test.utils.TestFileUtils;
+
+public class UserPreferencesRestTest extends QpidRestTestCase
+{
+    private File _preferencesProviderFile;
+
+    public void setUp() throws Exception
+    {
+        _preferencesProviderFile = TestFileUtils.createTempFile(this, ".prefs.json",
+                "{\"webadmin\":{\"language\": \"en\", \"saveTabs\":true},"
+              + " \"admin\":{\"language\": \"fr\", \"saveTabs\":false}" + "}");
+        super.setUp();
+    }
+
+    public void tearDown() throws Exception
+    {
+        try
+        {
+            super.tearDown();
+        }
+        finally
+        {
+            if (_preferencesProviderFile != null)
+            {
+                _preferencesProviderFile.delete();
+            }
+        }
+    }
+
+    @Override
+    protected void customizeConfiguration() throws ConfigurationException, IOException
+    {
+        super.customizeConfiguration();
+
+        TestBrokerConfiguration brokerConfiguration = getBrokerConfiguration();
+        Map<String, Object> attributes = new HashMap<String, Object>();
+        attributes.put(PreferencesProvider.NAME, "test");
+        attributes.put(PreferencesProvider.TYPE, FileSystemPreferencesProvider.PROVIDER_TYPE);
+        attributes.put(FileSystemPreferencesProvider.PATH, _preferencesProviderFile.getAbsolutePath());
+        brokerConfiguration.addPreferencesProviderConfiguration(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER,
+                attributes);
+
+    }
+
+    public void testGetUserPreferences() throws Exception
+    {
+        Map<String, Object> preferences = getRestTestHelper().getJsonAsMap(
+                "/rest/userpreferences/" + TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/webadmin");
+        assertEquals("Unexpected number of preferences", 2, preferences.size());
+        assertEquals("Unexpected language preference", "en", preferences.get("language"));
+        assertEquals("Unexpected saveTabs preference", true, preferences.get("saveTabs"));
+    }
+
+    public void testGetUserListForAuthenticationProvider() throws Exception
+    {
+        List<Map<String, Object>> users = getRestTestHelper().getJsonAsList(
+                "/rest/userpreferences/" + TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER);
+        assertEquals("Unexpected number of users", 2, users.size());
+        String[] expectedUsers = { "webadmin", "admin" };
+        for (int i = 0; i < expectedUsers.length; i++)
+        {
+            Map<String, Object> user = findUser(expectedUsers[i], users);
+            assertNotNull(String.format("User %s is not found", expectedUsers[i]), user);
+        }
+    }
+
+    public void testGetUserList() throws Exception
+    {
+        List<Map<String, Object>> users = getRestTestHelper().getJsonAsList("/rest/userpreferences");
+        assertEquals("Unexpected number of users", 2, users.size());
+        String[] expectedUsers = { "webadmin", "admin" };
+        for (int i = 0; i < expectedUsers.length; i++)
+        {
+            Map<String, Object> user = findUser(expectedUsers[i], users);
+            assertNotNull(String.format("User %s is not found", expectedUsers[i]), user);
+        }
+    }
+
+    public void testDeleteUser() throws Exception
+    {
+        int status = getRestTestHelper().submitRequest(
+                "/rest/userpreferences?user="
+                        + URLEncoder.encode(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/webadmin",
+                                "UTF-8"), "DELETE", null);
+        assertEquals("Unexpected status ", 200, status);
+        List<Map<String, Object>> users = getRestTestHelper().getJsonAsList("/rest/userpreferences");
+        assertEquals("Unexpected number of users", 1, users.size());
+        Map<String, Object> user = findUser("admin", users);
+        assertNotNull("User admin is not found", user);
+        assertNull("User webadmin is found", findUser("webadmin", users));
+    }
+
+    private Map<String, Object> findUser(String userName, List<Map<String, Object>> users)
+    {
+        for (Map<String, Object> map : users)
+        {
+            if (userName.equals(map.get(User.NAME)))
+            {
+                return map;
+            }
+        }
+        return null;
+    }
+
+}



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