Author: norman Date: Sun Jan 1 20:44:13 2012 New Revision: 1226298 URL: http://svn.apache.org/viewvc?rev=1226298&view=rev Log: Start to add unit tests for pop3. See PROTOCOLS-65
Modified: james/protocols/trunk/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ServerTest.java 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=1226298&r1=1226297&r2=1226298&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 Sun Jan 1 20:44:13 2012 @@ -18,17 +18,28 @@ ****************************************************************/ package org.apache.james.protocols.pop3; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.io.ByteArrayInputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.SequenceInputStream; import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicLong; import org.apache.commons.net.pop3.POP3Client; +import org.apache.commons.net.pop3.POP3MessageInfo; import org.apache.james.protocols.api.handler.WiringException; import org.apache.james.protocols.netty.NettyServer; import org.apache.james.protocols.pop3.mailbox.Mailbox; import org.apache.james.protocols.pop3.mailbox.MailboxFactory; +import org.apache.james.protocols.pop3.mailbox.MessageMetaData; import org.junit.Test; @@ -62,10 +73,124 @@ public class POP3ServerTest { } + @Test + public void testEmptyInbox() 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")); + POP3MessageInfo[] info = client.listMessages(); + assertEquals(0, info.length); + + info = client.listUniqueIdentifiers(); + assertEquals(0, info.length); + assertTrue(client.logout()); + + } finally { + if (server != null) { + server.unbind(); + } + } + + } private final class MockMailboxFactory implements MailboxFactory { - + private final Map<String, Mailbox> mailboxes = new HashMap<String, Mailbox>(); + + public void add(String username, Mailbox mailbox) { + mailboxes.put(username, mailbox); + } public Mailbox getMailbox(POP3Session session, String password) throws IOException { - return null; + return mailboxes.get(session.getUser()); + } + + } + + private final class MockMailbox implements Mailbox { + + private final Map<Long, Message> messages = new HashMap<Long, POP3ServerTest.Message>(); + private final String identifier; + + public MockMailbox(String identifier, Message... messages) { + this.identifier = identifier; + for (Message m: messages) { + this.messages.put(m.meta.getUid(), m); + } + } + + public MockMailbox(String identifier) { + this(identifier, new Message[0]); + } + public InputStream getMessageBody(long uid) throws IOException { + Message m = messages.get(uid); + if (m == null) { + return null; + } + return new ByteArrayInputStream(m.body.getBytes("US-ASCII")); + } + + public InputStream getMessageHeaders(long uid) throws IOException { + Message m = messages.get(uid); + if (m == null) { + return null; + } + return new ByteArrayInputStream((m.headers + "\r\n").getBytes("US-ASCII")); + } + + public InputStream getMessage(long uid) throws IOException { + InputStream body = getMessageBody(uid); + InputStream headers = getMessageHeaders(uid); + if (body == null || headers == null) { + return null; + } + return new SequenceInputStream(headers, body); + } + + public List<MessageMetaData> getMessages() throws IOException { + List<MessageMetaData> meta = new ArrayList<MessageMetaData>(); + for (Message m: messages.values()) { + meta.add(m.meta); + } + return meta; + } + + public void remove(long... uids) throws IOException { + for (long uid: uids) { + messages.remove(uid); + } + } + + public String getIdentifier() throws IOException { + return identifier; + } + + public void close() throws IOException { + // nothing + } + + } + + private static final class Message { + private static final AtomicLong UIDS = new AtomicLong(0); + public final String headers; + public final String body; + public final MessageMetaData meta; + + public Message(String headers, String body) { + this.headers = headers; + this.body = body; + this.meta = new MessageMetaData(UIDS.incrementAndGet(), headers.length() + body.length() + 2); } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org