You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/01/19 12:07:16 UTC

[02/14] james-project git commit: JAMES-2285 Create a brokerService extension

JAMES-2285 Create a brokerService extension

We also rely on a "one test class, one broker policy" in order to increase broker stability.


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

Branch: refs/heads/master
Commit: 6d7f60e95f2ebef75228e19ddaf05eff02c9179d
Parents: b78ac08
Author: benwa <bt...@linagora.com>
Authored: Fri Jan 19 10:12:00 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 19 10:13:56 2018 +0700

----------------------------------------------------------------------
 .../activemq/ActiveMQMailQueueBlobTest.java     | 43 +++------
 .../queue/activemq/ActiveMQMailQueueTest.java   | 43 ++-------
 server/queue/queue-jms/pom.xml                  |  4 +
 .../apache/james/queue/jms/BrokerExtension.java | 92 ++++++++++++++++++++
 .../james/queue/jms/JMSMailQueueTest.java       | 36 ++------
 5 files changed, 121 insertions(+), 97 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/6d7f60e9/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java
index 77d5655..06a20a5 100644
--- a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java
+++ b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java
@@ -25,11 +25,7 @@ import java.io.InputStream;
 import java.util.concurrent.ExecutorService;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
-import org.apache.activemq.broker.BrokerPlugin;
 import org.apache.activemq.broker.BrokerService;
-import org.apache.activemq.broker.region.policy.PolicyEntry;
-import org.apache.activemq.broker.region.policy.PolicyMap;
-import org.apache.activemq.plugin.StatisticsBrokerPlugin;
 import org.apache.commons.io.FileUtils;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.metrics.api.NoopMetricFactory;
@@ -39,66 +35,47 @@ import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.ManageableMailQueue;
 import org.apache.james.queue.api.PriorityManageableMailQueueContract;
 import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
+import org.apache.james.queue.jms.BrokerExtension;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
 
+@ExtendWith(BrokerExtension.class)
+@Tag(BrokerExtension.STATISTICS)
 public class ActiveMQMailQueueBlobTest implements DelayedManageableMailQueueContract, DelayedPriorityMailQueueContract, PriorityManageableMailQueueContract {
 
     static final String BASE_DIR = "file://target/james-test";
-    static final String QUEUE_NAME = "test";
     static final boolean USE_BLOB = true;
 
     ActiveMQMailQueue mailQueue;
-    BrokerService broker;
     MyFileSystem fileSystem;
 
     @BeforeEach
-    public void setUp() throws Exception {
+    public void setUp(BrokerService broker) throws Exception {
         fileSystem = new MyFileSystem();
-        broker = createBroker();
-        broker.start();
         ActiveMQConnectionFactory connectionFactory = createConnectionFactory();
         FileSystemBlobTransferPolicy policy = new FileSystemBlobTransferPolicy();
         policy.setFileSystem(fileSystem);
         policy.setDefaultUploadUrl(BASE_DIR);
         connectionFactory.setBlobTransferPolicy(policy);
+
         RawMailQueueItemDecoratorFactory mailQueueItemDecoratorFactory = new RawMailQueueItemDecoratorFactory();
         NoopMetricFactory metricFactory = new NoopMetricFactory();
-        mailQueue = new ActiveMQMailQueue(connectionFactory, mailQueueItemDecoratorFactory, QUEUE_NAME, USE_BLOB, metricFactory);
-
-    }
-
-    protected static BrokerService createBroker() throws Exception {
-        BrokerService broker = new BrokerService();
-        broker.setPersistent(false);
-        broker.setUseJmx(false);
-        broker.addConnector("tcp://127.0.0.1:61616");
-
-        // Enable priority support
-        PolicyMap pMap = new PolicyMap();
-        PolicyEntry entry = new PolicyEntry();
-        entry.setPrioritizedMessages(true);
-        entry.setQueue(QUEUE_NAME);
-        pMap.setPolicyEntries(ImmutableList.of(entry));
-        broker.setDestinationPolicy(pMap);
-        // Enable statistics
-        broker.setPlugins(new BrokerPlugin[]{new StatisticsBrokerPlugin()});
-        broker.setEnableStatistics(true);
-
-        return broker;
+        String queueName = BrokerExtension.generateRandomQueueName(broker);
+        mailQueue = new ActiveMQMailQueue(connectionFactory, mailQueueItemDecoratorFactory, queueName, USE_BLOB, metricFactory);
     }
 
     @AfterEach
     public void tearDown() throws Exception {
         fileSystem.destroy();
-        broker.stop();
+        mailQueue.dispose();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/6d7f60e9/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
index 4fc3926..457cdef 100644
--- a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
+++ b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
@@ -23,11 +23,7 @@ import java.util.concurrent.ExecutorService;
 import javax.jms.ConnectionFactory;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
-import org.apache.activemq.broker.BrokerPlugin;
 import org.apache.activemq.broker.BrokerService;
-import org.apache.activemq.broker.region.policy.PolicyEntry;
-import org.apache.activemq.broker.region.policy.PolicyMap;
-import org.apache.activemq.plugin.StatisticsBrokerPlugin;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.queue.api.DelayedManageableMailQueueContract;
 import org.apache.james.queue.api.DelayedPriorityMailQueueContract;
@@ -35,55 +31,34 @@ import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.ManageableMailQueue;
 import org.apache.james.queue.api.PriorityManageableMailQueueContract;
 import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
+import org.apache.james.queue.jms.BrokerExtension;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
-import com.google.common.collect.ImmutableList;
-
+@ExtendWith(BrokerExtension.class)
+@Tag(BrokerExtension.STATISTICS)
 public class ActiveMQMailQueueTest implements DelayedManageableMailQueueContract, DelayedPriorityMailQueueContract, PriorityManageableMailQueueContract {
 
-    static final String QUEUE_NAME = "test";
     static final boolean USE_BLOB = true;
 
     ActiveMQMailQueue mailQueue;
-    BrokerService broker;
 
     @BeforeEach
-    public void setUp() throws Exception {
-        broker = createBroker();
-        broker.start();
+    public void setUp(BrokerService broker) throws Exception {
         ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?create=false");
         RawMailQueueItemDecoratorFactory mailQueueItemDecoratorFactory = new RawMailQueueItemDecoratorFactory();
         NoopMetricFactory metricFactory = new NoopMetricFactory();
-        mailQueue = new ActiveMQMailQueue(connectionFactory, mailQueueItemDecoratorFactory, QUEUE_NAME, !USE_BLOB, metricFactory);
-
-    }
-
-    protected static BrokerService createBroker() throws Exception {
-        BrokerService broker = new BrokerService();
-        broker.setPersistent(false);
-        broker.setUseJmx(false);
-        broker.addConnector("tcp://127.0.0.1:61616");
-
-        // Enable priority support
-        PolicyMap pMap = new PolicyMap();
-        PolicyEntry entry = new PolicyEntry();
-        entry.setPrioritizedMessages(true);
-        entry.setQueue(QUEUE_NAME);
-        pMap.setPolicyEntries(ImmutableList.of(entry));
-        broker.setDestinationPolicy(pMap);
-        // Enable statistics
-        broker.setPlugins(new BrokerPlugin[]{new StatisticsBrokerPlugin()});
-        broker.setEnableStatistics(true);
-
-        return broker;
+        String queueName = BrokerExtension.generateRandomQueueName(broker);
+        mailQueue = new ActiveMQMailQueue(connectionFactory, mailQueueItemDecoratorFactory, queueName, !USE_BLOB, metricFactory);
     }
 
     @AfterEach
     public void tearDown() throws Exception {
-        broker.stop();
+        mailQueue.dispose();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/6d7f60e9/server/queue/queue-jms/pom.xml
----------------------------------------------------------------------
diff --git a/server/queue/queue-jms/pom.xml b/server/queue/queue-jms/pom.xml
index 7e99ce3..e0b5246 100644
--- a/server/queue/queue-jms/pom.xml
+++ b/server/queue/queue-jms/pom.xml
@@ -79,6 +79,10 @@
             <artifactId>javax.mail</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-text</artifactId>
+        </dependency>
+        <dependency>
             <groupId>javax.inject</groupId>
             <artifactId>javax.inject</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/6d7f60e9/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/BrokerExtension.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/BrokerExtension.java b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/BrokerExtension.java
new file mode 100644
index 0000000..99a6868
--- /dev/null
+++ b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/BrokerExtension.java
@@ -0,0 +1,92 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.queue.jms;
+
+import org.apache.activemq.broker.BrokerPlugin;
+import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.broker.region.policy.PolicyEntry;
+import org.apache.activemq.broker.region.policy.PolicyMap;
+import org.apache.activemq.plugin.StatisticsBrokerPlugin;
+import org.apache.commons.text.RandomStringGenerator;
+import org.junit.jupiter.api.extension.AfterAllCallback;
+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;
+import org.junit.jupiter.api.extension.ParameterResolver;
+
+import com.google.common.collect.ImmutableList;
+
+public class BrokerExtension  implements ParameterResolver, BeforeAllCallback, AfterAllCallback {
+
+    public static final String STATISTICS = "Statistics";
+
+    public static String generateRandomQueueName(BrokerService broker) {
+        String queueName = new RandomStringGenerator.Builder().withinRange('a', 'z').build().generate(10);
+        BrokerExtension.enablePrioritySupport(broker, queueName);
+        return queueName;
+    }
+
+    private static void enablePrioritySupport(BrokerService aBroker, String queueName) {
+        PolicyMap pMap = new PolicyMap();
+        PolicyEntry entry = new PolicyEntry();
+        entry.setPrioritizedMessages(true);
+        entry.setQueue(queueName);
+        pMap.setPolicyEntries(ImmutableList.of(entry));
+        aBroker.setDestinationPolicy(pMap);
+    }
+
+    private final BrokerService broker;
+
+    public BrokerExtension() throws Exception  {
+        broker = new BrokerService();
+        broker.setPersistent(false);
+        broker.setUseJmx(false);
+        broker.addConnector("tcp://127.0.0.1:61616");
+    }
+
+    @Override
+    public void beforeAll(ExtensionContext context) throws Exception {
+        if (context.getTags().contains(STATISTICS)) {
+            enableStatistics(broker);
+        }
+        broker.start();
+    }
+
+    @Override
+    public void afterAll(ExtensionContext context) throws Exception {
+        broker.stop();
+    }
+
+    private void enableStatistics(BrokerService broker) {
+        broker.setPlugins(new BrokerPlugin[]{new StatisticsBrokerPlugin()});
+        broker.setEnableStatistics(true);
+    }
+
+    @Override
+    public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
+        return (parameterContext.getParameter().getType() == BrokerService.class);
+    }
+
+    @Override
+    public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
+        return broker;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/6d7f60e9/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
index d173e6c..1c1fe17 100644
--- a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
+++ b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueTest.java
@@ -25,8 +25,6 @@ import javax.jms.ConnectionFactory;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.activemq.broker.BrokerService;
-import org.apache.activemq.broker.region.policy.PolicyEntry;
-import org.apache.activemq.broker.region.policy.PolicyMap;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.queue.api.DelayedManageableMailQueueContract;
 import org.apache.james.queue.api.DelayedPriorityMailQueueContract;
@@ -38,47 +36,25 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
-import com.google.common.collect.ImmutableList;
-
+@ExtendWith(BrokerExtension.class)
 public class JMSMailQueueTest implements DelayedManageableMailQueueContract, PriorityManageableMailQueueContract, DelayedPriorityMailQueueContract {
 
-    private final static String QUEUE_NAME = "test";
-
     private JMSMailQueue mailQueue;
 
-    private BrokerService broker;
-
     @BeforeEach
-    public void setUp() throws Exception {
-        broker = createBroker();
-        broker.start();
+    public void setUp(BrokerService broker) throws Exception {
         ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?create=false");
         RawMailQueueItemDecoratorFactory mailQueueItemDecoratorFactory = new RawMailQueueItemDecoratorFactory();
         NoopMetricFactory metricFactory = new NoopMetricFactory();
-        mailQueue = new JMSMailQueue(connectionFactory, mailQueueItemDecoratorFactory, QUEUE_NAME, metricFactory);
-    }
-
-    private BrokerService createBroker() throws Exception {
-        BrokerService aBroker = new BrokerService();
-        aBroker.setPersistent(false);
-        aBroker.setUseJmx(false);
-        aBroker.addConnector("tcp://127.0.0.1:61616");
-
-        // Enable priority support
-        PolicyMap pMap = new PolicyMap();
-        PolicyEntry entry = new PolicyEntry();
-        entry.setPrioritizedMessages(true);
-        entry.setQueue(QUEUE_NAME);
-        pMap.setPolicyEntries(ImmutableList.of(entry));
-        aBroker.setDestinationPolicy(pMap);
-
-        return aBroker;
+        String queueName = BrokerExtension.generateRandomQueueName(broker);
+        mailQueue = new JMSMailQueue(connectionFactory, mailQueueItemDecoratorFactory, queueName, metricFactory);
     }
 
     @AfterEach
     public void tearDown() throws Exception {
-        broker.stop();
+        mailQueue.dispose();
     }
 
     @Override


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