From ef3571b819a0d54335cabcf2ad0636f522d0cd5e Mon Sep 17 00:00:00 2001 From: rchen9 Date: Tue, 23 Jan 2024 16:38:21 +0800 Subject: [PATCH 1/2] fix: the compare of "string" supports the prefix of "arex_" --- .../log/filterrules/ArexPrefixFilter.java | 65 +------------ .../arextest/diff/model/CompareBuilder.java | 4 +- .../diff/utils/ArexStringEqualsUtil.java | 92 +++++++++++++++++++ .../arextest/diff/sdk/CompareProblemTest.java | 20 +++- 4 files changed, 115 insertions(+), 66 deletions(-) create mode 100644 arex-compare-core/src/main/java/com/arextest/diff/utils/ArexStringEqualsUtil.java diff --git a/arex-compare-core/src/main/java/com/arextest/diff/handler/log/filterrules/ArexPrefixFilter.java b/arex-compare-core/src/main/java/com/arextest/diff/handler/log/filterrules/ArexPrefixFilter.java index b9c4df1..9426aa1 100644 --- a/arex-compare-core/src/main/java/com/arextest/diff/handler/log/filterrules/ArexPrefixFilter.java +++ b/arex-compare-core/src/main/java/com/arextest/diff/handler/log/filterrules/ArexPrefixFilter.java @@ -2,8 +2,7 @@ import com.arextest.diff.model.enumeration.UnmatchedType; import com.arextest.diff.model.log.LogEntity; -import java.util.HashSet; -import java.util.Set; +import com.arextest.diff.utils.ArexStringEqualsUtil; import java.util.function.Predicate; /** @@ -11,66 +10,6 @@ */ public class ArexPrefixFilter implements Predicate { - private static final Set PREFIX_SET = new HashSet() { - { - add("arex."); - add("arex_"); - add("_arex"); - add("AREX."); - add("AREX_"); - add("_AREX"); - } - }; - - public static boolean isEqualsWithoutPrefix(String baseStr, String testStr) { - - int baseValueLen = baseStr.length(); - int testValueLen = testStr.length(); - if (testValueLen - baseValueLen <= 0 || (testValueLen - baseValueLen) % 5 != 0) { - return false; - } - - int baseIndex = 0; - int testIndex = 0; - - if (baseValueLen == 0) { - while (testIndex < testValueLen) { - if (isPrefix(testIndex, testStr)) { - testIndex = testIndex + 5; - } else { - return false; - } - } - return true; - } else { - while (baseIndex < baseValueLen && testIndex < testValueLen) { - if (isPrefix(testIndex, testStr)) { - testIndex = testIndex + 5; - continue; - } - if (baseStr.charAt(baseIndex) != testStr.charAt(testIndex)) { - return false; - } - baseIndex++; - testIndex++; - } - return true; - } - } - - private static boolean isPrefix(int testIndex, String testValue) { - if (testIndex > testValue.length() - 5) { - return false; - } - - if (testValue.charAt(testIndex) != 'a' && testValue.charAt(testIndex) != '_') { - return false; - } - - String substring = testValue.substring(testIndex, testIndex + 5); - return PREFIX_SET.contains(substring); - } - @Override public boolean test(LogEntity logEntity) { int unmatchedType = logEntity.getPathPair().getUnmatchedType(); @@ -78,7 +17,7 @@ public boolean test(LogEntity logEntity) { Object baseValue = logEntity.getBaseValue(); Object testValue = logEntity.getTestValue(); if (baseValue != null && testValue != null) { - return !isEqualsWithoutPrefix((String) baseValue, (String) testValue); + return !ArexStringEqualsUtil.isEqualsWithoutPrefix((String) baseValue, (String) testValue); } } return true; diff --git a/arex-compare-core/src/main/java/com/arextest/diff/model/CompareBuilder.java b/arex-compare-core/src/main/java/com/arextest/diff/model/CompareBuilder.java index ba68ac9..f290663 100644 --- a/arex-compare-core/src/main/java/com/arextest/diff/model/CompareBuilder.java +++ b/arex-compare-core/src/main/java/com/arextest/diff/model/CompareBuilder.java @@ -5,12 +5,12 @@ import com.arextest.diff.model.enumeration.UnmatchedType; import com.arextest.diff.model.log.LogEntity; import com.arextest.diff.model.log.UnmatchedPairEntity; +import com.arextest.diff.utils.ArexStringEqualsUtil; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.concurrent.Future; public class CompareBuilder { @@ -94,7 +94,7 @@ public CompareBuilder noDiff(String baseMsg, String testMsg) { public CompareBuilder addEqualsCompare(Object baseMsg, Object testMsg, RulesConfig rulesConfig) { String baseMsgStr = baseMsg == null ? null : baseMsg.toString(); String testMsgStr = testMsg == null ? null : testMsg.toString(); - boolean equals = Objects.equals(baseMsgStr, testMsgStr); + boolean equals = ArexStringEqualsUtil.stringEquals(baseMsgStr, testMsgStr); this.code(equals ? DiffResultCode.COMPARED_WITHOUT_DIFFERENCE : DiffResultCode.COMPARED_WITH_DIFFERENCE); this.message("compare successfully"); diff --git a/arex-compare-core/src/main/java/com/arextest/diff/utils/ArexStringEqualsUtil.java b/arex-compare-core/src/main/java/com/arextest/diff/utils/ArexStringEqualsUtil.java new file mode 100644 index 0000000..6d47980 --- /dev/null +++ b/arex-compare-core/src/main/java/com/arextest/diff/utils/ArexStringEqualsUtil.java @@ -0,0 +1,92 @@ +package com.arextest.diff.utils; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +public class ArexStringEqualsUtil { + + private static final Set PREFIX_SET = new HashSet() { + { + add("arex."); + add("arex_"); + add("_arex"); + add("AREX."); + add("AREX_"); + add("_AREX"); + } + }; + + /** + * compare two string if the string is not equal, then compare without prefix + * + * @param baseStr + * @param testStr + * @return + */ + public static boolean stringEquals(String baseStr, String testStr) { + boolean result = Objects.equals(baseStr, testStr); + if (!result) { + result = isEqualsWithoutPrefix(baseStr, testStr); + } + return result; + } + + public static boolean isEqualsWithoutPrefix(String baseStr, String testStr) { + + if (baseStr == null && testStr == null) { + return true; + } + + if (baseStr == null || testStr == null) { + return false; + } + + int baseValueLen = baseStr.length(); + int testValueLen = testStr.length(); + if (testValueLen - baseValueLen <= 0 || (testValueLen - baseValueLen) % 5 != 0) { + return false; + } + + int baseIndex = 0; + int testIndex = 0; + + if (baseValueLen == 0) { + while (testIndex < testValueLen) { + if (isPrefix(testIndex, testStr)) { + testIndex = testIndex + 5; + } else { + return false; + } + } + return true; + } else { + while (baseIndex < baseValueLen && testIndex < testValueLen) { + if (isPrefix(testIndex, testStr)) { + testIndex = testIndex + 5; + continue; + } + if (baseStr.charAt(baseIndex) != testStr.charAt(testIndex)) { + return false; + } + baseIndex++; + testIndex++; + } + return true; + } + } + + private static boolean isPrefix(int testIndex, String testValue) { + if (testIndex > testValue.length() - 5) { + return false; + } + + if (testValue.charAt(testIndex) != 'a' && testValue.charAt(testIndex) != '_') { + return false; + } + + String substring = testValue.substring(testIndex, testIndex + 5); + return PREFIX_SET.contains(substring); + } + +} diff --git a/arex-compare-core/src/test/java/com/arextest/diff/sdk/CompareProblemTest.java b/arex-compare-core/src/test/java/com/arextest/diff/sdk/CompareProblemTest.java index 12bdf99..f424cf6 100644 --- a/arex-compare-core/src/test/java/com/arextest/diff/sdk/CompareProblemTest.java +++ b/arex-compare-core/src/test/java/com/arextest/diff/sdk/CompareProblemTest.java @@ -475,7 +475,8 @@ public void testRootDecompress3() { Assertions.assertEquals(1, result.getCode()); CompareResult quickResult = sdk.quickCompare(baseMsg, testMsg, compareOptions); - Assertions.assertEquals("H4sIAAAAAAAAAKtWSlSyAuJaAMXisGkJAAAA", quickResult.getProcessedTestMsg()); + Assertions.assertEquals("H4sIAAAAAAAAAKtWSlSyAuJaAMXisGkJAAAA", + quickResult.getProcessedTestMsg()); } @@ -592,7 +593,24 @@ public void testListSortNullPointer() { + "}"; CompareResult result = sdk.compare(baseMsg, testMsg, compareOptions); Assertions.assertEquals(1, result.getLogs().size()); + } + + @Test + public void testStringEqualsWithArexPrefix() { + CompareSDK sdk = new CompareSDK(); + sdk.getGlobalOptions() + .putNameToLower(true) + .putNullEqualsEmpty(true) + .putPluginJarUrl("./lib/arex-compare-sdk-plugin-0.1.0-jar-with-dependencies.jar"); + CompareOptions compareOptions = CompareOptions.options() + .putDecompressConfig(new DecompressConfig("Base64", + Arrays.asList(Arrays.asList("arex_root")))); + + String baseMsg = "aHR0cHM6Ly9iYWlkdS5jb20="; + String testMsg = "aHR0cHM6Ly9hcmV4LmJhaWR1LmNvbQ=="; + CompareResult result = sdk.compare(baseMsg, testMsg, compareOptions); + Assertions.assertEquals(0, result.getCode()); } From be13b01f5f0d50daa72abb9de397bbc4a4ac61b7 Mon Sep 17 00:00:00 2001 From: rchen9 Date: Tue, 23 Jan 2024 17:05:13 +0800 Subject: [PATCH 2/2] style: add note --- .../main/java/com/arextest/diff/utils/ArexStringEqualsUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arex-compare-core/src/main/java/com/arextest/diff/utils/ArexStringEqualsUtil.java b/arex-compare-core/src/main/java/com/arextest/diff/utils/ArexStringEqualsUtil.java index 6d47980..039f304 100644 --- a/arex-compare-core/src/main/java/com/arextest/diff/utils/ArexStringEqualsUtil.java +++ b/arex-compare-core/src/main/java/com/arextest/diff/utils/ArexStringEqualsUtil.java @@ -18,8 +18,8 @@ public class ArexStringEqualsUtil { }; /** + * The agent will add a prefix to the email or URL. * compare two string if the string is not equal, then compare without prefix - * * @param baseStr * @param testStr * @return