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