From f354e0ee45b09d5c3fd95dc0571f06787b2d24c5 Mon Sep 17 00:00:00 2001 From: Oliver Date: Wed, 20 Jul 2022 13:51:45 +0800 Subject: [PATCH 1/4] [Issue #4585] Add unit test --- .../acl/plain/PlainPermissionManagerTest.java | 92 ++++++++++++++++++- .../org/apache/rocketmq/common/AclConfig.java | 8 ++ .../rocketmq/common/PlainAccessConfig.java | 14 +++ 3 files changed, 110 insertions(+), 4 deletions(-) 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 eafc623454d4..9e79a09a8922 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,29 @@ 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; +import static org.apache.rocketmq.acl.plain.PlainAccessControlFlowTest.DEFAULT_TOPIC; + public class PlainPermissionManagerTest { PlainPermissionManager plainPermissionManager; @@ -45,6 +54,8 @@ public class PlainPermissionManagerTest { PlainAccessConfig plainAccessConfig = new PlainAccessConfig(); Set adminCode = new HashSet<>(); + private static final String PATH = "src/test/resources"; + @Before public void init() throws NoSuchFieldException, SecurityException, IOException { // UPDATE_AND_CREATE_TOPIC @@ -63,7 +74,7 @@ public void init() throws NoSuchFieldException, SecurityException, IOException { 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 +226,7 @@ public void isWatchStartTest() { @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 +258,7 @@ public void multiFilePathTest() { @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 +310,7 @@ public void testWatch() throws IOException, IllegalAccessException, InterruptedE } transport.delete(); - System.setProperty("rocketmq.home.dir", "src/test/resources"); + System.setProperty("rocketmq.home.dir", PATH); } @Test @@ -325,4 +336,77 @@ public void updateAccessConfigTest() { plainAccessConfig.setTopicPerms(Lists.newArrayList("topicA=SUB")); plainPermissionManager.updateAccessConfig(plainAccessConfig); } + + @Test + public void getAllAclFilesTest() { + final List notExistList = plainPermissionManager.getAllAclFiles("aa/bb"); + Assertions.assertThat(notExistList).isEmpty(); + final List files = plainPermissionManager.getAllAclFiles(PATH); + Assertions.assertThat(files).isNotEmpty(); + } + + @Test + public void loadTest() { + plainPermissionManager.load(); + final Map map = plainPermissionManager.getDataVersionMap(); + Assertions.assertThat(map).isNotEmpty(); + } + + @Test + public void updateAclConfigFileVersionTest() { + String aclFileName = "test_plain_acl"; + Map updateAclConfigMap = new HashMap<>(); + List> versionElement = new ArrayList<>(); + Map 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 map = plainPermissionManager.updateAclConfigFileVersion(aclFileName, updateAclConfigMap); + Assertions.assertThat(map).isNotEmpty(); + } + + @Test + public void createAclAccessConfigMapTest() { + Map 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 map = plainPermissionManager.createAclAccessConfigMap(existedAccountMap, plainAccessConfig); + Assertions.assertThat(map).isNotEmpty(); + } + + @Test + public void deleteAccessConfigTest() { + // delete not exist accessConfig + final boolean flag1 = plainPermissionManager.deleteAccessConfig("admin123"); + assert flag1 == false; + //delete existed accessConfig + final AclConfig config = plainPermissionManager.getAllAclConfig(); + final List configs = config.getPlainAccessConfigs(); + final PlainAccessConfig config1 = configs.get(0); + final String accessKey = config1.getAccessKey(); + final boolean flag2 = plainPermissionManager.deleteAccessConfig(accessKey); + assert flag2 == true; + + } + + @Test + public void updateGlobalWhiteAddrsConfigTest() { + final boolean flag = plainPermissionManager.updateGlobalWhiteAddrsConfig(Lists.newArrayList("192.168.1.2")); + assert flag == true; + } + + @Test + public void getAllAclConfigTest() { + final AclConfig aclConfig = plainPermissionManager.getAllAclConfig(); + Assertions.assertThat(aclConfig).isNotNull(); + } + } 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 191236a09985..49b9e05e2e17 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 List getPlainAccessConfigs() { public void setPlainAccessConfigs(List 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 b193f43711fe..aed875601294 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,18 @@ public List getGroupPerms() { public void setGroupPerms(List groupPerms) { this.groupPerms = groupPerms; } + + @Override + public String toString() { + return "PlainAccessConfig{" + + "accessKey='" + accessKey + '\'' + + ", secretKey='" + secretKey + '\'' + + ", whiteRemoteAddress='" + whiteRemoteAddress + '\'' + + ", admin=" + admin + + ", defaultTopicPerm='" + defaultTopicPerm + '\'' + + ", defaultGroupPerm='" + defaultGroupPerm + '\'' + + ", topicPerms=" + topicPerms + + ", groupPerms=" + groupPerms + + '}'; + } } From d837be9d23d4289731baf514c6bf71d8c410206a Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 22 Jul 2022 09:33:11 +0800 Subject: [PATCH 2/4] fix ut --- .../org/apache/rocketmq/acl/plain/PlainAccessValidatorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4fbe2319ac5c..4f2a06bba660 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 @@ -548,7 +548,7 @@ public void getAccessAclYamlConfigTest() { 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 dataVersionMap = plainAccessValidator.getAllAclConfigVersion(); DataVersion dataVersion = dataVersionMap.get(aclFileName); Assert.assertEquals(0, dataVersion.getCounter().get()); From 7532aec3fde9d93c3d769bb6b2326172c5bdc003 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 12 Aug 2022 18:12:46 +0800 Subject: [PATCH 3/4] update ut --- .../acl/plain/PlainPermissionManagerTest.java | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) 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 9e79a09a8922..b26628bdba9a 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 @@ -41,7 +41,6 @@ import org.junit.Before; import org.junit.Test; -import static org.apache.rocketmq.acl.plain.PlainAccessControlFlowTest.DEFAULT_TOPIC; public class PlainPermissionManagerTest { @@ -56,6 +55,8 @@ public class PlainPermissionManagerTest { private static final String PATH = "src/test/resources"; + private static final String DEFAULT_TOPIC = "topic-acl"; + @Before public void init() throws NoSuchFieldException, SecurityException, IOException { // UPDATE_AND_CREATE_TOPIC @@ -364,7 +365,9 @@ public void updateAclConfigFileVersionTest() { updateAclConfigMap.put(AclConstants.CONFIG_DATA_VERSION, versionElement); final Map map = plainPermissionManager.updateAclConfigFileVersion(aclFileName, updateAclConfigMap); + final List> version = (List>) map.get("dataVersion"); Assertions.assertThat(map).isNotEmpty(); + Assert.assertEquals(2L, version.get(0).get("counter")); } @Test @@ -380,19 +383,34 @@ public void createAclAccessConfigMapTest() { final Map 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() { + public void deleteAccessConfigTest() throws InterruptedException { // delete not exist accessConfig - final boolean flag1 = plainPermissionManager.deleteAccessConfig("admin123"); + 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 AclConfig config = plainPermissionManager.getAllAclConfig(); - final List configs = config.getPlainAccessConfigs(); - final PlainAccessConfig config1 = configs.get(0); - final String accessKey = config1.getAccessKey(); - final boolean flag2 = plainPermissionManager.deleteAccessConfig(accessKey); + final boolean flag2 = plainPermissionManager.deleteAccessConfig("test_delete"); assert flag2 == true; } @@ -401,12 +419,8 @@ public void deleteAccessConfigTest() { public void updateGlobalWhiteAddrsConfigTest() { final boolean flag = plainPermissionManager.updateGlobalWhiteAddrsConfig(Lists.newArrayList("192.168.1.2")); assert flag == true; - } - - @Test - public void getAllAclConfigTest() { - final AclConfig aclConfig = plainPermissionManager.getAllAclConfig(); - Assertions.assertThat(aclConfig).isNotNull(); + final AclConfig config = plainPermissionManager.getAllAclConfig(); + Assert.assertEquals(true, config.getGlobalWhiteAddrs().contains("192.168.1.2")); } } From 981f301730c50b5c32c067a4812e9a3865c3b364 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 13 Aug 2022 20:33:21 +0800 Subject: [PATCH 4/4] load file from classpath --- .../apache/rocketmq/acl/plain/PlainPermissionManagerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b26628bdba9a..b879e992c241 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 @@ -53,7 +53,7 @@ public class PlainPermissionManagerTest { PlainAccessConfig plainAccessConfig = new PlainAccessConfig(); Set adminCode = new HashSet<>(); - private static final String PATH = "src/test/resources"; + private static final String PATH = PlainPermissionManagerTest.class.getResource("/").getFile(); private static final String DEFAULT_TOPIC = "topic-acl";