You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/10/30 11:54:52 UTC

svn commit: r1195144 - in /camel/trunk/components/camel-mail/src: main/java/org/apache/camel/component/mail/ test/java/org/apache/camel/component/mail/

Author: davsclaus
Date: Sun Oct 30 10:54:51 2011
New Revision: 1195144

URL: http://svn.apache.org/viewvc?rev=1195144&view=rev
Log:
CAMEL-4225: Added disconnect option to camel-mail.

Added:
    camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDisconnectTest.java
      - copied, changed from r1195125, camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java
Modified:
    camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
    camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java

Modified: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java?rev=1195144&r1=1195143&r2=1195144&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java (original)
+++ camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java Sun Oct 30 10:54:51 2011
@@ -62,6 +62,7 @@ public class MailConfiguration implement
     private String alternativeBodyHeader = MailConstants.MAIL_ALTERNATIVE_BODY;
     private boolean useInlineAttachments;
     private boolean ignoreUnsupportedCharset;
+    private boolean disconnect;
 
     public MailConfiguration() {
     }
@@ -462,4 +463,12 @@ public class MailConfiguration implement
     public void setIgnoreUnsupportedCharset(boolean ignoreUnsupportedCharset) {
         this.ignoreUnsupportedCharset = ignoreUnsupportedCharset;
     }
+
+    public boolean isDisconnect() {
+        return disconnect;
+    }
+
+    public void setDisconnect(boolean disconnect) {
+        this.disconnect = disconnect;
+    }
 }

Modified: camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java?rev=1195144&r1=1195143&r2=1195144&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java (original)
+++ camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java Sun Oct 30 10:54:51 2011
@@ -137,6 +137,19 @@ public class MailConsumer extends Schedu
             }
         }
 
+        // should we disconnect, the header can override the configuration
+        boolean disconnect = getEndpoint().getConfiguration().isDisconnect();
+        if (disconnect) {
+            LOG.debug("Disconnecting from {}", getEndpoint().getConfiguration().getMailStoreLogInformation());
+            try {
+                store.close();
+            } catch (Exception e) {
+                LOG.debug("Could not disconnect from {}: " + getEndpoint().getConfiguration().getMailStoreLogInformation(), e);
+            }
+            store = null;
+            folder = null;
+        }
+
         return polledMessages;
     }
 
@@ -356,7 +369,7 @@ public class MailConsumer extends Schedu
                 buffer.append(header.getName()).append("=").append(header.getValue()).append("\n");
             }
             if (buffer.length() > 0) {
-                LOG.debug("Generating UID from the following:\n" + buffer);
+                LOG.trace("Generating UID from the following:\n {}", buffer);
                 uid = UUID.nameUUIDFromBytes(buffer.toString().getBytes()).toString();
             }
         } catch (MessagingException e) {

Copied: camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDisconnectTest.java (from r1195125, camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDisconnectTest.java?p2=camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDisconnectTest.java&p1=camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java&r1=1195125&r2=1195144&rev=1195144&view=diff
==============================================================================
--- camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailBatchConsumerTest.java (original)
+++ camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailDisconnectTest.java Sun Oct 30 10:54:51 2011
@@ -16,79 +16,41 @@
  */
 package org.apache.camel.component.mail;
 
-import javax.mail.Folder;
-import javax.mail.Message;
-import javax.mail.Store;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
-import org.jvnet.mock_javamail.Mailbox;
-import org.springframework.mail.javamail.JavaMailSenderImpl;
 
 /**
  * Unit test for batch consumer.
  */
-public class MailBatchConsumerTest extends CamelTestSupport {
-
-    @Override
-    public void setUp() throws Exception {
-        prepareMailbox();
-        super.setUp();
-    }
+public class MailDisconnectTest extends CamelTestSupport {
 
     @Test
-    public void testBatchConsumer() throws Exception {
-        Mailbox mailbox = Mailbox.get("jones@localhost");
-        assertEquals(5, mailbox.size());
-
+    public void testDisconnect() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMessageCount(5);
-        mock.expectsAscending(body());
-        mock.message(0).property(Exchange.BATCH_INDEX).isEqualTo(0);
-        mock.message(1).property(Exchange.BATCH_INDEX).isEqualTo(1);
-        mock.message(2).property(Exchange.BATCH_INDEX).isEqualTo(2);
-        mock.message(3).property(Exchange.BATCH_INDEX).isEqualTo(3);
-        mock.message(4).property(Exchange.BATCH_INDEX).isEqualTo(4);
-        mock.message(0).property(Exchange.BATCH_COMPLETE).isEqualTo(false);
-        mock.message(1).property(Exchange.BATCH_COMPLETE).isEqualTo(false);
-        mock.message(2).property(Exchange.BATCH_COMPLETE).isEqualTo(false);
-        mock.message(3).property(Exchange.BATCH_COMPLETE).isEqualTo(false);
-        mock.message(3).property(Exchange.BATCH_COMPLETE).isEqualTo(false);
-        mock.message(4).property(Exchange.BATCH_COMPLETE).isEqualTo(true);
-        mock.expectedPropertyReceived(Exchange.BATCH_SIZE, 5);
 
-        assertMockEndpointsSatisfied();
-    }
+        // send 5 mails with some delay so we do multiple polls with disconnect between
+        template.sendBodyAndHeader("smtp://jones@localhost", "A Bla bla", "Subject", "Hello A");
+        template.sendBodyAndHeader("smtp://jones@localhost", "B Bla bla", "Subject", "Hello B");
+
+        Thread.sleep(500);
+        template.sendBodyAndHeader("smtp://jones@localhost", "C Bla bla", "Subject", "Hello C");
+
+        Thread.sleep(1500);
+        template.sendBodyAndHeader("smtp://jones@localhost", "D Bla bla", "Subject", "Hello D");
 
-    private void prepareMailbox() throws Exception {
-        // connect to mailbox
-        Mailbox.clearAll();
-        JavaMailSenderImpl sender = new JavaMailSenderImpl();
-        Store store = sender.getSession().getStore("pop3");
-        store.connect("localhost", 25, "jones", "secret");
-        Folder folder = store.getFolder("INBOX");
-        folder.open(Folder.READ_WRITE);
-        folder.expunge();
-
-        // inserts 5 new messages
-        Message[] messages = new Message[5];
-        for (int i = 0; i < 5; i++) {
-            messages[i] = new MimeMessage(sender.getSession());
-            messages[i].setText("Message " + i);
-        }
-        folder.appendMessages(messages);
-        folder.close(true);
+        Thread.sleep(1500);
+        template.sendBodyAndHeader("smtp://jones@localhost", "E Bla bla", "Subject", "Hello E");
+
+        assertMockEndpointsSatisfied();
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from("pop3://jones@localhost?password=secret&consumer.delay=5000"
-                    + "&delete=true").to("mock:result");
+                from("pop3://jones@localhost?password=secret&disconnect=true&delay=1000").to("mock:result");
             }
         };
     }