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]

Reply via email to