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:45 UTC
[james-project] 02/04: JAMES-3775 Fix - webadmin task should hit to Rspamd server when learning
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