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

Reply via email to