📄 pop3servertest.java
字号:
/**************************************************************** * 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.pop3server;import org.apache.avalon.cornerstone.services.sockets.SocketManager;import org.apache.avalon.cornerstone.services.threads.ThreadManager;import org.apache.avalon.framework.container.ContainerUtil;import org.apache.commons.net.pop3.POP3Client;import org.apache.commons.net.pop3.POP3MessageInfo;import org.apache.james.core.MailImpl;import org.apache.james.core.MimeMessageCopyOnWriteProxy;import org.apache.james.core.MimeMessageInputStreamSource;import org.apache.james.services.JamesConnectionManager;import org.apache.james.services.MailServer;import org.apache.james.services.UsersRepository;import org.apache.james.test.mock.avalon.MockLogger;import org.apache.james.test.mock.avalon.MockServiceManager;import org.apache.james.test.mock.avalon.MockSocketManager;import org.apache.james.test.mock.avalon.MockThreadManager;import org.apache.james.test.mock.james.MockMailRepository;import org.apache.james.test.mock.james.MockMailServer;import org.apache.james.test.util.Util;import org.apache.james.userrepository.MockUsersRepository;import org.apache.james.util.connection.SimpleConnectionManager;import org.apache.mailet.MailAddress;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;import javax.mail.util.SharedByteArrayInputStream;import java.io.Reader;import java.util.ArrayList;import junit.framework.TestCase;/** * Tests the org.apache.james.smtpserver.SMTPServer unit */public class POP3ServerTest extends TestCase { private int m_pop3ListenerPort = Util.getNonPrivilegedPort(); private MockMailServer m_mailServer; private POP3TestConfiguration m_testConfiguration; private POP3Server m_pop3Server; private MockUsersRepository m_usersRepository = new MockUsersRepository(); private POP3Client m_pop3Protocol = null; public POP3ServerTest() { super("POP3ServerTest"); } protected void setUp() throws Exception { m_pop3Server = new POP3Server(); ContainerUtil.enableLogging(m_pop3Server, new MockLogger()); ContainerUtil.service(m_pop3Server, setUpServiceManager()); m_testConfiguration = new POP3TestConfiguration(m_pop3ListenerPort); } private void finishSetUp(POP3TestConfiguration testConfiguration) throws Exception { testConfiguration.init(); ContainerUtil.configure(m_pop3Server, testConfiguration); ContainerUtil.initialize(m_pop3Server); } private MockServiceManager setUpServiceManager() { MockServiceManager serviceManager = new MockServiceManager(); SimpleConnectionManager connectionManager = new SimpleConnectionManager(); ContainerUtil.enableLogging(connectionManager, new MockLogger()); serviceManager.put(JamesConnectionManager.ROLE, connectionManager); m_mailServer = new MockMailServer(); serviceManager .put(MailServer.ROLE, m_mailServer); serviceManager.put(UsersRepository.ROLE, m_usersRepository); serviceManager.put(SocketManager.ROLE, new MockSocketManager( m_pop3ListenerPort)); serviceManager.put(ThreadManager.ROLE, new MockThreadManager()); return serviceManager; } protected void tearDown() throws Exception { super.tearDown(); if (m_pop3Protocol != null) { m_pop3Protocol.sendCommand("quit"); m_pop3Protocol.disconnect(); } m_pop3Server.dispose(); } public void testAuthenticationFail() throws Exception { finishSetUp(m_testConfiguration); m_pop3Protocol = new POP3Client(); m_pop3Protocol.connect("127.0.0.1", m_pop3ListenerPort); m_usersRepository.addUser("known", "test2"); m_pop3Protocol.login("known", "test"); assertEquals(0, m_pop3Protocol.getState()); assertTrue(m_pop3Protocol.getReplyString().startsWith("-ERR")); } public void testUnknownUser() throws Exception { finishSetUp(m_testConfiguration); m_pop3Protocol = new POP3Client(); m_pop3Protocol.connect("127.0.0.1", m_pop3ListenerPort); m_pop3Protocol.login("unknown", "test"); assertEquals(0, m_pop3Protocol.getState()); assertTrue(m_pop3Protocol.getReplyString().startsWith("-ERR")); } public void testKnownUserEmptyInbox() throws Exception { finishSetUp(m_testConfiguration); m_pop3Protocol = new POP3Client(); m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort); m_usersRepository.addUser("foo", "bar"); m_mailServer.setUserInbox("foo", new MockMailRepository()); m_pop3Protocol.login("foo", "bar"); System.err.println(m_pop3Protocol.getState()); assertEquals(1, m_pop3Protocol.getState()); POP3MessageInfo[] entries = m_pop3Protocol.listMessages(); assertEquals(1, m_pop3Protocol.getState()); assertNotNull(entries); assertEquals(entries.length, 0); } public void testNotAsciiCharsInPassword() throws Exception { finishSetUp(m_testConfiguration); m_pop3Protocol = new POP3Client(); m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort); String pass = "bar" + (new String(new char[] { 200, 210 })) + "foo"; m_usersRepository.addUser("foo", pass); m_mailServer.setUserInbox("foo", new MockMailRepository()); m_pop3Protocol.login("foo", pass); assertEquals(1, m_pop3Protocol.getState()); } public void testKnownUserInboxWithMessages() throws Exception { finishSetUp(m_testConfiguration); m_pop3Protocol = new POP3Client(); m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort); m_usersRepository.addUser("foo2", "bar2"); MockMailRepository mailRep = new MockMailRepository(); setupTestMails(mailRep); m_mailServer.setUserInbox("foo2", mailRep); m_pop3Protocol.login("foo2", "bar2"); assertEquals(1, m_pop3Protocol.getState()); POP3MessageInfo[] entries = m_pop3Protocol.listMessages(); assertNotNull(entries); assertEquals(2, entries.length); assertEquals(1, m_pop3Protocol.getState()); Reader r = m_pop3Protocol.retrieveMessageTop(entries[0].number, 0); assertNotNull(r); r.close(); Reader r2 = m_pop3Protocol.retrieveMessage(entries[0].number); assertNotNull(r2); r2.close(); boolean deleted = m_pop3Protocol.deleteMessage(entries[0].number); assertTrue(deleted); assertEquals(1, m_pop3Protocol.getState()); m_pop3Protocol.sendCommand("quit"); m_pop3Protocol.disconnect(); m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort); m_pop3Protocol.login("foo2", "bar2"); assertEquals(1, m_pop3Protocol.getState()); entries = null; POP3MessageInfo stats = m_pop3Protocol.status(); assertEquals(92, stats.size); assertEquals(1, stats.number); entries = m_pop3Protocol.listMessages(); assertNotNull(entries); assertEquals(1, entries.length); assertEquals(1, m_pop3Protocol.getState()); Reader r3 = m_pop3Protocol.retrieveMessageTop(entries[0].number, 0); assertNotNull(r3); r3.close(); } private void setupTestMails(MockMailRepository mailRep) throws MessagingException { ArrayList recipients = new ArrayList(); recipients.add(new MailAddress("recipient@test.com")); MimeMessage mw = new MimeMessageCopyOnWriteProxy( new MimeMessageInputStreamSource( "test", new SharedByteArrayInputStream( ("Return-path: return@test.com\r\n"+ "Content-Transfer-Encoding: plain\r\n"+ "Subject: test\r\n\r\n"+ "Body Text\r\n").getBytes()))); MailImpl m = new MailImpl("name", new MailAddress("from@test.com"), recipients, mw); mailRep.store(m); MimeMessage mw2 = new MimeMessageCopyOnWriteProxy( new MimeMessageInputStreamSource( "test2", new SharedByteArrayInputStream( ("").getBytes()))); MailImpl mailimpl2 = new MailImpl("name2", new MailAddress("from@test.com"), recipients, mw2); mailRep.store(mailimpl2); m.dispose(); mailimpl2.dispose(); } public void testTwoSimultaneousMails() throws Exception { finishSetUp(m_testConfiguration); // make two user/repositories, open both m_usersRepository.addUser("foo1", "bar1"); MockMailRepository mailRep1 = new MockMailRepository(); setupTestMails(mailRep1); m_mailServer.setUserInbox("foo1", mailRep1); m_usersRepository.addUser("foo2", "bar2"); MockMailRepository mailRep2 = new MockMailRepository(); //do not setupTestMails, this is done later m_mailServer.setUserInbox("foo2", mailRep2); POP3Client pop3Protocol2 = null; try { // open two connections m_pop3Protocol = new POP3Client(); m_pop3Protocol.connect("127.0.0.1", m_pop3ListenerPort); pop3Protocol2 = new POP3Client(); pop3Protocol2.connect("127.0.0.1", m_pop3ListenerPort); assertEquals("first connection taken", 0, m_pop3Protocol.getState()); assertEquals("second connection taken", 0, pop3Protocol2.getState()); // open two accounts m_pop3Protocol.login("foo1", "bar1"); pop3Protocol2.login("foo2", "bar2"); POP3MessageInfo[] entries = m_pop3Protocol.listMessages(); assertEquals("foo1 has mails", 2, entries.length); entries = pop3Protocol2.listMessages(); assertEquals("foo2 has no mails", 0, entries.length); } finally { // put both to rest, field var is handled by tearDown() if (pop3Protocol2 != null) { pop3Protocol2.sendCommand("quit"); pop3Protocol2.disconnect(); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -