You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2022/09/20 07:20:43 UTC

[james-project] branch master updated (ae5e162484 -> 1163c49cbd)

This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


    from ae5e162484 [Clean code] CassandraMessageDAO - check null & remove un-used parameter
     new 62a60b3293 JAMES-3775 Refactor GetMailboxMessagesService
     new 73bc6d0678 JAMES-3775 Fix - webadmin task should hit to Rspamd server when learning
     new 9a2a3170b6 JAMES-3775 Clean code - RspamdHttpClient - remove unused method
     new 1163c49cbd Update third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../james/rspamd/client/RspamdHttpClient.java      | 27 +++-----
 .../james/rspamd/task/FeedHamToRspamdTask.java     |  2 +-
 .../james/rspamd/task/FeedSpamToRspamdTask.java    |  2 +-
 .../rspamd/task/GetMailboxMessagesService.java     | 10 +--
 .../james/rspamd/client/RspamdHttpClientTest.java  | 80 ++++++++++++++--------
 .../james/rspamd/task/FeedHamToRspamdTaskTest.java | 39 +++++++++++
 .../rspamd/task/FeedSpamToRspamdTaskTest.java      | 37 ++++++++++
 7 files changed, 141 insertions(+), 56 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org


[james-project] 01/04: JAMES-3775 Refactor GetMailboxMessagesService

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 62a60b3293be7bd868694a66bdc62b98292188a0
Author: Tung Van TRAN <vt...@linagora.com>
AuthorDate: Tue Sep 13 10:27:12 2022 +0700

    JAMES-3775 Refactor GetMailboxMessagesService
    
    - Avoid collectList
---
 .../apache/james/rspamd/task/GetMailboxMessagesService.java    | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/GetMailboxMessagesService.java b/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/GetMailboxMessagesService.java
index 11c5375403..a66b313960 100644
--- a/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/GetMailboxMessagesService.java
+++ b/third-party/rspamd/src/main/java/org/apache/james/rspamd/task/GetMailboxMessagesService.java
@@ -22,6 +22,7 @@ package org.apache.james.rspamd.task;
 import static org.apache.james.rspamd.task.FeedSpamToRspamdTask.SPAM_MAILBOX_NAME;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Optional;
 
 import org.apache.james.core.Username;
@@ -37,7 +38,6 @@ import org.apache.james.mailbox.model.MessageResult;
 import org.apache.james.mailbox.model.search.MailboxQuery;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.mail.MessageMapper;
-import org.apache.james.mailbox.store.mail.model.Message;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.util.ReactorUtils;
 
@@ -88,9 +88,7 @@ public class GetMailboxMessagesService {
             .doOnNext(mailboxMessageMetaData -> context.incrementSpamMessageCount())
             .filter(mailboxMessageMetaData -> afterDate.map(date -> mailboxMessageMetaData.getInternalDate().after(date)).orElse(true))
             .filter(message -> randomBooleanWithProbability(runningOptions))
-            .map(Message::getMessageId)
-            .collectList()
-            .flatMapMany(messageIds -> messageIdManager.getMessagesReactive(messageIds, FetchGroup.FULL_CONTENT, mailboxSession))
+            .flatMap(message -> messageIdManager.getMessagesReactive(List.of(message.getMessageId()), FetchGroup.FULL_CONTENT, mailboxSession))
             .filter(runningOptions.correspondingClassificationFilter());
     }
 
@@ -104,9 +102,7 @@ public class GetMailboxMessagesService {
             .doOnNext(mailboxMessageMetaData -> context.incrementHamMessageCount())
             .filter(mailboxMessageMetaData -> afterDate.map(date -> mailboxMessageMetaData.getInternalDate().after(date)).orElse(true))
             .filter(message -> randomBooleanWithProbability(runningOptions))
-            .map(Message::getMessageId)
-            .collectList()
-            .flatMapMany(messageIds -> messageIdManager.getMessagesReactive(messageIds, FetchGroup.FULL_CONTENT, mailboxSession))
+            .flatMap(message -> messageIdManager.getMessagesReactive(List.of(message.getMessageId()), FetchGroup.FULL_CONTENT, mailboxSession))
             .filter(runningOptions.correspondingClassificationFilter());
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org


[james-project] 04/04: Update third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 1163c49cbd7852b2d5e851da1e285fb0478082e4
Author: vttran <vt...@linagora.com>
AuthorDate: Mon Sep 19 13:40:15 2022 +0700

    Update third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java
    
    Co-authored-by: Rene Cordier <re...@gmail.com>
---
 .../test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java b/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java
index 29b3da3062..797020f8f8 100644
--- a/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java
+++ b/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java
@@ -166,7 +166,7 @@ public class FeedHamToRspamdTaskTest {
     }
 
     @Test
-    void taskShouldHitToRspamdServerWhenLearnHam() throws MailboxException{
+    void taskShouldHitToRspamdServerWhenLearnHam() throws MailboxException {
         appendHamMessage(BOB_INBOX_MAILBOX, Date.from(NOW));
         appendHamMessage(ALICE_INBOX_MAILBOX, Date.from(NOW));
 


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org


[james-project] 03/04: JAMES-3775 Clean code - RspamdHttpClient - remove unused method

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9a2a3170b6559fef8d7cd72dbfcb372c5773c5f9
Author: Tung Van TRAN <vt...@linagora.com>
AuthorDate: Tue Sep 13 16:49:27 2022 +0700

    JAMES-3775 Clean code - RspamdHttpClient - remove unused method
---
 .../james/rspamd/client/RspamdHttpClient.java      | 25 +++----
 .../james/rspamd/client/RspamdHttpClientTest.java  | 80 ++++++++++++++--------
 2 files changed, 58 insertions(+), 47 deletions(-)

diff --git a/third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdHttpClient.java b/third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdHttpClient.java
index a61af61c90..4fb758edff 100644
--- a/third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdHttpClient.java
+++ b/third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdHttpClient.java
@@ -71,15 +71,6 @@ public class RspamdHttpClient {
         this.objectMapper = new ObjectMapper().registerModule(new Jdk8Module());
     }
 
-    public Mono<AnalysisResult> checkV2(InputStream mimeMessage) {
-        return httpClient.post()
-            .uri(CHECK_V2_ENDPOINT)
-            .send(ReactorUtils.toChunks(mimeMessage, BUFFER_SIZE)
-                .map(Unpooled::wrappedBuffer))
-            .responseSingle(this::checkMailHttpResponseHandler)
-            .subscribeOn(ReactorUtils.BLOCKING_CALL_WRAPPER);
-    }
-
     public Mono<AnalysisResult> checkV2(Mail mail) throws MessagingException {
         return httpClient
             .headers(headers -> transportInformationToHeaders(mail, headers))
@@ -91,6 +82,14 @@ public class RspamdHttpClient {
             .subscribeOn(ReactorUtils.BLOCKING_CALL_WRAPPER);
     }
 
+    public Mono<Void> reportAsSpam(InputStream content) {
+        return reportMail(content, LEARN_SPAM_ENDPOINT);
+    }
+
+    public Mono<Void> reportAsHam(InputStream content) {
+        return reportMail(content, LEARN_HAM_ENDPOINT);
+    }
+
     // CF https://rspamd.com/doc/architecture/protocol.html#http-headers
     // Adding SMTP transport information improves Rspamd accuracy
     private void transportInformationToHeaders(Mail mail, io.netty.handler.codec.http.HttpHeaders headers) {
@@ -120,14 +119,6 @@ public class RspamdHttpClient {
             .ifPresent(user -> headers.add("User", user));
     }
 
-    public Mono<Void> reportAsSpam(InputStream content) {
-        return reportMail(content, LEARN_SPAM_ENDPOINT);
-    }
-
-    public Mono<Void> reportAsHam(InputStream content) {
-        return reportMail(content, LEARN_HAM_ENDPOINT);
-    }
-
     private HttpClient buildReactorNettyHttpClient(RspamdClientConfiguration configuration) {
         return HttpClient.create()
             .disableRetry(true)
diff --git a/third-party/rspamd/src/test/java/org/apache/james/rspamd/client/RspamdHttpClientTest.java b/third-party/rspamd/src/test/java/org/apache/james/rspamd/client/RspamdHttpClientTest.java
index 25f84da4cc..3271e9b064 100644
--- a/third-party/rspamd/src/test/java/org/apache/james/rspamd/client/RspamdHttpClientTest.java
+++ b/third-party/rspamd/src/test/java/org/apache/james/rspamd/client/RspamdHttpClientTest.java
@@ -26,17 +26,20 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.hamcrest.Matchers.nullValue;
 import static org.hamcrest.core.Is.is;
 
-import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.util.Optional;
 
+import javax.mail.MessagingException;
+
 import org.apache.james.junit.categories.Unstable;
 import org.apache.james.rspamd.DockerRspamdExtension;
 import org.apache.james.rspamd.exception.UnauthorizedException;
 import org.apache.james.rspamd.model.AnalysisResult;
-import org.apache.james.util.ClassLoaderUtils;
+import org.apache.james.util.MimeMessageUtil;
 import org.apache.james.util.Port;
 import org.apache.james.webadmin.WebAdminUtils;
+import org.apache.mailet.Mail;
+import org.apache.mailet.base.test.FakeMail;
 import org.assertj.core.api.SoftAssertions;
 import org.eclipse.jetty.http.HttpStatus;
 import org.junit.jupiter.api.BeforeEach;
@@ -57,17 +60,33 @@ class RspamdHttpClientTest {
     @RegisterExtension
     static DockerRspamdExtension rspamdExtension = new DockerRspamdExtension();
 
-    private byte[] spamMessage;
-    private byte[] hamMessage;
-    private byte[] virusMessage;
-    private byte[] nonVirusMessage;
+    private Mail spamMessage;
+    private Mail hamMessage;
+    private Mail virusMessage;
+    private Mail nonVirusMessage;
 
     @BeforeEach
-    void setup() {
-        spamMessage = ClassLoaderUtils.getSystemResourceAsByteArray(SPAM_MESSAGE_PATH);
-        hamMessage = ClassLoaderUtils.getSystemResourceAsByteArray(HAM_MESSAGE_PATH);
-        virusMessage = ClassLoaderUtils.getSystemResourceAsByteArray(VIRUS_MESSAGE_PATH);
-        nonVirusMessage = ClassLoaderUtils.getSystemResourceAsByteArray(NON_VIRUS_MESSAGE_PATH);
+    void setup() throws MessagingException {
+        spamMessage = FakeMail.builder()
+            .name("spam")
+            .mimeMessage(MimeMessageUtil.mimeMessageFromStream(
+                ClassLoader.getSystemResourceAsStream(SPAM_MESSAGE_PATH)))
+            .build();
+        hamMessage = FakeMail.builder()
+            .name("ham")
+            .mimeMessage(MimeMessageUtil.mimeMessageFromStream(
+                ClassLoader.getSystemResourceAsStream(HAM_MESSAGE_PATH)))
+            .build();
+        virusMessage = FakeMail.builder()
+            .name("virus")
+            .mimeMessage(MimeMessageUtil.mimeMessageFromStream(
+                ClassLoader.getSystemResourceAsStream(VIRUS_MESSAGE_PATH)))
+            .build();
+        nonVirusMessage = FakeMail.builder()
+            .name("non virus")
+            .mimeMessage(MimeMessageUtil.mimeMessageFromStream(
+                ClassLoader.getSystemResourceAsStream(NON_VIRUS_MESSAGE_PATH)))
+            .build();
     }
 
     @Test
@@ -75,7 +94,7 @@ class RspamdHttpClientTest {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), "wrongPassword", Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        assertThatThrownBy(() -> client.checkV2(new ByteArrayInputStream(spamMessage)).block())
+        assertThatThrownBy(() -> client.checkV2(spamMessage).block())
             .hasMessage("{\"error\":\"Unauthorized\"}")
             .isInstanceOf(UnauthorizedException.class);
     }
@@ -85,7 +104,8 @@ class RspamdHttpClientTest {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), "wrongPassword", Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        assertThatThrownBy(() -> reportAsSpam(client, new ByteArrayInputStream(spamMessage)))
+
+        assertThatThrownBy(() -> reportAsSpam(client, spamMessage.getMessage().getInputStream()))
             .hasMessage("{\"error\":\"Unauthorized\"}")
             .isInstanceOf(UnauthorizedException.class);
     }
@@ -95,17 +115,17 @@ class RspamdHttpClientTest {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), "wrongPassword", Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        assertThatThrownBy(() -> reportAsHam(client, new ByteArrayInputStream(spamMessage)))
+        assertThatThrownBy(() -> reportAsHam(client, spamMessage.getMessage().getInputStream()))
             .hasMessage("{\"error\":\"Unauthorized\"}")
             .isInstanceOf(UnauthorizedException.class);
     }
 
     @Test
-    void checkSpamMailUsingRspamdClientWithExactPasswordShouldReturnAnalysisResultAsSameAsUsingRawClient() {
+    void checkSpamMailUsingRspamdClientWithExactPasswordShouldReturnAnalysisResultAsSameAsUsingRawClient() throws Exception {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), PASSWORD, Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        AnalysisResult analysisResult = client.checkV2(new ByteArrayInputStream(spamMessage)).block();
+        AnalysisResult analysisResult = client.checkV2(spamMessage).block();
         assertThat(analysisResult.getAction()).isEqualTo(AnalysisResult.Action.REJECT);
 
         RequestSpecification rspamdApi = WebAdminUtils.spec(Port.of(rspamdExtension.dockerRspamd().getPort()));
@@ -121,11 +141,11 @@ class RspamdHttpClientTest {
     }
 
     @Test
-    void checkHamMailUsingRspamdClientWithExactPasswordShouldReturnAnalysisResultAsSameAsUsingRawClient() {
+    void checkHamMailUsingRspamdClientWithExactPasswordShouldReturnAnalysisResultAsSameAsUsingRawClient() throws Exception {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), PASSWORD, Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        AnalysisResult analysisResult = client.checkV2(new ByteArrayInputStream(hamMessage)).block();
+        AnalysisResult analysisResult = client.checkV2(hamMessage).block();
         SoftAssertions.assertSoftly(softly -> {
             softly.assertThat(analysisResult.getAction()).isEqualTo(AnalysisResult.Action.NO_ACTION);
             softly.assertThat(analysisResult.getRequiredScore()).isEqualTo(14.0F);
@@ -150,7 +170,7 @@ class RspamdHttpClientTest {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), PASSWORD, Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        assertThatCode(() -> client.reportAsSpam(new ByteArrayInputStream(spamMessage)).block())
+        assertThatCode(() -> client.reportAsSpam(spamMessage.getMessage().getInputStream()).block())
             .doesNotThrowAnyException();
     }
 
@@ -159,45 +179,45 @@ class RspamdHttpClientTest {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), PASSWORD, Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        assertThatCode(() -> client.reportAsHam(new ByteArrayInputStream(hamMessage)).block())
+        assertThatCode(() -> client.reportAsHam(hamMessage.getMessage().getInputStream()).block())
             .doesNotThrowAnyException();
     }
 
     @Test
-    void learnHamMShouldBeIdempotent() {
+    void learnHamMShouldBeIdempotent() throws Exception {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), PASSWORD, Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        client.reportAsHam(new ByteArrayInputStream(hamMessage)).block();
-        assertThatCode(() -> client.reportAsHam(new ByteArrayInputStream(hamMessage)).block())
+        client.reportAsHam(hamMessage.getMessage().getInputStream()).block();
+        assertThatCode(() -> client.reportAsHam(hamMessage.getMessage().getInputStream()).block())
             .doesNotThrowAnyException();
     }
 
     @Test
-    void learnSpamMShouldBeIdempotent() {
+    void learnSpamMShouldBeIdempotent() throws Exception {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), PASSWORD, Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        client.reportAsSpam(new ByteArrayInputStream(spamMessage)).block();
-        assertThatCode(() -> client.reportAsSpam(new ByteArrayInputStream(spamMessage)).block())
+        client.reportAsSpam(spamMessage.getMessage().getInputStream()).block();
+        assertThatCode(() -> client.reportAsSpam(spamMessage.getMessage().getInputStream()).block())
             .doesNotThrowAnyException();
     }
 
     @Test
-    void checkVirusMailUsingRspamdClientWithExactPasswordShouldReturnHasVirus() {
+    void checkVirusMailUsingRspamdClientWithExactPasswordShouldReturnHasVirus() throws Exception {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), PASSWORD, Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        AnalysisResult analysisResult = client.checkV2(new ByteArrayInputStream(virusMessage)).block();
+        AnalysisResult analysisResult = client.checkV2(virusMessage).block();
         assertThat(analysisResult.hasVirus()).isTrue();
     }
 
     @Test
-    void checkNonVirusMailUsingRspamdClientWithExactPasswordShouldReturnHasNoVirus() {
+    void checkNonVirusMailUsingRspamdClientWithExactPasswordShouldReturnHasNoVirus() throws Exception {
         RspamdClientConfiguration configuration = new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), PASSWORD, Optional.empty());
         RspamdHttpClient client = new RspamdHttpClient(configuration);
 
-        AnalysisResult analysisResult = client.checkV2(new ByteArrayInputStream(nonVirusMessage)).block();
+        AnalysisResult analysisResult = client.checkV2(nonVirusMessage).block();
         assertThat(analysisResult.hasVirus()).isFalse();
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org


[james-project] 02/04: JAMES-3775 Fix - webadmin task should hit to Rspamd server when learning

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 73bc6d06784bdeb4dc9d0d64d4b9bbcacd695955
Author: Tung Van TRAN <vt...@linagora.com>
AuthorDate: Tue Sep 13 13:23:09 2022 +0700

    JAMES-3775 Fix - webadmin task should hit to Rspamd server when learning
---
 .../james/rspamd/client/RspamdHttpClient.java      |  2 ++
 .../james/rspamd/task/FeedHamToRspamdTask.java     |  2 +-
 .../james/rspamd/task/FeedSpamToRspamdTask.java    |  2 +-
 .../james/rspamd/task/FeedHamToRspamdTaskTest.java | 39 ++++++++++++++++++++++
 .../rspamd/task/FeedSpamToRspamdTaskTest.java      | 37 ++++++++++++++++++++
 5 files changed, 80 insertions(+), 2 deletions(-)

diff --git a/third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdHttpClient.java b/third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdHttpClient.java
index 7746c57d9a..a61af61c90 100644
--- a/third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdHttpClient.java
+++ b/third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdHttpClient.java
@@ -58,6 +58,7 @@ public class RspamdHttpClient {
     public static final String LEARN_SPAM_ENDPOINT = "/learnspam";
     public static final String LEARN_HAM_ENDPOINT = "/learnham";
     private static final int OK = 200;
+    private static final int NO_CONTENT = 204;
     private static final int FORBIDDEN = 403;
     private static final int BUFFER_SIZE = 16384;
 
@@ -160,6 +161,7 @@ public class RspamdHttpClient {
 
     private Mono<Void> reportMailHttpResponseHandler(HttpClientResponse httpClientResponse, ByteBufMono byteBufMono) {
         switch (httpClientResponse.status().code()) {
+            case NO_CONTENT:
             case OK:
                 return Mono.empty();
             case FORBIDDEN:
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 ab75e04c4d..1dd77c09c8 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
@@ -239,7 +239,7 @@ public class FeedHamToRspamdTask implements Task {
             .transform(ReactorUtils.<MessageResult, Result>throttle()
                 .elements(runningOptions.getMessagesPerSecond())
                 .per(Duration.ofSeconds(1))
-                .forOperation(messageResult -> Mono.fromSupplier(Throwing.supplier(() -> rspamdHttpClient.reportAsHam(messageResult.getFullContent().getInputStream())))
+                .forOperation(messageResult -> rspamdHttpClient.reportAsHam(Throwing.supplier(() -> messageResult.getFullContent().getInputStream()).get())
                     .then(Mono.fromCallable(() -> {
                         context.incrementReportedHamMessageCount(1);
                         return Result.COMPLETED;
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 4b1f0068be..8a1a1db55c 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
@@ -240,7 +240,7 @@ public class FeedSpamToRspamdTask implements Task {
             .transform(ReactorUtils.<MessageResult, Task.Result>throttle()
                 .elements(runningOptions.getMessagesPerSecond())
                 .per(Duration.ofSeconds(1))
-                .forOperation(messageResult -> Mono.fromSupplier(Throwing.supplier(() -> rspamdHttpClient.reportAsSpam(messageResult.getFullContent().getInputStream())))
+                .forOperation(messageResult -> rspamdHttpClient.reportAsSpam(Throwing.supplier(() -> messageResult.getFullContent().getInputStream()).get())
                     .then(Mono.fromCallable(() -> {
                         context.incrementReportedSpamMessageCount(1);
                         return Result.COMPLETED;
diff --git a/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java b/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java
index 0d9a2d8dd2..29b3da3062 100644
--- a/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java
+++ b/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java
@@ -29,11 +29,13 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 
 import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.time.Clock;
 import java.time.Instant;
 import java.time.ZonedDateTime;
 import java.util.Date;
 import java.util.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.IntStream;
 
 import javax.mail.Flags;
@@ -65,6 +67,8 @@ import org.mockito.Mockito;
 
 import com.github.fge.lambdas.Throwing;
 
+import reactor.core.publisher.Mono;
+
 @Tag(Unstable.TAG)
 public class FeedHamToRspamdTaskTest {
     @RegisterExtension
@@ -83,6 +87,25 @@ public class FeedHamToRspamdTaskTest {
     public static final long ONE_DAY_IN_SECOND = 86400;
     public static final Instant NOW = ZonedDateTime.now().toInstant();
 
+    static class TestRspamdHttpClient extends RspamdHttpClient {
+        private final AtomicInteger hitCounter;
+        public TestRspamdHttpClient(RspamdClientConfiguration configuration) {
+            super(configuration);
+            this.hitCounter = new AtomicInteger(0);
+        }
+
+        @Override
+        public Mono<Void> reportAsHam(InputStream content) {
+            return Mono.fromCallable(() -> content)
+                .doOnNext(e -> hitCounter.incrementAndGet())
+                .then();
+        }
+
+        public int getHitCounter() {
+            return hitCounter.get();
+        }
+    }
+
     private InMemoryMailboxManager mailboxManager;
     private MessageIdManager messageIdManager;
     private MailboxSessionMapperFactory mapperFactory;
@@ -142,6 +165,22 @@ public class FeedHamToRspamdTaskTest {
                 .build());
     }
 
+    @Test
+    void taskShouldHitToRspamdServerWhenLearnHam() throws MailboxException{
+        appendHamMessage(BOB_INBOX_MAILBOX, Date.from(NOW));
+        appendHamMessage(ALICE_INBOX_MAILBOX, Date.from(NOW));
+
+        TestRspamdHttpClient rspamdHttpClient = new TestRspamdHttpClient(new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), PASSWORD, Optional.empty()));
+
+        FeedHamToRspamdTask feedHamToRspamdTask = new FeedHamToRspamdTask(mailboxManager, usersRepository, messageIdManager, mapperFactory, rspamdHttpClient, RunningOptions.DEFAULT, clock);
+
+
+        Task.Result result = feedHamToRspamdTask.run();
+
+        assertThat(result).isEqualTo(Task.Result.COMPLETED);
+        assertThat(rspamdHttpClient.getHitCounter()).isEqualTo(2);
+    }
+
     @Test
     void taskShouldReportHamMessageInPeriod() throws MailboxException {
         RunningOptions runningOptions = new RunningOptions(Optional.of(TWO_DAYS_IN_SECOND),
diff --git a/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskTest.java b/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskTest.java
index 3bd9abd943..fdafeb8bbb 100644
--- a/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskTest.java
+++ b/third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskTest.java
@@ -29,11 +29,13 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 
 import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.time.Clock;
 import java.time.Instant;
 import java.time.ZonedDateTime;
 import java.util.Date;
 import java.util.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.IntStream;
 
 import javax.mail.Flags;
@@ -64,6 +66,9 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 import org.mockito.Mockito;
 
 import com.github.fge.lambdas.Throwing;
+
+import reactor.core.publisher.Mono;
+
 @Tag(Unstable.TAG)
 public class FeedSpamToRspamdTaskTest {
     @RegisterExtension
@@ -79,6 +84,25 @@ public class FeedSpamToRspamdTaskTest {
     public static final long ONE_DAY_IN_SECOND = 86400;
     public static final Instant NOW = ZonedDateTime.now().toInstant();
 
+    static class TestRspamdHttpClient extends RspamdHttpClient {
+        private final AtomicInteger hitCounter;
+        public TestRspamdHttpClient(RspamdClientConfiguration configuration) {
+            super(configuration);
+            this.hitCounter = new AtomicInteger(0);
+        }
+
+        @Override
+        public Mono<Void> reportAsSpam(InputStream content) {
+            return Mono.fromCallable(() -> content)
+                .doOnNext(e -> hitCounter.incrementAndGet())
+                .then();
+        }
+
+        public int getHitCounter() {
+            return hitCounter.get();
+        }
+    }
+
     private InMemoryMailboxManager mailboxManager;
     private MessageIdManager messageIdManager;
     private MailboxSessionMapperFactory mapperFactory;
@@ -135,6 +159,19 @@ public class FeedSpamToRspamdTaskTest {
                 .build());
     }
 
+    @Test
+    void taskShouldHitToRspamdServerWhenLearnSpam() throws MailboxException {
+        appendSpamMessage(BOB_SPAM_MAILBOX, Date.from(NOW));
+        appendSpamMessage(ALICE_SPAM_MAILBOX, Date.from(NOW));
+
+        TestRspamdHttpClient rspamdHttpClient = new TestRspamdHttpClient(new RspamdClientConfiguration(rspamdExtension.getBaseUrl(), PASSWORD, Optional.empty()));
+        FeedSpamToRspamdTask feedSpamToRspamdTask = new FeedSpamToRspamdTask(mailboxManager, usersRepository, messageIdManager, mapperFactory, rspamdHttpClient, RunningOptions.DEFAULT, clock);
+        Task.Result result = feedSpamToRspamdTask.run();
+
+        assertThat(result).isEqualTo(Task.Result.COMPLETED);
+        assertThat(rspamdHttpClient.getHitCounter()).isEqualTo(2);
+    }
+
     @Test
     void taskShouldReportSpamMessageInPeriod() throws MailboxException {
         RunningOptions runningOptions = new RunningOptions(Optional.of(TWO_DAYS_IN_SECOND),


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org