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]