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/20 01:51:20 UTC
[rocketmq] branch develop updated: [ISSUE #5119]Infra enhancement project: Fix remaining test cases in ACL module (#5120)
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 96f340d6e [ISSUE #5119]Infra enhancement project: Fix remaining test cases in ACL module (#5120)
96f340d6e is described below
commit 96f340d6e1661ba61f7710d246517fcaace8f477
Author: Zhanhui Li <li...@apache.org>
AuthorDate: Tue Sep 20 09:51:09 2022 +0800
[ISSUE #5119]Infra enhancement project: Fix remaining test cases in ACL module (#5120)
* Fix the remaining test cases that is not hermetic
* Set size of src/test/java/org/apache/rocketmq/acl/plain/PlainAccessValidatorTest as medium
---
acl/BUILD.bazel | 5 +-
.../apache/rocketmq/acl/plain/AclTestHelper.java | 28 ++++++---
.../acl/plain/PlainAccessValidatorTest.java | 35 +++++++----
.../acl/plain/PlainPermissionManagerTest.java | 70 +++++-----------------
4 files changed, 63 insertions(+), 75 deletions(-)
diff --git a/acl/BUILD.bazel b/acl/BUILD.bazel
index 8b9f8efbf..ca0517db7 100644
--- a/acl/BUILD.bazel
+++ b/acl/BUILD.bazel
@@ -50,12 +50,12 @@ java_library(
"//common",
"//remoting",
"@maven//:com_alibaba_fastjson",
+ "@maven//:com_google_guava_guava",
"@maven//:commons_codec_commons_codec",
"@maven//:io_netty_netty_all",
"@maven//:org_apache_commons_commons_lang3",
"@maven//:org_springframework_spring_core",
"@maven//:org_yaml_snakeyaml",
- "@maven//:com_google_guava_guava",
],
)
@@ -63,7 +63,8 @@ GenTestRules(
name = "GeneratedTestRules",
# The following tests are not hermetic. Fix them later.
exclude_tests = [
- "src/test/java/org/apache/rocketmq/acl/plain/PlainPermissionManagerTest",
+ ],
+ medium_tests = [
"src/test/java/org/apache/rocketmq/acl/plain/PlainAccessValidatorTest",
],
test_files = glob(["src/test/java/**/*Test.java"]),
diff --git a/acl/src/test/java/org/apache/rocketmq/acl/plain/AclTestHelper.java b/acl/src/test/java/org/apache/rocketmq/acl/plain/AclTestHelper.java
index 21617a723..dc13990f1 100644
--- a/acl/src/test/java/org/apache/rocketmq/acl/plain/AclTestHelper.java
+++ b/acl/src/test/java/org/apache/rocketmq/acl/plain/AclTestHelper.java
@@ -33,7 +33,8 @@ public final class AclTestHelper {
private AclTestHelper() {
}
- private static void copyTo(String path, InputStream src, File dstDir, String flag) throws IOException {
+ private static void copyTo(String path, InputStream src, File dstDir, String flag, boolean into)
+ throws IOException {
Preconditions.checkNotNull(flag);
String[] folders = path.split(File.separator);
boolean found = false;
@@ -41,6 +42,12 @@ public final class AclTestHelper {
for (int i = 0; i < folders.length; i++) {
if (!found && flag.equals(folders[i])) {
found = true;
+ if (into) {
+ dir = new File(dir, flag);
+ if (!dir.exists()) {
+ Assert.assertTrue(dir.mkdirs());
+ }
+ }
continue;
}
@@ -69,21 +76,26 @@ public final class AclTestHelper {
public static void recursiveDelete(File file) {
if (file.isFile()) {
- file.delete();
+ Assert.assertTrue(file.delete());
return;
}
-
File[] files = file.listFiles();
- for (File f : files) {
- recursiveDelete(f);
+ if (null != files) {
+ for (File f : files) {
+ recursiveDelete(f);
+ }
}
- file.delete();
+ Assert.assertTrue(file.delete());
}
public static File copyResources(String folder) throws IOException {
+ return copyResources(folder, false);
+ }
+
+ public static File copyResources(String folder, boolean into) throws IOException {
File home = new File(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString().replace('-', '_'));
if (!home.exists()) {
- home.mkdirs();
+ Assert.assertTrue(home.mkdirs());
}
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(AclTestHelper.class.getClassLoader());
Resource[] resources = resolver.getResources(String.format("classpath:%s/**/*", folder));
@@ -96,7 +108,7 @@ public final class AclTestHelper {
int end = description.lastIndexOf(']');
String path = description.substring(start + 1, end);
try (InputStream inputStream = resource.getInputStream()) {
- copyTo(path, inputStream, home, folder);
+ copyTo(path, inputStream, home, folder, into);
}
}
return home;
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 49558afa5..3cca20b22 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
@@ -16,6 +16,7 @@
*/
package org.apache.rocketmq.acl.plain;
+import com.google.common.base.Joiner;
import org.apache.rocketmq.acl.common.AclClientRPCHook;
import org.apache.rocketmq.acl.common.AclConstants;
import org.apache.rocketmq.acl.common.AclException;
@@ -40,6 +41,7 @@ import org.apache.rocketmq.common.protocol.heartbeat.ProducerData;
import org.apache.rocketmq.common.protocol.heartbeat.SubscriptionData;
import org.apache.rocketmq.remoting.exception.RemotingCommandException;
import org.apache.rocketmq.remoting.protocol.RemotingCommand;
+import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -63,10 +65,13 @@ public class PlainAccessValidatorTest {
private AclClientRPCHook aclClient;
private SessionCredentials sessionCredentials;
+ private File confHome;
+
@Before
- public void init() {
- File file = new File("src/test/resources".replace("/", File.separator));
- System.setProperty("rocketmq.home.dir", file.getAbsolutePath());
+ public void init() throws IOException {
+ String folder = "conf";
+ confHome = AclTestHelper.copyResources(folder, true);
+ System.setProperty("rocketmq.home.dir", confHome.getAbsolutePath());
plainAccessValidator = new PlainAccessValidator();
sessionCredentials = new SessionCredentials();
sessionCredentials.setAccessKey("RocketMQ");
@@ -75,6 +80,11 @@ public class PlainAccessValidatorTest {
aclClient = new AclClientRPCHook(sessionCredentials);
}
+ @After
+ public void cleanUp() {
+ AclTestHelper.recursiveDelete(confHome);
+ }
+
@Test
public void contentTest() {
SendMessageRequestHeader messageRequestHeader = new SendMessageRequestHeader();
@@ -1047,18 +1057,24 @@ public class PlainAccessValidatorTest {
}
}
+ /**
+ * Fixme: this test case is not thread safe. The design itself is buggy.
+ * @throws IOException
+ */
@Test
- public void testUpdateSpecifiedAclFileGlobalWhiteAddrsConfig() {
- System.setProperty("rocketmq.home.dir", "src/test/resources/update_global_white_addr".replace("/", File.separator));
+ public void testUpdateSpecifiedAclFileGlobalWhiteAddrsConfig() throws IOException {
+ String folder = "update_global_white_addr";
+ File home = AclTestHelper.copyResources(folder);
+ System.setProperty("rocketmq.home.dir", home.getAbsolutePath());
System.setProperty("rocketmq.acl.plain.file", "/conf/plain_acl.yml".replace("/", File.separator));
- String targetFileName = "src/test/resources/update_global_white_addr/conf/plain_acl.yml".replace("/", File.separator);
+ String targetFileName = Joiner.on(File.separator).join(new String[]{home.getAbsolutePath(), "conf", "plain_acl.yml"});
Map<String, Object> backUpAclConfigMap = AclUtils.getYamlDataObject(targetFileName, Map.class);
- String targetFileName1 = "src/test/resources/update_global_white_addr/conf/acl/plain_acl.yml".replace("/", File.separator);
+ String targetFileName1 = Joiner.on(File.separator).join(new String[]{home.getAbsolutePath(), "conf", "acl", "plain_acl.yml"});
Map<String, Object> backUpAclConfigMap1 = AclUtils.getYamlDataObject(targetFileName1, Map.class);
- String targetFileName2 = "src/test/resources/update_global_white_addr/conf/acl/empty.yml".replace("/", File.separator);
+ String targetFileName2 = Joiner.on(File.separator).join(new String[]{home.getAbsolutePath(), "conf", "acl", "empty.yml"});
Map<String, Object> backUpAclConfigMap2 = AclUtils.getYamlDataObject(targetFileName2, Map.class);
PlainAccessValidator plainAccessValidator = new PlainAccessValidator();
@@ -1090,8 +1106,7 @@ public class PlainAccessValidatorTest {
AclUtils.writeDataObject(targetFileName1, backUpAclConfigMap1);
AclUtils.writeDataObject(targetFileName2, backUpAclConfigMap2);
- System.setProperty("rocketmq.home.dir", "src/test/resources".replace("/", File.separator));
- System.setProperty("rocketmq.acl.plain.file", "/conf/plain_acl.yml".replace("/", File.separator));
+ AclTestHelper.recursiveDelete(home);
}
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 aa549f300..ef444987c 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
@@ -16,6 +16,7 @@
*/
package org.apache.rocketmq.acl.plain;
+import com.google.common.base.Joiner;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
@@ -41,7 +42,6 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-
public class PlainPermissionManagerTest {
PlainPermissionManager plainPermissionManager;
@@ -53,10 +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";
+ private File confHome;
+
@Before
public void init() throws NoSuchFieldException, SecurityException, IOException {
// UPDATE_AND_CREATE_TOPIC
@@ -75,11 +75,10 @@ public class PlainPermissionManagerTest {
ANYPlainAccessResource = clonePlainAccessResource(Permission.ANY);
DENYPlainAccessResource = clonePlainAccessResource(Permission.DENY);
- File file = new File(PATH);
- System.setProperty("rocketmq.home.dir", file.getAbsolutePath());
-
+ String folder = "conf";
+ confHome = AclTestHelper.copyResources(folder, true);
+ System.setProperty("rocketmq.home.dir", confHome.getAbsolutePath());
plainPermissionManager = new PlainPermissionManager();
-
}
public PlainAccessResource clonePlainAccessResource(byte perm) {
@@ -203,7 +202,6 @@ public class PlainPermissionManagerTest {
plainPermissionManager.buildPlainAccessResource(plainAccessConfig);
}
-
@SuppressWarnings("unchecked")
@Test
public void cleanAuthenticationInfoTest() throws IllegalAccessException {
@@ -214,7 +212,6 @@ public class PlainPermissionManagerTest {
plainPermissionManager.clearPermissionInfo();
plainAccessResourceMap = (Map<String, Map<String, PlainAccessResource>>) FieldUtils.readDeclaredField(plainPermissionManager, "aclPlainAccessResourceMap", true);
Assert.assertTrue(plainAccessResourceMap.isEmpty());
- // RemoveDataVersionFromYamlFile("src/test/resources/conf/plain_acl.yml");
}
@Test
@@ -222,47 +219,11 @@ public class PlainPermissionManagerTest {
PlainPermissionManager plainPermissionManager = new PlainPermissionManager();
Assert.assertTrue(plainPermissionManager.isWatchStart());
- // RemoveDataVersionFromYamlFile("src/test/resources/conf/plain_acl.yml");
- }
-
- @Test
- public void multiFilePathTest() {
- File file = new File(PATH);
- System.setProperty("rocketmq.home.dir", file.getAbsolutePath());
-
- PlainPermissionManager plainPermissionManager = new PlainPermissionManager();
-
- String samefilePath = file.getAbsolutePath()+"/conf/acl/.";
- String samefilePath2 = "/" +file.getAbsolutePath()+"/conf/acl";
- String samefilePath3 = file.getAbsolutePath()+"/conf/acl/../"+file.getAbsolutePath();
- String samefilePath4 = file.getAbsolutePath()+"/conf/acl///";
- String samefilePath5 = file.getAbsolutePath()+"/conf/acl/./";
-
- int size = plainPermissionManager.getDataVersionMap().size();
-
- plainPermissionManager.load(samefilePath);
- Assert.assertEquals(size, plainPermissionManager.getDataVersionMap().size());
-
- plainPermissionManager.load(samefilePath2);
- Assert.assertEquals(size, plainPermissionManager.getDataVersionMap().size());
-
- plainPermissionManager.load(samefilePath3);
- Assert.assertEquals(size, plainPermissionManager.getDataVersionMap().size());
-
- plainPermissionManager.load(samefilePath4);
- Assert.assertEquals(size, plainPermissionManager.getDataVersionMap().size());
-
- plainPermissionManager.load(samefilePath5);
- Assert.assertEquals(size, plainPermissionManager.getDataVersionMap().size());
-
}
@Test
public void testWatch() throws IOException, IllegalAccessException, InterruptedException {
- 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";
+ String fileName = Joiner.on(File.separator).join(new String[]{System.getProperty("rocketmq.home.dir"), "conf", "acl", "plain_acl_test.yml"});
File transport = new File(fileName);
transport.delete();
transport.createNewFile();
@@ -311,28 +272,27 @@ public class PlainPermissionManagerTest {
}
transport.delete();
- System.setProperty("rocketmq.home.dir", PATH);
}
-
+
@Test
public void updateAccessConfigTest() {
Assert.assertThrows(AclException.class, () -> plainPermissionManager.updateAccessConfig(null));
-
+
plainAccessConfig.setAccessKey("admin_test");
// Invalid parameter
plainAccessConfig.setSecretKey("123456");
plainAccessConfig.setAdmin(true);
Assert.assertThrows(AclException.class, () -> plainPermissionManager.updateAccessConfig(plainAccessConfig));
-
+
plainAccessConfig.setSecretKey("12345678");
// Invalid parameter
plainAccessConfig.setGroupPerms(Lists.newArrayList("groupA!SUB"));
Assert.assertThrows(AclException.class, () -> plainPermissionManager.updateAccessConfig(plainAccessConfig));
-
+
// first update
plainAccessConfig.setGroupPerms(Lists.newArrayList("groupA=SUB"));
plainPermissionManager.updateAccessConfig(plainAccessConfig);
-
+
// second update
plainAccessConfig.setTopicPerms(Lists.newArrayList("topicA=SUB"));
plainPermissionManager.updateAccessConfig(plainAccessConfig);
@@ -342,7 +302,7 @@ public class PlainPermissionManagerTest {
public void getAllAclFilesTest() {
final List<String> notExistList = plainPermissionManager.getAllAclFiles("aa/bb");
Assertions.assertThat(notExistList).isEmpty();
- final List<String> files = plainPermissionManager.getAllAclFiles(PATH);
+ final List<String> files = plainPermissionManager.getAllAclFiles(confHome.getAbsolutePath());
Assertions.assertThat(files).isNotEmpty();
}
@@ -356,7 +316,7 @@ public class PlainPermissionManagerTest {
@Test
public void updateAclConfigFileVersionTest() {
String aclFileName = "test_plain_acl";
- Map<String, Object> updateAclConfigMap = new HashMap<>();
+ 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);
@@ -372,7 +332,7 @@ public class PlainPermissionManagerTest {
@Test
public void createAclAccessConfigMapTest() {
- Map<String, Object> existedAccountMap = new HashMap<>();
+ Map<String, Object> existedAccountMap = new HashMap<>();
plainAccessConfig.setAccessKey("admin123");
plainAccessConfig.setSecretKey("12345678");
plainAccessConfig.setWhiteRemoteAddress("192.168.1.1");