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

rombert pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-messaging-mail.git

commit c60f2f2526d3e1e4eaeb57a5c0f02f417141be63
Author: Oliver Lietz <[email protected]>
AuthorDate: Fri Apr 8 09:49:38 2016 +0000

    SLING-5644 Provide an messaging implementation based on Commons Email
    
    * adjust to latest Messaging API
    * make MailResult public
    * add test for failing transmission (authentication failure)
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1738226 
13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |  7 ++-
 .../messaging/mail/{internal => }/MailResult.java  | 25 ++------
 .../messaging/mail/internal/MailFailure.java       | 52 -----------------
 .../messaging/mail/internal/SimpleMailService.java | 68 +++++++---------------
 .../commons/messaging/mail/MailTestSupport.java    |  2 +
 .../mail/internal/SimpleMailServiceIT.java         | 46 +++++++++++----
 6 files changed, 68 insertions(+), 132 deletions(-)

diff --git a/pom.xml b/pom.xml
index 5f604e8..73b0583 100644
--- a/pom.xml
+++ b/pom.xml
@@ -143,6 +143,11 @@
       <version>1.4</version>
       <scope>provided</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.4</version>
+    </dependency>
     <!-- Apache Felix -->
     <dependency>
       <groupId>org.apache.felix</groupId>
@@ -160,7 +165,7 @@
     <dependency>
       <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.commons.threads</artifactId>
-      <version>3.2.6</version>
+      <version>3.2.7-SNAPSHOT</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
diff --git 
a/src/main/java/org/apache/sling/commons/messaging/mail/internal/MailResult.java
 b/src/main/java/org/apache/sling/commons/messaging/mail/MailResult.java
similarity index 63%
rename from 
src/main/java/org/apache/sling/commons/messaging/mail/internal/MailResult.java
rename to src/main/java/org/apache/sling/commons/messaging/mail/MailResult.java
index 072b1b5..c6c1b05 100644
--- 
a/src/main/java/org/apache/sling/commons/messaging/mail/internal/MailResult.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/MailResult.java
@@ -16,41 +16,26 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.commons.messaging.mail.internal;
+package org.apache.sling.commons.messaging.mail;
 
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.apache.sling.commons.messaging.Failure;
 import org.apache.sling.commons.messaging.Result;
+import org.osgi.annotation.versioning.ConsumerType;
 
+@ConsumerType
 public class MailResult implements Result<byte[]> {
 
     private final byte[] message;
 
-    private final Collection<Failure> failures;
-
-    public MailResult(final byte[] message, final Failure... failures) {
+    public MailResult(final byte[] message) {
         this.message = message;
-        this.failures = Arrays.asList(failures);
     }
 
     /**
-     * @return the message in <a href="https://tools.ietf.org/html/rfc822";>RFC 
822</a> format
+     * @return the sent message in <a 
href="https://tools.ietf.org/html/rfc822";>RFC 822</a> format
      */
     @Override
     public byte[] getMessage() {
         return message;
     }
 
-    @Override
-    public boolean hasFailures() {
-        return !(failures == null || failures.isEmpty());
-    }
-
-    @Override
-    public Collection<Failure> getFailures() {
-        return failures;
-    }
-
 }
diff --git 
a/src/main/java/org/apache/sling/commons/messaging/mail/internal/MailFailure.java
 
b/src/main/java/org/apache/sling/commons/messaging/mail/internal/MailFailure.java
deleted file mode 100644
index ecb837e..0000000
--- 
a/src/main/java/org/apache/sling/commons/messaging/mail/internal/MailFailure.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.sling.commons.messaging.mail.internal;
-
-import org.apache.sling.commons.messaging.Failure;
-
-public class MailFailure implements Failure {
-
-    private final String code;
-
-    private final String type;
-
-    private final String message;
-
-    public MailFailure(final String code, final String type, final String 
message) {
-        this.code = code;
-        this.type = type;
-        this.message = message;
-    }
-
-    @Override
-    public String getCode() {
-        return code;
-    }
-
-    @Override
-    public String getType() {
-        return type;
-    }
-
-    @Override
-    public String getMessage() {
-        return message;
-    }
-
-}
diff --git 
a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java
 
b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java
index b79eef1..19d003f 100644
--- 
a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java
+++ 
b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java
@@ -18,16 +18,21 @@
  */
 package org.apache.sling.commons.messaging.mail.internal;
 
+import java.io.IOException;
 import java.util.Collections;
 import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionException;
+
+import javax.annotation.Nonnull;
+import javax.mail.MessagingException;
 
 import org.apache.commons.mail.Email;
-import org.apache.sling.commons.messaging.Failure;
+import org.apache.commons.mail.EmailException;
 import org.apache.sling.commons.messaging.MessageService;
 import org.apache.sling.commons.messaging.Result;
 import org.apache.sling.commons.messaging.mail.MailBuilder;
+import org.apache.sling.commons.messaging.mail.MailResult;
 import org.apache.sling.commons.messaging.mail.MailUtil;
 import org.apache.sling.commons.threads.ThreadPool;
 import org.apache.sling.commons.threads.ThreadPoolManager;
@@ -103,57 +108,24 @@ public class SimpleMailService implements MessageService {
     }
 
     @Override
-    public Future<Result> send(final String message, final String recipient) {
+    public CompletableFuture<Result> send(@Nonnull final String message, 
@Nonnull final String recipient) {
         return send(message, recipient, Collections.emptyMap());
     }
 
     @Override
-    public Future<Result> send(final String message, final String recipient, 
final Map data) {
-        final Mailing mailing = new Mailing(message, recipient, data, 
mailBuilder);
-        return threadPool.submit(mailing);
+    public CompletableFuture<Result> send(@Nonnull final String message, 
@Nonnull final String recipient, @Nonnull final Map data) {
+        return CompletableFuture.supplyAsync(() -> sendMail(message, 
recipient, data, mailBuilder), threadPool);
     }
 
-    private class Mailing implements Callable<Result> {
-
-        private final String message;
-
-        private final String recipient;
-
-        private final Map data;
-
-        private MailBuilder mailBuilder;
-
-        Mailing(final String message, final String recipient, final Map data, 
final MailBuilder mailBuilder) {
-            this.message = message;
-            this.recipient = recipient;
-            this.data = data;
-            this.mailBuilder = mailBuilder;
-        }
-
-        @Override
-        public Result call() {
-            Email mail = null;
-            // build mail
-            try {
-                mail = mailBuilder.build(message, recipient, data);
-            } catch (Exception e) {
-                logger.error("building mail failed: {}", e.getMessage(), e);
-                final Failure failure = new MailFailure(null, null, 
e.getMessage());
-                return new MailResult(null, failure);
-            } finally {
-                mailBuilder = null;
-            }
-            // send mail
-            try {
-                final String messageId = mail.send();
-                logger.info("mail '{}' sent", messageId);
-                final byte[] bytes = MailUtil.toByteArray(mail);
-                return new MailResult(bytes);
-            } catch (Exception e) {
-                logger.error("sending mail failed: {}", e.getMessage(), e);
-                final Failure failure = new MailFailure(null, null, 
e.getMessage());
-                return new MailResult(null, failure);
-            }
+    private MailResult sendMail(final String message, final String recipient, 
final Map data, final MailBuilder mailBuilder) {
+        try {
+            final Email email = mailBuilder.build(message, recipient, data);
+            final String messageId = email.send();
+            logger.info("mail '{}' sent", messageId);
+            final byte[] bytes = MailUtil.toByteArray(email);
+            return new MailResult(bytes);
+        } catch (EmailException | MessagingException | IOException e) {
+            throw new CompletionException(e);
         }
     }
 
diff --git 
a/src/test/java/org/apache/sling/commons/messaging/mail/MailTestSupport.java 
b/src/test/java/org/apache/sling/commons/messaging/mail/MailTestSupport.java
index 6ba0f9f..a1edb6c 100644
--- a/src/test/java/org/apache/sling/commons/messaging/mail/MailTestSupport.java
+++ b/src/test/java/org/apache/sling/commons/messaging/mail/MailTestSupport.java
@@ -66,6 +66,7 @@ public abstract class MailTestSupport {
         final org.osgi.service.cm.Configuration configuration = 
configurationAdmin.createFactoryConfiguration(factoryPid);
         configuration.setBundleLocation(null);
         configuration.update(properties);
+        Thread.sleep(1000);
         logger.debug("configuration: {}", 
configurationAdmin.getConfiguration(factoryPid));
     }
 
@@ -85,6 +86,7 @@ public abstract class MailTestSupport {
                 
mavenBundle().groupId("com.sun.mail").artifactId("javax.mail").versionAsInProject(),
                 
mavenBundle().groupId("javax.mail").artifactId("javax.mail-api").versionAsInProject(),
                 
mavenBundle().groupId("org.apache.commons").artifactId("commons-email").versionAsInProject(),
+                
mavenBundle().groupId("org.apache.commons").artifactId("commons-lang3").versionAsInProject(),
                 
mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.messaging").versionAsInProject(),
                 
mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.threads").versionAsInProject(),
                 bundle("reference:file:" + filename)
diff --git 
a/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailServiceIT.java
 
b/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailServiceIT.java
index 85fd000..9a8983c 100644
--- 
a/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailServiceIT.java
+++ 
b/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailServiceIT.java
@@ -18,14 +18,19 @@
  */
 package org.apache.sling.commons.messaging.mail.internal;
 
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.Dictionary;
 import java.util.Map;
-import java.util.concurrent.Future;
+import java.util.concurrent.CompletableFuture;
 
+import javax.mail.AuthenticationFailedException;
+
+import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.sling.commons.messaging.MessageService;
 import org.apache.sling.commons.messaging.Result;
 import org.apache.sling.commons.messaging.mail.MailBuilderConfigurations;
+import org.apache.sling.commons.messaging.mail.MailResult;
 import org.apache.sling.commons.messaging.mail.MailTestSupport;
 import org.junit.After;
 import org.junit.Before;
@@ -38,7 +43,7 @@ import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
 import org.ops4j.pax.exam.spi.reactors.PerMethod;
 import org.subethamail.wiser.Wiser;
 
-import static junit.framework.TestCase.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 @RunWith(PaxExam.class)
 @ExamReactorStrategy(PerMethod.class)
@@ -46,6 +51,8 @@ public class SimpleMailServiceIT extends MailTestSupport {
 
     protected Wiser wiser;
 
+    public static final String FACTORY_PID = 
"org.apache.sling.commons.messaging.mail.internal.SimpleMailBuilder";
+
     @Configuration
     public Option[] configuration() {
         return baseConfiguration();
@@ -56,9 +63,6 @@ public class SimpleMailServiceIT extends MailTestSupport {
         final int smtpPort = findFreePort();
         wiser = new Wiser(smtpPort);
         wiser.start();
-        final String factoryPid = 
"org.apache.sling.commons.messaging.mail.internal.SimpleMailBuilder";
-        final Dictionary<String, Object> properties = 
MailBuilderConfigurations.full(smtpPort);
-        createFactoryConfiguration(factoryPid, properties);
     }
 
     @After
@@ -69,20 +73,40 @@ public class SimpleMailServiceIT extends MailTestSupport {
 
     @Test
     public void send() throws Exception {
+        final Dictionary<String, Object> properties = 
MailBuilderConfigurations.full(wiser.getServer().getPort());
+        createFactoryConfiguration(FACTORY_PID, properties);
         final MessageService messageService = getService(MessageService.class);
-        final Future<Result> future = messageService.send("simple test 
message", "[email protected]");
-        final Result result = future.get();
-        assertFalse(result.hasFailures());
+        final CompletableFuture<Result> future = messageService.send("simple 
test message", "[email protected]");
+        final MailResult result = (MailResult) future.get();
+        final String message = new String(result.getMessage(), 
StandardCharsets.UTF_8);
+        logger.info("message: {}", message); // TODO assert
     }
 
     @Test
     public void sendWithData() throws Exception {
+        final Dictionary<String, Object> properties = 
MailBuilderConfigurations.full(wiser.getServer().getPort());
+        createFactoryConfiguration(FACTORY_PID, properties);
         final MessageService messageService = getService(MessageService.class);
         final Map configuration = Collections.singletonMap("mail.subject", 
"Testing the Simple Mail Service with a custom subject");
         final Map data = Collections.singletonMap("mail", configuration);
-        final Future<Result> future = messageService.send("simple test 
message", "[email protected]", data);
-        final Result result = future.get();
-        assertFalse(result.hasFailures());
+        final CompletableFuture<Result> future = messageService.send("simple 
test message", "[email protected]", data);
+        final MailResult result = (MailResult) future.get();
+        final String message = new String(result.getMessage(), 
StandardCharsets.UTF_8);
+        logger.info("message: {}", message); // TODO assert
+    }
+
+    @Test
+    public void sendWithoutAuthentication() throws Exception {
+        final Dictionary<String, Object> properties = 
MailBuilderConfigurations.minimal();
+        createFactoryConfiguration(FACTORY_PID, properties);
+        final MessageService messageService = getService(MessageService.class);
+        final CompletableFuture<Result> future = messageService.send("simple 
test message", "[email protected]");
+        try {
+            future.get();
+        } catch (Exception e) {
+            logger.info(e.getMessage(), e);
+            assertTrue(ExceptionUtils.getRootCause(e) instanceof 
AuthenticationFailedException);
+        }
     }
 
 }

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to