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 2012/01/06 18:42:13 UTC

svn commit: r1228299 - in /james/protocols/trunk/pop3/src: main/java/org/apache/james/protocols/pop3/core/ test/java/org/apache/james/protocols/pop3/

Author: norman
Date: Fri Jan  6 17:42:12 2012
New Revision: 1228299

URL: http://svn.apache.org/viewvc?rev=1228299&view=rev
Log:
Make sure we correctly handle non existing message numbers. Also adding more test cases for this.

Added:
    james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/MessageMetaDataUtils.java
Modified:
    james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java
    james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java
    james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
    james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java
    james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java
    james/protocols/trunk/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ServerTest.java

Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java?rev=1228299&r1=1228298&r2=1228299&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java Fri Jan  6 17:42:12 2012
@@ -55,10 +55,14 @@ public class DeleCmdHandler implements C
                 return SYNTAX_ERROR;
             }
             try {
-                List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction);
+                MessageMetaData meta = MessageMetaDataUtils.getMetaData(session, num);
+                if (meta == null) {
+                    StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist.");
+                    return  new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
+                }
                 List<Long> deletedUidList = (List<Long>) session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction);
 
-                Long uid = uidList.get(num - 1).getUid();
+                Long uid = meta.getUid();
 
                 if (deletedUidList.contains(uid)) {
                     StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") already deleted.");

Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java?rev=1228299&r1=1228298&r2=1228299&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java Fri Jan  6 17:42:12 2012
@@ -87,7 +87,13 @@ public class ListCmdHandler implements C
                 int num = 0;
                 try {
                     num = Integer.parseInt(parameters);
-                    MessageMetaData data = uidList.get(num - 1);
+                    
+                    MessageMetaData data = MessageMetaDataUtils.getMetaData(session, num);
+                    if (data == null) {
+                        StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist.");
+                        return  new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
+                    }
+                    
                     if (deletedUidList.contains(data.getUid()) == false) {
 
                         StringBuilder responseBuffer = new StringBuilder(64).append(num).append(" ").append(data.getSize());

Added: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/MessageMetaDataUtils.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/MessageMetaDataUtils.java?rev=1228299&view=auto
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/MessageMetaDataUtils.java (added)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/MessageMetaDataUtils.java Fri Jan  6 17:42:12 2012
@@ -0,0 +1,47 @@
+/****************************************************************
+ * 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.protocols.pop3.core;
+
+import java.util.List;
+
+import org.apache.james.protocols.api.ProtocolSession.State;
+import org.apache.james.protocols.pop3.POP3Session;
+import org.apache.james.protocols.pop3.mailbox.MessageMetaData;
+
+public class MessageMetaDataUtils {
+
+    /**
+     * Returns the {@link MessageMetaData} for the given message number or <code>null</code> if it can not be 
+     * found.
+     * 
+     * @param session
+     * @param number
+     * @return data
+     */
+    public static MessageMetaData getMetaData(POP3Session session, int number) {
+        @SuppressWarnings("unchecked")
+        List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction);
+        if (uidList == null || number > uidList.size()) {
+            return null;
+        } else {
+            return uidList.get(number -1);
+        }
+    }
+}

Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java?rev=1228299&r1=1228298&r2=1228299&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java Fri Jan  6 17:42:12 2012
@@ -60,10 +60,16 @@ public class RetrCmdHandler implements C
                 return SYNTAX_ERROR;
             }
             try {
-                List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction);
+                MessageMetaData data = MessageMetaDataUtils.getMetaData(session, num);
+
+                if (data == null) {
+                    StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist.");
+                    response = new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
+                    return response;
+                }
                 List<Long> deletedUidList = (List<Long>) session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction);
 
-                Long uid = uidList.get(num - 1).getUid();
+                Long uid = data.getUid();
                 if (deletedUidList.contains(uid) == false) {
                     InputStream content = session.getUserMailbox().getMessage(uid);
 

Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java?rev=1228299&r1=1228298&r2=1228299&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java Fri Jan  6 17:42:12 2012
@@ -79,10 +79,16 @@ public class TopCmdHandler extends RetrC
                 return SYNTAX_ERROR;
             }
             try {
-                List<MessageMetaData> uidList = (List<MessageMetaData>) session.getAttachment(POP3Session.UID_LIST, State.Transaction);
+                
+                MessageMetaData data = MessageMetaDataUtils.getMetaData(session, num);
+                if (data == null) {
+                    StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist.");
+                    return  new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
+                }
+                
                 List<Long> deletedUidList = (List<Long>) session.getAttachment(POP3Session.DELETED_UID_LIST, State.Transaction);
 
-                Long uid = uidList.get(num - 1).getUid();
+                Long uid = data.getUid();
                 if (deletedUidList.contains(uid) == false) {
 
                     InputStream body = new CountingBodyInputStream(new ExtraDotInputStream(new CRLFTerminatedInputStream(session.getUserMailbox().getMessageBody(uid))), lines);

Modified: james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java?rev=1228299&r1=1228298&r2=1228299&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java (original)
+++ james/protocols/trunk/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java Fri Jan  6 17:42:12 2012
@@ -70,7 +70,14 @@ public class UidlCmdHandler implements C
                     int num = 0;
                     try {
                         num = Integer.parseInt(parameters);
-                        Long uid = uidList.get(num - 1).getUid();
+                        
+                        MessageMetaData data = MessageMetaDataUtils.getMetaData(session, num);
+                        if (data == null) {
+                            StringBuilder responseBuffer = new StringBuilder(64).append("Message (").append(num).append(") does not exist.");
+                            return  new POP3Response(POP3Response.ERR_RESPONSE, responseBuffer.toString());
+                        }
+                        long uid = data.getUid();
+                        
                         if (deletedUidList.contains(uid) == false) {
                             // construct unique UIDL. See JAMES-1264
                             StringBuilder responseBuffer = new StringBuilder(64).append(num).append(" ").append(identifier).append("-").append(uid);

Modified: james/protocols/trunk/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ServerTest.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ServerTest.java?rev=1228299&r1=1228298&r2=1228299&view=diff
==============================================================================
--- james/protocols/trunk/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ServerTest.java (original)
+++ james/protocols/trunk/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ServerTest.java Fri Jan  6 17:42:12 2012
@@ -20,11 +20,15 @@ package org.apache.james.protocols.pop3;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.Reader;
 import java.io.SequenceInputStream;
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
@@ -45,6 +49,9 @@ import org.junit.Test;
 
 public class POP3ServerTest {
 
+    private static final Message MESSAGE1 = new Message("Subject: test\r\nX-Header: value\r\n", "My Body\r\n");
+    private static final Message MESSAGE2 = new Message("Subject: test2\r\nX-Header: value2\r\n", "My Body with a DOT.\r\n.\r\n");
+
     private POP3Protocol createProtocol(MailboxFactory factory) throws WiringException {
         return new POP3Protocol(new POP3ProtocolHandlerChain(factory), new POP3Configuration(), new MockLogger());
     }
@@ -105,6 +112,391 @@ public class POP3ServerTest {
         }
         
     }
+    
+    @Test
+    public void testInboxWithMessages() throws Exception {
+        InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+        
+        NettyServer server = null;
+        try {
+            String identifier = "id";
+            MockMailboxFactory factory = new MockMailboxFactory();
+            
+            factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
+            server = new NettyServer(createProtocol(factory));
+            server.setListenAddresses(address);
+            server.bind();
+            
+            POP3Client client =  new POP3Client();
+            client.connect(address.getAddress().getHostAddress(), address.getPort());
+            
+            assertTrue(client.login("valid", "valid"));
+            POP3MessageInfo[] info = client.listMessages();
+            assertEquals(2, info.length);
+            assertEquals((int) MESSAGE1.meta.getSize(), info[0].size);
+            assertEquals((int) MESSAGE2.meta.getSize(), info[1].size);
+            assertEquals(1, info[0].number);
+            assertEquals(2, info[1].number);
+
+            POP3MessageInfo mInfo = client.listMessage(1);
+            assertEquals((int) MESSAGE1.meta.getSize(), mInfo.size);
+            assertEquals(1, mInfo.number);
+
+            // try to retrieve message that not exist
+            mInfo = client.listMessage(10);
+            assertNull(mInfo);
+
+            info = client.listUniqueIdentifiers();
+            assertEquals(2, info.length);
+            assertEquals(identifier + "-" + MESSAGE1.meta.getUid(), info[0].identifier);
+            assertEquals(identifier + "-" + MESSAGE2.meta.getUid(), info[1].identifier);
+            assertEquals(1, info[0].number);
+            assertEquals(2, info[1].number);
+
+            mInfo = client.listUniqueIdentifier(1);
+            assertEquals(identifier + "-" + MESSAGE1.meta.getUid(), mInfo.identifier);
+            assertEquals(1, mInfo.number);
+
+            // try to retrieve message that not exist
+            mInfo = client.listUniqueIdentifier(10);
+            assertNull(mInfo);
+            
+            assertTrue(client.logout());
+           
+        } finally {
+            if (server != null) {
+                server.unbind();
+            }
+        }
+        
+    }
+    
+    @Test
+    public void testRetr() throws Exception {
+        InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+        
+        NettyServer server = null;
+        try {
+            String identifier = "id";
+            MockMailboxFactory factory = new MockMailboxFactory();
+            
+            factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
+            server = new NettyServer(createProtocol(factory));
+            server.setListenAddresses(address);
+            server.bind();
+            
+            POP3Client client =  new POP3Client();
+            client.connect(address.getAddress().getHostAddress(), address.getPort());
+            
+            assertTrue(client.login("valid", "valid"));
+            Reader reader = client.retrieveMessage(1);
+            assertNotNull(reader);
+            checkMessage(MESSAGE1, reader);
+            reader.close();
+            
+            // does not exist
+            reader = client.retrieveMessage(10);
+            assertNull(reader);
+            
+            
+            // delete and check for the message again, should now be deleted
+            assertTrue(client.deleteMessage(1));
+            reader = client.retrieveMessage(1);
+            assertNull(reader);
+
+            
+            assertTrue(client.logout());
+           
+        } finally {
+            if (server != null) {
+                server.unbind();
+            }
+        }
+        
+    }
+    
+    @Test
+    public void testTop() throws Exception {
+        InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+        
+        NettyServer server = null;
+        try {
+            String identifier = "id";
+            MockMailboxFactory factory = new MockMailboxFactory();
+            
+            factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
+            server = new NettyServer(createProtocol(factory));
+            server.setListenAddresses(address);
+            server.bind();
+            
+            POP3Client client =  new POP3Client();
+            client.connect(address.getAddress().getHostAddress(), address.getPort());
+            
+            assertTrue(client.login("valid", "valid"));
+            Reader reader = client.retrieveMessageTop(1, 1000);
+            assertNotNull(reader);
+            checkMessage(MESSAGE1, reader);
+            reader.close();
+            
+            reader = client.retrieveMessageTop(2, 1);
+            assertNotNull(reader);
+            checkMessage(MESSAGE2, reader,1);
+            reader.close();
+            
+            // does not exist
+            reader = client.retrieveMessageTop(10,100);
+            assertNull(reader);
+            
+            // delete and check for the message again, should now be deleted
+            assertTrue(client.deleteMessage(1));
+            reader = client.retrieveMessageTop(1, 1000);
+            assertNull(reader);
+
+            assertTrue(client.logout());
+           
+        } finally {
+            if (server != null) {
+                server.unbind();
+            }
+        }
+        
+    }
+    
+    @Test
+    public void testDele() throws Exception {
+        InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+        
+        NettyServer server = null;
+        try {
+            String identifier = "id";
+            MockMailboxFactory factory = new MockMailboxFactory();
+            
+            factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
+            server = new NettyServer(createProtocol(factory));
+            server.setListenAddresses(address);
+            server.bind();
+            
+            POP3Client client =  new POP3Client();
+            client.connect(address.getAddress().getHostAddress(), address.getPort());
+            
+            assertTrue(client.login("valid", "valid"));
+            POP3MessageInfo[] info = client.listMessages();
+            assertEquals(2, info.length);
+            
+            assertTrue(client.deleteMessage(1));
+            info = client.listMessages();
+            assertEquals(1, info.length);
+
+            
+            assertFalse(client.deleteMessage(1));
+            info = client.listMessages();
+            assertEquals(1, info.length);
+            
+            
+            assertTrue(client.deleteMessage(2));
+            info = client.listMessages();
+            assertEquals(0, info.length);
+            
+            // logout so the messages get expunged
+            assertTrue(client.logout());
+
+            client.connect(address.getAddress().getHostAddress(), address.getPort());
+  
+            assertTrue(client.login("valid", "valid"));
+            info = client.listMessages();
+            assertEquals(0, info.length);
+
+            assertTrue(client.logout());
+           
+        } finally {
+            if (server != null) {
+                server.unbind();
+            }
+        }
+        
+    }
+    
+    @Test
+    public void testNoop() throws Exception {
+        InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+        
+        NettyServer server = null;
+        try {
+            String identifier = "id";
+            MockMailboxFactory factory = new MockMailboxFactory();
+            
+            factory.add("valid", new MockMailbox(identifier));
+            server = new NettyServer(createProtocol(factory));
+            server.setListenAddresses(address);
+            server.bind();
+            
+            POP3Client client =  new POP3Client();
+            client.connect(address.getAddress().getHostAddress(), address.getPort());
+            
+            assertTrue(client.login("valid", "valid"));
+            assertTrue(client.noop());
+            assertTrue(client.logout());
+           
+        } finally {
+            if (server != null) {
+                server.unbind();
+            }
+        }
+        
+    }
+    
+    @Test
+    public void testRset() throws Exception {
+        InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+        
+        NettyServer server = null;
+        try {
+            String identifier = "id";
+            MockMailboxFactory factory = new MockMailboxFactory();
+            
+            factory.add("valid", new MockMailbox(identifier, MESSAGE1));
+            server = new NettyServer(createProtocol(factory));
+            server.setListenAddresses(address);
+            server.bind();
+            
+            POP3Client client =  new POP3Client();
+            client.connect(address.getAddress().getHostAddress(), address.getPort());
+            
+            assertTrue(client.login("valid", "valid"));
+            assertEquals(1, client.listMessages().length);
+            assertTrue(client.deleteMessage(1));
+            assertEquals(0, client.listMessages().length);
+            
+            // call RSET. After this the deleted mark should be removed again
+            assertTrue(client.reset());
+            assertEquals(1, client.listMessages().length);
+
+            assertTrue(client.logout());
+           
+        } finally {
+            if (server != null) {
+                server.unbind();
+            }
+        }
+        
+    }
+    
+    @Test
+    public void testStat() throws Exception {
+        InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+        
+        NettyServer server = null;
+        try {
+            String identifier = "id";
+            MockMailboxFactory factory = new MockMailboxFactory();
+            
+            factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
+            server = new NettyServer(createProtocol(factory));
+            server.setListenAddresses(address);
+            server.bind();
+            
+            POP3Client client =  new POP3Client();
+            client.connect(address.getAddress().getHostAddress(), address.getPort());
+            
+            assertTrue(client.login("valid", "valid"));
+            POP3MessageInfo info = client.status();
+            assertEquals((int)(MESSAGE1.meta.getSize() + MESSAGE2.meta.getSize()), info.size);
+            assertEquals(2, info.number);
+            
+            assertTrue(client.logout());
+           
+        } finally {
+            if (server != null) {
+                server.unbind();
+            }
+        }
+        
+    }
+    @Test
+    public void testDifferentStates() throws Exception {
+        InetSocketAddress address = new InetSocketAddress("127.0.0.1", TestUtils.getFreePort());
+        
+        NettyServer server = null;
+        try {
+            String identifier = "id";
+            MockMailboxFactory factory = new MockMailboxFactory();
+            
+            factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
+            server = new NettyServer(createProtocol(factory));
+            server.setListenAddresses(address);
+            server.bind();
+            
+            POP3Client client =  new POP3Client();
+            
+            client.connect(address.getAddress().getHostAddress(), address.getPort());
+            assertNull(client.listMessages());
+            assertNull(client.listUniqueIdentifiers());
+            assertFalse(client.deleteMessage(1));
+            assertNull(client.retrieveMessage(1));
+            assertNull(client.retrieveMessageTop(1, 10));
+            assertNull(client.status());
+            assertFalse(client.reset());
+            client.logout();
+            
+            client.connect(address.getAddress().getHostAddress(), address.getPort());
+
+            assertTrue(client.login("valid", "valid"));
+            assertNotNull(client.listMessages());
+            assertNotNull(client.listUniqueIdentifiers());
+            Reader reader = client.retrieveMessage(1);
+            assertNotNull(reader);
+            reader.close();
+            assertNotNull(client.status());
+            reader = client.retrieveMessageTop(1, 1);
+            assertNotNull(reader);
+            reader.close();
+            assertTrue(client.deleteMessage(1));
+            assertTrue(client.reset());
+
+            assertTrue(client.logout());
+
+        } finally {
+            if (server != null) {
+                server.unbind();
+            }
+        }
+        
+    }
+    private void checkMessage(Message message, Reader reader) throws IOException {
+        int read = 0;
+        int i = -1;
+        String content = message.toString();
+        while ((i = reader.read()) != -1) {
+            assertEquals(content.charAt(read++), (char)i);
+        }
+        assertEquals(content.length(), read);
+    }
+    
+    private void checkMessage(Message message, Reader reader, int lines) throws IOException {
+        int read = 0;
+        String headers = message.headers + "\r\n";
+        
+        while (read < headers.length()) {
+            assertEquals(headers.charAt(read++), reader.read());
+        }
+        assertEquals(headers.length(), read);
+        
+        BufferedReader bufReader = new BufferedReader(reader);
+        String line = null;
+        int linesRead = 0;
+        String parts[] = message.body.split("\r\n");
+        while ((line = bufReader.readLine()) != null) {
+            assertEquals(parts[linesRead++], line);
+            
+            if (linesRead == lines) {
+                break;
+            }
+        }
+        
+        assertEquals(lines, linesRead);
+        
+    }
+    
     private final class MockMailboxFactory implements MailboxFactory {
         private final Map<String, Mailbox> mailboxes = new HashMap<String, Mailbox>();
        
@@ -193,5 +585,9 @@ public class POP3ServerTest {
             this.meta = new MessageMetaData(UIDS.incrementAndGet(), headers.length() + body.length() + 2);
         }
         
+        public String toString() {
+            return headers + "\r\n" + body;
+        }
+        
     }
 }



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