diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
index b2318ffb15..ab78ef9559 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
@@ -603,6 +603,82 @@ public interface ActiveMQServerControl {
String listProducersInfoAsJSON() throws Exception;
+ /**
+ * Lists all the connections connected to this server.
+ * The returned String is a JSON string containing details about each connection, e.g.:
+ *
+ * [
+ * {
+ * "creationTime": 1469240429671,
+ * "sessionCount": 1,
+ * "implementation": "RemotingConnectionImpl",
+ * "connectionID": "1648309901",
+ * "clientAddress": "\/127.0.0.1:57649"
+ * }
+ * ]
+ *
+ */
+ @Operation(desc = "List all connections as a JSON string")
+ String listConnectionsAsJSON() throws Exception;
+
+ /**
+ * Lists all the consumers which belongs to the connection specified by the connectionID.
+ * The returned String is a JSON string containing details about each consumer, e.g.:
+ *
+ * [
+ * {
+ * "filter": "color = 'RED'",
+ * "queueName": "2ea5b050-28bf-4ee2-9b24-b73f5983192a",
+ * "creationTime": 1469239602459,
+ * "deliveringCount": 0,
+ * "consumerID": 1,
+ * "browseOnly": true,
+ * "connectionID": "1963ece3-507a-11e6-94ff-e8b1fc439540",
+ * "sessionID": "19676f55-507a-11e6-94ff-e8b1fc439540"
+ * }
+ * ]
+ *
+ */
+ @Operation(desc = "List all consumers associated with a connection as a JSON string")
+ String listConsumersAsJSON(String connectionID) throws Exception;
+
+ /**
+ * Lists all the consumers connected to this server.
+ * The returned String is a JSON string containing details about each consumer, e.g.:
+ *
+ * [
+ * {
+ * "queueName": "fa87c64c-0a38-4697-8421-72e34d17429d",
+ * "creationTime": 1469235956168,
+ * "deliveringCount": 0,
+ * "consumerID": 0,
+ * "browseOnly": false,
+ * "connectionID": "9c0d42e7-5071-11e6-9e29-e8b1fc439540",
+ * "sessionID": "9c0d9109-5071-11e6-9e29-e8b1fc439540"
+ * }
+ * ]
+ *
+ */
+ @Operation(desc = "List all consumers as a JSON string")
+ String listAllConsumersAsJSON() throws Exception;
+
+ /**
+ * Lists details about all the sessions for the specified connection ID.
+ * The returned String is a JSON string containing details about each session associated with the specified ID, e.g.:
+ *
+ * [
+ * {
+ * "principal": "myUser",
+ * "creationTime": 1469240773157,
+ * "consumerCount": 0,
+ * "sessionID": "d33d10db-507c-11e6-9e47-e8b1fc439540"
+ * }
+ * ]
+ *
+ */
+ @Operation(desc = "List the sessions for the given connectionID as a JSON string", impact = MBeanOperationInfo.INFO)
+ String listSessionsAsJSON(@Parameter(desc = "a connection ID", name = "connectionID") String connectionID) throws Exception;
+
/**
* Lists all the sessions IDs for the specified connection ID.
*/
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
index d7cced1b20..afb99afef3 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
@@ -796,20 +796,12 @@ public class JMSServerControlImpl extends AbstractControl implements JMSServerCo
clearIO();
- JsonArrayBuilder array = Json.createArrayBuilder();
try {
- List sessions = server.getActiveMQServer().getSessions(connectionID);
- for (ServerSession sess : sessions) {
- JsonObjectBuilder obj = Json.createObjectBuilder()
- .add("sessionID", sess.getName())
- .add("creationTime", sess.getCreationTime());
- array.add(obj);
- }
+ return server.listSessionsAsJSON(connectionID);
}
finally {
blockOnIO();
}
- return array.toString();
}
@Override
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/JMSServerManager.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/JMSServerManager.java
index 69314b68a1..d5f1878b02 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/JMSServerManager.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/JMSServerManager.java
@@ -292,6 +292,8 @@ public interface JMSServerManager extends ActiveMQComponent {
String[] listSessions(String connectionID) throws Exception;
+ String listSessionsAsJSON(String connectionID) throws Exception;
+
String listPreparedTransactionDetailsAsJSON() throws Exception;
String listPreparedTransactionDetailsAsHTML() throws Exception;
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
index 194c598404..645fbc0579 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
@@ -1328,6 +1328,12 @@ public class JMSServerManagerImpl implements JMSServerManager, ActivateCallback
return server.getActiveMQServerControl().listSessions(connectionID);
}
+ @Override
+ public String listSessionsAsJSON(final String connectionID) throws Exception {
+ checkInitialised();
+ return server.getActiveMQServerControl().listSessionsAsJSON(connectionID);
+ }
+
@Override
public String listPreparedTransactionDetailsAsJSON() throws Exception {
ResourceManager resourceManager = server.getResourceManager();
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
index e7c26aad06..3a60bfa326 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
@@ -16,18 +16,6 @@
*/
package org.apache.activemq.artemis.core.management.impl;
-import java.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicLong;
-
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
@@ -43,14 +31,25 @@ import javax.management.NotificationEmitter;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.transaction.xa.Xid;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
+import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
import org.apache.activemq.artemis.api.core.management.AddressControl;
import org.apache.activemq.artemis.api.core.management.BridgeControl;
import org.apache.activemq.artemis.api.core.management.CoreNotificationType;
import org.apache.activemq.artemis.api.core.management.DivertControl;
-import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
import org.apache.activemq.artemis.api.core.management.QueueControl;
import org.apache.activemq.artemis.core.config.BridgeConfiguration;
import org.apache.activemq.artemis.core.config.Configuration;
@@ -67,10 +66,10 @@ import org.apache.activemq.artemis.core.postoffice.impl.LocalQueueBinding;
import org.apache.activemq.artemis.core.remoting.server.RemotingService;
import org.apache.activemq.artemis.core.security.CheckType;
import org.apache.activemq.artemis.core.security.Role;
-import org.apache.activemq.artemis.core.server.ActiveMQServerLogger;
-import org.apache.activemq.artemis.core.server.Consumer;
import org.apache.activemq.artemis.core.server.ActiveMQMessageBundle;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.server.ActiveMQServerLogger;
+import org.apache.activemq.artemis.core.server.Consumer;
import org.apache.activemq.artemis.core.server.JournalType;
import org.apache.activemq.artemis.core.server.Queue;
import org.apache.activemq.artemis.core.server.ServerConsumer;
@@ -1359,6 +1358,130 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
return producers.build().toString();
}
+ @Override
+ public String listConnectionsAsJSON() throws Exception {
+ checkStarted();
+
+ clearIO();
+
+ try {
+ JsonArrayBuilder array = Json.createArrayBuilder();
+
+ Set connections = server.getRemotingService().getConnections();
+
+ for (RemotingConnection connection : connections) {
+ JsonObjectBuilder obj = Json.createObjectBuilder()
+ .add("connectionID", connection.getID().toString())
+ .add("clientAddress", connection.getRemoteAddress())
+ .add("creationTime", connection.getCreationTime())
+ .add("implementation", connection.getClass().getSimpleName())
+ .add("sessionCount", server.getSessions(connection.getID().toString()).size());
+ array.add(obj);
+ }
+ return array.build().toString();
+ }
+ finally {
+ blockOnIO();
+ }
+ }
+
+ @Override
+ public String listSessionsAsJSON(final String connectionID) throws Exception {
+ checkStarted();
+
+ clearIO();
+
+ JsonArrayBuilder array = Json.createArrayBuilder();
+ try {
+ List sessions = server.getSessions(connectionID);
+ for (ServerSession sess : sessions) {
+ JsonObjectBuilder obj = Json.createObjectBuilder()
+ .add("sessionID", sess.getName())
+ .add("creationTime", sess.getCreationTime())
+ .add("principal", sess.getValidatedUser())
+ .add("consumerCount", sess.getServerConsumers().size());
+ array.add(obj);
+ }
+ }
+ finally {
+ blockOnIO();
+ }
+ return array.build().toString();
+ }
+
+ @Override
+ public String listConsumersAsJSON(String connectionID) throws Exception {
+ checkStarted();
+
+ clearIO();
+
+ try {
+ JsonArrayBuilder array = Json.createArrayBuilder();
+
+ Set connections = server.getRemotingService().getConnections();
+ for (RemotingConnection connection : connections) {
+ if (connectionID.equals(connection.getID().toString())) {
+ List sessions = server.getSessions(connectionID);
+ for (ServerSession session : sessions) {
+ Set consumers = session.getServerConsumers();
+ for (ServerConsumer consumer : consumers) {
+ JsonObject obj = toJSONObject(consumer);
+ if (obj != null) {
+ array.add(obj);
+ }
+ }
+ }
+ }
+ }
+ return array.build().toString();
+ }
+ finally {
+ blockOnIO();
+ }
+ }
+
+ @Override
+ public String listAllConsumersAsJSON() throws Exception {
+ checkStarted();
+
+ clearIO();
+
+ try {
+ JsonArrayBuilder array = Json.createArrayBuilder();
+
+ Set sessions = server.getSessions();
+ for (ServerSession session : sessions) {
+ Set consumers = session.getServerConsumers();
+ for (ServerConsumer consumer : consumers) {
+ JsonObject obj = toJSONObject(consumer);
+ if (obj != null) {
+ array.add(obj);
+ }
+ }
+ }
+ return array.build().toString();
+ }
+ finally {
+ blockOnIO();
+ }
+ }
+
+ private JsonObject toJSONObject(ServerConsumer consumer) throws Exception {
+ JsonObjectBuilder obj = Json.createObjectBuilder()
+ .add("consumerID", consumer.getID())
+ .add("connectionID", consumer.getConnectionID().toString())
+ .add("sessionID", consumer.getSessionID())
+ .add("queueName", consumer.getQueue().getName().toString())
+ .add("browseOnly", consumer.isBrowseOnly())
+ .add("creationTime", consumer.getCreationTime())
+ .add("deliveringCount", consumer.getDeliveringMessages().size());
+ if (consumer.getFilter() != null) {
+ obj.add("filter", consumer.getFilter().getFilterString().toString());
+ }
+
+ return obj.build();
+ }
+
@Override
public Object[] getConnectors() throws Exception {
checkStarted();
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
index 2b90cbce15..953de1f5c9 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
@@ -186,4 +186,6 @@ public interface ServerSession extends SecurityAuth {
SimpleString filterString) throws Exception;
List getInTXMessagesForConsumer(long consumerId);
+
+ String getValidatedUser();
}
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
index 79154f7db1..34add7dbb4 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
@@ -1423,6 +1423,11 @@ public class ServerSessionImpl implements ServerSession, FailureListener {
}
}
+ @Override
+ public String getValidatedUser() {
+ return validatedUser;
+ }
+
@Override
public String toString() {
StringBuffer buffer = new StringBuffer();
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
index 7de651d161..6731d274e7 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
@@ -20,8 +20,13 @@ import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.UUID;
+import org.apache.activemq.artemis.api.core.JsonUtil;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
@@ -35,19 +40,24 @@ import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
import org.apache.activemq.artemis.api.core.management.AddressSettingsInfo;
import org.apache.activemq.artemis.api.core.management.BridgeControl;
import org.apache.activemq.artemis.api.core.management.DivertControl;
-import org.apache.activemq.artemis.api.core.JsonUtil;
import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
import org.apache.activemq.artemis.api.core.management.QueueControl;
import org.apache.activemq.artemis.api.core.management.RoleInfo;
+import org.apache.activemq.artemis.core.client.impl.ClientSessionImpl;
import org.apache.activemq.artemis.core.config.Configuration;
+import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration;
import org.apache.activemq.artemis.core.messagecounter.impl.MessageCounterManagerImpl;
import org.apache.activemq.artemis.core.remoting.impl.invm.InVMAcceptorFactory;
import org.apache.activemq.artemis.core.remoting.impl.invm.TransportConstants;
+import org.apache.activemq.artemis.core.security.Role;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.ActiveMQServers;
import org.apache.activemq.artemis.core.settings.impl.SlowConsumerPolicy;
import org.apache.activemq.artemis.core.transaction.impl.XidImpl;
import org.apache.activemq.artemis.jlibaio.LibaioContext;
+import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager;
+import org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule;
+import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger;
import org.apache.activemq.artemis.utils.RandomUtil;
import org.apache.activemq.artemis.utils.UUIDGenerator;
import org.junit.Assert;
@@ -402,7 +412,7 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
String addressMatch = "test.#";
String exactAddress = "test.whatever";
- assertEquals(0, serverControl.getRoles(addressMatch).length);
+ assertEquals(1, serverControl.getRoles(addressMatch).length);
serverControl.addSecuritySettings(addressMatch, "foo", "foo, bar", "foo", "bar", "foo, bar", "", "", "bar");
// Restart the server. Those settings should be persisted
@@ -443,7 +453,7 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
assertTrue(barRole.isBrowse());
serverControl.removeSecuritySettings(addressMatch);
- assertEquals(0, serverControl.getRoles(exactAddress).length);
+ assertEquals(1, serverControl.getRoles(exactAddress).length);
}
@Test
@@ -1069,6 +1079,198 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
locator.close();
}
+ @Test
+ public void testListConnectionsAsJSON() throws Exception {
+ ActiveMQServerControl serverControl = createManagementControl();
+ List factories = new ArrayList<>();
+
+ ServerLocator locator = createInVMNonHALocator();
+ factories.add(createSessionFactory(locator));
+ factories.add(createSessionFactory(locator));
+ addClientSession(factories.get(1).createSession());
+
+ String jsonString = serverControl.listConnectionsAsJSON();
+ IntegrationTestLogger.LOGGER.info(jsonString);
+ Assert.assertNotNull(jsonString);
+ JsonArray array = JsonUtil.readJsonArray(jsonString);
+ Assert.assertEquals(2, array.size());
+ JsonObject first;
+ JsonObject second;
+ if (array.getJsonObject(0).getJsonNumber("creationTime").longValue() < array.getJsonObject(1).getJsonNumber("creationTime").longValue()) {
+ first = array.getJsonObject(0);
+ second = array.getJsonObject(1);
+ }
+ else {
+ first = array.getJsonObject(1);
+ second = array.getJsonObject(0);
+ }
+
+ Assert.assertTrue(first.getString("connectionID").length() > 0);
+ Assert.assertTrue(first.getString("clientAddress").length() > 0);
+ Assert.assertTrue(first.getJsonNumber("creationTime").longValue() > 0);
+ Assert.assertEquals(0, first.getJsonNumber("sessionCount").longValue());
+
+ Assert.assertTrue(second.getString("connectionID").length() > 0);
+ Assert.assertTrue(second.getString("clientAddress").length() > 0);
+ Assert.assertTrue(second.getJsonNumber("creationTime").longValue() > 0);
+ Assert.assertEquals(1, second.getJsonNumber("sessionCount").longValue());
+ }
+
+ @Test
+ public void testListConsumersAsJSON() throws Exception {
+ SimpleString queueName = new SimpleString(UUID.randomUUID().toString());
+ final String filter = "x = 1";
+ ActiveMQServerControl serverControl = createManagementControl();
+
+ ServerLocator locator = createInVMNonHALocator();
+ ClientSessionFactory factory = createSessionFactory(locator);
+ ClientSession session = addClientSession(factory.createSession());
+ server.createQueue(queueName, queueName, null, false, false);
+ addClientConsumer(session.createConsumer(queueName));
+ addClientConsumer(session.createConsumer(queueName, SimpleString.toSimpleString(filter), true));
+
+ String jsonString = serverControl.listConsumersAsJSON(factory.getConnection().getID().toString());
+ IntegrationTestLogger.LOGGER.info(jsonString);
+ Assert.assertNotNull(jsonString);
+ JsonArray array = JsonUtil.readJsonArray(jsonString);
+ Assert.assertEquals(2, array.size());
+ JsonObject first;
+ JsonObject second;
+ if (array.getJsonObject(0).getJsonNumber("creationTime").longValue() < array.getJsonObject(1).getJsonNumber("creationTime").longValue()) {
+ first = array.getJsonObject(0);
+ second = array.getJsonObject(1);
+ }
+ else {
+ first = array.getJsonObject(1);
+ second = array.getJsonObject(0);
+ }
+
+ Assert.assertNotNull(first.getJsonNumber("consumerID").longValue());
+ Assert.assertTrue(first.getString("connectionID").length() > 0);
+ Assert.assertEquals(factory.getConnection().getID().toString(), first.getString("connectionID"));
+ Assert.assertTrue(first.getString("sessionID").length() > 0);
+ Assert.assertEquals(((ClientSessionImpl)session).getName(), first.getString("sessionID"));
+ Assert.assertTrue(first.getString("queueName").length() > 0);
+ Assert.assertEquals(queueName.toString(), first.getString("queueName"));
+ Assert.assertEquals(false, first.getBoolean("browseOnly"));
+ Assert.assertTrue(first.getJsonNumber("creationTime").longValue() > 0);
+ Assert.assertEquals(0, first.getJsonNumber("deliveringCount").longValue());
+
+ Assert.assertNotNull(second.getJsonNumber("consumerID").longValue());
+ Assert.assertTrue(second.getString("connectionID").length() > 0);
+ Assert.assertEquals(factory.getConnection().getID().toString(), second.getString("connectionID"));
+ Assert.assertTrue(second.getString("sessionID").length() > 0);
+ Assert.assertEquals(((ClientSessionImpl)session).getName(), second.getString("sessionID"));
+ Assert.assertTrue(second.getString("queueName").length() > 0);
+ Assert.assertEquals(queueName.toString(), second.getString("queueName"));
+ Assert.assertEquals(true, second.getBoolean("browseOnly"));
+ Assert.assertTrue(second.getJsonNumber("creationTime").longValue() > 0);
+ Assert.assertEquals(0, second.getJsonNumber("deliveringCount").longValue());
+ Assert.assertTrue(second.getString("filter").length() > 0);
+ Assert.assertEquals(filter, second.getString("filter"));
+ }
+
+ @Test
+ public void testListAllConsumersAsJSON() throws Exception {
+ SimpleString queueName = new SimpleString(UUID.randomUUID().toString());
+ ActiveMQServerControl serverControl = createManagementControl();
+
+ ServerLocator locator = createInVMNonHALocator();
+ ClientSessionFactory factory = createSessionFactory(locator);
+ ClientSession session = addClientSession(factory.createSession());
+
+ ServerLocator locator2 = createInVMNonHALocator();
+ ClientSessionFactory factory2 = createSessionFactory(locator2);
+ ClientSession session2 = addClientSession(factory2.createSession());
+
+ server.createQueue(queueName, queueName, null, false, false);
+
+ addClientConsumer(session.createConsumer(queueName));
+ addClientConsumer(session2.createConsumer(queueName));
+
+ String jsonString = serverControl.listAllConsumersAsJSON();
+ IntegrationTestLogger.LOGGER.info(jsonString);
+ Assert.assertNotNull(jsonString);
+ JsonArray array = JsonUtil.readJsonArray(jsonString);
+ Assert.assertEquals(2, array.size());
+ JsonObject first;
+ JsonObject second;
+ if (array.getJsonObject(0).getJsonNumber("creationTime").longValue() < array.getJsonObject(1).getJsonNumber("creationTime").longValue()) {
+ first = array.getJsonObject(0);
+ second = array.getJsonObject(1);
+ }
+ else {
+ first = array.getJsonObject(1);
+ second = array.getJsonObject(0);
+ }
+
+ Assert.assertTrue(first.getJsonNumber("creationTime").longValue() > 0);
+ Assert.assertNotNull(first.getJsonNumber("consumerID").longValue());
+ Assert.assertTrue(first.getString("connectionID").length() > 0);
+ Assert.assertEquals(factory.getConnection().getID().toString(), first.getString("connectionID"));
+ Assert.assertTrue(first.getString("sessionID").length() > 0);
+ Assert.assertEquals(((ClientSessionImpl)session).getName(), first.getString("sessionID"));
+ Assert.assertTrue(first.getString("queueName").length() > 0);
+ Assert.assertEquals(queueName.toString(), first.getString("queueName"));
+ Assert.assertEquals(false, first.getBoolean("browseOnly"));
+ Assert.assertEquals(0, first.getJsonNumber("deliveringCount").longValue());
+
+ Assert.assertTrue(second.getJsonNumber("creationTime").longValue() > 0);
+ Assert.assertNotNull(second.getJsonNumber("consumerID").longValue());
+ Assert.assertTrue(second.getString("connectionID").length() > 0);
+ Assert.assertEquals(factory2.getConnection().getID().toString(), second.getString("connectionID"));
+ Assert.assertTrue(second.getString("sessionID").length() > 0);
+ Assert.assertEquals(((ClientSessionImpl)session2).getName(), second.getString("sessionID"));
+ Assert.assertTrue(second.getString("queueName").length() > 0);
+ Assert.assertEquals(queueName.toString(), second.getString("queueName"));
+ Assert.assertEquals(false, second.getBoolean("browseOnly"));
+ Assert.assertEquals(0, second.getJsonNumber("deliveringCount").longValue());
+ }
+
+ @Test
+ public void testListSessionsAsJSON() throws Exception {
+ SimpleString queueName = new SimpleString(UUID.randomUUID().toString());
+ server.createQueue(queueName, queueName, null, false, false);
+ ActiveMQServerControl serverControl = createManagementControl();
+
+ ServerLocator locator = createInVMNonHALocator();
+ ClientSessionFactory factory = createSessionFactory(locator);
+ ClientSession session1 = addClientSession(factory.createSession());
+ Thread.sleep(5);
+ ClientSession session2 = addClientSession(factory.createSession("myUser", "myPass", false, false, false, false, 0));
+ session2.createConsumer(queueName);
+
+ String jsonString = serverControl.listSessionsAsJSON(factory.getConnection().getID().toString());
+ IntegrationTestLogger.LOGGER.info(jsonString);
+ Assert.assertNotNull(jsonString);
+ JsonArray array = JsonUtil.readJsonArray(jsonString);
+ Assert.assertEquals(2, array.size());
+ JsonObject first;
+ JsonObject second;
+ if (array.getJsonObject(0).getJsonNumber("creationTime").longValue() < array.getJsonObject(1).getJsonNumber("creationTime").longValue()) {
+ first = array.getJsonObject(0);
+ second = array.getJsonObject(1);
+ }
+ else {
+ first = array.getJsonObject(1);
+ second = array.getJsonObject(0);
+ }
+
+ Assert.assertTrue(first.getString("sessionID").length() > 0);
+ Assert.assertEquals(((ClientSessionImpl)session1).getName(), first.getString("sessionID"));
+ Assert.assertTrue(first.getString("principal").length() > 0);
+ Assert.assertEquals("guest", first.getString("principal"));
+ Assert.assertTrue(first.getJsonNumber("creationTime").longValue() > 0);
+ Assert.assertEquals(0, first.getJsonNumber("consumerCount").longValue());
+
+ Assert.assertTrue(second.getString("sessionID").length() > 0);
+ Assert.assertEquals(((ClientSessionImpl)session2).getName(), second.getString("sessionID"));
+ Assert.assertTrue(second.getString("principal").length() > 0);
+ Assert.assertEquals("myUser", second.getString("principal"));
+ Assert.assertTrue(second.getJsonNumber("creationTime").longValue() > 0);
+ Assert.assertEquals(1, second.getJsonNumber("consumerCount").longValue());
+ }
+
protected void scaleDown(ScaleDownHandler handler) throws Exception {
SimpleString address = new SimpleString("testQueue");
HashMap params = new HashMap<>();
@@ -1119,9 +1321,21 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
connectorConfig = new TransportConfiguration(INVM_CONNECTOR_FACTORY);
- conf = createDefaultInVMConfig().setJMXManagementEnabled(true).addConnectorConfiguration(connectorConfig.getName(), connectorConfig);
- server = addServer(ActiveMQServers.newActiveMQServer(conf, mbeanServer, true));
+ conf = createDefaultNettyConfig().setJMXManagementEnabled(true).addConnectorConfiguration(connectorConfig.getName(), connectorConfig);
+ conf.setSecurityEnabled(true);
+ SecurityConfiguration securityConfiguration = new SecurityConfiguration();
+ securityConfiguration.addUser("guest", "guest");
+ securityConfiguration.addUser("myUser", "myPass");
+ securityConfiguration.addRole("guest", "guest");
+ securityConfiguration.addRole("myUser", "guest");
+ securityConfiguration.setDefaultUser("guest");
+ ActiveMQJAASSecurityManager securityManager = new ActiveMQJAASSecurityManager(InVMLoginModule.class.getName(), securityConfiguration);
+ server = addServer(ActiveMQServers.newActiveMQServer(conf, mbeanServer, securityManager, true));
server.start();
+
+ HashSet role = new HashSet<>();
+ role.add(new Role("guest", true, true, true, true, true, true, true, true));
+ server.getSecurityRepository().addMatch("#", role);
}
protected ActiveMQServerControl createManagementControl() throws Exception {
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
index 2bd2a8b945..498c31f8f9 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java
@@ -705,6 +705,26 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
public String listProducersInfoAsJSON() throws Exception {
return (String) proxy.invokeOperation("listProducersInfoAsJSON");
}
+
+ @Override
+ public String listConsumersAsJSON(String connectionID) throws Exception {
+ return (String) proxy.invokeOperation("listConsumersAsJSON");
+ }
+
+ @Override
+ public String listAllConsumersAsJSON() throws Exception {
+ return (String) proxy.invokeOperation("listAllConsumersAsJSON");
+ }
+
+ @Override
+ public String listConnectionsAsJSON() throws Exception {
+ return (String) proxy.invokeOperation("listConnectionsAsJSON");
+ }
+
+ @Override
+ public String listSessionsAsJSON(@Parameter(desc = "a connection ID", name = "connectionID") String connectionID) throws Exception {
+ return (String) proxy.invokeOperation("listSessionsAsJSON");
+ }
};
}