You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by jb...@apache.org on 2022/07/11 19:11:21 UTC
[activemq-artemis] branch main updated: ARTEMIS-3820 Fix browsing original queue of AMQP messages
This is an automated email from the ASF dual-hosted git repository.
jbertram pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/main by this push:
new 15d839a6b0 ARTEMIS-3820 Fix browsing original queue of AMQP messages
new 8ef91333f7 This closes #4137
15d839a6b0 is described below
commit 15d839a6b0383dbac902ce5efa867320b1c91f57
Author: Domenico Francesco Bruscino <br...@apache.org>
AuthorDate: Tue Jul 5 21:19:45 2022 +0200
ARTEMIS-3820 Fix browsing original queue of AMQP messages
---
.../src/main/webapp/plugin/js/components/browse.js | 2 +-
.../artemis/tests/smoke/console/QueuesTest.java | 63 ++++++++++++++++++++++
.../tests/smoke/console/pages/ArtemisPage.java | 19 +++++++
.../tests/smoke/console/pages/QueuePage.java | 36 +++++++++++++
4 files changed, 119 insertions(+), 1 deletion(-)
diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js
index 098a6de07c..7b1284018f 100644
--- a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js
+++ b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js
@@ -339,7 +339,7 @@ var Artemis;
itemField: 'StringProperties',
header: 'Original Queue',
templateFn: function(value) {
- return value._AMQ_ORIG_QUEUE;
+ return (value['_AMQ_ORIG_QUEUE'] ? value['_AMQ_ORIG_QUEUE'] : value['extraProperties._AMQ_ORIG_QUEUE']);
}
};
ctrl.tableColumns.push(origQueue);
diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/QueuesTest.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/QueuesTest.java
index b5db6b16bd..51b30c68c7 100644
--- a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/QueuesTest.java
+++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/QueuesTest.java
@@ -17,6 +17,9 @@
package org.apache.activemq.artemis.tests.smoke.console;
+import org.apache.activemq.artemis.api.core.RoutingType;
+import org.apache.activemq.artemis.api.core.SimpleString;
+import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
import org.apache.activemq.artemis.cli.commands.ActionContext;
import org.apache.activemq.artemis.cli.commands.messages.Consumer;
import org.apache.activemq.artemis.cli.commands.messages.Producer;
@@ -26,11 +29,14 @@ import org.apache.activemq.artemis.tests.smoke.console.pages.QueuePage;
import org.apache.activemq.artemis.tests.smoke.console.pages.QueuesPage;
import org.apache.activemq.artemis.tests.smoke.console.pages.StatusPage;
import org.apache.activemq.artemis.utils.Wait;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.openqa.selenium.MutableCapabilities;
+import javax.management.ObjectName;
+
@RunWith(Parameterized.class)
public class QueuesTest extends ConsoleTest {
@@ -101,4 +107,61 @@ public class QueuesTest extends ConsoleTest {
Wait.assertEquals(1, () -> afterQueuesPage.countQueue("DLQ"));
Wait.assertEquals(0, () -> afterQueuesPage.getMessagesCount(queueName));
}
+
+ @Test
+ public void testExpiryQueue() throws Exception {
+ final int messages = 1;
+ final String expiryQueueName = "ExpiryQueue";
+ final String testQueueName = "TEST";
+ final String messageText = "TEST";
+ final ObjectNameBuilder objectNameBuilder = ObjectNameBuilder.create(null, "0.0.0.0", true);
+ final ObjectName expiryQueueObjectName = objectNameBuilder.getQueueObjectName(
+ SimpleString.toSimpleString(expiryQueueName),
+ SimpleString.toSimpleString(expiryQueueName),
+ RoutingType.ANYCAST);
+ final ObjectName testQueueObjectName = objectNameBuilder.getQueueObjectName(
+ SimpleString.toSimpleString(testQueueName),
+ SimpleString.toSimpleString(testQueueName),
+ RoutingType.ANYCAST);
+
+ driver.get(serverUrl + "/console");
+ LoginPage loginPage = new LoginPage(driver);
+ StatusPage statusPage = loginPage.loginValidUser(
+ SERVER_ADMIN_USERNAME, SERVER_ADMIN_PASSWORD, DEFAULT_TIMEOUT);
+ Assert.assertTrue(statusPage.postJolokiaExecRequest(expiryQueueObjectName.getCanonicalName(),
+ "removeAllMessages()", "").toString().contains("\"status\":200"));
+
+ QueuesPage beforeQueuesPage = statusPage.getQueuesPage(DEFAULT_TIMEOUT);
+ Wait.assertEquals(1, () -> beforeQueuesPage.countQueue("ExpiryQueue"));
+ Wait.assertEquals(0, () -> beforeQueuesPage.countQueue(testQueueName));
+
+ Producer producer = new Producer();
+ producer.setUser(SERVER_ADMIN_USERNAME);
+ producer.setPassword(SERVER_ADMIN_PASSWORD);
+ producer.setDestination(testQueueName);
+ producer.setMessageCount(messages);
+ producer.setMessage(messageText);
+ producer.setSilentInput(true);
+ producer.setProtocol("amqp");
+ producer.execute(new ActionContext());
+
+ beforeQueuesPage.refresh(DEFAULT_TIMEOUT);
+ Wait.assertEquals(1, () -> beforeQueuesPage.countQueue(expiryQueueName));
+ assertEquals(0, beforeQueuesPage.getMessagesCount(expiryQueueName));
+ Wait.assertEquals(1, () -> beforeQueuesPage.countQueue(testQueueName));
+ assertEquals(messages, beforeQueuesPage.getMessagesCount(testQueueName));
+
+ QueuePage queuePage = beforeQueuesPage.getQueuePage(testQueueName, DEFAULT_TIMEOUT);
+ Assert.assertTrue(queuePage.postJolokiaExecRequest(testQueueObjectName.getCanonicalName(), "expireMessage(long)",
+ String.valueOf(queuePage.getMessageId(0))).toString().contains("\"status\":200"));
+
+ QueuesPage afterQueuesPage = queuePage.getQueuesPage(DEFAULT_TIMEOUT);
+ Wait.assertEquals(1, () -> afterQueuesPage.countQueue(expiryQueueName));
+ assertEquals(messages, afterQueuesPage.getMessagesCount(expiryQueueName));
+ Wait.assertEquals(1, () -> beforeQueuesPage.countQueue(testQueueName));
+ assertEquals(0, afterQueuesPage.getMessagesCount(testQueueName));
+
+ QueuePage dlqPage = afterQueuesPage.getQueuePage(expiryQueueName, DEFAULT_TIMEOUT);
+ assertEquals(testQueueName, dlqPage.getMessageOriginalQueue(0));
+ }
}
diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ArtemisPage.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ArtemisPage.java
index 26ac432be3..00781296d0 100644
--- a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ArtemisPage.java
+++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/ArtemisPage.java
@@ -21,7 +21,9 @@ import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.activemq.artemis.utils.StringEscapeUtils;
import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
@@ -75,4 +77,21 @@ public abstract class ArtemisPage extends ConsolePage {
return new QueuesPage(driver);
}
+
+ public Object postJolokiaExecRequest(String mbean, String operation, String arguments) {
+ Object response = ((JavascriptExecutor) driver).executeAsyncScript(
+ "var callback = arguments[arguments.length - 1];" +
+ "var xhr = new XMLHttpRequest();" +
+ "xhr.open('POST', '/console/jolokia', true);" +
+ "xhr.onreadystatechange = function() {" +
+ " if (xhr.readyState == 4) {" +
+ " callback(xhr.responseText);" +
+ " }" +
+ "};" +
+ "xhr.send('{\"type\":\"exec\",\"mbean\":\"" + StringEscapeUtils.escapeString(StringEscapeUtils.escapeString(mbean)) +
+ "\",\"operation\":\"" + StringEscapeUtils.escapeString(StringEscapeUtils.escapeString(operation)) +
+ "\",\"arguments\":[" + StringEscapeUtils.escapeString(arguments) + "]}');");
+
+ return response;
+ }
}
diff --git a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuePage.java b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuePage.java
index 30d2e6dc89..96692149f1 100644
--- a/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuePage.java
+++ b/tests/smoke-tests/src/test/java/org/apache/activemq/artemis/tests/smoke/console/pages/QueuePage.java
@@ -19,8 +19,13 @@ package org.apache.activemq.artemis.tests.smoke.console.pages;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
public class QueuePage extends ArtemisPage {
+ private By messageRowLocator = By.cssSelector("tr[role='row'][class='ng-scope odd']");
+
public QueuePage(WebDriver driver) {
super(driver);
}
@@ -32,4 +37,35 @@ public class QueuePage extends ArtemisPage {
return new MessagePage(driver);
}
+
+ public long getMessageId(int index) {
+ WebElement messageRowWebElement = driver.findElements(messageRowLocator).get(index);
+
+ String messageIdText = messageRowWebElement.findElements(By.tagName("td")).get(
+ getIndexOfColumn("Message ID")).findElement(By.tagName("span")).getText();
+
+ return Long.parseLong(messageIdText);
+ }
+
+ public String getMessageOriginalQueue(int index) {
+ WebElement messageRowWebElement = driver.findElements(messageRowLocator).get(index);
+
+ String messageOriginalQueue = messageRowWebElement.findElements(By.tagName("td")).get(
+ getIndexOfColumn("Original Queue")).findElement(By.tagName("span")).getText();
+
+ return messageOriginalQueue;
+ }
+
+ public int getIndexOfColumn(String name) {
+ WebElement headerRowWebElement = driver.findElement(By.cssSelector("tr[role='row']"));
+
+ List<WebElement> columnWebElements = headerRowWebElement.findElements(By.tagName("th"));
+ for (int i = 0; i < columnWebElements.size(); i++) {
+ if (name.equals(columnWebElements.get(i).getText())) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
}