diff --git a/.github/workflows/maven-core-publish.yml b/.github/workflows/maven-core-publish.yml
index 7b13d88..ab04855 100644
--- a/.github/workflows/maven-core-publish.yml
+++ b/.github/workflows/maven-core-publish.yml
@@ -1,7 +1,7 @@
# This workflow will build a package using Maven and then publish it to Apache Maven Central
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-Apache-Maven
-name: Maven Package
+name: Maven Core Package
on:
workflow_dispatch:
@@ -30,13 +30,6 @@ jobs:
- name: Build with Maven
run: mvn -B -ntp clean package -DskipTests=true -Pjar
- - name: Publish parent to Apache Maven Central
- run: mvn deploy -N -DskipTests=true
- env:
- MAVEN_USERNAME: ${{ secrets.MAVEN_OSSRH_USERNAME }}
- MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_OSSRH_TOKEN }}
- MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
-
- name: Publish Core to Apache Maven Central
run: mvn deploy -DskipTests=true -pl arex-compare-core -Pjar
env:
diff --git a/.github/workflows/maven-extension-publish.yml b/.github/workflows/maven-extension-publish.yml
index b847fd5..72af674 100644
--- a/.github/workflows/maven-extension-publish.yml
+++ b/.github/workflows/maven-extension-publish.yml
@@ -1,7 +1,7 @@
# This workflow will build a package using Maven and then publish it to Apache Maven Central
# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-Apache-Maven
-name: Maven Package
+name: Maven Extension Package
on:
workflow_dispatch:
diff --git a/.github/workflows/maven-parent-publish.yml b/.github/workflows/maven-parent-publish.yml
new file mode 100644
index 0000000..ceee795
--- /dev/null
+++ b/.github/workflows/maven-parent-publish.yml
@@ -0,0 +1,38 @@
+# This workflow will build a package using Maven and then publish it to Apache Maven Central
+# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-Apache-Maven
+
+name: Maven Parent Package
+
+on:
+ workflow_dispatch:
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up JDK 11
+ uses: actions/setup-java@v3
+ with:
+ java-version: '11'
+ distribution: 'temurin'
+ server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml
+ server-username: MAVEN_USERNAME # env variable for username in deploy
+ server-password: MAVEN_CENTRAL_TOKEN # env variable for token in deploy
+ gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
+ gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase
+
+ - name: Build with Maven
+ run: mvn -B -ntp clean package -DskipTests=true -Pjar
+
+ - name: Publish parent to Apache Maven Central
+ run: mvn deploy -N -DskipTests=true
+ env:
+ MAVEN_USERNAME: ${{ secrets.MAVEN_OSSRH_USERNAME }}
+ MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_OSSRH_TOKEN }}
+ MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
diff --git a/arex-compare-core/pom.xml b/arex-compare-core/pom.xml
index 35a58f8..4582950 100644
--- a/arex-compare-core/pom.xml
+++ b/arex-compare-core/pom.xml
@@ -5,7 +5,7 @@
arex-compare-parent
com.arextest
- 0.1.21
+ 0.1.22
4.0.0
diff --git a/arex-compare-core/src/main/java/com/arextest/diff/handler/log/filterrules/TimePrecisionFilter.java b/arex-compare-core/src/main/java/com/arextest/diff/handler/log/filterrules/TimePrecisionFilter.java
index cdb4bb6..35da804 100644
--- a/arex-compare-core/src/main/java/com/arextest/diff/handler/log/filterrules/TimePrecisionFilter.java
+++ b/arex-compare-core/src/main/java/com/arextest/diff/handler/log/filterrules/TimePrecisionFilter.java
@@ -2,10 +2,9 @@
import com.arextest.diff.model.log.LogEntity;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.TimeZone;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeFormatterBuilder;
import java.util.function.Predicate;
/**
@@ -14,24 +13,29 @@
public class TimePrecisionFilter implements Predicate {
private static AbstractDataProcessor dataProcessor;
-
- private static SimpleDateFormat parseFormat1
- = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
- private static SimpleDateFormat parseFormat2
- = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
- private static SimpleDateFormat parseFormat3
- = new SimpleDateFormat("HH:mm:ss.SSS");
+ private static DateTimeFormatter parseFormat1 = new DateTimeFormatterBuilder()
+ .appendPattern("yyyy-MM-dd")
+ .optionalStart().appendLiteral(' ').optionalEnd()
+ .appendOptional(DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSS"))
+ .appendOptional(DateTimeFormatter.ofPattern("HH:mm:ss.SSS"))
+ .toFormatter();
+ private static DateTimeFormatter parseFormat2 = new DateTimeFormatterBuilder()
+ .appendOptional(DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSS"))
+ .appendOptional(DateTimeFormatter.ofPattern("HH:mm:ss.SSS"))
+ .toFormatter();
+ private static DateTimeFormatter parseFormat3 = new DateTimeFormatterBuilder()
+ .appendPattern("yyyy-MM-dd")
+ .optionalStart().appendLiteral('T').optionalEnd()
+ .optionalStart().appendLiteral(' ').optionalEnd()
+ .appendOptional(DateTimeFormatter.ofPattern("HH:mm:ss.SSSXXX"))
+ .appendOptional(DateTimeFormatter.ofPattern("HH:mm:ss.SSSZ"))
+ .toFormatter();
private long ignoredTimePrecision;
static {
- parseFormat1.setTimeZone(TimeZone.getTimeZone("GMT+8"));
- parseFormat2.setTimeZone(TimeZone.getTimeZone("GMT+8"));
- parseFormat3.setTimeZone(TimeZone.getTimeZone("GMT+8"));
- parseFormat1.setLenient(false);
- parseFormat2.setLenient(false);
- parseFormat3.setLenient(false);
+ parseFormat1 = parseFormat1.withZone(ZoneId.of("UTC"));
dataProcessor = new ProcessorChainBuilder()
.addProcessor(new FirstDataProcessor())
@@ -68,13 +72,13 @@ public boolean test(LogEntity logEntity) {
if ((baseStr.startsWith("0") || baseStr.startsWith("1") || baseStr.startsWith("2")) &&
(testStr.startsWith("0") || testStr.startsWith("1") || testStr.startsWith("2"))) {
- Date baseTime = dataProcessor.process(baseStr);
- Date testTime = dataProcessor.process(testStr);
+ Instant baseTime = dataProcessor.process(baseStr);
+ Instant testTime = dataProcessor.process(testStr);
if (baseTime == null || testTime == null) {
return true;
}
- long durationMillis = baseTime.getTime() - testTime.getTime();
+ long durationMillis = baseTime.toEpochMilli() - testTime.toEpochMilli();
if (Math.abs(durationMillis) <= ignoredTimePrecision) {
return false;
}
@@ -90,8 +94,8 @@ public void setNextProcessor(AbstractDataProcessor nextProcessor) {
this.nextProcessor = nextProcessor;
}
- public Date process(String data) {
- Date date = processData(data);
+ public Instant process(String data) {
+ Instant date = processData(data);
if (date != null) {
return date;
}
@@ -101,47 +105,52 @@ public Date process(String data) {
return this.nextProcessor.process(data);
}
- protected abstract Date processData(String data);
+ protected abstract Instant processData(String data);
}
public static class FirstDataProcessor extends AbstractDataProcessor {
@Override
- protected Date processData(String data) {
+ protected Instant processData(String data) {
- Date time = null;
+ Instant instant = null;
try {
- time = parseFormat1.parse(data);
- } catch (ParseException e) {
+ ZonedDateTime zdt = ZonedDateTime.parse(data, parseFormat1);
+ instant = zdt.toInstant();
+ } catch (Exception e) {
}
- return time;
+ return instant;
}
}
public static class SecondDataProcessor extends AbstractDataProcessor {
@Override
- protected Date processData(String data) {
- Date time = null;
+ protected Instant processData(String data) {
+ Instant instant = null;
try {
- time = parseFormat2.parse(data);
- } catch (ParseException e) {
+ LocalTime time = LocalTime.parse(data, parseFormat2);
+ LocalDate date = LocalDate.ofEpochDay(0);
+ LocalDateTime dateTime = LocalDateTime.of(date, time);
+ instant = dateTime.toInstant(ZoneOffset.UTC);
+ } catch (Exception e) {
}
- return time;
+ return instant;
+
}
}
public static class ThirdDataProcessor extends AbstractDataProcessor {
@Override
- protected Date processData(String data) {
- Date time = null;
+ protected Instant processData(String data) {
+ Instant instant = null;
try {
- time = parseFormat3.parse(data);
- } catch (ParseException e) {
+ ZonedDateTime zdt = ZonedDateTime.parse(data, parseFormat3);
+ instant = zdt.toInstant();
+ } catch (Exception e) {
}
- return time;
-
+ return instant;
}
}
diff --git a/arex-compare-core/src/main/java/com/arextest/diff/utils/DataBaseCompareUtil.java b/arex-compare-core/src/main/java/com/arextest/diff/utils/DataBaseCompareUtil.java
index ca9f93d..bb81bb5 100644
--- a/arex-compare-core/src/main/java/com/arextest/diff/utils/DataBaseCompareUtil.java
+++ b/arex-compare-core/src/main/java/com/arextest/diff/utils/DataBaseCompareUtil.java
@@ -117,8 +117,8 @@ public CompareResult jsonCompare(RulesConfig rulesConfig) {
.message("compare successfully")
.msgInfo(baseMsg, testMsg)
.logs(logs)
- .processedBaseMsg(processedBaseMsg)
- .processedTestMsg(processedTestMsg)
+ .processedBaseMsg(rulesConfig.isQuickCompare() ? baseMsg : processedBaseMsg)
+ .processedTestMsg(rulesConfig.isQuickCompare() ? testMsg : processedTestMsg)
.parseNodePaths(parsePaths)
.build();
diff --git a/arex-compare-core/src/main/java/com/arextest/diff/utils/NormalCompareUtil.java b/arex-compare-core/src/main/java/com/arextest/diff/utils/NormalCompareUtil.java
index 42ff9ef..5c5dbb7 100644
--- a/arex-compare-core/src/main/java/com/arextest/diff/utils/NormalCompareUtil.java
+++ b/arex-compare-core/src/main/java/com/arextest/diff/utils/NormalCompareUtil.java
@@ -102,8 +102,8 @@ public CompareResult jsonCompare(RulesConfig rulesConfig) {
.message("compare successfully")
.msgInfo(baseMsg, testMsg)
.logs(logs)
- .processedBaseMsg(processedBaseMsg)
- .processedTestMsg(processedTestMsg)
+ .processedBaseMsg(rulesConfig.isQuickCompare() ? baseMsg : processedBaseMsg)
+ .processedTestMsg(rulesConfig.isQuickCompare() ? testMsg : processedTestMsg)
.parseNodePaths(parsePaths)
.build();
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 e703b86..a2cc4ba 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
@@ -113,4 +113,32 @@ public void testPrefixFilter() {
CompareResult result = sdk.compare(baseMsg, testMsg);
Assert.assertEquals(result.getLogs().size(), 0);
}
+
+ @Test
+ public void testYearAndNsTimeIgnore() {
+ CompareSDK sdk = new CompareSDK();
+ sdk.getGlobalOptions().putNameToLower(true).putNullEqualsEmpty(true);
+ String baseMsg = "{\"time\":\"2023-06-08 23:30:00.000\"}";
+ String testMsg = "{\"time\":\"2023-06-08 23:30:00.999999\"}";
+
+ CompareOptions compareOptions = CompareOptions.options();
+ compareOptions.putIgnoredTimePrecision(1000L);
+
+ CompareResult result = sdk.compare(baseMsg, testMsg, compareOptions);
+ Assert.assertEquals(result.getLogs().size(), 0);
+ }
+
+ @Test
+ public void testNoYearAndNsTimeIgnore() {
+ CompareSDK sdk = new CompareSDK();
+ sdk.getGlobalOptions().putNameToLower(true).putNullEqualsEmpty(true);
+ String baseMsg = "{\"time\":\"2023-06-08 23:30:00.000+08:00\"}";
+ String testMsg = "{\"time\":\"2023-06-08T23:30:00.100Z\"}";
+
+ CompareOptions compareOptions = CompareOptions.options();
+ compareOptions.putIgnoredTimePrecision(1000L);
+
+ CompareResult result = sdk.compare(baseMsg, testMsg, compareOptions);
+ Assert.assertEquals(result.getLogs().size(), 1);
+ }
}
diff --git a/pom.xml b/pom.xml
index 26452f9..41e61f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
com.arextest
arex-compare-parent
pom
- 0.1.21
+ 0.1.22
arex-compare-extension
arex-compare-core