You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by li...@apache.org on 2022/09/05 02:23:00 UTC

[rocketmq] branch develop updated: [ISSUE #4585] PlainPermissionManagerTest add unit test (#4637)

This is an automated email from the ASF dual-hosted git repository.

lizhanhui pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/develop by this push:
     new 801639163 [ISSUE #4585] PlainPermissionManagerTest add unit test (#4637)
801639163 is described below

commit 801639163d6d5b0e2ceaa79aa1bdbe5058b1a9f2
Author: Oliver <wq...@163.com>
AuthorDate: Mon Sep 5 10:22:51 2022 +0800

    [ISSUE #4585] PlainPermissionManagerTest add unit test (#4637)
    
    * [Issue #4585] Add unit test
    
    * update path to support windows and not print SecretKey
---
 .../acl/plain/PlainAccessValidatorTest.java        |   2 +-
 .../acl/plain/PlainPermissionManagerTest.java      | 106 ++++++++++++++++++++-
 .../java/org/apache/rocketmq/common/AclConfig.java |   8 ++
 .../apache/rocketmq/common/PlainAccessConfig.java  |  13 +++
 4 files changed, 124 insertions(+), 5 deletions(-)

diff --git a/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainAccessValidatorTest.java b/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainAccessValidatorTest.java
index 640943827..49558afa5 100644
--- a/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainAccessValidatorTest.java
+++ b/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainAccessValidatorTest.java
@@ -547,7 +547,7 @@ public class PlainAccessValidatorTest {
         Assert.assertEquals(verifyMap.get(AclConstants.CONFIG_WHITE_ADDR), "192.168.1.*");
 
         String aclFileName = System.getProperty("rocketmq.home.dir")
-            + File.separator + "conf/acl/plain_acl.yml".replace("/", File.separator);
+            + File.separator + "conf/plain_acl.yml".replace("/", File.separator);
         Map<String, DataVersion> dataVersionMap = plainAccessValidator.getAllAclConfigVersion();
         DataVersion dataVersion = dataVersionMap.get(aclFileName);
         Assert.assertEquals(0, dataVersion.getCounter().get());
diff --git a/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainPermissionManagerTest.java b/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainPermissionManagerTest.java
index eafc62345..aa549f300 100644
--- a/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainPermissionManagerTest.java
+++ b/acl/src/test/java/org/apache/rocketmq/acl/plain/PlainPermissionManagerTest.java
@@ -20,20 +20,28 @@ import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.apache.commons.lang3.reflect.FieldUtils;
+import org.apache.rocketmq.acl.common.AclConstants;
 import org.apache.rocketmq.acl.common.AclException;
 import org.apache.rocketmq.acl.common.AclUtils;
 import org.apache.rocketmq.acl.common.Permission;
+import org.apache.rocketmq.common.AclConfig;
+import org.apache.rocketmq.common.DataVersion;
 import org.apache.rocketmq.common.PlainAccessConfig;
+import org.assertj.core.api.Assertions;
 import org.assertj.core.util.Lists;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
+
 public class PlainPermissionManagerTest {
 
     PlainPermissionManager plainPermissionManager;
@@ -45,6 +53,10 @@ public class PlainPermissionManagerTest {
     PlainAccessConfig plainAccessConfig = new PlainAccessConfig();
     Set<Integer> adminCode = new HashSet<>();
 
+    private static final String PATH = PlainPermissionManagerTest.class.getResource(File.separator).getFile();
+
+    private static final String DEFAULT_TOPIC = "topic-acl";
+
     @Before
     public void init() throws NoSuchFieldException, SecurityException, IOException {
         // UPDATE_AND_CREATE_TOPIC
@@ -63,7 +75,7 @@ public class PlainPermissionManagerTest {
         ANYPlainAccessResource = clonePlainAccessResource(Permission.ANY);
         DENYPlainAccessResource = clonePlainAccessResource(Permission.DENY);
 
-        File file = new File("src/test/resources");
+        File file = new File(PATH);
         System.setProperty("rocketmq.home.dir", file.getAbsolutePath());
 
         plainPermissionManager = new PlainPermissionManager();
@@ -215,7 +227,7 @@ public class PlainPermissionManagerTest {
 
     @Test
     public void multiFilePathTest() {
-        File file = new File("src/test/resources");
+        File file = new File(PATH);
         System.setProperty("rocketmq.home.dir", file.getAbsolutePath());
 
         PlainPermissionManager plainPermissionManager = new PlainPermissionManager();
@@ -247,7 +259,7 @@ public class PlainPermissionManagerTest {
 
     @Test
     public void testWatch() throws IOException, IllegalAccessException, InterruptedException {
-        File file = new File("src/test/resources");
+        File file = new File(PATH);
         System.setProperty("rocketmq.home.dir", file.getAbsolutePath());
 
         String fileName = System.getProperty("rocketmq.home.dir") + File.separator + "/conf/acl/plain_acl_test.yml";
@@ -299,7 +311,7 @@ public class PlainPermissionManagerTest {
 
         }
         transport.delete();
-        System.setProperty("rocketmq.home.dir", "src/test/resources");
+        System.setProperty("rocketmq.home.dir", PATH);
     }
     
     @Test
@@ -325,4 +337,90 @@ public class PlainPermissionManagerTest {
         plainAccessConfig.setTopicPerms(Lists.newArrayList("topicA=SUB"));
         plainPermissionManager.updateAccessConfig(plainAccessConfig);
     }
+
+    @Test
+    public void getAllAclFilesTest() {
+        final List<String> notExistList = plainPermissionManager.getAllAclFiles("aa/bb");
+        Assertions.assertThat(notExistList).isEmpty();
+        final List<String> files = plainPermissionManager.getAllAclFiles(PATH);
+        Assertions.assertThat(files).isNotEmpty();
+    }
+
+    @Test
+    public void loadTest() {
+        plainPermissionManager.load();
+        final Map<String, DataVersion> map = plainPermissionManager.getDataVersionMap();
+        Assertions.assertThat(map).isNotEmpty();
+    }
+
+    @Test
+    public void updateAclConfigFileVersionTest() {
+        String aclFileName = "test_plain_acl";
+        Map<String, Object> updateAclConfigMap  = new HashMap<>();
+        List<Map<String, Object>> versionElement = new ArrayList<>();
+        Map<String, Object> accountsMap = new LinkedHashMap<>();
+        accountsMap.put(AclConstants.CONFIG_COUNTER, 1);
+        accountsMap.put(AclConstants.CONFIG_TIME_STAMP, System.currentTimeMillis());
+        versionElement.add(accountsMap);
+
+        updateAclConfigMap.put(AclConstants.CONFIG_DATA_VERSION, versionElement);
+        final Map<String, Object> map = plainPermissionManager.updateAclConfigFileVersion(aclFileName, updateAclConfigMap);
+        final List<Map<String, Object>> version = (List<Map<String, Object>>) map.get("dataVersion");
+        Assertions.assertThat(map).isNotEmpty();
+        Assert.assertEquals(2L, version.get(0).get("counter"));
+    }
+
+    @Test
+    public void createAclAccessConfigMapTest() {
+        Map<String, Object> existedAccountMap =  new HashMap<>();
+        plainAccessConfig.setAccessKey("admin123");
+        plainAccessConfig.setSecretKey("12345678");
+        plainAccessConfig.setWhiteRemoteAddress("192.168.1.1");
+        plainAccessConfig.setAdmin(false);
+        plainAccessConfig.setDefaultGroupPerm(AclConstants.SUB_PUB);
+        plainAccessConfig.setTopicPerms(Arrays.asList(DEFAULT_TOPIC + "=" + AclConstants.PUB));
+        plainAccessConfig.setGroupPerms(Lists.newArrayList("groupA=SUB"));
+
+        final Map<String, Object> map = plainPermissionManager.createAclAccessConfigMap(existedAccountMap, plainAccessConfig);
+        Assertions.assertThat(map).isNotEmpty();
+        Assert.assertEquals(AclConstants.SUB_PUB, map.get("defaultGroupPerm"));
+        final List groupPerms = (List) map.get("groupPerms");
+        Assert.assertEquals("groupA=SUB", groupPerms.get(0));
+        Assert.assertEquals("12345678", map.get("secretKey"));
+        Assert.assertEquals("admin123", map.get("accessKey"));
+        Assert.assertEquals("192.168.1.1", map.get("whiteRemoteAddress"));
+        final List topicPerms = (List) map.get("topicPerms");
+        Assert.assertEquals("topic-acl=PUB", topicPerms.get(0));
+        Assert.assertEquals(false, map.get("admin"));
+    }
+
+    @Test
+    public void deleteAccessConfigTest() throws InterruptedException {
+        // delete not exist accessConfig
+        final boolean flag1 = plainPermissionManager.deleteAccessConfig("test_delete");
+        assert flag1 == false;
+
+        plainAccessConfig.setAccessKey("test_delete");
+        plainAccessConfig.setSecretKey("12345678");
+        plainAccessConfig.setWhiteRemoteAddress("192.168.1.1");
+        plainAccessConfig.setAdmin(false);
+        plainAccessConfig.setDefaultGroupPerm(AclConstants.SUB_PUB);
+        plainAccessConfig.setTopicPerms(Arrays.asList(DEFAULT_TOPIC + "=" + AclConstants.PUB));
+        plainAccessConfig.setGroupPerms(Lists.newArrayList("groupA=SUB"));
+        plainPermissionManager.updateAccessConfig(plainAccessConfig);
+
+        //delete existed accessConfig
+        final boolean flag2 = plainPermissionManager.deleteAccessConfig("test_delete");
+        assert flag2 == true;
+
+    }
+
+    @Test
+    public void updateGlobalWhiteAddrsConfigTest() {
+        final boolean flag = plainPermissionManager.updateGlobalWhiteAddrsConfig(Lists.newArrayList("192.168.1.2"));
+        assert flag == true;
+        final AclConfig config = plainPermissionManager.getAllAclConfig();
+        Assert.assertEquals(true, config.getGlobalWhiteAddrs().contains("192.168.1.2"));
+    }
+
 }
diff --git a/common/src/main/java/org/apache/rocketmq/common/AclConfig.java b/common/src/main/java/org/apache/rocketmq/common/AclConfig.java
index 191236a09..49b9e05e2 100644
--- a/common/src/main/java/org/apache/rocketmq/common/AclConfig.java
+++ b/common/src/main/java/org/apache/rocketmq/common/AclConfig.java
@@ -40,4 +40,12 @@ public class AclConfig {
     public void setPlainAccessConfigs(List<PlainAccessConfig> plainAccessConfigs) {
         this.plainAccessConfigs = plainAccessConfigs;
     }
+
+    @Override
+    public String toString() {
+        return "AclConfig{" +
+            "globalWhiteAddrs=" + globalWhiteAddrs +
+            ", plainAccessConfigs=" + plainAccessConfigs +
+            '}';
+    }
 }
diff --git a/common/src/main/java/org/apache/rocketmq/common/PlainAccessConfig.java b/common/src/main/java/org/apache/rocketmq/common/PlainAccessConfig.java
index b193f4371..b9e7c21a7 100644
--- a/common/src/main/java/org/apache/rocketmq/common/PlainAccessConfig.java
+++ b/common/src/main/java/org/apache/rocketmq/common/PlainAccessConfig.java
@@ -99,4 +99,17 @@ public class PlainAccessConfig {
     public void setGroupPerms(List<String> groupPerms) {
         this.groupPerms = groupPerms;
     }
+
+    @Override
+    public String toString() {
+        return "PlainAccessConfig{" +
+            "accessKey='" + accessKey + '\'' +
+            ", whiteRemoteAddress='" + whiteRemoteAddress + '\'' +
+            ", admin=" + admin +
+            ", defaultTopicPerm='" + defaultTopicPerm + '\'' +
+            ", defaultGroupPerm='" + defaultGroupPerm + '\'' +
+            ", topicPerms=" + topicPerms +
+            ", groupPerms=" + groupPerms +
+            '}';
+    }
 }