blob: 39a22fae1aaa6cbf257b5b700dbc046ca61d2401 [file] [log] [blame]
/*
*
* 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.server.management.plugin.controller.latest;
import static org.apache.qpid.server.management.plugin.HttpManagementConfiguration.PREFERENCE_OPERTAION_TIMEOUT_CONTEXT_NAME;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.security.PrivilegedAction;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.security.auth.Subject;
import org.junit.Before;
import org.junit.Test;
import org.apache.qpid.server.management.plugin.HttpManagementConfiguration;
import org.apache.qpid.server.management.plugin.ManagementException;
import org.apache.qpid.server.management.plugin.ManagementRequest;
import org.apache.qpid.server.management.plugin.ManagementResponse;
import org.apache.qpid.server.management.plugin.RequestType;
import org.apache.qpid.server.model.AuthenticationProvider;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.BrokerModel;
import org.apache.qpid.server.model.BrokerTestHelper;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.model.VirtualHostNode;
import org.apache.qpid.server.model.preferences.GenericPreferenceValueFactory;
import org.apache.qpid.server.model.preferences.Preference;
import org.apache.qpid.server.model.preferences.PreferenceImpl;
import org.apache.qpid.server.security.auth.AuthenticatedPrincipal;
import org.apache.qpid.server.security.auth.UsernamePrincipal;
import org.apache.qpid.server.virtualhost.QueueManagingVirtualHost;
import org.apache.qpid.test.utils.UnitTestBase;
public class LatestManagementControllerTest extends UnitTestBase
{
private LatestManagementController _controller;
@Before
public void setUp()
{
final HttpManagementConfiguration<?> httpManagement = mock(HttpManagementConfiguration.class);
when(httpManagement.getContextValue(Long.class, PREFERENCE_OPERTAION_TIMEOUT_CONTEXT_NAME)).thenReturn(1000L);
_controller = new LatestManagementController(httpManagement);
}
@Test
public void getVersion()
{
assertThat(_controller.getVersion(), is(equalTo(BrokerModel.MODEL_VERSION)));
}
@Test
public void getCategories()
{
assertThat(_controller.getCategories(), is(equalTo(BrokerModel.getInstance()
.getSupportedCategories()
.stream()
.map(Class::getSimpleName)
.collect(Collectors.toSet()))));
}
@Test
public void getCategoryMapping()
{
assertThat(_controller.getCategoryMapping("foo"),
is(equalTo(String.format("/api/v%s/%s/", BrokerModel.MODEL_VERSION, "foo"))));
}
@Test
public void getCategory()
{
final ConfiguredObject<?> object = mock(ConfiguredObject.class);
doReturn(Broker.class).when(object).getCategoryClass();
assertThat(_controller.getCategory(object), is(equalTo(Broker.class.getSimpleName())));
}
@Test
public void getCategoryHierarchyForBrokerRootAndQueueCategory()
{
final Broker<?> object = BrokerTestHelper.createBrokerMock();
final Collection<String> expected = Arrays.asList("VirtualHostNode", "VirtualHost", "Queue");
assertThat(_controller.getCategoryHierarchy(object, "Queue"), is(equalTo(expected)));
}
@Test
public void getCategoryHierarchyForVirtualHostRootAndExchangeCategory() throws Exception
{
final QueueManagingVirtualHost<?> object = BrokerTestHelper.createVirtualHost("test", this);
final Collection<String> expected = Collections.singletonList("Exchange");
assertThat(_controller.getCategoryHierarchy(object, "Exchange"), is(equalTo(expected)));
}
@Test
public void getCategoryHierarchyForBrokerRootAndUnknownCategory()
{
final Broker<?> object = BrokerTestHelper.createBrokerMock();
final Collection<String> expected = Collections.emptyList();
assertThat(_controller.getCategoryHierarchy(object, "Binding"), is(equalTo(expected)));
}
@Test
public void getNextVersionManagementController()
{
assertThat(_controller.getNextVersionManagementController(), is(nullValue()));
}
@Test
public void getRequestTypeForGetAndModelObjectWithNotFullPath() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final ManagementRequest request = mock(ManagementRequest.class);
when(request.getCategory()).thenReturn("queue");
doReturn(virtualHost.getBroker()).when(request).getRoot();
when(request.getPath()).thenReturn(Arrays.asList("*", hostName));
when(request.getParameters()).thenReturn(Collections.emptyMap());
when(request.getMethod()).thenReturn("GET");
final RequestType type = _controller.getRequestType(request);
assertThat(type, is(equalTo(RequestType.MODEL_OBJECT)));
}
@Test
public void getRequestTypeForGetAndModelObjectWithFullPath() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final ManagementRequest request = mock(ManagementRequest.class);
when(request.getCategory()).thenReturn("queue");
doReturn(virtualHost.getBroker()).when(request).getRoot();
final List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName, "bar");
when(request.getPath()).thenReturn(path);
when(request.getParameters()).thenReturn(Collections.emptyMap());
when(request.getMethod()).thenReturn("GET");
final RequestType type = _controller.getRequestType(request);
assertThat(type, is(equalTo(RequestType.MODEL_OBJECT)));
}
@Test
public void getRequestTypeForGetAndUserPreferences() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final ManagementRequest request = mock(ManagementRequest.class);
when(request.getCategory()).thenReturn("queue");
doReturn(virtualHost.getBroker()).when(request).getRoot();
List<String> path = Arrays.asList(virtualHost.getParent().getName(),
hostName,
"bar",
"userpreferences");
when(request.getPath()).thenReturn(path);
when(request.getParameters()).thenReturn(Collections.emptyMap());
when(request.getMethod()).thenReturn("GET");
final RequestType type = _controller.getRequestType(request);
assertThat(type, is(equalTo(RequestType.USER_PREFERENCES)));
}
@Test
public void getRequestTypeForGetAndVisiblePreferences() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final ManagementRequest request = mock(ManagementRequest.class);
when(request.getCategory()).thenReturn("queue");
doReturn(virtualHost.getBroker()).when(request).getRoot();
List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName, "bar", "visiblepreferences");
when(request.getPath()).thenReturn(path);
when(request.getParameters()).thenReturn(Collections.emptyMap());
when(request.getMethod()).thenReturn("GET");
final RequestType type = _controller.getRequestType(request);
assertThat(type, is(equalTo(RequestType.VISIBLE_PREFERENCES)));
}
@Test
public void getForBrokerRootAndQueueSingletonPath() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final String nodeName = virtualHost.getParent().getName();
final List<String> path = Arrays.asList(nodeName, hostName, "foo");
final Object object = _controller.get(virtualHost.getBroker(), "queue", path, Collections.emptyMap());
assertThat(object, is(notNullValue()));
assertThat(object, is(instanceOf(Queue.class)));
final Queue data = (Queue) object;
assertThat(data.getName(), is(equalTo("foo")));
}
@Test
public void getForBrokerRootAndQueuePathNoQueueName() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final String nodeName = virtualHost.getParent().getName();
final List<String> path = Arrays.asList(nodeName, hostName);
final Object object = _controller.get(virtualHost.getBroker(), "queue", path, Collections.emptyMap());
assertThat(object, is(notNullValue()));
assertThat(object, is(instanceOf(Collection.class)));
final Collection<?> data = (Collection<?>) object;
final Iterator iterator = data.iterator();
final Object o = iterator.next();
final Object o2 = iterator.next();
assertThat(o, is(notNullValue()));
assertThat(o, is(instanceOf(Queue.class)));
assertThat(((Queue) o).getName(), is(equalTo("foo")));
assertThat(o2, is(notNullValue()));
assertThat(o2, is(instanceOf(Queue.class)));
assertThat(((Queue) o2).getName(), is(equalTo("bar")));
}
@Test
public void getForBrokerRootAndQueuePathWithWildCards() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final List<String> path = Arrays.asList("*", hostName);
final Object object = _controller.get(virtualHost.getBroker(), "queue", path, Collections.emptyMap());
assertThat(object, is(notNullValue()));
assertThat(object, is(instanceOf(Collection.class)));
final Collection<?> data = (Collection<?>) object;
assertThat(data.size(), is(equalTo(2)));
final Iterator iterator = data.iterator();
final Object o = iterator.next();
final Object o2 = iterator.next();
assertThat(o, is(notNullValue()));
assertThat(o, is(instanceOf(Queue.class)));
assertThat(((Queue) o).getName(), is(equalTo("foo")));
assertThat(o2, is(notNullValue()));
assertThat(o2, is(instanceOf(Queue.class)));
assertThat(((Queue) o2).getName(), is(equalTo("bar")));
}
@Test
public void getForBrokerRootAndQueuePathWithFilter() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar", "bar2");
final List<String> path = Arrays.asList("*", hostName);
final Object object = _controller.get(virtualHost.getBroker(),
"queue",
path,
Collections.singletonMap(Queue.NAME, Arrays.asList("foo", "bar")));
assertThat(object, is(notNullValue()));
assertThat(object, is(instanceOf(Collection.class)));
final Collection<?> data = (Collection<?>) object;
assertThat(data.size(), is(equalTo(2)));
final Iterator iterator = data.iterator();
final Object o = iterator.next();
final Object o2 = iterator.next();
assertThat(o, is(notNullValue()));
assertThat(o, is(instanceOf(Queue.class)));
assertThat(((Queue) o).getName(), is(equalTo("foo")));
assertThat(o2, is(notNullValue()));
assertThat(o2, is(instanceOf(Queue.class)));
assertThat(((Queue) o2).getName(), is(equalTo("bar")));
}
@Test
public void createOrUpdateUsingPutAndFullPath() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName);
final List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName, "bar");
final Object object = _controller.createOrUpdate(virtualHost.getBroker(),
"queue",
path,
new HashMap<>(Collections.singletonMap(Queue.NAME, "bar")),
false);
assertThat(object, is(notNullValue()));
assertThat(object, is(instanceOf(Queue.class)));
assertThat(((Queue) object).getName(), is(equalTo("bar")));
}
@Test
public void createOrUpdateUsingPostAndFullPathForNonExisting() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName);
final List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName, "bar");
try
{
_controller.createOrUpdate(virtualHost.getBroker(),
"queue",
path,
new HashMap<>(Collections.singletonMap(Queue.NAME, "bar")),
true);
fail("Post update should fail for non existing");
}
catch (ManagementException e)
{
assertThat(e.getStatusCode(), is(equalTo(404)));
}
}
@Test
public void createOrUpdateUsingPostAndFullPathForExisting() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "bar");
final List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName, "bar");
final Object object = _controller.createOrUpdate(virtualHost.getBroker(),
"queue",
path,
new HashMap<>(Collections.singletonMap(Queue.NAME, "bar")),
true);
assertThat(object, is(nullValue()));
}
@Test
public void createOrUpdateUsingPostAndParentPath() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName);
final List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName);
final Object object = _controller.createOrUpdate(virtualHost.getBroker(),
"queue",
path,
new HashMap<>(Collections.singletonMap(Queue.NAME, "bar")),
true);
assertThat(object, is(notNullValue()));
assertThat(object, is(instanceOf(Queue.class)));
assertThat(((Queue) object).getName(), is(equalTo("bar")));
}
@Test
public void deleteUsingFullPath() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName, "bar");
int count = _controller.delete(virtualHost.getBroker(), "queue", path, Collections.emptyMap());
assertThat(count, is(equalTo(1)));
}
@Test
public void deleteUsingFilter() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName);
int count = _controller.delete(virtualHost.getBroker(),
"queue",
path,
Collections.singletonMap(Queue.NAME, Arrays.asList("foo", "bar", "bar2")));
assertThat(count, is(equalTo(2)));
}
@Test
public void deleteUsingWildcard() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName, "*");
int count = _controller.delete(virtualHost.getBroker(), "queue", path, Collections.emptyMap());
assertThat(count, is(equalTo(2)));
}
@Test
public void invoke() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName);
Map<String, Object> message = new HashMap<>();
message.put("address", "foo");
message.put("persistent", "false");
message.put("content", "Test Content");
message.put("mimeType", "text/plain");
ManagementResponse response = _controller.invoke(virtualHost.getBroker(),
"virtualhost",
path,
"publishMessage",
Collections.singletonMap("message", message),
true,
true);
assertThat(response, is(notNullValue()));
assertThat(response.getResponseCode(), is(equalTo(200)));
Object body = response.getBody();
assertThat(body, is(instanceOf(Number.class)));
assertThat(((Number) body).intValue(), is(equalTo(1)));
}
@Test
public void getPreferences() throws Exception
{
final String hostName = "default";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName);
final String preferencesType = "X-type-preference";
final Map<String, Object> preferenceValue = Collections.singletonMap("foo", "bar");
final Subject testSubject = createTestSubject();
final String prefernceName = "test";
createPreferences(testSubject, virtualHost, preferencesType, prefernceName, preferenceValue);
List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName, "userpreferences");
final Object preferences = Subject.doAs(testSubject, (PrivilegedAction<Object>) () ->
_controller.getPreferences(virtualHost.getBroker(), "virtualhost", path, Collections.emptyMap()));
assertPreference(preferencesType, prefernceName, preferenceValue, preferences);
}
@Test
public void setPreferences() throws Exception
{
final String hostName = "default";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName);
final String preferencesType = "X-type";
final Map<String, Object> preferenceValue = Collections.singletonMap("foo", "bar");
final Subject testSubject = createTestSubject();
final String preferenceName = "pref";
final UUID id = createPreferences(testSubject, virtualHost, preferencesType, preferenceName, preferenceValue);
final List<String> path = Arrays.asList(virtualHost.getParent().getName(), hostName, "userpreferences");
final Map<String, Object> newValue = Collections.singletonMap("foo", "bar2");
final Map<String, Object> data = new HashMap<>();
data.put("id", id.toString());
data.put("name", preferenceName);
data.put("value", newValue);
final Map<String, List<Object>> modifiedPreferences = Collections.singletonMap(preferencesType,
Collections.singletonList(data));
Subject.doAs(testSubject, (PrivilegedAction<Void>) () -> {
_controller.setPreferences(virtualHost.getBroker(),
"virtualhost",
path,
modifiedPreferences,
Collections.emptyMap(),
true);
return null;
});
final Object preferences = Subject.doAs(testSubject, (PrivilegedAction<Object>) () ->
_controller.getPreferences(virtualHost.getBroker(), "virtualhost", path, Collections.emptyMap()));
assertPreference(preferencesType, preferenceName, newValue, preferences);
}
@Test
public void deletePreferences() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName);
final String preferencesType = "X-type";
final Map<String, Object> preferenceValue = Collections.singletonMap("foo", "bar");
final Subject testSubject = createTestSubject();
final String preferenceName = "pref";
createPreferences(testSubject, virtualHost, preferencesType, preferenceName, preferenceValue);
final List<String> path = Arrays.asList(virtualHost.getParent().getName(),
hostName,
"userpreferences",
preferencesType,
preferenceName);
Subject.doAs(testSubject, (PrivilegedAction<Void>) () -> {
_controller.deletePreferences(virtualHost.getBroker(),
"virtualhost",
path,
Collections.emptyMap());
return null;
});
final List<String> path2 = Arrays.asList(virtualHost.getParent().getName(), hostName, "userpreferences");
final Object preferences = Subject.doAs(testSubject, (PrivilegedAction<Object>) () ->
_controller.getPreferences(virtualHost.getBroker(), "virtualhost", path2, Collections.emptyMap()));
assertThat(preferences, is(notNullValue()));
assertThat(preferences, is(instanceOf(Map.class)));
final Map<?, ?> map = (Map<?, ?>) preferences;
assertThat(map.size(), is(equalTo(0)));
}
@Test
public void formatConfiguredObjectForSingletonResponse() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final Object formatted = _controller.formatConfiguredObject(virtualHost,
Collections.singletonMap("depth",
Collections.singletonList(
"1")),
true);
assertThat(formatted, is(notNullValue()));
assertThat(formatted, is(instanceOf(Map.class)));
final Map<?, ?> data = (Map<?, ?>) formatted;
assertThat(data.get(VirtualHost.NAME), is(equalTo(hostName)));
final Object queues = data.get("queues");
assertThat(queues, is(notNullValue()));
assertThat(queues, is(instanceOf(Collection.class)));
final Collection<?> queueCollection = (Collection<?>) queues;
assertThat(queueCollection.size(), is(equalTo(2)));
final Iterator<?> iterator = queueCollection.iterator();
final Object queue1 = iterator.next();
final Object queue2 = iterator.next();
assertThat(queue1, is(instanceOf(Map.class)));
assertThat(queue2, is(instanceOf(Map.class)));
final Map<?, ?> queueMap1 = (Map<?, ?>) queue1;
final Map<?, ?> queueMap2 = (Map<?, ?>) queue2;
assertThat(queueMap1.get(Queue.NAME), is(equalTo("bar")));
assertThat(queueMap2.get(Queue.NAME), is(equalTo("foo")));
}
@Test
public void formatConfiguredObjectForCollectionResponse() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final Object formatted = _controller.formatConfiguredObject(Collections.singletonList(virtualHost),
Collections.singletonMap("depth",
Collections.singletonList(
"1")),
true);
assertThat(formatted, is(notNullValue()));
assertThat(formatted, is(instanceOf(Collection.class)));
final Collection<?> formattedCollection = (Collection<?>) formatted;
assertThat(formattedCollection.size(), is(equalTo(1)));
Object item = formattedCollection.iterator().next();
assertThat(item, is(instanceOf(Map.class)));
final Map<?, ?> data = (Map<?, ?>) item;
assertThat(data.get(VirtualHost.NAME), is(equalTo(hostName)));
final Object queues = data.get("queues");
assertThat(queues, is(notNullValue()));
assertThat(queues, is(instanceOf(Collection.class)));
final Collection<?> queueCollection = (Collection<?>) queues;
assertThat(queueCollection.size(), is(equalTo(2)));
final Iterator<?> iterator = queueCollection.iterator();
final Object queue1 = iterator.next();
final Object queue2 = iterator.next();
assertThat(queue1, is(instanceOf(Map.class)));
assertThat(queue2, is(instanceOf(Map.class)));
final Map<?, ?> queueMap1 = (Map<?, ?>) queue1;
final Map<?, ?> queueMap2 = (Map<?, ?>) queue2;
assertThat(queueMap1.get(Queue.NAME), is(equalTo("bar")));
assertThat(queueMap2.get(Queue.NAME), is(equalTo("foo")));
}
@Test
public void handleGetForBrokerRootAndQueueSingletonPath() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final String nodeName = virtualHost.getParent().getName();
final ManagementRequest request = mock(ManagementRequest.class);
when(request.getCategory()).thenReturn("queue");
doReturn(virtualHost.getBroker()).when(request).getRoot();
when(request.getPath()).thenReturn(Arrays.asList(nodeName, hostName, "foo"));
when(request.getMethod()).thenReturn("GET");
final ManagementResponse response = _controller.handleGet(request);
assertThat(response, is(notNullValue()));
assertThat(response.getResponseCode(), is(equalTo(200)));
assertThat(response.getBody(), is(notNullValue()));
assertThat(response.getBody(), is(instanceOf(Queue.class)));
final Queue data = (Queue) response.getBody();
assertThat(data.getName(), is(equalTo("foo")));
}
@Test
public void handleGetForBrokerRootAndQueuePathWithoutQueueName() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final String nodeName = virtualHost.getParent().getName();
final ManagementRequest request = mock(ManagementRequest.class);
when(request.getCategory()).thenReturn("queue");
doReturn(virtualHost.getBroker()).when(request).getRoot();
when(request.getPath()).thenReturn(Arrays.asList(nodeName, hostName));
when(request.getParameters()).thenReturn(Collections.emptyMap());
when(request.getMethod()).thenReturn("GET");
final ManagementResponse response = _controller.handleGet(request);
assertThat(response, is(notNullValue()));
assertThat(response.getResponseCode(), is(equalTo(200)));
assertThat(response.getBody(), is(notNullValue()));
assertThat(response.getBody(), is(instanceOf(Collection.class)));
final Collection data = (Collection) response.getBody();
assertThat(data.size(), is(equalTo(2)));
final Iterator iterator = data.iterator();
final Object object = iterator.next();
final Object object2 = iterator.next();
assertThat(object, is(notNullValue()));
assertThat(object, is(instanceOf(Queue.class)));
assertThat(((Queue) object).getName(), is(equalTo("foo")));
assertThat(object2, is(notNullValue()));
assertThat(object2, is(instanceOf(Queue.class)));
assertThat(((Queue) object2).getName(), is(equalTo("bar")));
}
@Test
public void handleGetForBrokerRootAndQueuePathWithFilter() throws Exception
{
final String hostName = "test";
final QueueManagingVirtualHost<?> virtualHost = createVirtualHostWithQueue(hostName, "foo", "bar");
final String nodeName = virtualHost.getParent().getName();
final ManagementRequest request = mock(ManagementRequest.class);
when(request.getCategory()).thenReturn("queue");
doReturn(virtualHost.getBroker()).when(request).getRoot();
when(request.getPath()).thenReturn(Arrays.asList(nodeName, hostName));
when(request.getParameters()).thenReturn(Collections.singletonMap("name", Collections.singletonList("bar")));
when(request.getMethod()).thenReturn("GET");
ManagementResponse response = _controller.handleGet(request);
assertThat(response, is(notNullValue()));
assertThat(response.getResponseCode(), is(equalTo(200)));
assertThat(response.getBody(), is(notNullValue()));
assertThat(response.getBody(), is(instanceOf(Collection.class)));
Collection data = (Collection) response.getBody();
assertThat(data.size(), is(equalTo(1)));
Object object = data.iterator().next();
assertThat(object, is(notNullValue()));
assertThat(object, is(instanceOf(Queue.class)));
assertThat(((Queue) object).getName(), is(equalTo("bar")));
}
private QueueManagingVirtualHost<?> createVirtualHostWithQueue(final String hostName, String... queueName)
throws Exception
{
final QueueManagingVirtualHost<?> virtualHost = BrokerTestHelper.createVirtualHost(hostName, this);
final Broker root = virtualHost.getBroker();
final ConfiguredObject<?> virtualHostNode = virtualHost.getParent();
when(root.getChildren(VirtualHostNode.class)).thenReturn(Collections.singletonList(virtualHostNode));
when(virtualHostNode.getChildren(VirtualHost.class)).thenReturn(Collections.singletonList(virtualHost));
when(virtualHostNode.getChildByName(VirtualHost.class, hostName)).thenReturn(virtualHost);
Stream.of(queueName)
.forEach(n -> virtualHost.createChild(Queue.class, Collections.singletonMap(Queue.NAME, n)));
return virtualHost;
}
private UUID createPreferences(final Subject testSubject,
final QueueManagingVirtualHost<?> virtualHost,
final String preferenceType,
final String preferenceName,
final Map<String, Object> preferenceValue)
throws Exception
{
UUID uuid = UUID.randomUUID();
final Preference preference = new PreferenceImpl(virtualHost,
uuid,
preferenceName,
preferenceType,
"Some preference",
null,
new Date(),
new Date(),
null,
new GenericPreferenceValueFactory().createInstance(
preferenceValue));
final List<Preference> preferenceList = Collections.singletonList(preference);
final Future<Void> result = Subject.doAs(testSubject,
(PrivilegedAction<Future<Void>>) () -> virtualHost.getUserPreferences()
.updateOrAppend(
preferenceList));
result.get(2000L, TimeUnit.MILLISECONDS);
return uuid;
}
private Subject createTestSubject()
{
final AuthenticationProvider<?> provider = mock(AuthenticationProvider.class);
when(provider.getType()).thenReturn("type");
when(provider.getName()).thenReturn("name");
return new Subject(false,
Collections.singleton(new AuthenticatedPrincipal(new UsernamePrincipal("user", provider))),
Collections.emptySet(),
Collections.emptySet());
}
private void assertPreference(final String expectedType,
final String expectedName,
final Map<String, Object> expectedValue,
final Object preferences)
{
assertThat(preferences, is(notNullValue()));
assertThat(preferences, is(instanceOf(Map.class)));
final Map<?, ?> data = (Map<?, ?>) preferences;
final Object pt = data.get(expectedType);
assertThat(pt, is(notNullValue()));
assertThat(pt, is(instanceOf(Collection.class)));
final Collection<?> items = (Collection<?>) pt;
assertThat(items.size(), is(equalTo(1)));
final Object item = items.iterator().next();
assertThat(item, is(notNullValue()));
assertThat(item, is(instanceOf(Map.class)));
final Map<?, ?> map = (Map<?, ?>) item;
final Object value = map.get("value");
assertThat(value, is(notNullValue()));
assertThat(value, is(equalTo(expectedValue)));
final Object name = map.get("name");
assertThat(name, is(notNullValue()));
assertThat(name, is(equalTo(expectedName)));
}
}