Author: bago
Date: Thu Apr 20 10:19:52 2006
New Revision: 395645

URL: http://svn.apache.org/viewcvs?rev=395645&view=rev
Log:
Test and fix for critical bug (JAMES-482) in linear processor for processors 
other than "root" and multiple matchers/mailets.
Thanks to Norman Maurer for reporting it and for the fix.

Modified:
    james/server/trunk/src/java/org/apache/james/transport/LinearProcessor.java
    
james/server/trunk/src/test/org/apache/james/test/mock/james/MockMailRepository.java
    
james/server/trunk/src/test/org/apache/james/transport/LinearProcessorTest.java

Modified: 
james/server/trunk/src/java/org/apache/james/transport/LinearProcessor.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/transport/LinearProcessor.java?rev=395645&r1=395644&r2=395645&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/transport/LinearProcessor.java 
(original)
+++ james/server/trunk/src/java/org/apache/james/transport/LinearProcessor.java 
Thu Apr 20 10:19:52 2006
@@ -395,6 +395,7 @@
                 // and store it in the next spot
                 Mail notMail = new MailImpl(mail,newName(mail));
                 notMail.setRecipients(notRecipients);
+                notMail.setState(mail.getState());
                 unprocessed[i + 1].add(notMail);
                 //We have to set the reduce possible recipients on the old 
message
                 mail.setRecipients(recipients);

Modified: 
james/server/trunk/src/test/org/apache/james/test/mock/james/MockMailRepository.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/test/mock/james/MockMailRepository.java?rev=395645&r1=395644&r2=395645&view=diff
==============================================================================
--- 
james/server/trunk/src/test/org/apache/james/test/mock/james/MockMailRepository.java
 (original)
+++ 
james/server/trunk/src/test/org/apache/james/test/mock/james/MockMailRepository.java
 Thu Apr 20 10:19:52 2006
@@ -33,7 +33,9 @@
     private HashMap messages = new HashMap();
 
     public void store(Mail mc) throws MessagingException {
-        this.messages.put(mc.getName(),new MailImpl(mc,mc.getName()));
+        MailImpl m = new MailImpl(mc,mc.getName());
+        m.setState(mc.getState());
+        this.messages.put(mc.getName(),m);
     }
 
     public Iterator list() throws MessagingException {
@@ -41,7 +43,9 @@
     }
 
     public Mail retrieve(String key) throws MessagingException {
-        return new MailImpl((Mail) messages.get(key),key);  // trivial 
implementation
+        Mail m2 = new MailImpl((Mail) messages.get(key),key);
+        m2.setState(((Mail) messages.get(key)).getState());
+        return m2;  // trivial implementation
     }
 
     public void remove(Mail mail) throws MessagingException {

Modified: 
james/server/trunk/src/test/org/apache/james/transport/LinearProcessorTest.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/transport/LinearProcessorTest.java?rev=395645&r1=395644&r2=395645&view=diff
==============================================================================
--- 
james/server/trunk/src/test/org/apache/james/transport/LinearProcessorTest.java 
(original)
+++ 
james/server/trunk/src/test/org/apache/james/transport/LinearProcessorTest.java 
Thu Apr 20 10:19:52 2006
@@ -40,7 +40,6 @@
 
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
-import javax.mail.internet.ParseException;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -70,7 +69,9 @@
         public ArrayList receivedMails = new ArrayList();
 
         public void service(Mail mail) throws MessagingException {
-            receivedMails.add(mail);
+            Mail m2 = new MailImpl(mail,mail.getName());
+            m2.setState(mail.getState());
+            receivedMails.add(m2);
         }
         
     }
@@ -110,8 +111,13 @@
   }
 
     private class DummyMatcherConfig implements MatcherConfig {
+        private String condition;
+
+        public DummyMatcherConfig(String config) {
+            this.condition = config;
+        }
         public String getCondition() {
-            return "";
+            return condition;
         }
         
         public MailetContext getMailetContext() {
@@ -123,7 +129,30 @@
         }
     }
     
-    public void testCopyOnWrite() throws ParseException, IOException {
+    public void testCopyOnWrite() throws IOException, MessagingException {
+        t.setSpool(new MockSpoolRepository());
+        Matcher recipientIs = new RecipientIs();
+        recipientIs.init(new DummyMatcherConfig("[EMAIL PROTECTED]"));
+        
+        Matcher all = new All();
+        all.init(new DummyMatcherConfig(""));
+        
+        Mailet changeBody = new MyMailet();
+        Mailet changeBody2 = new MyMailet();
+
+        changeBody.init(mockMailetConfig);
+        changeBody2.init(mockMailetConfig);
+        
+        Mailet dumpSystemErr = new DumpSystemErr();
+        changeBody.init(mockMailetConfig);
+        
+        checkerMailet = new CheckerMailet();
+        t.add(recipientIs,changeBody);
+        t.add(all,changeBody);
+        t.add(all,dumpSystemErr);
+        t.add(all,checkerMailet);
+        t.closeProcessorLists();
+
         Collection recipients = new ArrayList();
         recipients.add(new MailAddress("rec1","domain.com"));
         recipients.add(new MailAddress("rec2","domain.com"));
@@ -143,40 +172,57 @@
         }
     }
 
-    public void setUp() throws Exception {
-        super.setUp();
-        t = new LinearProcessor();
-        Logger l = new ConsoleLogger();
-        t.enableLogging(l);
-        t.initialize();
-        t.setSpool(new MockSpoolRepository());
-        Matcher recipientIs = new RecipientIs();
-        recipientIs.init(new DummyMatcherConfig() {
+    public void testStateChange() throws IOException, MessagingException {
+        t.setSpool(new MockSpoolRepository() {
 
-            public String getCondition() {
-                return "[EMAIL PROTECTED]";
+            public void store(Mail mc) throws MessagingException {
+                assertEquals("MYSTATE",mc.getState());
+                System.err.println("STORE: "+mc.getName()+" state: 
"+mc.getState());
+                super.store(mc);
             }
             
+            
         });
+        Matcher recipientIs = new RecipientIs();
+        recipientIs.init(new DummyMatcherConfig("[EMAIL PROTECTED]"));
         
         Matcher all = new All();
-        all.init(new DummyMatcherConfig());
-        
-        Mailet changeBody = new MyMailet();
-        Mailet changeBody2 = new MyMailet();
-
-        changeBody.init(mockMailetConfig);
-        changeBody2.init(mockMailetConfig);
+        all.init(new DummyMatcherConfig(""));
         
         Mailet dumpSystemErr = new DumpSystemErr();
-        changeBody.init(mockMailetConfig);
         
         checkerMailet = new CheckerMailet();
-        t.add(recipientIs,changeBody);
-        t.add(all,changeBody);
+        t.add(recipientIs,dumpSystemErr);
         t.add(all,dumpSystemErr);
         t.add(all,checkerMailet);
         t.closeProcessorLists();
+
+        Collection recipients = new ArrayList();
+        recipients.add(new MailAddress("rec1","domain.com"));
+        recipients.add(new MailAddress("rec2","domain.com"));
+        try {
+            MailImpl m = new MailImpl("mail1",new 
MailAddress("sender","domain.com"),recipients,mw);
+            m.setState("MYSTATE");
+            t.service(m);
+            ArrayList a = checkerMailet.receivedMails;
+            assertEquals(2,a.size());
+            MimeMessage m1 = ((Mail) a.get(0)).getMessage();
+            MimeMessage m2 = ((Mail) a.get(1)).getMessage();
+            assertNotSame(m1,m2);
+            assertEquals("MYSTATE",((Mail) a.get(0)).getState());
+            assertEquals("MYSTATE",((Mail) a.get(1)).getState());
+        } catch (MessagingException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    public void setUp() throws Exception {
+        super.setUp();
+        t = new LinearProcessor();
+        Logger l = new ConsoleLogger();
+        t.enableLogging(l);
+        t.initialize();
         
     }
     



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to