You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by ji...@apache.org on 2022/02/08 02:43:49 UTC
[rocketmq] 06/17: [acl] Modify unit test to solve the problem of lack of license
This is an automated email from the ASF dual-hosted git repository.
jinrongtong pushed a commit to branch 5.0.0-alpha
in repository https://gitbox.apache.org/repos/asf/rocketmq.git
commit 8bb98c9f41097960bef1467cc09acfb1d54326fb
Author: zhangyang21 <zh...@xiaomi.com>
AuthorDate: Thu Nov 18 19:48:59 2021 +0800
[acl] Modify unit test to solve the problem of lack of license
Signed-off-by: zhangyang21 <zh...@xiaomi.com>
---
.../org/apache/rocketmq/acl/common/AclUtils.java | 39 +++++++++++++++++
.../apache/rocketmq/acl/common/AclUtilsTest.java | 21 +++++++++
.../acl/plain/PlainAccessValidatorTest.java | 51 ++++++++++++++--------
3 files changed, 92 insertions(+), 19 deletions(-)
diff --git a/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java b/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java
index b801c69..cf45432 100644
--- a/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java
+++ b/acl/src/main/java/org/apache/rocketmq/acl/common/AclUtils.java
@@ -20,9 +20,11 @@ import com.alibaba.fastjson.JSONObject;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.channels.FileChannel;
import java.util.Map;
import java.util.SortedMap;
import org.apache.commons.lang3.StringUtils;
@@ -274,6 +276,43 @@ public class AclUtils {
return true;
}
+ public static boolean copyFile(String from, String to) {
+ FileChannel input = null;
+ FileChannel output = null;
+ try {
+ input = new FileInputStream(new File(from)).getChannel();
+ output = new FileOutputStream(new File(to)).getChannel();
+ output.transferFrom(input, 0, input.size());
+ return true;
+ } catch (Exception e) {
+ log.error("file copy error. from={}, to={}", from, to, e);
+ } finally {
+ closeFileChannel(input);
+ closeFileChannel(output);
+ }
+ return false;
+ }
+
+ public static boolean moveFile(String from, String to) {
+ try {
+ File file = new File(from);
+ return file.renameTo(new File(to));
+ } catch (Exception e) {
+ log.error("file move error. from={}, to={}", from, to, e);
+ }
+ return false;
+ }
+
+ private static void closeFileChannel(FileChannel fileChannel) {
+ if (fileChannel != null) {
+ try {
+ fileChannel.close();
+ } catch (IOException e) {
+ log.error("Close file channel error.", e);
+ }
+ }
+ }
+
public static RPCHook getAclRPCHook(String fileName) {
JSONObject yamlDataObject = null;
try {
diff --git a/acl/src/test/java/org/apache/rocketmq/acl/common/AclUtilsTest.java b/acl/src/test/java/org/apache/rocketmq/acl/common/AclUtilsTest.java
index e2a212a..bfbbb42 100644
--- a/acl/src/test/java/org/apache/rocketmq/acl/common/AclUtilsTest.java
+++ b/acl/src/test/java/org/apache/rocketmq/acl/common/AclUtilsTest.java
@@ -316,4 +316,25 @@ public class AclUtilsTest {
Assert.assertNull(incompleteContRPCHook);
}
+ @Test
+ public void testCopyAndMoveFile() {
+ String path = "src/test/resources/conf/plain_acl.yml";
+ String backupPath = "src/test/resources/conf/plain_acl.yml_backup";
+ Map<String, Object> aclYamlData = AclUtils.getYamlDataObject(path, Map.class);
+
+ AclUtils.copyFile(path, backupPath);
+ Assert.assertEquals(aclYamlData, AclUtils.getYamlDataObject(backupPath, Map.class));
+
+ Map<String, Object> aclYamlMap = new HashMap<String, Object>();
+ List<String> globalWhiteRemoteAddrs = new ArrayList<String>();
+ globalWhiteRemoteAddrs.add("10.10.103.*");
+ globalWhiteRemoteAddrs.add("192.168.0.*");
+ aclYamlMap.put("globalWhiteRemoteAddrs", globalWhiteRemoteAddrs);
+ AclUtils.writeDataObject(path, aclYamlMap);
+ Assert.assertNotEquals(aclYamlData, AclUtils.getYamlDataObject(path, Map.class));
+
+ AclUtils.moveFile(backupPath, path);
+ Assert.assertEquals(aclYamlData, AclUtils.getYamlDataObject(path, Map.class));
+ }
+
}
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 a0eb567..d19916b 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
@@ -328,7 +328,7 @@ public class PlainAccessValidatorTest {
System.setProperty("rocketmq.acl.plain.file", "/conf/plain_acl_update_create.yml");
String targetFileName = "src/test/resources/conf/plain_acl_update_create.yml";
- Map<String, Object> backUpAclConfigMap = AclUtils.getYamlDataObject(targetFileName, Map.class);
+ AclUtils.copyFile(targetFileName, buildBackupPath(targetFileName));
PlainAccessConfig plainAccessConfig = new PlainAccessConfig();
plainAccessConfig.setAccessKey("RocketMQ");
@@ -370,8 +370,8 @@ public class PlainAccessValidatorTest {
List<Map<String, Object>> dataVersions = (List<Map<String, Object>>) readableMap.get("dataVersion");
Assert.assertEquals(1,dataVersions.get(0).get("counter"));
- // Restore the backup file and flush to yaml file
- AclUtils.writeDataObject(targetFileName, backUpAclConfigMap);
+ // Restore the backup file
+ AclUtils.moveFile(buildBackupPath(targetFileName), targetFileName);
}
@Test
@@ -380,7 +380,7 @@ public class PlainAccessValidatorTest {
System.setProperty("rocketmq.acl.plain.file", "/conf/plain_acl_update_create.yml");
String targetFileName = "src/test/resources/conf/plain_acl_update_create.yml";
- Map<String, Object> backUpAclConfigMap = AclUtils.getYamlDataObject(targetFileName, Map.class);
+ AclUtils.copyFile(targetFileName, buildBackupPath(targetFileName));
PlainAccessConfig plainAccessConfig = new PlainAccessConfig();
plainAccessConfig.setAccessKey("RocketMQ");
@@ -401,18 +401,17 @@ public class PlainAccessValidatorTest {
}
Assert.assertEquals(verifyMap.get(AclConstants.CONFIG_SECRET_KEY),"123456789111");
- // Restore the backup file and flush to yaml file
- AclUtils.writeDataObject(targetFileName, backUpAclConfigMap);
+ // Restore the backup file
+ AclUtils.moveFile(buildBackupPath(targetFileName), targetFileName);
}
-
@Test
public void createAndUpdateAccessAclYamlConfigNormalTest() {
System.setProperty("rocketmq.home.dir", "src/test/resources");
System.setProperty("rocketmq.acl.plain.file", "/conf/plain_acl_update_create.yml");
String targetFileName = "src/test/resources/conf/plain_acl_update_create.yml";
- Map<String, Object> backUpAclConfigMap = AclUtils.getYamlDataObject(targetFileName, Map.class);
+ AclUtils.copyFile(targetFileName, buildBackupPath(targetFileName));
PlainAccessConfig plainAccessConfig = new PlainAccessConfig();
plainAccessConfig.setAccessKey("RocketMQ33");
@@ -478,9 +477,8 @@ public class PlainAccessValidatorTest {
Assert.assertEquals(2,dataVersions2.get(0).get(AclConstants.CONFIG_COUNTER));
Assert.assertEquals(verifyMap2.get(AclConstants.CONFIG_SECRET_KEY),"1234567890123");
-
- // Restore the backup file and flush to yaml file
- AclUtils.writeDataObject(targetFileName, backUpAclConfigMap);
+ // Restore the backup file
+ AclUtils.moveFile(buildBackupPath(targetFileName), targetFileName);
}
@Test(expected = AclException.class)
@@ -503,15 +501,14 @@ public class PlainAccessValidatorTest {
System.setProperty("rocketmq.acl.plain.file", "/conf/plain_acl_delete.yml");
String targetFileName = "src/test/resources/conf/plain_acl_delete.yml";
- Map<String, Object> backUpAclConfigMap = AclUtils.getYamlDataObject(targetFileName, Map.class);
-
+ AclUtils.copyFile(targetFileName, buildBackupPath(targetFileName));
String accessKey = "rocketmq2";
PlainAccessValidator plainAccessValidator = new PlainAccessValidator();
plainAccessValidator.deleteAccessConfig(accessKey);
Map<String, Object> readableMap = AclUtils.getYamlDataObject(targetFileName, Map.class);
- List<Map<String, Object>> accounts = (List<Map<String, Object>>)readableMap.get(AclConstants.CONFIG_ACCOUNTS);
+ List<Map<String, Object>> accounts = (List<Map<String, Object>>) readableMap.get(AclConstants.CONFIG_ACCOUNTS);
Map<String, Object> verifyMap = null;
for (Map<String, Object> account : accounts) {
if (account.get(AclConstants.CONFIG_ACCESS_KEY).equals(accessKey)) {
@@ -526,8 +523,8 @@ public class PlainAccessValidatorTest {
List<Map<String, Object>> dataVersions = (List<Map<String, Object>>) readableMap.get(AclConstants.CONFIG_DATA_VERSION);
Assert.assertEquals(1,dataVersions.get(0).get(AclConstants.CONFIG_COUNTER));
- // Restore the backup file and flush to yaml file
- AclUtils.writeDataObject(targetFileName, backUpAclConfigMap);
+ // Restore the backup file
+ AclUtils.moveFile(buildBackupPath(targetFileName), targetFileName);
}
@Test
@@ -583,7 +580,7 @@ public class PlainAccessValidatorTest {
System.setProperty("rocketmq.acl.plain.file", "/conf/plain_acl_global_white_addrs.yml");
String targetFileName = "src/test/resources/conf/plain_acl_global_white_addrs.yml";
- Map<String, Object> backUpAclConfigMap = AclUtils.getYamlDataObject(targetFileName, Map.class);
+ AclUtils.copyFile(targetFileName, buildBackupPath(targetFileName));
PlainAccessValidator plainAccessValidator = new PlainAccessValidator();
// Update global white remote addr value list in the acl access yaml config file
@@ -605,8 +602,8 @@ public class PlainAccessValidatorTest {
List<Map<String, Object>> dataVersions = (List<Map<String, Object>>) readableMap.get(AclConstants.CONFIG_DATA_VERSION);
Assert.assertEquals(1,dataVersions.get(0).get(AclConstants.CONFIG_COUNTER));
- // Restore the backup file and flush to yaml file
- AclUtils.writeDataObject(targetFileName, backUpAclConfigMap);
+ // Restore the backup file
+ AclUtils.moveFile(buildBackupPath(targetFileName), targetFileName);
}
@Test
@@ -620,6 +617,9 @@ public class PlainAccessValidatorTest {
@Test
public void updateAccessConfigEmptyPermListTest(){
+ String targetFileName = "src/test/resources/conf/plain_acl.yml";
+ AclUtils.copyFile(targetFileName, this.buildBackupPath(targetFileName));
+
PlainAccessValidator plainAccessValidator = new PlainAccessValidator();
PlainAccessConfig plainAccessConfig = new PlainAccessConfig();
String accessKey = "updateAccessConfigEmptyPerm";
@@ -636,10 +636,16 @@ public class PlainAccessValidatorTest {
Assert.assertEquals(0, result.getTopicPerms().size());
plainAccessValidator.deleteAccessConfig(accessKey);
+
+ // Restore the backup file
+ AclUtils.moveFile(buildBackupPath(targetFileName), targetFileName);
}
@Test
public void updateAccessConfigEmptyWhiteRemoteAddressTest(){
+ String targetFileName = "src/test/resources/conf/plain_acl.yml";
+ AclUtils.copyFile(targetFileName, this.buildBackupPath(targetFileName));
+
PlainAccessValidator plainAccessValidator = new PlainAccessValidator();
PlainAccessConfig plainAccessConfig = new PlainAccessConfig();
String accessKey = "updateAccessConfigEmptyWhiteRemoteAddress";
@@ -656,5 +662,12 @@ public class PlainAccessValidatorTest {
Assert.assertEquals("", result.getWhiteRemoteAddress());
plainAccessValidator.deleteAccessConfig(accessKey);
+
+ // Restore the backup file
+ AclUtils.moveFile(buildBackupPath(targetFileName), targetFileName);
+ }
+
+ private String buildBackupPath(String path) {
+ return String.format("%s_backup", path);
}
}