Repository: james-project
Updated Branches:
  refs/heads/3.2.x 55ab00eea -> 063685071


JAMES-2558 Make SpamAssassin tests faster

SpamAssassinInvoker tests took 3 min to run and now takes 1 min 30 s


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7fff79fe
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7fff79fe
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7fff79fe

Branch: refs/heads/3.2.x
Commit: 7fff79fe444235cea25407e9e89c3f4cfcd75068
Parents: f5c091e
Author: Benoit Tellier <btell...@linagora.com>
Authored: Wed Nov 14 14:24:32 2018 +0700
Committer: Antoine Duprat <adup...@linagora.com>
Committed: Tue Dec 11 15:36:05 2018 +0100

----------------------------------------------------------------------
 .../jmap/cassandra/CassandraJmapExtension.java  |  5 +--
 .../james/jmap/memory/MemoryJmapExtension.java  |  4 +--
 .../spamassassin/SpamAssassinExtension.java     | 36 +++++++++++++++++---
 3 files changed, 36 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7fff79fe/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraJmapExtension.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraJmapExtension.java
 
b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraJmapExtension.java
index e6095b2..4cf4286 100644
--- 
a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraJmapExtension.java
+++ 
b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraJmapExtension.java
@@ -94,6 +94,7 @@ public class CassandraJmapExtension implements 
BeforeAllCallback, AfterAllCallba
         elasticSearch.after();
 
         Runnables.runParallel(
+            () -> spamAssassinExtension.afterAll(context),
             cassandra::stop,
             elasticSearch::after);
     }
@@ -101,14 +102,14 @@ public class CassandraJmapExtension implements 
BeforeAllCallback, AfterAllCallba
     @Override
     public void beforeEach(ExtensionContext context) throws Exception {
         james = james();
-        spamAssassinExtension.beforeEach(context);
+        spamAssassinExtension.start();
         james.getJmapServer().start();
     }
 
     @Override
     public void afterEach(ExtensionContext context) {
         james.getJmapServer().stop();
-        spamAssassinExtension.afterEach(context);
+        spamAssassinExtension.stop();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7fff79fe/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryJmapExtension.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryJmapExtension.java
 
b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryJmapExtension.java
index 907c0bc..f2f8462 100644
--- 
a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryJmapExtension.java
+++ 
b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryJmapExtension.java
@@ -75,7 +75,7 @@ public class MemoryJmapExtension implements 
BeforeEachCallback, AfterEachCallbac
 
     @Override
     public void beforeEach(ExtensionContext context) throws Exception {
-        spamAssassinExtension.beforeEach(context);
+        spamAssassinExtension.start();
         temporaryFolder.create();
         james.getJmapServer().start();
     }
@@ -83,8 +83,8 @@ public class MemoryJmapExtension implements 
BeforeEachCallback, AfterEachCallbac
     @Override
     public void afterEach(ExtensionContext context) {
         james.getJmapServer().stop();
-        spamAssassinExtension.afterEach(context);
         temporaryFolder.delete();
+        spamAssassinExtension.stop();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7fff79fe/third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinExtension.java
----------------------------------------------------------------------
diff --git 
a/third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinExtension.java
 
b/third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinExtension.java
index 5018bd6..ac65df7 100644
--- 
a/third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinExtension.java
+++ 
b/third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinExtension.java
@@ -28,8 +28,9 @@ import java.time.Duration;
 import java.util.Locale;
 import java.util.stream.Stream;
 
+import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.api.extension.ParameterContext;
 import org.junit.jupiter.api.extension.ParameterResolutionException;
@@ -39,7 +40,7 @@ import org.testcontainers.images.builder.ImageFromDockerfile;
 
 import com.github.fge.lambdas.Throwing;
 
-public class SpamAssassinExtension implements BeforeEachCallback, 
AfterEachCallback, ParameterResolver {
+public class SpamAssassinExtension implements BeforeAllCallback, 
AfterEachCallback, AfterAllCallback, ParameterResolver {
     private static final Duration STARTUP_TIMEOUT = Duration.ofMinutes(30);
 
     private final GenericContainer<?> spamAssassinContainer;
@@ -59,13 +60,34 @@ public class SpamAssassinExtension implements 
BeforeEachCallback, AfterEachCallb
     }
 
     @Override
-    public void beforeEach(ExtensionContext context) {
-        spamAssassinContainer.start();
-        spamAssassin = new SpamAssassin(spamAssassinContainer);
+    public void beforeAll(ExtensionContext context) {
+        start();
     }
 
     @Override
     public void afterEach(ExtensionContext context) {
+        clearSpamAssassinDatabase();
+    }
+
+    @Override
+    public void afterAll(ExtensionContext context) {
+        stop();
+    }
+
+    public void start() {
+        spamAssassinContainer.start();
+        spamAssassin = new SpamAssassin(spamAssassinContainer);
+    }
+
+    public void clearSpamAssassinDatabase() {
+        try {
+            spamAssassin.clearSpamAssassinDatabase();
+        } catch (IOException | InterruptedException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public void stop() {
         spamAssassinContainer.close();
     }
 
@@ -146,6 +168,10 @@ public class SpamAssassinExtension implements 
BeforeEachCallback, AfterEachCallb
         public void dump(String user) throws UnsupportedOperationException, 
IOException, InterruptedException {
             spamAssassinContainer.execInContainer("sa-learn", "--dump", 
"magic", "-u", user);
         }
+
+        public void clearSpamAssassinDatabase() throws 
UnsupportedOperationException, IOException, InterruptedException {
+            spamAssassinContainer.execInContainer("sa-learn", "--dump", 
"magic");
+        }
     }
 
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to