diff --git a/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPConsumer.java b/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPConsumer.java index cf06354..c19f39c 100644 --- a/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPConsumer.java +++ b/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPConsumer.java @@ -354,9 +354,11 @@ private String formatHeaders(QueueingConsumer.Delivery delivery){ sb.append(EXCHANGE_PARAMETER).append(": ").append(delivery.getEnvelope().getExchange()).append("\n"); sb.append(ROUTING_KEY_PARAMETER).append(": ").append(delivery.getEnvelope().getRoutingKey()).append("\n"); sb.append(DELIVERY_TAG_PARAMETER).append(": ").append(delivery.getEnvelope().getDeliveryTag()).append("\n"); - for (String key : headers.keySet()) { - sb.append(key).append(": ").append(headers.get(key)).append("\n"); - } + if(headers != null){ + for (String key : headers.keySet()) { + sb.append(key).append(": ").append(headers.get(key)).append("\n"); + } + } return sb.toString(); } } diff --git a/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPPublisher.java b/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPPublisher.java index 70184b1..8f56365 100644 --- a/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPPublisher.java +++ b/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPPublisher.java @@ -40,6 +40,8 @@ public class AMQPPublisher extends AMQPSampler implements Interruptible { private final static String REPLY_TO_QUEUE = "AMQPPublisher.ReplyToQueue"; private final static String CONTENT_TYPE = "AMQPPublisher.ContentType"; private final static String CORRELATION_ID = "AMQPPublisher.CorrelationId"; + private final static String PRIORITY = "AMQPPublisher.Priority"; + private final static String DELIVERY_MODE = "AMQPPublisher.DeliveryMode"; private final static String MESSAGE_ID = "AMQPPublisher.MessageId"; private final static String HEADERS = "AMQPPublisher.Headers"; @@ -175,11 +177,11 @@ public void setReplyToQueue(String content) { public String getContentType() { return getPropertyAsString(CONTENT_TYPE); } - + public void setContentType(String contentType) { setProperty(CONTENT_TYPE, contentType); } - + /** * @return the correlation identifier for the sample */ @@ -191,6 +193,36 @@ public void setCorrelationId(String content) { setProperty(CORRELATION_ID, content); } + public String getPriority() { + return getPropertyAsString(PRIORITY); + } + + protected int getPriorityAsInt() { + if (getPropertyAsInt(PRIORITY) < 0) { + return 0; + } + return getPropertyAsInt(PRIORITY); + } + + public void setPriority(String content) { + setProperty(PRIORITY, content); + } + + public String getDeliveryMode() { + return getPropertyAsString(DELIVERY_MODE); + } + + public void setDeliveryMode(String content) { + setProperty(DELIVERY_MODE, content); + } + + protected int getDeliveryModeAsInt() { + if (getPropertyAsInt(DELIVERY_MODE) < 1) { + return 1; + } + return getPropertyAsInt(DELIVERY_MODE); + } + /** * @return the message id for the sample */ @@ -247,11 +279,13 @@ protected AMQP.BasicProperties getProperties() { final int deliveryMode = getPersistent() ? 2 : 1; final String contentType = StringUtils.defaultIfEmpty(getContentType(), "text/plain"); - + builder.contentType(contentType) .deliveryMode(deliveryMode) .priority(0) .correlationId(getCorrelationId()) + .priority(getPriorityAsInt()) + .deliveryMode(getDeliveryModeAsInt()) .replyTo(getReplyToQueue()) .type(getMessageType()) .headers(prepareHeaders()) diff --git a/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPSampler.java b/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPSampler.java index 7fee5fd..8298abf 100644 --- a/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPSampler.java +++ b/src/main/com/zeroclue/jmeter/protocol/amqp/AMQPSampler.java @@ -52,6 +52,7 @@ public abstract class AMQPSampler extends AbstractSampler implements ThreadListe private static final String ITERATIONS = "AMQPSampler.Iterations"; private static final String MESSAGE_TTL = "AMQPSampler.MessageTTL"; private static final String MESSAGE_EXPIRES = "AMQPSampler.MessageExpires"; + private static final String X_MAX_PRIORITY = "AMQPSampler.XMaxPriority"; private static final String QUEUE_DURABLE = "AMQPSampler.QueueDurable"; private static final String QUEUE_REDECLARE = "AMQPSampler.Redeclare"; private static final String QUEUE_EXCLUSIVE = "AMQPSampler.QueueExclusive"; @@ -122,6 +123,9 @@ private Map getQueueArguments() { if(getMessageExpires() != null && !getMessageExpires().isEmpty()) arguments.put("x-expires", getMessageExpiresAsInt()); + if(getXMaxPriority() != null && !getXMaxPriority().isEmpty()) + arguments.put("x-max-priority", getXMaxPriorityAsInt()); + return arguments; } @@ -263,6 +267,21 @@ protected Integer getMessageExpiresAsInt() { return getPropertyAsInt(MESSAGE_EXPIRES); } + public String getXMaxPriority() { + return getPropertyAsString(X_MAX_PRIORITY); + } + + public void setXMaxPriority(String name) { + setProperty(X_MAX_PRIORITY, name); + } + + protected Integer getXMaxPriorityAsInt() { + if (getPropertyAsInt(X_MAX_PRIORITY) < 0) { + return null; + } + return getPropertyAsInt(X_MAX_PRIORITY); + } + public String getHost() { return getPropertyAsString(HOST); diff --git a/src/main/com/zeroclue/jmeter/protocol/amqp/gui/AMQPPublisherGui.java b/src/main/com/zeroclue/jmeter/protocol/amqp/gui/AMQPPublisherGui.java index bde4d00..6eca399 100644 --- a/src/main/com/zeroclue/jmeter/protocol/amqp/gui/AMQPPublisherGui.java +++ b/src/main/com/zeroclue/jmeter/protocol/amqp/gui/AMQPPublisherGui.java @@ -38,6 +38,8 @@ public class AMQPPublisherGui extends AMQPSamplerGui { private JLabeledTextField messageType = new JLabeledTextField("Message Type"); private JLabeledTextField replyToQueue = new JLabeledTextField("Reply-To Queue"); private JLabeledTextField correlationId = new JLabeledTextField("Correlation Id"); + private JLabeledTextField priority = new JLabeledTextField("Priority"); + private JLabeledTextField deliveryMode = new JLabeledTextField("Delivery mode"); private JLabeledTextField contentType = new JLabeledTextField("ContentType"); private JLabeledTextField messageId = new JLabeledTextField("Message Id"); @@ -80,6 +82,8 @@ public void configure(TestElement element) { replyToQueue.setText(sampler.getReplyToQueue()); contentType.setText(sampler.getContentType()); correlationId.setText(sampler.getCorrelationId()); + priority.setText(sampler.getPriority()); + deliveryMode.setText(sampler.getDeliveryMode()); messageId.setText(sampler.getMessageId()); message.setText(sampler.getMessage()); configureHeaders(sampler); @@ -114,6 +118,8 @@ public void modifyTestElement(TestElement te) { sampler.setMessageType(messageType.getText()); sampler.setReplyToQueue(replyToQueue.getText()); sampler.setCorrelationId(correlationId.getText()); + sampler.setPriority(priority.getText()); + sampler.setDeliveryMode(deliveryMode.getText()); sampler.setContentType(contentType.getText()); sampler.setMessageId(messageId.getText()); sampler.setHeaders((Arguments) headers.createTestElement()); @@ -136,6 +142,8 @@ protected final void init() { messageType.setPreferredSize(new Dimension(100, 25)); replyToQueue.setPreferredSize(new Dimension(100, 25)); correlationId.setPreferredSize(new Dimension(100, 25)); + priority.setPreferredSize(new Dimension(100, 25)); + deliveryMode.setPreferredSize(new Dimension(100, 25)); contentType.setPreferredSize(new Dimension(100, 25)); messageId.setPreferredSize(new Dimension(100, 25)); message.setPreferredSize(new Dimension(400, 150)); @@ -146,6 +154,8 @@ protected final void init() { mainPanel.add(messageType); mainPanel.add(replyToQueue); mainPanel.add(correlationId); + mainPanel.add(priority); + mainPanel.add(deliveryMode); mainPanel.add(contentType); mainPanel.add(messageId); mainPanel.add(headers); @@ -164,6 +174,8 @@ public void clearGui() { messageType.setText(""); replyToQueue.setText(""); correlationId.setText(""); + priority.setText(""); + deliveryMode.setText(""); contentType.setText(""); messageId.setText(""); headers.clearGui(); @@ -179,4 +191,4 @@ private void configureHeaders(AMQPPublisher sampler) headers.clearGui(); } } -} \ No newline at end of file +} diff --git a/src/main/com/zeroclue/jmeter/protocol/amqp/gui/AMQPSamplerGui.java b/src/main/com/zeroclue/jmeter/protocol/amqp/gui/AMQPSamplerGui.java index d5de0eb..54e0234 100644 --- a/src/main/com/zeroclue/jmeter/protocol/amqp/gui/AMQPSamplerGui.java +++ b/src/main/com/zeroclue/jmeter/protocol/amqp/gui/AMQPSamplerGui.java @@ -25,6 +25,7 @@ public abstract class AMQPSamplerGui extends AbstractSamplerGui { protected JLabeledTextField virtualHost = new JLabeledTextField("Virtual Host"); protected JLabeledTextField messageTTL = new JLabeledTextField("Message TTL"); protected JLabeledTextField messageExpires = new JLabeledTextField("Expires"); + protected JLabeledTextField xMaxPriority = new JLabeledTextField("x-max-priority"); protected JLabeledChoice exchangeType = new JLabeledChoice("Exchange Type", new String[]{ "direct", "topic", "headers", "fanout"}); private final JCheckBox exchangeDurable = new JCheckBox("Durable?", AMQPSampler.DEFAULT_EXCHANGE_DURABLE); private final JCheckBox exchangeAutoDelete = new JCheckBox("Auto Delete?", AMQPSampler.DEFAULT_EXCHANGE_AUTO_DELETE); @@ -65,6 +66,7 @@ public void configure(TestElement element) { virtualHost.setText(sampler.getVirtualHost()); messageTTL.setText(sampler.getMessageTTL()); messageExpires.setText(sampler.getMessageExpires()); + xMaxPriority.setText(sampler.getXMaxPriority()); queueDurable.setSelected(sampler.queueDurable()); queueExclusive.setSelected(sampler.queueExclusive()); queueAutoDelete.setSelected(sampler.queueAutoDelete()); @@ -130,6 +132,7 @@ public void modifyTestElement(TestElement element) { sampler.setVirtualHost(virtualHost.getText()); sampler.setMessageTTL(messageTTL.getText()); sampler.setMessageExpires(messageExpires.getText()); + sampler.setXMaxPriority(xMaxPriority.getText()); sampler.setExchangeType(exchangeType.getText()); sampler.setQueueDurable(queueDurable.isSelected()); sampler.setQueueExclusive(queueExclusive.isSelected()); @@ -222,6 +225,10 @@ private Component makeCommonPanel() { gridBagConstraints.gridy = 3; queueSettings.add(messageExpires, gridBagConstraints); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + queueSettings.add(xMaxPriority, gridBagConstraints); + gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; queueSettings.add(queueDurable, gridBagConstraints);