blob: c0cc77e85ea98d9c8be35caab7d4fd8cf14b434d [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.systest.rest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import javax.jms.JMSException;
import junit.framework.TestCase;
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.BrokerModel;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.Connection;
import org.apache.qpid.server.model.Exchange;
import org.apache.qpid.server.model.ExclusivityPolicy;
import org.apache.qpid.server.model.LifetimePolicy;
import org.apache.qpid.server.model.Port;
import org.apache.qpid.server.model.Queue;
import org.apache.qpid.server.model.State;
import org.apache.qpid.server.model.VirtualHost;
import org.apache.qpid.server.model.VirtualHostNode;
import org.apache.qpid.server.queue.LastValueQueue;
import org.apache.qpid.server.queue.PriorityQueue;
import org.apache.qpid.server.queue.SortedQueue;
import org.apache.qpid.server.virtualhost.QueueManagingVirtualHost;
import org.apache.qpid.test.utils.TestBrokerConfiguration;
public class Asserts
{
public static final String STATISTICS_ATTRIBUTE = "statistics";
public static void assertVirtualHostNode(final String nodeName, final Map<String, Object> node)
{
assertNotNull("Virtualhostnode " + nodeName + " data is not found", node);
assertEquals("Unexpected value of attribute " + VirtualHostNode.NAME,
nodeName,
node.get(VirtualHostNode.NAME));
}
public static void assertVirtualHost(String virtualHostName, Map<String, Object> virtualHost)
{
assertNotNull("Virtualhost " + virtualHostName + " data are not found", virtualHost);
assertAttributesPresent(virtualHost,
BrokerModel.getInstance().getTypeRegistry().getAttributeNames(VirtualHost.class),
ConfiguredObject.CREATED_BY,
ConfiguredObject.CREATED_TIME,
ConfiguredObject.LAST_UPDATED_BY,
ConfiguredObject.LAST_UPDATED_TIME,
ConfiguredObject.DESCRIPTION,
ConfiguredObject.CONTEXT,
ConfiguredObject.DESIRED_STATE,
QueueManagingVirtualHost.ENABLED_CONNECTION_VALIDATORS,
QueueManagingVirtualHost.DISABLED_CONNECTION_VALIDATORS,
QueueManagingVirtualHost.GLOBAL_ADDRESS_DOMAINS,
VirtualHost.TYPE,
VirtualHost.PREFERENCE_STORE_ATTRIBUTES);
assertEquals("Unexpected value of attribute " + VirtualHost.NAME,
virtualHostName,
virtualHost.get(VirtualHost.NAME));
assertNotNull("Unexpected value of attribute " + VirtualHost.ID, virtualHost.get(VirtualHost.ID));
assertEquals("Unexpected value of attribute " + VirtualHost.STATE, State.ACTIVE.name(),
virtualHost.get(VirtualHost.STATE));
assertEquals("Unexpected value of attribute " + VirtualHost.DURABLE, Boolean.TRUE,
virtualHost.get(VirtualHost.DURABLE));
assertEquals("Unexpected value of attribute " + VirtualHost.LIFETIME_POLICY, LifetimePolicy.PERMANENT.name(),
virtualHost.get(VirtualHost.LIFETIME_POLICY));
@SuppressWarnings("unchecked")
Map<String, Object> statistics = (Map<String, Object>) virtualHost.get(STATISTICS_ATTRIBUTE);
Asserts.assertAttributesPresent(statistics,
"queueCount","exchangeCount","bytesIn","bytesOut","messagesIn", "messagesOut");
}
public static void assertQueue(String queueName, String queueType, Map<String, Object> queueData)
{
assertQueue(queueName, queueType, queueData, null);
}
public static void assertQueue(String queueName,
String queueType,
Map<String, Object> queueData,
Map<String, Object> expectedAttributes)
{
assertNotNull("Queue " + queueName + " is not found!", queueData);
Asserts.assertAttributesPresent(queueData,
BrokerModel.getInstance().getTypeRegistry().getAttributeNames(Queue.class),
Queue.CREATED_BY,
Queue.CREATED_TIME,
Queue.LAST_UPDATED_BY,
Queue.LAST_UPDATED_TIME,
Queue.TYPE,
Queue.DESCRIPTION,
Queue.ALTERNATE_BINDING,
Queue.OWNER,
Queue.NO_LOCAL,
LastValueQueue.LVQ_KEY,
SortedQueue.SORT_KEY,
Queue.MESSAGE_GROUP_KEY_OVERRIDE,
Queue.MESSAGE_GROUP_TYPE,
PriorityQueue.PRIORITIES,
ConfiguredObject.CONTEXT,
ConfiguredObject.DESIRED_STATE,
Queue.DEFAULT_FILTERS,
Queue.ENSURE_NONDESTRUCTIVE_CONSUMERS,
Queue.CREATING_LINK_INFO);
assertEquals("Unexpected value of queue attribute " + Queue.NAME, queueName, queueData.get(Queue.NAME));
assertNotNull("Unexpected value of queue attribute " + Queue.ID, queueData.get(Queue.ID));
assertEquals("Unexpected value of queue attribute " + Queue.STATE,
State.ACTIVE.name(),
queueData.get(Queue.STATE));
assertEquals("Unexpected value of queue attribute " + Queue.LIFETIME_POLICY, LifetimePolicy.PERMANENT.name(),
queueData.get(Queue.LIFETIME_POLICY));
assertEquals("Unexpected value of queue attribute " + Queue.TYPE,
queueType,
queueData.get(Queue.TYPE));
if (expectedAttributes == null)
{
assertEquals("Unexpected value of queue attribute " + Queue.EXCLUSIVE,
ExclusivityPolicy.NONE.name(), queueData.get(Queue.EXCLUSIVE));
assertEquals("Unexpected value of queue attribute " + Queue.MAXIMUM_DELIVERY_ATTEMPTS, 0,
queueData.get(Queue.MAXIMUM_DELIVERY_ATTEMPTS));
assertEquals("Unexpected value of queue attribute " + Queue.MAXIMUM_QUEUE_DEPTH_MESSAGES, -1,
queueData.get(Queue.MAXIMUM_QUEUE_DEPTH_MESSAGES));
assertEquals("Unexpected value of queue attribute " + Queue.QUEUE_FLOW_STOPPED, Boolean.FALSE,
queueData.get(Queue.QUEUE_FLOW_STOPPED));
}
else
{
for (Map.Entry<String, Object> attribute : expectedAttributes.entrySet())
{
assertEquals("Unexpected value of " + queueName + " queue attribute " + attribute.getKey(),
attribute.getValue(), queueData.get(attribute.getKey()));
}
}
assertNotNull("Unexpected value of queue attribute statistics", queueData.get(Asserts.STATISTICS_ATTRIBUTE));
@SuppressWarnings("unchecked")
Map<String, Object> statistics = (Map<String, Object>) queueData.get(Asserts.STATISTICS_ATTRIBUTE);
Asserts.assertAttributesPresent(statistics,
"bindingCount",
"consumerCount",
"consumerCountWithCredit",
"persistentDequeuedBytes",
"persistentDequeuedMessages",
"persistentEnqueuedBytes",
"persistentEnqueuedMessages",
"queueDepthBytes",
"queueDepthMessages",
"totalDequeuedBytes",
"totalDequeuedMessages",
"totalEnqueuedBytes",
"totalEnqueuedMessages",
"unacknowledgedBytes",
"unacknowledgedMessages");
}
public static void assertAttributesPresent(Map<String, Object> data, String... attributes)
{
for (String name : attributes)
{
assertNotNull("Attribute " + name + " is not present", data.get(name));
}
}
public static void assertAttributesPresent(Map<String, Object> data, Collection<String> attributes,
String... unsupportedAttributes)
{
for (String name : attributes)
{
boolean unsupported = false;
for (String unsupportedAttribute : unsupportedAttributes)
{
if (unsupportedAttribute.equals(name))
{
unsupported = true;
break;
}
}
if (unsupported)
{
continue;
}
assertNotNull("Attribute " + name + " is not present", data.get(name));
}
}
public static void assertConnection(Map<String, Object> connectionData, final int sessions)
throws JMSException
{
assertNotNull("Unexpected connection data", connectionData);
assertAttributesPresent(connectionData,
BrokerModel.getInstance().getTypeRegistry().getAttributeNames(Connection.class),
Connection.STATE,
Connection.DURABLE,
Connection.LIFETIME_POLICY,
Connection.INCOMING,
Connection.REMOTE_PROCESS_NAME,
Connection.REMOTE_PROCESS_PID,
Connection.LOCAL_ADDRESS,
Connection.PROPERTIES,
ConfiguredObject.TYPE,
ConfiguredObject.CREATED_BY,
ConfiguredObject.CREATED_TIME,
ConfiguredObject.LAST_UPDATED_BY,
ConfiguredObject.LAST_UPDATED_TIME,
ConfiguredObject.DESCRIPTION,
ConfiguredObject.CONTEXT,
ConfiguredObject.DESIRED_STATE);
assertEquals("Unexpected value for connection attribute " + Connection.PORT,
TestBrokerConfiguration.ENTRY_NAME_AMQP_PORT, connectionData.get(Connection.PORT));
assertEquals("Unexpected value of connection attribute " + Connection.PRINCIPAL, "guest",
connectionData.get(Connection.PRINCIPAL));
@SuppressWarnings("unchecked")
Map<String, Object> statistics = (Map<String, Object>) connectionData.get(STATISTICS_ATTRIBUTE);
assertAttributesPresent(statistics,
"bytesIn",
"bytesOut",
"lastIoTime",
"messagesIn",
"messagesOut",
"sessionCount");
assertEquals("Unexpected value of connection statistics attribute sessionCount ", sessions,
statistics.get("sessionCount"));
}
public static void assertPortAttributes(Map<String, Object> port)
{
assertPortAttributes(port, State.ACTIVE);
}
public static void assertPortAttributes(Map<String, Object> port, State state)
{
assertNotNull("Unexpected value of attribute " + Port.ID, port.get(Port.ID));
assertEquals("Unexpected value of attribute " + Port.DURABLE, Boolean.TRUE, port.get(Port.DURABLE));
assertEquals("Unexpected value of attribute " + Port.LIFETIME_POLICY, LifetimePolicy.PERMANENT.name(),
port.get(Broker.LIFETIME_POLICY));
assertEquals("Unexpected value of attribute " + Port.STATE, state.name(), port.get(Port.STATE));
@SuppressWarnings("unchecked")
Collection<String> protocols = (Collection<String>) port.get(Port.PROTOCOLS);
if ("AMQP".equals(port.get(ConfiguredObject.TYPE)))
{
assertAttributesPresent(port,
BrokerModel.getInstance().getTypeRegistry().getAttributeNames(Port.class),
ConfiguredObject.TYPE,
ConfiguredObject.CREATED_BY,
ConfiguredObject.CREATED_TIME,
ConfiguredObject.LAST_UPDATED_BY,
ConfiguredObject.LAST_UPDATED_TIME,
ConfiguredObject.DESCRIPTION,
ConfiguredObject.CONTEXT,
ConfiguredObject.DESIRED_STATE,
Port.AUTHENTICATION_PROVIDER,
Port.KEY_STORE,
Port.TRUST_STORES,
Port.PROTOCOLS,
Port.CLIENT_CERT_RECORDER);
assertNotNull("Unexpected value of attribute " + Port.BINDING_ADDRESS, port.get(Port.BINDING_ADDRESS));
}
else
{
assertAttributesPresent(port,
BrokerModel.getInstance().getTypeRegistry().getAttributeNames(Port.class),
ConfiguredObject.TYPE,
ConfiguredObject.CREATED_BY,
ConfiguredObject.CREATED_TIME,
ConfiguredObject.LAST_UPDATED_BY,
ConfiguredObject.LAST_UPDATED_TIME,
ConfiguredObject.DESCRIPTION,
ConfiguredObject.CONTEXT,
ConfiguredObject.DESIRED_STATE,
Port.AUTHENTICATION_PROVIDER,
Port.BINDING_ADDRESS,
Port.TCP_NO_DELAY,
Port.NEED_CLIENT_AUTH,
Port.WANT_CLIENT_AUTH,
Port.KEY_STORE,
Port.TRUST_STORES,
Port.PROTOCOLS,
Port.CLIENT_CERT_RECORDER);
}
@SuppressWarnings("unchecked")
Collection<String> transports = (Collection<String>) port.get(Port.TRANSPORTS);
assertEquals("Unexpected value of attribute " + Port.TRANSPORTS, new HashSet<String>(Arrays.asList("TCP")),
new HashSet<String>(transports));
}
public static void assertDurableExchange(String exchangeName, String type, Map<String, Object> exchangeData)
{
assertExchange(exchangeName, type, exchangeData);
assertEquals("Unexpected value of exchange attribute " + Exchange.DURABLE, Boolean.TRUE,
exchangeData.get(Exchange.DURABLE));
}
public static void assertExchange(String exchangeName, String type, Map<String, Object> exchangeData)
{
assertNotNull("Exchange " + exchangeName + " is not found!", exchangeData);
assertAttributesPresent(exchangeData, BrokerModel.getInstance().getTypeRegistry().getAttributeNames(Exchange.class),
Exchange.ALTERNATE_BINDING,
ConfiguredObject.CREATED_BY,
ConfiguredObject.CREATED_TIME,
ConfiguredObject.LAST_UPDATED_BY,
ConfiguredObject.LAST_UPDATED_TIME,
ConfiguredObject.DESCRIPTION,
ConfiguredObject.CONTEXT,
ConfiguredObject.DESIRED_STATE,
Exchange.CREATING_LINK_INFO);
assertEquals("Unexpected value of exchange attribute " + Exchange.NAME, exchangeName,
exchangeData.get(Exchange.NAME));
assertNotNull("Unexpected value of exchange attribute " + Exchange.ID, exchangeData.get(VirtualHost.ID));
assertEquals("Unexpected value of exchange attribute " + Exchange.STATE, State.ACTIVE.name(),
exchangeData.get(Exchange.STATE));
assertEquals("Unexpected value of exchange attribute " + Exchange.LIFETIME_POLICY,
LifetimePolicy.PERMANENT.name(),
exchangeData.get(Exchange.LIFETIME_POLICY));
assertEquals("Unexpected value of exchange attribute " + Exchange.TYPE, type, exchangeData.get(Exchange.TYPE));
assertNotNull("Unexpected value of exchange attribute statistics", exchangeData.get(STATISTICS_ATTRIBUTE));
@SuppressWarnings("unchecked")
Map<String, Object> statistics = (Map<String, Object>) exchangeData.get(STATISTICS_ATTRIBUTE);
assertAttributesPresent(statistics,"bindingCount",
"bytesDropped",
"bytesIn",
"messagesDropped",
"messagesIn");
}
public static void assertActualAndDesiredState(final String expectedDesiredState,
final String expectedActualState,
final Map<String, Object> data)
{
String name = (String) data.get(ConfiguredObject.NAME);
TestCase.assertEquals("Object with name " + name + " has unexpected desired state",
expectedDesiredState,
data.get(ConfiguredObject.DESIRED_STATE));
TestCase.assertEquals("Object with name " + name + " has unexpected actual state",
expectedActualState, data.get(ConfiguredObject.STATE));
}
}