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 51ccc7d6c2 ARTEMIS-3989 ActiveMQServerControl.getRoles doesn't return 
all roles
     new d127866dfd This closes #4213
51ccc7d6c2 is described below

commit 51ccc7d6c2eb8c1822f892eea9d220d21fdd5076
Author: Emmanuel Hugonnet <[email protected]>
AuthorDate: Tue Sep 13 21:09:30 2022 +0200

    ARTEMIS-3989 ActiveMQServerControl.getRoles doesn't return all roles
    
     - Fixing RoleInfo to provide informations on deleteAddress.
     - Adding more coverage on test to check the number of permissions
       returned.
    
    Signed-off-by: Emmanuel Hugonnet <[email protected]>
---
 .../artemis/api/core/management/RoleInfo.java      | 26 ++++++-
 .../management/impl/ActiveMQServerControlImpl.java | 14 +++-
 .../management/ActiveMQServerControlTest.java      | 91 +++++++++++++++-------
 3 files changed, 102 insertions(+), 29 deletions(-)

diff --git 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/RoleInfo.java
 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/RoleInfo.java
index 808fb65ab7..211f716d6a 100644
--- 
a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/RoleInfo.java
+++ 
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/RoleInfo.java
@@ -47,6 +47,8 @@ public final class RoleInfo {
 
    private final boolean createAddress;
 
+   private final boolean deleteAddress;
+
    /**
     * Returns an array of RoleInfo corresponding to the JSON serialization 
returned
     * by {@link AddressControl#getRolesAsJSON()}.
@@ -56,7 +58,18 @@ public final class RoleInfo {
       RoleInfo[] roles = new RoleInfo[array.size()];
       for (int i = 0; i < array.size(); i++) {
          JsonObject r = array.getJsonObject(i);
-         RoleInfo role = new RoleInfo(r.getString("name"), 
r.getBoolean("send"), r.getBoolean("consume"), 
r.getBoolean("createDurableQueue"), r.getBoolean("deleteDurableQueue"), 
r.getBoolean("createNonDurableQueue"), r.getBoolean("deleteNonDurableQueue"), 
r.getBoolean("manage"), r.getBoolean("browse"), r.getBoolean("createAddress"));
+         RoleInfo role = new RoleInfo(
+                 r.getString("name"),
+                 r.getBoolean("send"),
+                 r.getBoolean("consume"),
+                 r.getBoolean("createDurableQueue"),
+                 r.getBoolean("deleteDurableQueue"),
+                 r.getBoolean("createNonDurableQueue"),
+                 r.getBoolean("deleteNonDurableQueue"),
+                 r.getBoolean("manage"),
+                 r.getBoolean("browse"),
+                 r.getBoolean("createAddress"),
+                 r.getBoolean("deleteAddress"));
          roles[i] = role;
       }
       return roles;
@@ -71,7 +84,8 @@ public final class RoleInfo {
                     final boolean deleteNonDurableQueue,
                     final boolean manage,
                     final boolean browse,
-                    final boolean createAddress) {
+                    final boolean createAddress,
+                    final boolean deleteAddress) {
       this.name = name;
       this.send = send;
       this.consume = consume;
@@ -82,6 +96,7 @@ public final class RoleInfo {
       this.manage = manage;
       this.browse = browse;
       this.createAddress = createAddress;
+      this.deleteAddress = deleteAddress;
    }
 
    /**
@@ -153,4 +168,11 @@ public final class RoleInfo {
    public boolean isCreateAddress() {
       return createAddress;
    }
+
+   /**
+    * Returns whether this role can delete addresses.
+    */
+   public boolean isDeleteAddress() {
+      return deleteAddress;
+   }
 }
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 658df90f2a..a395757701 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
@@ -2924,7 +2924,19 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
          int i = 0;
          for (Role role : roles) {
-            objRoles[i++] = new Object[]{role.getName(), 
CheckType.SEND.hasRole(role), CheckType.CONSUME.hasRole(role), 
CheckType.CREATE_DURABLE_QUEUE.hasRole(role), 
CheckType.DELETE_DURABLE_QUEUE.hasRole(role), 
CheckType.CREATE_NON_DURABLE_QUEUE.hasRole(role), 
CheckType.DELETE_NON_DURABLE_QUEUE.hasRole(role), 
CheckType.MANAGE.hasRole(role)};
+            objRoles[i++] = new Object[]{
+               role.getName(),
+               CheckType.SEND.hasRole(role),
+               CheckType.CONSUME.hasRole(role),
+               CheckType.CREATE_DURABLE_QUEUE.hasRole(role),
+               CheckType.DELETE_DURABLE_QUEUE.hasRole(role),
+               CheckType.CREATE_NON_DURABLE_QUEUE.hasRole(role),
+               CheckType.DELETE_NON_DURABLE_QUEUE.hasRole(role),
+               CheckType.MANAGE.hasRole(role),
+               CheckType.BROWSE.hasRole(role),
+               CheckType.CREATE_ADDRESS.hasRole(role),
+               CheckType.DELETE_ADDRESS.hasRole(role)
+            };
          }
          return objRoles;
       } finally {
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 210c8b5a42..4bf937242e 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
@@ -77,6 +77,7 @@ import 
org.apache.activemq.artemis.core.messagecounter.impl.MessageCounterManage
 import 
org.apache.activemq.artemis.core.persistence.config.PersistedDivertConfiguration;
 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.CheckType;
 import org.apache.activemq.artemis.core.security.Role;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
 import org.apache.activemq.artemis.core.server.ActiveMQServers;
@@ -1016,34 +1017,72 @@ public class ActiveMQServerControlTest extends 
ManagementTestBase {
       String rolesAsJSON = serverControl.getRolesAsJSON(exactAddress);
       RoleInfo[] roleInfos = RoleInfo.from(rolesAsJSON);
       assertEquals(2, roleInfos.length);
-      RoleInfo fooRole = null;
-      RoleInfo barRole = null;
-      if (roleInfos[0].getName().equals("foo")) {
-         fooRole = roleInfos[0];
-         barRole = roleInfos[1];
+      RoleInfo fooRoleInfo = null;
+      RoleInfo barRoleInfo = null;
+      if ("foo".equals(roleInfos[0].getName())) {
+         fooRoleInfo = roleInfos[0];
+         barRoleInfo = roleInfos[1];
       } else {
-         fooRole = roleInfos[1];
-         barRole = roleInfos[0];
+         fooRoleInfo = roleInfos[1];
+         barRoleInfo = roleInfos[0];
       }
-      assertTrue(fooRole.isSend());
-      assertTrue(fooRole.isConsume());
-      assertFalse(fooRole.isCreateDurableQueue());
-      assertFalse(fooRole.isDeleteDurableQueue());
-      assertTrue(fooRole.isCreateNonDurableQueue());
-      assertFalse(fooRole.isDeleteNonDurableQueue());
-      assertFalse(fooRole.isManage());
-      assertFalse(fooRole.isBrowse());
-      assertTrue(fooRole.isCreateAddress());
-
-      assertFalse(barRole.isSend());
-      assertTrue(barRole.isConsume());
-      assertFalse(barRole.isCreateDurableQueue());
-      assertTrue(barRole.isDeleteDurableQueue());
-      assertTrue(barRole.isCreateNonDurableQueue());
-      assertFalse(barRole.isDeleteNonDurableQueue());
-      assertFalse(barRole.isManage());
-      assertTrue(barRole.isBrowse());
-      assertFalse(barRole.isCreateAddress());
+      assertTrue(fooRoleInfo.isSend());
+      assertTrue(fooRoleInfo.isConsume());
+      assertFalse(fooRoleInfo.isCreateDurableQueue());
+      assertFalse(fooRoleInfo.isDeleteDurableQueue());
+      assertTrue(fooRoleInfo.isCreateNonDurableQueue());
+      assertFalse(fooRoleInfo.isDeleteNonDurableQueue());
+      assertFalse(fooRoleInfo.isManage());
+      assertFalse(fooRoleInfo.isBrowse());
+      assertTrue(fooRoleInfo.isCreateAddress());
+      assertTrue(fooRoleInfo.isDeleteAddress());
+
+      assertFalse(barRoleInfo.isSend());
+      assertTrue(barRoleInfo.isConsume());
+      assertFalse(barRoleInfo.isCreateDurableQueue());
+      assertTrue(barRoleInfo.isDeleteDurableQueue());
+      assertTrue(barRoleInfo.isCreateNonDurableQueue());
+      assertFalse(barRoleInfo.isDeleteNonDurableQueue());
+      assertFalse(barRoleInfo.isManage());
+      assertTrue(barRoleInfo.isBrowse());
+      assertFalse(barRoleInfo.isCreateAddress());
+      assertFalse(barRoleInfo.isDeleteAddress());
+
+      Object[] roles = serverControl.getRoles(exactAddress);
+      assertEquals(2, roles.length);
+      Object[] fooRole = null;
+      Object[] barRole = null;
+      if ("foo".equals(((Object[])roles[0])[0])) {
+         fooRole = (Object[]) roles[0];
+         barRole = (Object[]) roles[1];
+      } else {
+         fooRole = (Object[]) roles[1];
+         barRole = (Object[]) roles[0];
+      }
+      Assert.assertEquals(CheckType.values().length + 1, fooRole.length);
+      Assert.assertEquals(CheckType.values().length + 1, barRole.length);
+
+      assertTrue((boolean)fooRole[1]);
+      assertTrue((boolean)fooRole[2]);
+      assertFalse((boolean)fooRole[3]);
+      assertFalse((boolean)fooRole[4]);
+      assertTrue((boolean)fooRole[5]);
+      assertFalse((boolean)fooRole[6]);
+      assertFalse((boolean)fooRole[7]);
+      assertFalse((boolean)fooRole[8]);
+      assertTrue((boolean)fooRole[9]);
+      assertTrue((boolean)fooRole[10]);
+
+      assertFalse((boolean)barRole[1]);
+      assertTrue((boolean)barRole[2]);
+      assertFalse((boolean)barRole[3]);
+      assertTrue((boolean)barRole[4]);
+      assertTrue((boolean)barRole[5]);
+      assertFalse((boolean)barRole[6]);
+      assertFalse((boolean)barRole[7]);
+      assertTrue((boolean)barRole[8]);
+      assertFalse((boolean)barRole[9]);
+      assertFalse((boolean)barRole[10]);
 
       serverControl.removeSecuritySettings(addressMatch);
       assertEquals(1, serverControl.getRoles(exactAddress).length);

Reply via email to