Author: orudyy
Date: Sat Sep 14 11:27:19 2013
New Revision: 1523219

URL: http://svn.apache.org/r1523219
Log:
QPID-5138: Add preferences provider REST interfaces

Added:
    
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.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/HelperServlet.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=1523219&r1=1523218&r2=1523219&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:27:19 2013
@@ -65,6 +65,7 @@ import org.apache.qpid.server.model.Grou
 import org.apache.qpid.server.model.KeyStore;
 import org.apache.qpid.server.model.Plugin;
 import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.PreferencesProvider;
 import org.apache.qpid.server.model.Protocol;
 import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.model.Session;
@@ -297,6 +298,7 @@ public class HttpManagement extends Abst
         addRestServlet(root, "keystore", KeyStore.class);
         addRestServlet(root, "truststore", TrustStore.class);
         addRestServlet(root, "plugin", Plugin.class);
+        addRestServlet(root, "preferencesprovider", 
AuthenticationProvider.class, PreferencesProvider.class);
 
         root.addServlet(new ServletHolder(new StructureServlet()), 
"/rest/structure");
         root.addServlet(new ServletHolder(new MessageServlet()), 
"/rest/message/*");

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.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/HelperServlet.java?rev=1523219&r1=1523218&r2=1523219&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java
 Sat Sep 14 11:27:19 2013
@@ -55,6 +55,7 @@ public class HelperServlet extends Abstr
                 new ListAuthenticationProviderAttributes(),
                 new 
ListBrokerAttribute(Broker.SUPPORTED_VIRTUALHOST_STORE_TYPES, 
"ListMessageStoreTypes"),
                 new ListBrokerAttribute(Broker.SUPPORTED_VIRTUALHOST_TYPES, 
"ListVirtualHostTypes"),
+                new 
ListBrokerAttribute(Broker.SUPPORTED_PREFERENCES_PROVIDERS_TYPES, 
"ListPreferencesProvidersTypes"),
                 new ListGroupProviderAttributes(),
                 new ListAccessControlProviderAttributes(),
                 new PluginClassProviderAction()

Added: 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java?rev=1523219&view=auto
==============================================================================
--- 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java
 (added)
+++ 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java
 Sat Sep 14 11:27:19 2013
@@ -0,0 +1,157 @@
+package org.apache.qpid.systest.rest;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.LifetimePolicy;
+import org.apache.qpid.server.model.PreferencesProvider;
+import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.model.adapter.FileSystemPreferencesProvider;
+import org.apache.qpid.server.plugin.AuthenticationManagerFactory;
+import 
org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManagerFactory;
+import org.apache.qpid.test.utils.TestBrokerConfiguration;
+import org.apache.qpid.test.utils.TestFileUtils;
+
+public class PreferencesProviderRestTest extends QpidRestTestCase
+{
+    private Map<String, File> _providers;
+
+    public void setUp() throws Exception
+    {
+        _providers = new HashMap<String, File>();
+        super.setUp();
+    }
+
+    public void tearDown() throws Exception
+    {
+        try
+        {
+            super.tearDown();
+        }
+        finally
+        {
+            for (File file : _providers.values())
+            {
+                file.delete();
+            }
+        }
+    }
+
+    @Override
+    protected void customizeConfiguration() throws ConfigurationException, 
IOException
+    {
+        super.customizeConfiguration();
+        Map<String, Object> anonymousAuthProviderAttributes = new 
HashMap<String, Object>();
+        
anonymousAuthProviderAttributes.put(AuthenticationManagerFactory.ATTRIBUTE_TYPE,
 AnonymousAuthenticationManagerFactory.PROVIDER_TYPE);
+        anonymousAuthProviderAttributes.put(AuthenticationProvider.NAME,  
TestBrokerConfiguration.ENTRY_NAME_ANONYMOUS_PROVIDER);
+        
getBrokerConfiguration().addAuthenticationProviderConfiguration(anonymousAuthProviderAttributes);
+    }
+
+    public void testCreateAndGetProvider() throws Exception
+    {
+        List<Map<String, Object>> providerDetails = 
getRestTestHelper().getJsonAsList("/rest/preferencesprovider");
+        assertEquals("Unexpected number of providers", 0, 
providerDetails.size());
+
+        
createPreferencesProvider(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER,
 "test1");
+        
createPreferencesProvider(TestBrokerConfiguration.ENTRY_NAME_ANONYMOUS_PROVIDER,
 "test2");
+
+        providerDetails = 
getRestTestHelper().getJsonAsList("/rest/preferencesprovider");
+        assertEquals("Unexpected number of providers", 2, 
providerDetails.size());
+
+        for (Map<String, Object> provider : providerDetails)
+        {
+            assertProvider(provider);
+        }
+
+        Map<String, Object> provider = 
getRestTestHelper().getJsonAsSingletonList(
+                "/rest/preferencesprovider/" + 
TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/test1");
+        assertProvider(provider);
+        assertEquals("Unexpected provider name ", "test1", 
provider.get(PreferencesProvider.NAME));
+    }
+
+    public void testDeleteProvider() throws Exception
+    {
+        
createPreferencesProvider(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER,
 "test1");
+        String providerUrl = "/rest/preferencesprovider/" + 
TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/test1";
+        Map<String, Object> provider = 
getRestTestHelper().getJsonAsSingletonList(providerUrl);
+        assertProvider(provider);
+        assertEquals("Unexpected provider name ", "test1", 
provider.get(PreferencesProvider.NAME));
+
+        int responseCode = getRestTestHelper().submitRequest(providerUrl, 
"DELETE", null);
+        assertEquals("Failed to delete preferences provider", 200, 
responseCode);
+
+        List<Map<String, Object>> providerDetails = 
getRestTestHelper().getJsonAsList(providerUrl);
+        assertEquals("Unexpected number of providers", 0, 
providerDetails.size());
+    }
+
+    public void testUpdateProvider() throws Exception
+    {
+        
createPreferencesProvider(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER,
 "test1");
+        String providerUrl = "/rest/preferencesprovider/" + 
TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/test1";
+        Map<String, Object> provider = 
getRestTestHelper().getJsonAsSingletonList(providerUrl);
+        assertProvider(provider);
+        assertEquals("Unexpected provider name ", "test1", 
provider.get(PreferencesProvider.NAME));
+
+        File file = TestFileUtils.createTempFile(this, ".prefs.json", 
"{\"admin\":{\"something\": \"somethingValue\"}}");
+        _providers.put("new-test1", file);
+        Map<String, Object> newAttributes = new HashMap<String, Object>();
+        newAttributes.put(FileSystemPreferencesProvider.PATH, 
file.getAbsolutePath());
+
+        int responseCode = getRestTestHelper().submitRequest(providerUrl, 
"PUT", newAttributes);
+        assertEquals("Failed to update preferences provider", 200, 
responseCode);
+
+        List<Map<String, Object>> providerDetails = 
getRestTestHelper().getJsonAsList(providerUrl);
+        assertEquals("Unexpected number of providers", 1, 
providerDetails.size());
+
+        provider = providerDetails.get(0);
+        assertProviderCommonAttributes(provider);
+        String name = (String) provider.get(PreferencesProvider.NAME);
+        assertEquals("Unexpected name", "test1", name);
+        assertEquals("Unexpected path for provider " + name, (String) 
provider.get(FileSystemPreferencesProvider.PATH),
+                file.getAbsolutePath());
+    }
+
+    private void assertProvider(Map<String, Object> provider)
+    {
+        assertProviderCommonAttributes(provider);
+
+        String name = (String) provider.get(PreferencesProvider.NAME);
+        assertNotNull("Name cannot be null", name);
+        assertEquals("Unexpected path for provider " + name, (String) 
provider.get(FileSystemPreferencesProvider.PATH),
+                _providers.get(name).getAbsolutePath());
+    }
+
+    public void assertProviderCommonAttributes(Map<String, Object> provider)
+    {
+        Asserts.assertAttributesPresent(provider, 
PreferencesProvider.AVAILABLE_ATTRIBUTES, PreferencesProvider.CREATED,
+                PreferencesProvider.UPDATED, PreferencesProvider.TIME_TO_LIVE);
+        assertEquals("Unexpected value of provider attribute " + 
PreferencesProvider.STATE, State.ACTIVE.name(),
+                provider.get(PreferencesProvider.STATE));
+        assertEquals("Unexpected value of provider attribute " + 
PreferencesProvider.LIFETIME_POLICY,
+                LifetimePolicy.PERMANENT.name(), 
provider.get(PreferencesProvider.LIFETIME_POLICY));
+        assertEquals("Unexpected value of provider attribute " + 
PreferencesProvider.DURABLE, Boolean.TRUE,
+                provider.get(PreferencesProvider.DURABLE));
+        assertEquals("Unexpected value of provider attribute " + 
PreferencesProvider.TYPE,
+                 FileSystemPreferencesProvider.PROVIDER_TYPE, 
provider.get(PreferencesProvider.TYPE));
+    }
+
+    private void createPreferencesProvider(String authenticationProvider, 
String providerName) throws Exception
+    {
+        Map<String, Object> attributes = new HashMap<String, Object>();
+        attributes.put(PreferencesProvider.NAME, providerName);
+        attributes.put(PreferencesProvider.TYPE, 
FileSystemPreferencesProvider.PROVIDER_TYPE);
+        File file = TestFileUtils.createTempFile(this, ".prefs.json", 
"{\"admin\":{\"language\": \"en\"}}");
+        _providers.put(providerName, file);
+        attributes.put(FileSystemPreferencesProvider.PATH, 
file.getAbsolutePath());
+
+        int responseCode = getRestTestHelper().submitRequest(
+                "/rest/preferencesprovider/" + authenticationProvider + "/" + 
providerName, "PUT", attributes);
+        assertEquals("Unexpected response code", 201, responseCode);
+    }
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to