This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push: new 9df29a5cfd JAMES-3775 Handle possible empty `rspamdTimeoutInSeconds` when deserializing task additional information (#1264) 9df29a5cfd is described below commit 9df29a5cfd43b34d97cef3b3699d177a06e7832d Author: Trần Hồng Quân <55171818+quantranhong1...@users.noreply.github.com> AuthorDate: Wed Oct 26 09:19:56 2022 +0700 JAMES-3775 Handle possible empty `rspamdTimeoutInSeconds` when deserializing task additional information (#1264) --- .../james/rspamd/task/FeedHamToRspamdTask.java | 19 ++++++++++ .../james/rspamd/task/FeedSpamToRspamdTask.java | 19 ++++++++++ .../apache/james/rspamd/task/RunningOptions.java | 26 ++++++++++++- ...amToRspamdTaskAdditionalInformationDTOTest.java | 43 ++++++++++++++++++++++ ...amToRspamdTaskAdditionalInformationDTOTest.java | 42 +++++++++++++++++++++ ...amEmptyRspamdTimeout.additionalInformation.json | 12 ++++++ ...onEmptyRspamdTimeout.additionalInformation.json | 13 +++++++ ...amEmptyRspamdTimeout.additionalInformation.json | 12 ++++++ ...onEmptyRspamdTimeout.additionalInformation.json | 13 +++++++ 9 files changed, 198 insertions(+), 1 deletion(-) diff --git a/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedHamToRspamdTask.java b/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedHamToRspamdTask.java index d7f578b993..ed7486404c 100644 --- a/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedHamToRspamdTask.java +++ b/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedHamToRspamdTask.java @@ -93,6 +93,25 @@ public class FeedHamToRspamdTask implements Task { public Instant timestamp() { return timestamp; } + + @Override + public final boolean equals(Object o) { + if (o instanceof AdditionalInformation) { + AdditionalInformation that = (AdditionalInformation) o; + + return Objects.equals(this.hamMessageCount, that.hamMessageCount) + && Objects.equals(this.reportedHamMessageCount, that.reportedHamMessageCount) + && Objects.equals(this.errorCount, that.errorCount) + && Objects.equals(this.timestamp, that.timestamp) + && Objects.equals(this.runningOptions, that.runningOptions); + } + return false; + } + + @Override + public final int hashCode() { + return Objects.hash(timestamp, hamMessageCount, reportedHamMessageCount, errorCount, runningOptions); + } } public static class Context { diff --git a/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedSpamToRspamdTask.java b/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedSpamToRspamdTask.java index dcb6770674..9d5d296e0f 100644 --- a/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedSpamToRspamdTask.java +++ b/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedSpamToRspamdTask.java @@ -94,6 +94,25 @@ public class FeedSpamToRspamdTask implements Task { public Instant timestamp() { return timestamp; } + + @Override + public final boolean equals(Object o) { + if (o instanceof AdditionalInformation) { + AdditionalInformation that = (AdditionalInformation) o; + + return Objects.equals(this.spamMessageCount, that.spamMessageCount) + && Objects.equals(this.reportedSpamMessageCount, that.reportedSpamMessageCount) + && Objects.equals(this.errorCount, that.errorCount) + && Objects.equals(this.timestamp, that.timestamp) + && Objects.equals(this.runningOptions, that.runningOptions); + } + return false; + } + + @Override + public final int hashCode() { + return Objects.hash(timestamp, spamMessageCount, reportedSpamMessageCount, errorCount, runningOptions); + } } public static class Context { diff --git a/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/RunningOptions.java b/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/RunningOptions.java index bda20e3efc..6a683776e3 100644 --- a/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/RunningOptions.java +++ b/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/RunningOptions.java @@ -20,6 +20,7 @@ package org.apache.james.rspamd.task; import java.time.Duration; +import java.util.Objects; import java.util.Optional; import java.util.function.Predicate; @@ -91,7 +92,7 @@ public class RunningOptions { this.messagesPerSecond = messagesPerSecond; this.samplingProbability = samplingProbability; this.classifiedAsSpam = classifiedAsSpam; - this.rspamdTimeout = rspamdTimeout; + this.rspamdTimeout = evaluateRspamdTimeout(rspamdTimeout); } public Optional<Boolean> getClassifiedAsSpam() { @@ -129,4 +130,27 @@ public class RunningOptions { } }).orElse(ClassificationFilter.ALL); } + + private Duration evaluateRspamdTimeout(Duration rspamdTimeout) { + return Optional.ofNullable(rspamdTimeout).orElse(DEFAULT_RSPAMD_TIMEOUT); + } + + @Override + public final boolean equals(Object o) { + if (o instanceof RunningOptions) { + RunningOptions that = (RunningOptions) o; + + return Objects.equals(this.messagesPerSecond, that.messagesPerSecond) + && Objects.equals(this.samplingProbability, that.samplingProbability) + && Objects.equals(this.periodInSecond, that.periodInSecond) + && Objects.equals(this.classifiedAsSpam, that.classifiedAsSpam) + && Objects.equals(this.rspamdTimeout, that.rspamdTimeout); + } + return false; + } + + @Override + public final int hashCode() { + return Objects.hash(periodInSecond, messagesPerSecond, samplingProbability, classifiedAsSpam, rspamdTimeout); + } } diff --git a/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskAdditionalInformationDTOTest.java b/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskAdditionalInformationDTOTest.java index d9fd376b15..a5187545ef 100644 --- a/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskAdditionalInformationDTOTest.java +++ b/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskAdditionalInformationDTOTest.java @@ -19,10 +19,15 @@ package org.apache.james.rspamd.task; +import static org.apache.james.rspamd.task.RunningOptions.DEFAULT_RSPAMD_TIMEOUT; +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.Duration; import java.time.Instant; import java.util.Optional; import org.apache.james.JsonSerializationVerifier; +import org.apache.james.json.JsonGenericSerializer; import org.apache.james.util.ClassLoaderUtils; import org.junit.jupiter.api.Test; @@ -73,4 +78,42 @@ class FeedHamToRspamdTaskAdditionalInformationDTOTest { .json(ClassLoaderUtils.getSystemResourceAsString("json/feedHamNonEmptyPeriod.additionalInformation.json")) .verify(); } + + @Test + void shouldWellDeserializeWhenEmptyRspamdTimeoutField() throws Exception { + assertThat(JsonGenericSerializer + .forModules(FeedHamToRspamdTaskAdditionalInformationDTO.SERIALIZATION_MODULE) + .withoutNestedType() + .deserialize(ClassLoaderUtils.getSystemResourceAsString("json/feedHamEmptyRspamdTimeout.additionalInformation.json"))) + .isEqualTo(new FeedHamToRspamdTask.AdditionalInformation( + Instant.parse("2007-12-03T10:15:30.00Z"), + 4, + 2, + 1, + new RunningOptions( + Optional.of(3600L), + RunningOptions.DEFAULT_MESSAGES_PER_SECOND, + RunningOptions.DEFAULT_SAMPLING_PROBABILITY, + Optional.empty(), + DEFAULT_RSPAMD_TIMEOUT))); + } + + @Test + void shouldWellDeserializeWhenNonEmptyRspamdTimeoutField() throws Exception { + assertThat(JsonGenericSerializer + .forModules(FeedHamToRspamdTaskAdditionalInformationDTO.SERIALIZATION_MODULE) + .withoutNestedType() + .deserialize(ClassLoaderUtils.getSystemResourceAsString("json/feedHamNonEmptyRspamdTimeout.additionalInformation.json"))) + .isEqualTo(new FeedHamToRspamdTask.AdditionalInformation( + Instant.parse("2007-12-03T10:15:30.00Z"), + 4, + 2, + 1, + new RunningOptions( + Optional.of(3600L), + RunningOptions.DEFAULT_MESSAGES_PER_SECOND, + RunningOptions.DEFAULT_SAMPLING_PROBABILITY, + Optional.empty(), + Duration.ofSeconds(100)))); + } } diff --git a/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskAdditionalInformationDTOTest.java b/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskAdditionalInformationDTOTest.java index 70ba6ce805..68ecc66c8c 100644 --- a/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskAdditionalInformationDTOTest.java +++ b/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskAdditionalInformationDTOTest.java @@ -20,12 +20,16 @@ package org.apache.james.rspamd.task; import static org.apache.james.rspamd.task.RunningOptions.DEFAULT_MESSAGES_PER_SECOND; +import static org.apache.james.rspamd.task.RunningOptions.DEFAULT_RSPAMD_TIMEOUT; import static org.apache.james.rspamd.task.RunningOptions.DEFAULT_SAMPLING_PROBABILITY; +import static org.assertj.core.api.Assertions.assertThat; +import java.time.Duration; import java.time.Instant; import java.util.Optional; import org.apache.james.JsonSerializationVerifier; +import org.apache.james.json.JsonGenericSerializer; import org.apache.james.util.ClassLoaderUtils; import org.junit.jupiter.api.Test; @@ -76,4 +80,42 @@ class FeedSpamToRspamdTaskAdditionalInformationDTOTest { .json(ClassLoaderUtils.getSystemResourceAsString("json/feedSpamNonEmptyPeriod.additionalInformation.json")) .verify(); } + + @Test + void shouldWellDeserializeWhenEmptyRspamdTimeoutField() throws Exception { + assertThat(JsonGenericSerializer + .forModules(FeedSpamToRspamdTaskAdditionalInformationDTO.SERIALIZATION_MODULE) + .withoutNestedType() + .deserialize(ClassLoaderUtils.getSystemResourceAsString("json/feedSpamEmptyRspamdTimeout.additionalInformation.json"))) + .isEqualTo(new FeedSpamToRspamdTask.AdditionalInformation( + Instant.parse("2007-12-03T10:15:30.00Z"), + 4, + 2, + 1, + new RunningOptions( + Optional.of(3600L), + DEFAULT_MESSAGES_PER_SECOND, + DEFAULT_SAMPLING_PROBABILITY, + Optional.empty(), + DEFAULT_RSPAMD_TIMEOUT))); + } + + @Test + void shouldWellDeserializeWhenNonEmptyRspamdTimeoutField() throws Exception { + assertThat(JsonGenericSerializer + .forModules(FeedSpamToRspamdTaskAdditionalInformationDTO.SERIALIZATION_MODULE) + .withoutNestedType() + .deserialize(ClassLoaderUtils.getSystemResourceAsString("json/feedSpamNonEmptyRspamdTimeout.additionalInformation.json"))) + .isEqualTo(new FeedSpamToRspamdTask.AdditionalInformation( + Instant.parse("2007-12-03T10:15:30.00Z"), + 4, + 2, + 1, + new RunningOptions( + Optional.of(3600L), + DEFAULT_MESSAGES_PER_SECOND, + DEFAULT_SAMPLING_PROBABILITY, + Optional.empty(), + Duration.ofSeconds(100)))); + } } diff --git a/third-party/rspamd/src/test/resources/json/feedHamEmptyRspamdTimeout.additionalInformation.json b/third-party/rspamd/src/test/resources/json/feedHamEmptyRspamdTimeout.additionalInformation.json new file mode 100644 index 0000000000..5e4b9edbd1 --- /dev/null +++ b/third-party/rspamd/src/test/resources/json/feedHamEmptyRspamdTimeout.additionalInformation.json @@ -0,0 +1,12 @@ +{ + "errorCount": 1, + "reportedHamMessageCount": 2, + "runningOptions": { + "messagesPerSecond": 10, + "periodInSecond": 3600, + "samplingProbability": 1.0 + }, + "hamMessageCount": 4, + "timestamp": "2007-12-03T10:15:30Z", + "type": "FeedHamToRspamdTask" +} \ No newline at end of file diff --git a/third-party/rspamd/src/test/resources/json/feedHamNonEmptyRspamdTimeout.additionalInformation.json b/third-party/rspamd/src/test/resources/json/feedHamNonEmptyRspamdTimeout.additionalInformation.json new file mode 100644 index 0000000000..fffd276468 --- /dev/null +++ b/third-party/rspamd/src/test/resources/json/feedHamNonEmptyRspamdTimeout.additionalInformation.json @@ -0,0 +1,13 @@ +{ + "errorCount": 1, + "reportedHamMessageCount": 2, + "runningOptions": { + "messagesPerSecond": 10, + "rspamdTimeoutInSeconds": 100, + "periodInSecond": 3600, + "samplingProbability": 1.0 + }, + "hamMessageCount": 4, + "timestamp": "2007-12-03T10:15:30Z", + "type": "FeedHamToRspamdTask" +} \ No newline at end of file diff --git a/third-party/rspamd/src/test/resources/json/feedSpamEmptyRspamdTimeout.additionalInformation.json b/third-party/rspamd/src/test/resources/json/feedSpamEmptyRspamdTimeout.additionalInformation.json new file mode 100644 index 0000000000..499915aef5 --- /dev/null +++ b/third-party/rspamd/src/test/resources/json/feedSpamEmptyRspamdTimeout.additionalInformation.json @@ -0,0 +1,12 @@ +{ + "errorCount": 1, + "reportedSpamMessageCount": 2, + "runningOptions": { + "messagesPerSecond": 10, + "periodInSecond": 3600, + "samplingProbability": 1.0 + }, + "spamMessageCount": 4, + "timestamp": "2007-12-03T10:15:30Z", + "type": "FeedSpamToRspamdTask" +} \ No newline at end of file diff --git a/third-party/rspamd/src/test/resources/json/feedSpamNonEmptyRspamdTimeout.additionalInformation.json b/third-party/rspamd/src/test/resources/json/feedSpamNonEmptyRspamdTimeout.additionalInformation.json new file mode 100644 index 0000000000..7fa2bb7d3d --- /dev/null +++ b/third-party/rspamd/src/test/resources/json/feedSpamNonEmptyRspamdTimeout.additionalInformation.json @@ -0,0 +1,13 @@ +{ + "errorCount": 1, + "reportedSpamMessageCount": 2, + "runningOptions": { + "messagesPerSecond": 10, + "rspamdTimeoutInSeconds": 100, + "periodInSecond": 3600, + "samplingProbability": 1.0 + }, + "spamMessageCount": 4, + "timestamp": "2007-12-03T10:15:30Z", + "type": "FeedSpamToRspamdTask" +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org