summaryrefslogtreecommitdiff
path: root/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java')
-rw-r--r--qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java199
1 files changed, 199 insertions, 0 deletions
diff --git a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java
new file mode 100644
index 0000000000..6db204b9ca
--- /dev/null
+++ b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/PreferencesProviderRestTest.java
@@ -0,0 +1,199 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+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.qpid.server.model.AuthenticationProvider;
+import org.apache.qpid.server.model.BrokerModel;
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.model.ExternalFileBasedAuthenticationManager;
+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.security.auth.manager.PlainPasswordDatabaseAuthenticationManager;
+import org.apache.qpid.test.utils.TestBrokerConfiguration;
+import org.apache.qpid.test.utils.TestFileUtils;
+
+public class PreferencesProviderRestTest extends QpidRestTestCase
+{
+ private Map<String, File> _preferencesProviderFiles;
+ private File _authenticationProviderFile;
+
+ public void setUp() throws Exception
+ {
+ _authenticationProviderFile = TestFileUtils.createTempFile(this, ".test.prefs.txt", "test:test");
+ _preferencesProviderFiles = new HashMap<String, File>();
+ super.setUp();
+ }
+
+ public void tearDown() throws Exception
+ {
+ try
+ {
+ super.tearDown();
+ }
+ finally
+ {
+ if (_authenticationProviderFile != null)
+ {
+ _authenticationProviderFile.delete();
+ }
+ for (File file : _preferencesProviderFiles.values())
+ {
+ file.delete();
+ }
+ }
+ }
+
+ @Override
+ protected void customizeConfiguration() throws IOException
+ {
+ super.customizeConfiguration();
+ Map<String, Object> anonymousAuthProviderAttributes = new HashMap<String, Object>();
+ anonymousAuthProviderAttributes.put(AuthenticationProvider.TYPE, PlainPasswordDatabaseAuthenticationManager.PROVIDER_TYPE);
+ anonymousAuthProviderAttributes.put(AuthenticationProvider.NAME, TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "-2");
+ anonymousAuthProviderAttributes.put(ExternalFileBasedAuthenticationManager.PATH, _authenticationProviderFile.getAbsolutePath());
+ getBrokerConfiguration().addObjectConfiguration(AuthenticationProvider.class,anonymousAuthProviderAttributes);
+ }
+
+ public void testCreateAndGetProvider() throws Exception
+ {
+ List<Map<String, Object>> providerDetails = getRestTestHelper().getJsonAsList("preferencesprovider");
+ assertEquals("Unexpected number of providers", 0, providerDetails.size());
+
+ createPreferencesProvider(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER, "test1");
+ createPreferencesProvider(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "-2", "test2");
+
+ providerDetails = getRestTestHelper().getJsonAsList("preferencesprovider");
+ assertEquals("Unexpected number of providers", 2, providerDetails.size());
+
+ for (Map<String, Object> provider : providerDetails)
+ {
+ assertProvider(provider);
+ }
+
+ Map<String, Object> provider = getRestTestHelper().getJsonAsSingletonList(
+ "preferencesprovider/" + TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/test1");
+ assertProvider(provider);
+ assertEquals("Unexpected provider name ", "test1", provider.get(PreferencesProvider.NAME));
+
+ Map<String, Object> provider2 = getRestTestHelper().getJsonAsSingletonList(
+ "preferencesprovider/" + TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "-2/test2");
+ assertProvider(provider);
+ assertEquals("Unexpected provider name ", "test2", provider2.get(PreferencesProvider.NAME));
+ }
+
+ public void testDeleteProvider() throws Exception
+ {
+ createPreferencesProvider(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER, "test1");
+ String providerUrl = "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");
+ 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 = "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\"}}");
+ _preferencesProviderFiles.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),
+ _preferencesProviderFiles.get(name).getAbsolutePath());
+ }
+
+ public void assertProviderCommonAttributes(Map<String, Object> provider)
+ {
+ Asserts.assertAttributesPresent(provider,
+ BrokerModel.getInstance().getTypeRegistry().getAttributeNames(
+ PreferencesProvider.class),
+ ConfiguredObject.CREATED_BY,
+ ConfiguredObject.CREATED_TIME,
+ ConfiguredObject.LAST_UPDATED_BY,
+ ConfiguredObject.LAST_UPDATED_TIME,
+ ConfiguredObject.DESCRIPTION,
+ ConfiguredObject.CONTEXT,
+ ConfiguredObject.DESIRED_STATE);
+ 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\"}}");
+ _preferencesProviderFiles.put(providerName, file);
+ attributes.put(FileSystemPreferencesProvider.PATH, file.getAbsolutePath());
+
+ int responseCode = getRestTestHelper().submitRequest(
+ "preferencesprovider/" + authenticationProvider + "/" + providerName, "PUT", attributes);
+ assertEquals("Unexpected response code", 201, responseCode);
+ }
+
+}