diff options
| author | Alex Rudyy <orudyy@apache.org> | 2013-09-14 11:27:19 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2013-09-14 11:27:19 +0000 |
| commit | 4c2bc5696d9a05e0adecd3f3a91db95ce1b1aeef (patch) | |
| tree | fef76f845288b422117048d1da19d982f33df5a3 /qpid/java | |
| parent | fffdab69bb44b9b9e8361a9d0ad250f48129a117 (diff) | |
| download | qpid-python-4c2bc5696d9a05e0adecd3f3a91db95ce1b1aeef.tar.gz | |
QPID-5138: Add preferences provider REST interfaces
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1523219 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
3 files changed, 160 insertions, 0 deletions
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java index c47ec9b9e7..00ad041512 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java @@ -65,6 +65,7 @@ import org.apache.qpid.server.model.GroupProvider; 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 AbstractPluginAdapter implements HttpManagem 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/*"); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java index 75e5bd9842..5314cbaece 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java @@ -55,6 +55,7 @@ public class HelperServlet extends AbstractServlet 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() diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java new file mode 100644 index 0000000000..d5bde7c34d --- /dev/null +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java @@ -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); + } + +} |
