Author: bago Date: Sat Sep 16 11:21:47 2006 New Revision: 446908 URL: http://svn.apache.org/viewvc?view=rev&rev=446908 Log: Minor changes to ToMultiRepository and UsersRepositoryAliasingForwarding for better error reporting and to avoid lookup of not needed services. Refactored MockMailServer to use an InMemorySpoolRepository for its sentMails services. Created a LocalDeliveryTest
Added: james/server/trunk/src/test/org/apache/james/transport/mailets/LocalDeliveryTest.java (with props) Modified: james/server/trunk/src/java/org/apache/james/transport/mailets/ToMultiRepository.java james/server/trunk/src/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java james/server/trunk/src/test/org/apache/james/test/mock/james/InMemorySpoolRepository.java james/server/trunk/src/test/org/apache/james/test/mock/james/MockMailServer.java james/server/trunk/src/test/org/apache/james/test/mock/mailet/MockMailContext.java james/server/trunk/src/test/org/apache/james/userrepository/MockUsersRepository.java Modified: james/server/trunk/src/java/org/apache/james/transport/mailets/ToMultiRepository.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/transport/mailets/ToMultiRepository.java?view=diff&rev=446908&r1=446907&r2=446908 ============================================================================== --- james/server/trunk/src/java/org/apache/james/transport/mailets/ToMultiRepository.java (original) +++ james/server/trunk/src/java/org/apache/james/transport/mailets/ToMultiRepository.java Sat Sep 16 11:21:47 2006 @@ -23,7 +23,6 @@ import org.apache.avalon.cornerstone.services.store.Store; import org.apache.avalon.framework.configuration.DefaultConfiguration; -import org.apache.avalon.framework.container.ContainerUtil; import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceManager; import org.apache.james.Constants; @@ -31,16 +30,15 @@ import org.apache.james.core.MailImpl; import org.apache.james.services.MailRepository; import org.apache.james.services.MailServer; -import org.apache.mailet.RFC2822Headers; - import org.apache.mailet.GenericMailet; import org.apache.mailet.Mail; import org.apache.mailet.MailAddress; +import org.apache.mailet.RFC2822Headers; import javax.mail.Header; import javax.mail.MessagingException; -import javax.mail.internet.MimeMessage; import javax.mail.internet.InternetHeaders; +import javax.mail.internet.MimeMessage; import java.util.Collection; import java.util.Enumeration; @@ -260,15 +258,6 @@ try { // Instantiate the a MailRepository for outgoing mails - mailServer = (MailServer) compMgr.lookup(MailServer.ROLE); - } catch (ServiceException cnfe) { - log("Failed to retrieve MailServer component:" + cnfe.getMessage()); - } catch (Exception e) { - log("Failed to retrieve MailServer component:" + e.getMessage()); - } - - try { - // Instantiate the a MailRepository for outgoing mails store = (Store) compMgr.lookup(Store.ROLE); } catch (ServiceException cnfe) { log("Failed to retrieve Store component:" + cnfe.getMessage()); @@ -281,6 +270,17 @@ repositoryType = getInitParameter("repositoryType"); if (repositoryType == null) repositoryType = "MAIL"; + } else { + + try { + // Instantiate the a MailRepository for outgoing mails + mailServer = (MailServer) compMgr.lookup(MailServer.ROLE); + } catch (ServiceException cnfe) { + log("Failed to retrieve MailServer component:" + cnfe.getMessage()); + } catch (Exception e) { + log("Failed to retrieve MailServer component:" + e.getMessage()); + } + } deliveryHeader = getInitParameter("addDeliveryHeader"); Modified: james/server/trunk/src/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java?view=diff&rev=446908&r1=446907&r2=446908 ============================================================================== --- james/server/trunk/src/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java (original) +++ james/server/trunk/src/java/org/apache/james/transport/mailets/UsersRepositoryAliasingForwarding.java Sat Sep 16 11:21:47 2006 @@ -28,11 +28,10 @@ import org.apache.james.services.User; import org.apache.james.services.UsersRepository; import org.apache.james.services.UsersStore; -import org.apache.mailet.RFC2822Headers; - import org.apache.mailet.GenericMailet; import org.apache.mailet.Mail; import org.apache.mailet.MailAddress; +import org.apache.mailet.RFC2822Headers; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; @@ -247,11 +246,7 @@ ServiceManager compMgr = (ServiceManager) getMailetContext() .getAttribute(Constants.AVALON_COMPONENT_MANAGER); - UsersStore usersStore; try { - usersStore = (UsersStore) compMgr.lookup(UsersStore.ROLE); - - enableAliases = new Boolean(getInitParameter("enableAliases", getMailetContext().getAttribute(Constants.DEFAULT_ENABLE_ALIASES).toString() )).booleanValue(); @@ -272,6 +267,7 @@ + e.getMessage()); } } else { + UsersStore usersStore = (UsersStore) compMgr.lookup(UsersStore.ROLE); usersRepository = usersStore.getRepository(userRep); } Modified: james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java?view=diff&rev=446908&r1=446907&r2=446908 ============================================================================== --- james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java (original) +++ james/server/trunk/src/test/org/apache/james/smtpserver/SMTPServerTest.java Sat Sep 16 11:21:47 2006 @@ -45,6 +45,7 @@ import org.apache.james.userrepository.MockUsersRepository; import org.apache.james.util.Base64; import org.apache.james.util.connection.SimpleConnectionManager; +import org.apache.mailet.Mail; import org.apache.mailet.MailAddress; import javax.mail.MessagingException; @@ -151,20 +152,20 @@ } public void verifyLastMail(String sender, String recipient, MimeMessage msg) throws IOException, MessagingException { - Object[] mailData = m_mailServer.getLastMail(); + Mail mailData = m_mailServer.getLastMail(); assertNotNull("mail received by mail server", mailData); if (sender == null && recipient == null && msg == null) fail("no verification can be done with all arguments null"); - if (sender != null) assertEquals("sender verfication", sender, ((MailAddress)mailData[0]).toString()); - if (recipient != null) assertTrue("recipient verfication", ((Collection) mailData[1]).contains(new MailAddress(recipient))); + if (sender != null) assertEquals("sender verfication", sender, ((MailAddress)mailData.getSender()).toString()); + if (recipient != null) assertTrue("recipient verfication", ((Collection) mailData.getRecipients()).contains(new MailAddress(recipient))); if (msg != null) { ByteArrayOutputStream bo1 = new ByteArrayOutputStream(); msg.writeTo(bo1); ByteArrayOutputStream bo2 = new ByteArrayOutputStream(); - ((MimeMessage) mailData[2]).writeTo(bo2); + ((MimeMessage) mailData.getMessage()).writeTo(bo2); assertEquals(bo1.toString(),bo2.toString()); - assertEquals("message verification", msg, ((MimeMessage) mailData[2])); + assertEquals("message verification", msg, ((MimeMessage) mailData.getMessage())); } } @@ -266,7 +267,7 @@ // not cloning the message (added a MimeMessageCopyOnWriteProxy there) System.gc(); - int size = ((MimeMessage) m_mailServer.getLastMail()[2]).getSize(); + int size = ((MimeMessage) m_mailServer.getLastMail().getMessage()).getSize(); assertEquals(size, 2); } @@ -1083,7 +1084,7 @@ verifyLastMail(sender, recipient, null); - assertEquals(((String) mm.getContent()).trim(),((String) ((MimeMessage) m_mailServer.getLastMail()[2]).getContent()).trim()); + assertEquals(((String) mm.getContent()).trim(),((String) ((MimeMessage) m_mailServer.getLastMail().getMessage()).getContent()).trim()); mail.dispose(); } Modified: james/server/trunk/src/test/org/apache/james/test/mock/james/InMemorySpoolRepository.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/test/mock/james/InMemorySpoolRepository.java?view=diff&rev=446908&r1=446907&r2=446908 ============================================================================== --- james/server/trunk/src/test/org/apache/james/test/mock/james/InMemorySpoolRepository.java (original) +++ james/server/trunk/src/test/org/apache/james/test/mock/james/InMemorySpoolRepository.java Sat Sep 16 11:21:47 2006 @@ -439,5 +439,15 @@ public void dispose() { clear(); } + + public String toString() { + StringBuffer result = new StringBuffer(); + result.append(super.toString()); + Iterator i = list(); + while (i.hasNext()) { + result.append("\n\t"+i.next()); + } + return result.toString(); + } } Modified: james/server/trunk/src/test/org/apache/james/test/mock/james/MockMailServer.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/test/mock/james/MockMailServer.java?view=diff&rev=446908&r1=446907&r2=446908 ============================================================================== --- james/server/trunk/src/test/org/apache/james/test/mock/james/MockMailServer.java (original) +++ james/server/trunk/src/test/org/apache/james/test/mock/james/MockMailServer.java Sat Sep 16 11:21:47 2006 @@ -21,7 +21,7 @@ import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.container.ContainerUtil; -import org.apache.james.core.MimeMessageCopyOnWriteProxy; +import org.apache.james.core.MailImpl; import org.apache.james.services.MailRepository; import org.apache.james.services.MailServer; import org.apache.james.smtpserver.MessageSizeException; @@ -33,8 +33,13 @@ import javax.mail.MessagingException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; + import java.io.InputStream; -import java.util.*; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; public class MockMailServer implements MailServer, Disposable { @@ -43,7 +48,10 @@ private static int m_counter = 0; private int m_maxMessageSizeBytes = 0; - private final ArrayList mails = new ArrayList(); + // private final ArrayList mails = new ArrayList(); + + private final InMemorySpoolRepository mails = new InMemorySpoolRepository(); + private String lastMailKey = null; private HashMap inboxes; @@ -52,13 +60,21 @@ } public void sendMail(MailAddress sender, Collection recipients, MimeMessage msg) throws MessagingException { - Object[] mailObjects = new Object[]{sender, recipients, new MimeMessageCopyOnWriteProxy(msg)}; - mails.add(mailObjects); + // Object[] mailObjects = new Object[]{sender, recipients, new MimeMessageCopyOnWriteProxy(msg)}; +// mails.add(mailObjects); +// + String newId = newId(); + MailImpl m = new MailImpl(newId, sender, recipients, msg); + sendMail(m); + m.dispose(); } public void sendMail(MailAddress sender, Collection recipients, InputStream msg) throws MessagingException { - Object[] mailObjects = new Object[]{sender, recipients, msg}; - mails.add(mailObjects); +// Object[] mailObjects = new Object[]{sender, recipients, msg}; +// mails.add(mailObjects); + MailImpl m = new MailImpl(newId(), sender, recipients, msg); + sendMail(m); + m.dispose(); } public void sendMail(Mail mail) throws MessagingException { @@ -68,7 +84,10 @@ } catch (MessageSizeException e) { throw new MessagingException("message size exception is nested", e); } - sendMail(mail.getSender(), mail.getRecipients(), mail.getMessage()); + + lastMailKey = mail.getName(); + mails.store(mail); + // sendMail(mail.getSender(), mail.getRecipients(), mail.getMessage()); } public void sendMail(MimeMessage message) throws MessagingException { @@ -127,10 +146,15 @@ return "localhost".equals(serverName); } - public Object[] getLastMail() + public Mail getLastMail() { if (mails.size() == 0) return null; - return (Object[])mails.get(mails.size()-1); + try { + return mails.retrieve(lastMailKey); + } catch (MessagingException e) { + e.printStackTrace(); + } + return null; } public void setMaxMessageSizeBytes(int maxMessageSizeBytes) { @@ -138,14 +162,15 @@ } public void dispose() { - if (mails != null) { - Iterator i = mails.iterator(); - while (i.hasNext()) { - Object[] obs = (Object[]) i.next(); - // this is needed to let the MimeMessageWrapper to dispose. - ContainerUtil.dispose(obs[2]); - } - } +// if (mails != null) { +// Iterator i = mails.iterator(); +// while (i.hasNext()) { +// Object[] obs = (Object[]) i.next(); +// // this is needed to let the MimeMessageWrapper to dispose. +// ContainerUtil.dispose(obs[2]); +// } +// } + mails.dispose(); if (inboxes!=null) { Iterator i = inboxes.values().iterator(); while (i.hasNext()) { @@ -153,6 +178,10 @@ ContainerUtil.dispose(m); } } + } + + public MailRepository getSentMailsRepository() { + return mails; } } Modified: james/server/trunk/src/test/org/apache/james/test/mock/mailet/MockMailContext.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/test/mock/mailet/MockMailContext.java?view=diff&rev=446908&r1=446907&r2=446908 ============================================================================== --- james/server/trunk/src/test/org/apache/james/test/mock/mailet/MockMailContext.java (original) +++ james/server/trunk/src/test/org/apache/james/test/mock/mailet/MockMailContext.java Sat Sep 16 11:21:47 2006 @@ -95,19 +95,19 @@ } public void sendMail(MimeMessage msg) throws MessagingException { - // trivial implementation + throw new UnsupportedOperationException("MOCKed method"); } public void sendMail(MailAddress sender, Collection recipients, MimeMessage msg) throws MessagingException { - // trivial implementation + throw new UnsupportedOperationException("MOCKed method"); } public void sendMail(MailAddress sender, Collection recipients, MimeMessage msg, String state) throws MessagingException { - // trivial implementation + throw new UnsupportedOperationException("MOCKed method"); } public void sendMail(Mail mail) throws MessagingException { - // trivial implementation + throw new UnsupportedOperationException("MOCKed method"); } public void setAttribute(String name, Object object) { Added: james/server/trunk/src/test/org/apache/james/transport/mailets/LocalDeliveryTest.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/transport/mailets/LocalDeliveryTest.java?view=auto&rev=446908 ============================================================================== --- james/server/trunk/src/test/org/apache/james/transport/mailets/LocalDeliveryTest.java (added) +++ james/server/trunk/src/test/org/apache/james/transport/mailets/LocalDeliveryTest.java Sat Sep 16 11:21:47 2006 @@ -0,0 +1,331 @@ +/**************************************************************** + * 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.james.transport.mailets; + +import org.apache.avalon.framework.container.ContainerUtil; +import org.apache.james.Constants; +import org.apache.james.core.MailImpl; +import org.apache.james.services.MailRepository; +import org.apache.james.services.MailServer; +import org.apache.james.services.UsersRepository; +import org.apache.james.test.mock.avalon.MockServiceManager; +import org.apache.james.test.mock.james.InMemorySpoolRepository; +import org.apache.james.test.mock.james.MockMailServer; +import org.apache.james.test.mock.javaxmail.MockMimeMessage; +import org.apache.james.test.mock.mailet.MockMail; +import org.apache.james.test.mock.mailet.MockMailContext; +import org.apache.james.test.mock.mailet.MockMailetConfig; +import org.apache.james.userrepository.DefaultJamesUser; +import org.apache.james.userrepository.MockUsersRepository; +import org.apache.mailet.Mail; +import org.apache.mailet.MailAddress; +import org.apache.mailet.Mailet; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.ParseException; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import junit.framework.TestCase; + +/** + * Test LocalDelivery Mailet + */ +public class LocalDeliveryTest extends TestCase { + + private HashMap mailboxes; + private MockMailContext mockMailetContext; + private MockServiceManager mockServiceManager; + private MockMailServer mockMailServer; + + public void testUnknownUser() throws MessagingException { + //mockMailetConfig.setProperty(key, value) + Mailet m = getMailet(); + + Mail mail = createMail(new String[] {"[EMAIL PROTECTED]"}); + m.service(mail); + + HashMap expectedMails = new HashMap(); + expectedMails.put("errors", new String[] {"[EMAIL PROTECTED]"}); + + assertDeliveryWorked(mail, expectedMails); + } + + + public void testSimpleDelivery() throws MessagingException { + //mockMailetConfig.setProperty(key, value) + Mailet m = getMailet(); + + Mail mail = createMail(new String[] {"[EMAIL PROTECTED]"}); + m.service(mail); + + HashMap expectedMails = new HashMap(); + expectedMails.put("localuser", new String[] {"[EMAIL PROTECTED]"}); + + assertDeliveryWorked(mail, expectedMails); + } + + public void testSimpleAliasDelivery() throws MessagingException { + mockMailetContext.setAttribute(Constants.DEFAULT_ENABLE_ALIASES, Boolean.TRUE); + //mockMailetConfig.setProperty(key, value) + Mailet m = getMailet(); + + Mail mail = createMail(new String[] {"[EMAIL PROTECTED]"}); + m.service(mail); + + HashMap expectedMails = new HashMap(); + expectedMails.put("localuser", new String[] {"[EMAIL PROTECTED]"}); + + assertDeliveryWorked(mail, expectedMails); + } + + public void testSimpleAliasWithDisabledAlias() throws MessagingException { + //mockMailetConfig.setProperty(key, value) + Mailet m = getMailet(); + + Mail mail = createMail(new String[] {"[EMAIL PROTECTED]"}); + m.service(mail); + + HashMap expectedMails = new HashMap(); + expectedMails.put("aliasedUser", new String[] {"[EMAIL PROTECTED]"}); + + assertDeliveryWorked(mail, expectedMails); + } + + + public void testForwardingWithForwardingDisabled() throws MessagingException { + //mockMailetConfig.setProperty(key, value) + Mailet m = getMailet(); + + Mail mail = createMail(new String[] {"[EMAIL PROTECTED]"}); + m.service(mail); + + HashMap expectedMails = new HashMap(); + expectedMails.put("errors", new String[] {"[EMAIL PROTECTED]"}); + + assertDeliveryWorked(mail, expectedMails); + } + + + public void testForwarding() throws MessagingException { + mockMailetContext.setAttribute(Constants.DEFAULT_ENABLE_FORWARDING, Boolean.TRUE); + //mockMailetConfig.setProperty(key, value) + Mailet m = getMailet(); + + Mail mail = createMail(new String[] {"[EMAIL PROTECTED]"}); + m.service(mail); + + HashMap expectedMails = new HashMap(); + expectedMails.put("resent", new String[] {"[EMAIL PROTECTED]"}); + + assertDeliveryWorked(mail, expectedMails); + } + + public void testAliasingForwarding() throws MessagingException { + mockMailetContext.setAttribute(Constants.DEFAULT_ENABLE_FORWARDING, Boolean.TRUE); + mockMailetContext.setAttribute(Constants.DEFAULT_ENABLE_ALIASES, Boolean.TRUE); + //mockMailetConfig.setProperty(key, value) + Mailet m = getMailet(); + + Mail mail = createMail(new String[] {"[EMAIL PROTECTED]"}); + m.service(mail); + + HashMap expectedMails = new HashMap(); + expectedMails.put("resent", new String[] {"[EMAIL PROTECTED]"}); + + assertDeliveryWorked(mail, expectedMails); + } + + public void testForwardingToLocal() throws MessagingException { + mockMailetContext.setAttribute(Constants.DEFAULT_ENABLE_FORWARDING, Boolean.TRUE); + mockMailetContext.setAttribute(Constants.DEFAULT_ENABLE_ALIASES, Boolean.TRUE); + //mockMailetConfig.setProperty(key, value) + Mailet m = getMailet(); + + Mail mail = createMail(new String[] {"[EMAIL PROTECTED]"}); + m.service(mail); + + HashMap expectedMails = new HashMap(); + expectedMails.put("resent", new String[] {"[EMAIL PROTECTED]"}); + + assertDeliveryWorked(mail, expectedMails); + } + + /** + * @throws ParseException + * + */ + public void setUp() throws ParseException { + mockServiceManager = new MockServiceManager(); + MockUsersRepository mockUsersRepository = new MockUsersRepository(); + mockUsersRepository.setForceUseJamesUser(); + mockUsersRepository.addUser("localuser", "password"); + mockUsersRepository.addUser("aliasedUser", "pass2"); + DefaultJamesUser u = (DefaultJamesUser) mockUsersRepository.getUserByName("aliasedUser"); + u.setAliasing(true); + u.setAlias("localuser"); + mockUsersRepository.addUser("forwardingUser", "pass2"); + u = (DefaultJamesUser) mockUsersRepository.getUserByName("forwardingUser"); + u.setForwarding(true); + u.setForwardingDestination(new MailAddress("[EMAIL PROTECTED]")); + mockUsersRepository.addUser("aliasForwardUser", "pass2"); + u = (DefaultJamesUser) mockUsersRepository.getUserByName("aliasForwardUser"); + u.setAliasing(true); + u.setAlias("localuser"); + u.setForwarding(true); + u.setForwardingDestination(new MailAddress("[EMAIL PROTECTED]")); + mockUsersRepository.addUser("forwardToLocal", "pass2"); + u = (DefaultJamesUser) mockUsersRepository.getUserByName("forwardToLocal"); + u.setForwarding(true); + u.setForwardingDestination(new MailAddress("[EMAIL PROTECTED]")); + mockServiceManager.put(UsersRepository.ROLE,mockUsersRepository); + mockMailServer = new MockMailServer(); + mailboxes = new HashMap(); + mailboxes.put("localuser", new InMemorySpoolRepository()); + mailboxes.put("aliasedUser", new InMemorySpoolRepository()); + Iterator mbi = mailboxes.keySet().iterator(); + while (mbi.hasNext()) { + String mboxName = (String) mbi.next(); + mockMailServer.setUserInbox(mboxName, (MailRepository) mailboxes.get(mboxName)); + } + mockServiceManager.put(MailServer.ROLE, mockMailServer); + + mockMailetContext = new MockMailContext() { + + public void sendMail(MailAddress sender, Collection recipients, MimeMessage msg) throws MessagingException { + mockMailServer.sendMail(sender, recipients, msg); + } + + public void sendMail(MailAddress sender, Collection recipients, MimeMessage msg, String state) throws MessagingException { + MailImpl m = new MailImpl(MockMailServer.newId(), sender, recipients, msg); + m.setState(state); + mockMailServer.sendMail(m); + m.dispose(); + } + + }; + mockMailetContext.setAttribute(Constants.DEFAULT_ENABLE_ALIASES, Boolean.FALSE); + mockMailetContext.setAttribute(Constants.DEFAULT_ENABLE_FORWARDING, Boolean.FALSE); + mockMailetContext.setAttribute(Constants.DEFAULT_IGNORE_USERNAME_CASE, Boolean.FALSE); + mockMailetContext.setAttribute(Constants.AVALON_COMPONENT_MANAGER, mockServiceManager); + } + + public void tearDown() { + mockMailetContext = null; + mailboxes = null; + mockServiceManager = null; + } + + /** + * @param mail + * @param expectedMails + * @throws MessagingException + */ + private void assertDeliveryWorked(Mail mail, HashMap expectedMails) throws MessagingException { + assertEquals(Mail.GHOST, mail.getState()); + Iterator mboxes = mailboxes.keySet().iterator(); + while (mboxes.hasNext()) { + String mboxName = (String) mboxes.next(); + MailRepository inMemorySpoolRepository = (MailRepository) mailboxes.get(mboxName); + assertExpectedMailsInRepository(mail, (String[]) expectedMails.get(mboxName), inMemorySpoolRepository); + + } + + MailRepository sentMailsRepository = mockMailServer.getSentMailsRepository(); + MailRepository errorsMailRepository = new InMemorySpoolRepository(); + + Iterator keys = sentMailsRepository.list(); + while (keys.hasNext()) { + String nextKey = (String) keys.next(); + Mail m = sentMailsRepository.retrieve(nextKey); + if (Mail.ERROR.equals(m.getState())) { + errorsMailRepository.store(m); + sentMailsRepository.remove(nextKey); + } else { + assertEquals("Found a mail in outgoing having a state different from ERROR or ROOT", Mail.DEFAULT, m.getState()); + } + + ContainerUtil.dispose(m); + } + + assertExpectedMailsInRepository(mail, (String[]) expectedMails.get("resent"), sentMailsRepository); + assertExpectedMailsInRepository(mail, (String[]) expectedMails.get("errors"), errorsMailRepository); + + ContainerUtil.dispose(errorsMailRepository); + } + + + /** + * @param mail + * @param expectedMails + * @param mboxName + * @param inMemorySpoolRepository + * @throws MessagingException + */ + private void assertExpectedMailsInRepository(Mail mail, String[] expectedDeliveries, MailRepository inMemorySpoolRepository) throws MessagingException { + List c = expectedDeliveries != null ? new ArrayList(Arrays.asList(expectedDeliveries)) : new ArrayList(); + Iterator i = inMemorySpoolRepository.list(); + System.out.println("check: "+c.size()+"|"+inMemorySpoolRepository); + for (int j = 0; j < c.size(); j++) { + assertTrue("No mails have been found in the repository", i.hasNext()); + String next = (String) i.next(); + assertNotNull("Mail has not been stored", next); + Mail storedMail = inMemorySpoolRepository.retrieve(next); + assertNotNull("Mail cannot be retrieved", storedMail); + String recipient = storedMail.getRecipients().iterator().next().toString(); + assertTrue("Message has been delivered to the wrong user", c.contains(recipient)); + c.remove(recipient); + } + assertEquals("Message has not been delivered to all expected recipients", c.size(), 0); + if (i.hasNext()) { + String tooMuch = (String) i.next(); + Mail m = inMemorySpoolRepository.retrieve(tooMuch); + fail("Found unexpected mail for recipient "+m.getRecipients().iterator().next().toString()+"!"); + } + } + + /** + * @return + * @throws MessagingException + */ + private Mail createMail(String[] recipients) throws MessagingException { + Mail mail = new MockMail(); + ArrayList a = new ArrayList(recipients.length); + for (int i = 0; i < recipients.length; i++) { + a.add(new MailAddress(recipients[i])); + } + mail.setRecipients(a); + mail.setMessage(new MockMimeMessage()); + return mail; + } + + public Mailet getMailet() throws MessagingException { + MockMailetConfig mockMailetConfig = new MockMailetConfig("TestedLocalDelivery", mockMailetContext); + Mailet m = new LocalDelivery(); + m.init(mockMailetConfig); + return m; + } +} Propchange: james/server/trunk/src/test/org/apache/james/transport/mailets/LocalDeliveryTest.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: james/server/trunk/src/test/org/apache/james/userrepository/MockUsersRepository.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/userrepository/MockUsersRepository.java?view=diff&rev=446908&r1=446907&r2=446908 ============================================================================== --- james/server/trunk/src/test/org/apache/james/userrepository/MockUsersRepository.java (original) +++ james/server/trunk/src/test/org/apache/james/userrepository/MockUsersRepository.java Sat Sep 16 11:21:47 2006 @@ -111,7 +111,7 @@ } public String getRealName(String name) { - return ((User) m_users.get(name)).getUserName(); + return m_users.get(name) != null ? ((User) m_users.get(name)).getUserName() : null; } public boolean updateUser(User user) { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]