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 no...@apache.org on 2010/12/24 13:01:24 UTC

svn commit: r1052493 - in /james/server/trunk/mailetcontainer-library/src: main/java/org/apache/james/mailetcontainer/lib/ test/java/org/apache/james/mailetcontainer/lib/ test/java/org/apache/james/mailetcontainer/lib/mock/

Author: norman
Date: Fri Dec 24 12:01:23 2010
New Revision: 1052493

URL: http://svn.apache.org/viewvc?rev=1052493&view=rev
Log:
AbstractStateCompositeProcessor should not try to loop by itself. The Mail should get send again to the MailetContainer by the "child" processor if the state is not GHOST.

Modified:
    james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessor.java
    james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java
    james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java
    james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/mock/MockMailetContext.java

Modified: james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessor.java?rev=1052493&r1=1052492&r2=1052493&view=diff
==============================================================================
--- james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessor.java (original)
+++ james/server/trunk/mailetcontainer-library/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessor.java Fri Dec 24 12:01:23 2010
@@ -105,13 +105,17 @@ public abstract class AbstractStateCompo
             try {
                 processor.service(mail);
                 
+                if (Mail.GHOST.equals(mail.getState())) {
+                    LifecycleUtil.dispose(mail);
+                }
+                /*
                 // check the mail needs further processing
                 if (Mail.GHOST.equalsIgnoreCase(mail.getState()) == false) {
                     service(mail);
                 } else {
                     LifecycleUtil.dispose(mail);
                 }
-                
+*/                
             } catch (MessagingException e) {
                 ex = e;
                 throw e;

Modified: james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java?rev=1052493&r1=1052492&r2=1052493&view=diff
==============================================================================
--- james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java (original)
+++ james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java Fri Dec 24 12:01:23 2010
@@ -20,14 +20,12 @@ package org.apache.james.mailetcontainer
 
 import java.io.ByteArrayInputStream;
 import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.mail.MessagingException;
 
+import junit.framework.TestCase;
+
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.commons.configuration.HierarchicalConfiguration;
@@ -37,32 +35,21 @@ import org.apache.james.mailetcontainer.
 import org.apache.james.mailetcontainer.lib.mock.MockMailProcessor;
 import org.apache.mailet.Mail;
 
-import junit.framework.TestCase;
-
 public abstract class AbstractStateCompositeProcessorTest extends TestCase{
 
     
     public void testChooseRightProcessor() throws Exception {
-
-        Map<String,String> configMap = new HashMap<String, String>();
-        configMap.put("root", "test");
-        configMap.put("test", "invalid");
-        configMap.put("error", "invalid");
-        
-        final AtomicInteger count = new AtomicInteger(0);
         AbstractStateCompositeProcessor processor = new AbstractStateCompositeProcessor() {
             
             @Override
             protected MailProcessor createMailProcessor(final String state, HierarchicalConfiguration config) throws Exception {
-                String newstate = config.getString("[@newstate]");
-                return new MockMailProcessor(newstate) {
+                return new MockMailProcessor("") {
 
                     @Override
                     public void service(Mail mail) throws MessagingException {
                         // check if the right processor was selected depending on the state
                         assertEquals(state, mail.getState());
                         super.service(mail);
-                        count.incrementAndGet();
                     }
                     
                 };
@@ -71,15 +58,32 @@ public abstract class AbstractStateCompo
         SimpleLog log = new SimpleLog("MockLog");
         log.setLevel(SimpleLog.LOG_LEVEL_DEBUG);
         processor.setLog(log);
-        processor.configure(createMockConfig(configMap));
+        processor.configure(createConfig(Arrays.asList("root","error","test")));
         processor.init();
         
         try {
-            processor.service(new MailImpl());
-            fail("Should have failed because of an not configured processor");
-        } catch (MessagingException ex) {
-            // we should have gone throw 2 processors
-            assertEquals(2, count.get());
+            Mail mail1 = new MailImpl();
+            mail1.setState(Mail.DEFAULT);
+            Mail mail2 = new MailImpl();
+            mail2.setState(Mail.ERROR);
+
+            Mail mail3 = new MailImpl();
+            mail3.setState("test");
+
+            Mail mail4 = new MailImpl();
+            mail4.setState("invalid");
+            
+            processor.service(mail1);
+            processor.service(mail2);
+            processor.service(mail3);
+            
+            try {
+                processor.service(mail4);
+                fail("should fail because of no mapping to a processor for this state");
+            } catch (MessagingException e) {
+                
+            }
+            
         } finally {
             processor.dispose();
         }
@@ -152,25 +156,4 @@ public abstract class AbstractStateCompo
         return builder;
     }
     
-    private HierarchicalConfiguration createMockConfig(Map<String,String> states) throws ConfigurationException {
-
-        StringBuilder sb = new StringBuilder();
-        sb.append("<?xml version=\"1.0\"?>");
-        sb.append("<processors>");
-        Iterator<String> keys = states.keySet().iterator();
-        while(keys.hasNext()) {
-            String state = keys.next();
-            String newstate = states.get(state);
-            sb.append("<processor state=\"");
-            sb.append(state);
-            sb.append("\" newstate=\"");
-            sb.append(newstate);
-            sb.append("\"/>");
-        }
-        sb.append("</processors>");
-
-        DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
-        builder.load(new ByteArrayInputStream(sb.toString().getBytes()));
-        return builder;
-    }
 }

Modified: james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java?rev=1052493&r1=1052492&r2=1052493&view=diff
==============================================================================
--- james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java (original)
+++ james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java Fri Dec 24 12:01:23 2010
@@ -20,12 +20,15 @@
 package org.apache.james.mailetcontainer.lib;
 
 import java.io.ByteArrayInputStream;
+import java.util.Arrays;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.core.MailImpl;
 import org.apache.james.mailetcontainer.lib.mock.MockMailet;
 import org.apache.james.mailetcontainer.lib.mock.MockMatcher;
+import org.apache.mailet.MailAddress;
 
 import junit.framework.TestCase;
 
@@ -48,4 +51,14 @@ public abstract class AbstractStateMaile
         builder.load(new ByteArrayInputStream(sb.toString().getBytes()));
         return builder;
     }
+    
+    public void testRouting() throws ConfigurationException, Exception {
+        AbstractStateMailetProcessor processor = createProcessor(createConfig());
+        
+        MailImpl mail = new MailImpl();
+        mail.setSender(new MailAddress("test@localhost"));
+        mail.setRecipients(Arrays.asList(new MailAddress("test@localhost"), new MailAddress("test2@localhost")));
+        
+        processor.service(mail);
+    }
 }

Modified: james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/mock/MockMailetContext.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/mock/MockMailetContext.java?rev=1052493&r1=1052492&r2=1052493&view=diff
==============================================================================
--- james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/mock/MockMailetContext.java (original)
+++ james/server/trunk/mailetcontainer-library/src/test/java/org/apache/james/mailetcontainer/lib/mock/MockMailetContext.java Fri Dec 24 12:01:23 2010
@@ -38,6 +38,7 @@ import org.apache.mailet.MailetContext;
 public class MockMailetContext implements MailetContext{
 
     private Map<String, Object> attributes = new HashMap<String, Object>();
+    private List<Mail> mails = new ArrayList<Mail>();
     
     public void bounce(Mail arg0, String arg1) throws MessagingException {
         throw new UnsupportedOperationException("Not implemented");
@@ -134,9 +135,8 @@ public class MockMailetContext implement
         
     }
 
-    public void sendMail(Mail arg0) throws MessagingException {
-        throw new UnsupportedOperationException("Not implemented");
-        
+    public void sendMail(Mail mail) throws MessagingException {
+        mails.add(mail);        
     }
 
     public void sendMail(MailAddress arg0, Collection arg1, MimeMessage arg2) throws MessagingException {
@@ -157,4 +157,7 @@ public class MockMailetContext implement
         throw new UnsupportedOperationException("Not implemented");
     }
 
+    public List<Mail> getSentMails() {
+        return mails;
+    }
 }



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