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 2010/01/22 11:29:28 UTC
svn commit: r902049 [1/2] - in /james/server/trunk:
imapserver-function/src/main/java/org/apache/james/imapserver/
mina-socket-library/src/main/java/org/apache/james/socket/mina/
pop3server-function/ pop3server-function/src/main/java/org/apache/james/p...
Author: norman
Date: Fri Jan 22 10:29:27 2010
New Revision: 902049
URL: http://svn.apache.org/viewvc?rev=902049&view=rev
Log:
Remove dependencies on cornerstone-sockets for pop3server,imapserver,smtpserver,remotemanager (JAMES-551)
Removed:
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapHandler.java
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapServerProtocolHandlerFactory.java
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3Handler.java
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3ServerMBeanImpl.java
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/POP3ServerProtocolServerHandlerFactory.java
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/package.html
james/server/trunk/pop3server-function/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerHandler.java
james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerMBeanImpl.java
james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/RemoteManagerProtocolHandlerFactory.java
james/server/trunk/remotemanager-function/src/main/java/org/apache/james/remotemanager/package.html
james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/RemoteManagerTest.java
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPHandler.java
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServerMBeanImpl.java
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/SMTPServerProtocolHandlerFactory.java
james/server/trunk/smtpserver-function/src/main/java/org/apache/james/smtpserver/package.html
james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
Modified:
james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/AbstractAsyncServer.java
james/server/trunk/pop3server-function/pom.xml
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RsetCmdHandler.java
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java
james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java
james/server/trunk/pop3server-function/src/test/java/org/apache/james/pop3server/AsyncPOP3ServerTest.java
james/server/trunk/remotemanager-function/pom.xml
james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/AsyncRemoteManagerTest.java
james/server/trunk/smtpserver-function/pom.xml
james/server/trunk/smtpserver-function/src/test/java/org/apache/james/smtpserver/AsyncSMTPServerTest.java
james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
Modified: james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/AbstractAsyncServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/AbstractAsyncServer.java?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/AbstractAsyncServer.java (original)
+++ james/server/trunk/mina-socket-library/src/main/java/org/apache/james/socket/mina/AbstractAsyncServer.java Fri Jan 22 10:29:27 2010
@@ -285,8 +285,13 @@
if (isEnabled()) {
preInit();
buildSSLContextFactory();
+
+ // add connectionfilter in the first of the chain
+ DefaultIoFilterChainBuilder builder = createIoFilterChainBuilder();
+ builder.addFirst("connectionFilter", new ConnectionFilter(getLogger(), connectionLimit, connPerIP));
+
SocketAcceptor acceptor = new NioSocketAcceptor();
- acceptor.setFilterChainBuilder(createIoFilterChainBuilder());
+ acceptor.setFilterChainBuilder(builder);
acceptor.setBacklog(backlog);
acceptor.setReuseAddress(true);
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, timeout );
@@ -468,7 +473,6 @@
ProtocolCodecFilter codecFactory = new ProtocolCodecFilter(new TextLineCodecFactory(getProtocolCharset(), LineDelimiter.CRLF, LineDelimiter.CRLF));
DefaultIoFilterChainBuilder builder = new DefaultIoFilterChainBuilder();
builder.addLast("protocolCodecFactory", codecFactory);
- builder.addLast("connectionFilter", new ConnectionFilter(getLogger(), connectionLimit, connPerIP));
return builder;
}
Modified: james/server/trunk/pop3server-function/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/pom.xml?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/pom.xml (original)
+++ james/server/trunk/pop3server-function/pom.xml Fri Jan 22 10:29:27 2010
@@ -74,10 +74,7 @@
<groupId>org.apache.james</groupId>
<artifactId>james-server-core-library</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.james</groupId>
- <artifactId>james-server-avalon-socket-library</artifactId>
- </dependency>
+
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>james-server-socket-shared-library</artifactId>
@@ -100,15 +97,7 @@
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
</dependency>
-
- <dependency>
- <groupId>org.apache.avalon.cornerstone.threads</groupId>
- <artifactId>cornerstone-threads-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.avalon.cornerstone.sockets</groupId>
- <artifactId>cornerstone-sockets-api</artifactId>
- </dependency>
+
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>james-server-common-util</artifactId>
Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java Fri Jan 22 10:29:27 2010
@@ -30,7 +30,6 @@
import org.apache.james.api.protocol.CommandHandler;
import org.apache.james.api.protocol.Request;
import org.apache.james.api.protocol.Response;
-import org.apache.james.pop3server.POP3Handler;
import org.apache.james.pop3server.POP3Response;
import org.apache.james.pop3server.POP3Session;
import org.apache.mailet.Mail;
@@ -54,7 +53,7 @@
POP3Response response = null;
String parameters = request.getArgument();
- if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+ if (session.getHandlerState() == POP3Session.TRANSACTION) {
Mail dm = (Mail) session.getState().get(POP3Session.DELETED);
if (parameters == null) {
Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java Fri Jan 22 10:29:27 2010
@@ -27,7 +27,6 @@
import javax.annotation.Resource;
-import org.apache.james.api.protocol.CommandHandler;
import org.apache.james.api.protocol.Request;
import org.apache.james.api.protocol.Response;
import org.apache.james.api.user.UsersRepository;
@@ -40,7 +39,7 @@
/**
* Handles PASS command
*/
-public class PassCmdHandler implements CommandHandler<POP3Session> {
+public class PassCmdHandler extends RsetCmdHandler {
private final static String COMMAND_NAME ="PASS";
private UsersRepository users;
@@ -83,7 +82,7 @@
throw new IllegalStateException("MailServer returned a null inbox for "+session.getUser());
}
session.setUserInbox(inbox);
- RsetCmdHandler.stat(session);
+ stat(session);
// Store the ipAddress to use it later for pop before smtp
POP3BeforeSMTPHelper.addIPAddress(session.getRemoteIPAddress());
Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RsetCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RsetCmdHandler.java?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RsetCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/RsetCmdHandler.java Fri Jan 22 10:29:27 2010
@@ -70,7 +70,7 @@
*
*/
@SuppressWarnings("unchecked")
- public static void stat(POP3Session session) {
+ protected void stat(POP3Session session) {
ArrayList<Mail> userMailbox = new ArrayList<Mail>();
Mail dm = (Mail) session.getState().get(POP3Session.DELETED);
Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/TopCmdHandler.java Fri Jan 22 10:29:27 2010
@@ -31,7 +31,6 @@
import org.apache.james.api.protocol.Request;
import org.apache.james.api.protocol.Response;
-import org.apache.james.pop3server.POP3Handler;
import org.apache.james.pop3server.POP3Response;
import org.apache.james.pop3server.POP3Session;
import org.apache.mailet.Mail;
@@ -70,7 +69,7 @@
argument1 = parameters.substring(pos+1);
}
- if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+ if (session.getHandlerState() == POP3Session.TRANSACTION) {
int num = 0;
int lines = 0;
try {
@@ -133,7 +132,7 @@
*/
public List<String> getImplementedCapabilities(POP3Session session) {
List<String> caps = new ArrayList<String>();
- if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+ if (session.getHandlerState() == POP3Session.TRANSACTION) {
caps.add(COMMAND_NAME);
return caps;
}
Modified: james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java (original)
+++ james/server/trunk/pop3server-function/src/main/java/org/apache/james/pop3server/core/UidlCmdHandler.java Fri Jan 22 10:29:27 2010
@@ -28,7 +28,6 @@
import org.apache.james.api.protocol.CommandHandler;
import org.apache.james.api.protocol.Request;
import org.apache.james.api.protocol.Response;
-import org.apache.james.pop3server.POP3Handler;
import org.apache.james.pop3server.POP3Response;
import org.apache.james.pop3server.POP3Session;
import org.apache.mailet.Mail;
@@ -47,7 +46,7 @@
public Response onCommand(POP3Session session, Request request) {
POP3Response response = null;
String parameters = request.getArgument();
- if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+ if (session.getHandlerState() == POP3Session.TRANSACTION) {
Mail dm = (Mail) session.getState().get(POP3Session.DELETED);
if (parameters == null) {
@@ -114,7 +113,7 @@
*/
public List<String> getImplementedCapabilities(POP3Session session) {
List<String> caps = new ArrayList<String>();
- if (session.getHandlerState() == POP3Handler.TRANSACTION) {
+ if (session.getHandlerState() == POP3Session.TRANSACTION) {
caps.add(COMMAND_NAME);
return caps;
}
Modified: james/server/trunk/pop3server-function/src/test/java/org/apache/james/pop3server/AsyncPOP3ServerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server-function/src/test/java/org/apache/james/pop3server/AsyncPOP3ServerTest.java?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/pop3server-function/src/test/java/org/apache/james/pop3server/AsyncPOP3ServerTest.java (original)
+++ james/server/trunk/pop3server-function/src/test/java/org/apache/james/pop3server/AsyncPOP3ServerTest.java Fri Jan 22 10:29:27 2010
@@ -19,10 +19,56 @@
package org.apache.james.pop3server;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.mail.MessagingException;
+import javax.mail.util.SharedByteArrayInputStream;
+
+import junit.framework.TestCase;
+
+import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.commons.logging.impl.SimpleLog;
+import org.apache.commons.net.pop3.POP3Client;
+import org.apache.commons.net.pop3.POP3MessageInfo;
+import org.apache.commons.net.pop3.POP3Reply;
+import org.apache.james.api.dnsservice.AbstractDNSServer;
+import org.apache.james.api.dnsservice.DNSService;
+import org.apache.james.api.kernel.mock.FakeLoader;
+import org.apache.james.api.user.UsersRepository;
+import org.apache.james.core.MailImpl;
import org.apache.james.pop3server.mina.AsyncPOP3Server;
+import org.apache.james.services.MailRepository;
+import org.apache.james.services.MailServer;
+import org.apache.james.test.mock.james.InMemorySpoolRepository;
+import org.apache.james.test.mock.james.MockFileSystem;
+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.POP3BeforeSMTPHelper;
+import org.apache.mailet.MailAddress;
+
+public class AsyncPOP3ServerTest extends TestCase {
-public class AsyncPOP3ServerTest extends POP3ServerTest {
+ private int m_pop3ListenerPort = Util.getNonPrivilegedPort();
+ private MockMailServer m_mailServer;
+ private POP3TestConfiguration m_testConfiguration;
+ private MockUsersRepository m_usersRepository = new MockUsersRepository();
+ private POP3Client m_pop3Protocol = null;
+ private MailImpl testMail1;
+ private MailImpl testMail2;
+ private FakeLoader serviceManager;
+ private DNSService dnsservice;
+ private MockFileSystem fSystem;
+
+ public AsyncPOP3ServerTest() {
+ super("AsyncPOP3ServerTest");
+ }
private AsyncPOP3Server m_pop3Server;
@@ -46,10 +92,468 @@
m_pop3Server.init();
}
+
+ protected void setUpServiceManager() throws Exception {
+ serviceManager = new FakeLoader();
+
+ m_mailServer = new MockMailServer(m_usersRepository);
+ serviceManager.put(MailServer.ROLE, m_mailServer);
+ serviceManager.put(UsersRepository.ROLE,
+ m_usersRepository);
+
+ dnsservice = setUpDNSServer();
+ serviceManager.put(DNSService.ROLE, setUpDNSServer());
+ fSystem = new MockFileSystem();
+ serviceManager.put(MockFileSystem.ROLE,fSystem);
+
+ }
+
+ private DNSService setUpDNSServer() {
+ DNSService dns = new AbstractDNSServer() {
+ public String getHostName(InetAddress addr) {
+ return "localhost";
+ }
+
+ public InetAddress getLocalHost() throws UnknownHostException {
+ return InetAddress.getLocalHost();
+ }
+
+ };
+ return dns;
+ }
+ protected void tearDown() throws Exception {
+ if (m_pop3Protocol != null) {
+ m_pop3Protocol.sendCommand("quit");
+ m_pop3Protocol.disconnect();
+ }
+ ContainerUtil.dispose(m_mailServer);
+ if (testMail1 != null) testMail1.dispose();
+ if (testMail2 != null) testMail2.dispose();
+ super.tearDown();
+ }
+
+ 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");
+ InMemorySpoolRepository mockMailRepository = new InMemorySpoolRepository();
+ m_mailServer.setUserInbox("foo", mockMailRepository);
+
+ // not authenticated
+ POP3MessageInfo[] entries = m_pop3Protocol.listMessages();
+ assertNull(entries);
+
+ m_pop3Protocol.login("foo", "bar");
+ System.err.println(m_pop3Protocol.getState());
+ assertEquals(1, m_pop3Protocol.getState());
+
+ entries = m_pop3Protocol.listMessages();
+ assertEquals(1, m_pop3Protocol.getState());
+
+ assertNotNull(entries);
+ assertEquals(entries.length, 0);
+
+ POP3MessageInfo p3i = m_pop3Protocol.listMessage(1);
+ assertEquals(1, m_pop3Protocol.getState());
+ assertNull(p3i);
+
+ ContainerUtil.dispose(mockMailRepository);
+ }
+
+ // TODO: This currently fails with Async implementation because
+ // it use Charset US-ASCII to decode / Encode the protocol
+ // from the RFC I'm currently not understand if NON-ASCII chars
+ // are allowed at all. So this needs to be checked
+ /*
public void testNotAsciiCharsInPassword() throws Exception {
- // TODO: This currently fails with Async implementation because
- // it use Charset US-ASCII to decode / Encode the protocol
- // from the RFC I'm currently not understand if NON-ASCII chars
- // are allowed at all. So this needs to be checked
+ 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);
+ InMemorySpoolRepository mockMailRepository = new InMemorySpoolRepository();
+ m_mailServer.setUserInbox("foo", mockMailRepository);
+
+ m_pop3Protocol.login("foo", pass);
+ assertEquals(1, m_pop3Protocol.getState());
+ ContainerUtil.dispose(mockMailRepository);
+ }
+ */
+
+
+ public void testUnknownCommand() throws Exception {
+ finishSetUp(m_testConfiguration);
+
+ m_pop3Protocol = new POP3Client();
+ m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort);
+
+ m_pop3Protocol.sendCommand("unkn");
+ assertEquals(0, m_pop3Protocol.getState());
+ assertEquals("Expected -ERR as result for an unknown command", m_pop3Protocol.getReplyString().substring(0,4),"-ERR");
+ }
+
+ public void testUidlCommand() throws Exception {
+ finishSetUp(m_testConfiguration);
+
+ m_usersRepository.addUser("foo", "bar");
+ InMemorySpoolRepository mockMailRepository = new InMemorySpoolRepository();
+ m_mailServer.setUserInbox("foo", mockMailRepository);
+
+ m_pop3Protocol = new POP3Client();
+ m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort);
+
+ m_pop3Protocol.sendCommand("uidl");
+ assertEquals(0, m_pop3Protocol.getState());
+
+ m_pop3Protocol.login("foo", "bar");
+
+ POP3MessageInfo[] list = m_pop3Protocol.listUniqueIdentifiers();
+ assertEquals("Found unexpected messages", 0, list.length);
+
+ m_pop3Protocol.disconnect();
+
+ setupTestMails(mockMailRepository);
+
+ m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort);
+ m_pop3Protocol.login("foo", "bar");
+
+ list = m_pop3Protocol.listUniqueIdentifiers();
+ assertEquals("Expected 2 messages, found: "+list.length, 2, list.length);
+ assertEquals("name", list[0].identifier);
+ assertEquals("name2", list[1].identifier);
+
+ POP3MessageInfo p3i = m_pop3Protocol.listUniqueIdentifier(1);
+ assertNotNull(p3i);
+ assertEquals("name", p3i.identifier);
+
+ }
+
+ public void testMiscCommandsWithWithoutAuth() throws Exception {
+ finishSetUp(m_testConfiguration);
+
+ m_usersRepository.addUser("foo", "bar");
+ InMemorySpoolRepository mockMailRepository = new InMemorySpoolRepository();
+ m_mailServer.setUserInbox("foo", mockMailRepository);
+
+ m_pop3Protocol = new POP3Client();
+ m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort);
+
+ m_pop3Protocol.sendCommand("noop");
+ assertEquals(0, m_pop3Protocol.getState());
+ assertEquals("-ERR", m_pop3Protocol.getReplyString().substring(0,4));
+
+ m_pop3Protocol.sendCommand("stat");
+ assertEquals(0, m_pop3Protocol.getState());
+ assertEquals("-ERR", m_pop3Protocol.getReplyString().substring(0,4));
+
+ m_pop3Protocol.sendCommand("pass");
+ assertEquals(0, m_pop3Protocol.getState());
+ assertEquals("-ERR", m_pop3Protocol.getReplyString().substring(0,4));
+
+ m_pop3Protocol.sendCommand("auth");
+ assertEquals(0, m_pop3Protocol.getState());
+ assertEquals("-ERR", m_pop3Protocol.getReplyString().substring(0,4));
+
+ m_pop3Protocol.sendCommand("rset");
+ assertEquals(0, m_pop3Protocol.getState());
+ assertEquals("-ERR", m_pop3Protocol.getReplyString().substring(0,4));
+
+ m_pop3Protocol.login("foo", "bar");
+
+ POP3MessageInfo[] list = m_pop3Protocol.listUniqueIdentifiers();
+ assertEquals("Found unexpected messages", 0, list.length);
+
+ m_pop3Protocol.sendCommand("noop");
+ assertEquals(1, m_pop3Protocol.getState());
+
+ m_pop3Protocol.sendCommand("pass");
+ assertEquals(1, m_pop3Protocol.getState());
+ assertEquals("-ERR", m_pop3Protocol.getReplyString().substring(0,4));
+
+ m_pop3Protocol.sendCommand("auth");
+ assertEquals(1, m_pop3Protocol.getState());
+ assertEquals("-ERR", m_pop3Protocol.getReplyString().substring(0,4));
+
+ m_pop3Protocol.sendCommand("user");
+ assertEquals(1, m_pop3Protocol.getState());
+ assertEquals("-ERR", m_pop3Protocol.getReplyString().substring(0,4));
+
+ m_pop3Protocol.sendCommand("rset");
+ 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");
+ InMemorySpoolRepository mailRep = new InMemorySpoolRepository();
+
+ setupTestMails(mailRep);
+
+ m_mailServer.setUserInbox("foo2", mailRep);
+
+ m_pop3Protocol.sendCommand("retr","1");
+ assertEquals(0, m_pop3Protocol.getState());
+ assertEquals("-ERR", m_pop3Protocol.getReplyString().substring(0,4));
+
+ 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();
+
+ // existing message
+ boolean deleted = m_pop3Protocol.deleteMessage(entries[0].number);
+ assertTrue(deleted);
+
+ // already deleted message
+ deleted = m_pop3Protocol.deleteMessage(entries[0].number);
+
+ // TODO: Understand why this fails...
+ //assertFalse(deleted);
+
+ // unexisting message
+ deleted = m_pop3Protocol.deleteMessage(10);
+ assertFalse(deleted);
+
+ 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(1, stats.number);
+ assertEquals(5, stats.size);
+
+ entries = m_pop3Protocol.listMessages();
+
+ assertNotNull(entries);
+ assertEquals(1, entries.length);
+ assertEquals(1, m_pop3Protocol.getState());
+
+ // top without arguments
+ m_pop3Protocol.sendCommand("top");
+ assertEquals("-ERR", m_pop3Protocol.getReplyString().substring(0,4));
+
+ Reader r3 = m_pop3Protocol.retrieveMessageTop(entries[0].number, 0);
+ assertNotNull(r3);
+ r3.close();
+ ContainerUtil.dispose(mailRep);
+ }
+
+ private void setupTestMails(MailRepository mailRep) throws MessagingException {
+ ArrayList<MailAddress> recipients = new ArrayList<MailAddress>();
+ recipients.add(new MailAddress("recipient@test.com"));
+ InputStream mw = new SharedByteArrayInputStream(
+ ("Return-path: return@test.com\r\n"+
+ "Content-Transfer-Encoding: plain\r\n"+
+ "Subject: test\r\n\r\n"+
+ "Body Text POP3ServerTest.setupTestMails\r\n").getBytes());
+ testMail1 = new MailImpl("name", new MailAddress("from@test.com"),
+ recipients, mw);
+ mailRep.store(testMail1);
+ InputStream mw2 = new SharedByteArrayInputStream(
+ ("EMPTY").getBytes());
+ testMail2 = new MailImpl("name2", new MailAddress("from@test.com"),
+ recipients, mw2);
+ mailRep.store(testMail2);
+ }
+
+ /*
+ public void testTwoSimultaneousMails() throws Exception {
+ finishSetUp(m_testConfiguration);
+
+ // make two user/repositories, open both
+ m_usersRepository.addUser("foo1", "bar1");
+ InMemorySpoolRepository mailRep1 = new InMemorySpoolRepository();
+ setupTestMails(mailRep1);
+ m_mailServer.setUserInbox("foo1", mailRep1);
+
+ m_usersRepository.addUser("foo2", "bar2");
+ InMemorySpoolRepository mailRep2 = new InMemorySpoolRepository();
+ //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();
+ }
+ }
+ }
+ */
+ public void testIpStored() throws Exception {
+ finishSetUp(m_testConfiguration);
+
+ m_pop3Protocol = new POP3Client();
+ m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort);
+
+ String pass = "password";
+ m_usersRepository.addUser("foo", pass);
+ InMemorySpoolRepository mockMailRepository = new InMemorySpoolRepository();
+ m_mailServer.setUserInbox("foo", mockMailRepository);
+
+ m_pop3Protocol.login("foo", pass);
+ assertEquals(1, m_pop3Protocol.getState());
+ assertTrue(POP3BeforeSMTPHelper.isAuthorized("127.0.0.1"));
+ ContainerUtil.dispose(mockMailRepository);
+ }
+
+ public void testCapa() throws Exception {
+ finishSetUp(m_testConfiguration);
+
+ m_pop3Protocol = new POP3Client();
+ m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort);
+
+ String pass = "password";
+ m_usersRepository.addUser("foo", pass);
+ InMemorySpoolRepository mockMailRepository = new InMemorySpoolRepository();
+ m_mailServer.setUserInbox("foo", mockMailRepository);
+
+ assertEquals(POP3Reply.OK, m_pop3Protocol.sendCommand("CAPA"));
+
+ m_pop3Protocol.getAdditionalReply();
+ m_pop3Protocol.getReplyString();
+ List<String> replies = Arrays.asList(m_pop3Protocol.getReplyStrings());
+
+ assertTrue("contains USER", replies.contains("USER"));
+
+ m_pop3Protocol.login("foo", pass);
+ assertEquals(POP3Reply.OK, m_pop3Protocol.sendCommand("CAPA"));
+
+ m_pop3Protocol.getAdditionalReply();
+ m_pop3Protocol.getReplyString();
+ replies = Arrays.asList(m_pop3Protocol.getReplyStrings());
+ assertTrue("contains USER", replies.contains("USER"));
+ assertTrue("contains UIDL", replies.contains("UIDL"));
+ assertTrue("contains TOP", replies.contains("TOP"));
+
+ ContainerUtil.dispose(mockMailRepository);
+
+ }
+
+
+ /*
+ * See JAMES-649
+ * The same happens when using RETR
+ *
+ * Comment to not broke the builds!
+ *
+ public void testOOMTop() throws Exception {
+ finishSetUp(m_testConfiguration);
+
+ int messageCount = 30000;
+ m_pop3Protocol = new POP3Client();
+ m_pop3Protocol.connect("127.0.0.1",m_pop3ListenerPort);
+
+ m_usersRepository.addUser("foo", "bar");
+ InMemorySpoolRepository mockMailRepository = new InMemorySpoolRepository();
+
+ Mail m = new MailImpl();
+ m.setMessage(Util.createMimeMessage("X-TEST", "test"));
+ for (int i = 1; i < messageCount+1; i++ ) {
+ m.setName("test" + i);
+ mockMailRepository.store(m);
+ }
+
+ m_mailServer.setUserInbox("foo", mockMailRepository);
+
+ // not authenticated
+ POP3MessageInfo[] entries = m_pop3Protocol.listMessages();
+ assertNull(entries);
+
+ m_pop3Protocol.login("foo", "bar");
+ System.err.println(m_pop3Protocol.getState());
+ assertEquals(1, m_pop3Protocol.getState());
+
+ entries = m_pop3Protocol.listMessages();
+ assertEquals(1, m_pop3Protocol.getState());
+
+ assertNotNull(entries);
+ assertEquals(entries.length, messageCount);
+
+ for (int i = 1; i < messageCount+1; i++ ) {
+ Reader r = m_pop3Protocol.retrieveMessageTop(i, 100);
+ assertNotNull(r);
+ r.close();
+ }
+
+ ContainerUtil.dispose(mockMailRepository);
}
+ */
+
}
Modified: james/server/trunk/remotemanager-function/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/pom.xml?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/pom.xml (original)
+++ james/server/trunk/remotemanager-function/pom.xml Fri Jan 22 10:29:27 2010
@@ -57,10 +57,7 @@
<groupId>org.apache.james</groupId>
<artifactId>james-server-user-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.james</groupId>
- <artifactId>james-server-avalon-socket-library</artifactId>
- </dependency>
+
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>james-server-socket-shared-library</artifactId>
@@ -79,14 +76,6 @@
</dependency>
<dependency>
- <groupId>org.apache.avalon.cornerstone.threads</groupId>
- <artifactId>cornerstone-threads-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.avalon.cornerstone.sockets</groupId>
- <artifactId>cornerstone-sockets-api</artifactId>
- </dependency>
- <dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
</dependency>
@@ -149,10 +138,5 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>commons-jxpath</groupId>
- <artifactId>commons-jxpath</artifactId>
- <scope>runtime</scope>
- </dependency>
</dependencies>
</project>
\ No newline at end of file
Modified: james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/AsyncRemoteManagerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/AsyncRemoteManagerTest.java?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/AsyncRemoteManagerTest.java (original)
+++ james/server/trunk/remotemanager-function/src/test/java/org/apache/james/remotemanager/AsyncRemoteManagerTest.java Fri Jan 22 10:29:27 2010
@@ -19,32 +19,861 @@
package org.apache.james.remotemanager;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.mail.MessagingException;
+
+import junit.framework.TestCase;
+
+import org.apache.avalon.framework.container.ContainerUtil;
import org.apache.commons.logging.impl.SimpleLog;
+import org.apache.commons.net.telnet.TelnetClient;
+import org.apache.james.api.dnsservice.AbstractDNSServer;
+import org.apache.james.api.dnsservice.DNSService;
+import org.apache.james.api.domainlist.ManageableDomainList;
+import org.apache.james.api.domainlist.SimpleDomainList;
+import org.apache.james.api.kernel.mock.FakeLoader;
+import org.apache.james.api.user.UsersRepository;
+import org.apache.james.api.user.UsersStore;
+import org.apache.james.api.vut.management.MockVirtualUserTableManagementService;
+import org.apache.james.api.vut.management.VirtualUserTableManagementService;
+import org.apache.james.management.BayesianAnalyzerManagementException;
+import org.apache.james.management.BayesianAnalyzerManagementService;
+import org.apache.james.management.DomainListManagementException;
+import org.apache.james.management.DomainListManagementService;
+import org.apache.james.management.ProcessorManagementService;
+import org.apache.james.management.SpoolFilter;
+import org.apache.james.management.SpoolManagementException;
+import org.apache.james.management.SpoolManagementService;
import org.apache.james.remotemanager.mina.AsyncRemoteManager;
+import org.apache.james.services.MailServer;
+import org.apache.james.test.mock.avalon.MockStore;
+import org.apache.james.test.mock.james.MockFileSystem;
+import org.apache.james.test.mock.james.MockMailServer;
+import org.apache.james.test.mock.james.MockUsersStore;
+import org.apache.james.test.util.Util;
+import org.apache.james.userrepository.MockUsersRepository;
+import org.apache.james.util.InternetPrintWriter;
+
+public class AsyncRemoteManagerTest extends TestCase {
+ private int m_remoteManagerListenerPort = Util.getNonPrivilegedPort();
+ private RemoteManagerTestConfiguration m_testConfiguration;
+ private String m_host = "127.0.0.1";
+ private BufferedReader m_reader;
+ private InternetPrintWriter m_writer;
+ private TelnetClient m_telnetClient;
+ private MockUsersRepository m_mockUsersRepository;
+ private MockMailServer mailServer;
+ private FakeLoader serviceManager;
+ private MockUsersStore usersStore;
+ private DNSService dnsservice;
+ private MockFileSystem filesystem;
+ private MockVirtualUserTableManagementService vutManagement;
+ private AsyncRemoteManager remotemanager;
+
+ protected void setUp() throws Exception {
+ setUpFakeLoader();
+
+ remotemanager = new AsyncRemoteManager();
+ remotemanager.setDNSService(dnsservice);
+ remotemanager.setFileSystem(filesystem);
+ remotemanager.setLoader(serviceManager);
+ SimpleLog log = new SimpleLog("Mock");
+ log.setLevel(SimpleLog.LOG_LEVEL_DEBUG);
+ remotemanager.setLog(log);
+ remotemanager.setMailServer(mailServer);
+ m_testConfiguration = new RemoteManagerTestConfiguration(
+ m_remoteManagerListenerPort);
+ }
+
+ protected void tearDown() throws Exception {
+ ContainerUtil.dispose(mailServer);
+ super.tearDown();
+ }
+
+ protected void finishSetUp(RemoteManagerTestConfiguration testConfiguration)
+ throws Exception {
+ testConfiguration.init();
+ remotemanager.configure(testConfiguration);
+ remotemanager.init();
+ }
+
+ protected void login() throws IOException {
+ login(m_testConfiguration.getLoginName(), m_testConfiguration
+ .getLoginPassword());
+ }
+
+ protected void login(String name, String password) throws IOException {
+ sendCommand(name);
+ List answers = readAnswer();
+ String last = getLastLine(answers);
+ assertTrue("Last line does not start with Password: " + last, last
+ .startsWith("Password:"));
+ sendCommand(password);
+ answers = readAnswer();
+ last = getLastLine(answers);
+ assertTrue("Last line does not start with Welcome: " + last, last
+ .startsWith("Welcome"));
+ }
+
+ protected String getLastLine(List list) {
+ if (list == null || list.isEmpty())
+ return null;
+ return (String) list.get(list.size() - 1);
+ }
+
+ protected List readAnswer() {
+ return readAnswer(1);
+ }
+
+ protected List readAnswer(int numLines) {
+ List allAnswerLines = new ArrayList();
+ try {
+ if (numLines > 0) {
+ for (int i = 0; i < numLines; i++) {
+ allAnswerLines.add(m_reader.readLine());
+ }
+ } else {
+ String line = m_reader.readLine();
+ allAnswerLines.add(line);
+
+ while (m_reader.ready()) {
+ allAnswerLines.add(m_reader.readLine());
+ }
+ }
+ return allAnswerLines;
+ } catch (IOException e) {
+ return null;
+ }
+ }
+
+ protected void sendCommand(String command) throws IOException {
+ m_writer.println(command);
+ m_writer.flush();
+ }
+
+ protected void connect() throws IOException {
+ m_telnetClient = new TelnetClient();
+ m_telnetClient.connect(m_host, m_remoteManagerListenerPort);
+
+ m_reader = new BufferedReader(new InputStreamReader(
+ new BufferedInputStream(m_telnetClient.getInputStream(), 1024),
+ "ASCII"));
+ m_writer = new InternetPrintWriter(new BufferedOutputStream(
+ m_telnetClient.getOutputStream(), 1024), true);
+
+ readAnswer(3);
+ }
+
+ protected void setUpFakeLoader() throws Exception {
+ serviceManager = new FakeLoader();
+
+ m_mockUsersRepository = new MockUsersRepository();
+
+ mailServer = new MockMailServer(m_mockUsersRepository);
+ usersStore = new MockUsersStore(m_mockUsersRepository);
+
+ serviceManager.put(MailServer.ROLE, mailServer);
+ serviceManager.put(UsersRepository.ROLE, m_mockUsersRepository);
+
+ filesystem = new MockFileSystem();
+ serviceManager.put(MockFileSystem.ROLE, filesystem);
+
+ serviceManager.put(UsersStore.ROLE, usersStore);
+
+ dnsservice = setUpDNSServer();
+ serviceManager.put(DNSService.ROLE, dnsservice);
+ vutManagement = new MockVirtualUserTableManagementService();
+ // VirtualUserTableManagementService vutManagement = new
+ // VirtualUserTableManagement();
+ // vutManagement.setVirtualUserTableStore(vutStore);
+ // vutManagement.setVirtualUserTableManagement(new
+ // MockVirtualUserTableManagementImpl());
+ serviceManager.put(VirtualUserTableManagementService.ROLE,
+ new MockVirtualUserTableManagementService());
+
+ ManageableDomainList xml = new SimpleDomainList();
+
+ DomainListManagementService domManagement = new DomainListManagementService() {
+
+ private ManageableDomainList domainList;
+
+ public boolean addDomain(String domain)
+ throws DomainListManagementException {
+ return domainList.addDomain(domain);
+ }
+
+ public DomainListManagementService setDomainList(
+ ManageableDomainList xml) {
+ this.domainList = xml;
+ return this;
+ }
+
+ public boolean containsDomain(String domain) {
+ return domainList.containsDomain(domain);
+ }
+
+ public List getDomains() {
+ return domainList.getDomains();
+ }
+
+ public boolean removeDomain(String domain)
+ throws DomainListManagementException {
+ return domainList.removeDomain(domain);
+ }
+
+ }.setDomainList(xml);
+
+ serviceManager.put(DomainListManagementService.ROLE, domManagement);
+ serviceManager.put(BayesianAnalyzerManagementService.ROLE,
+ new BayesianAnalyzerManagementService() {
+
+ public void resetData()
+ throws BayesianAnalyzerManagementException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void importData(String file)
+ throws BayesianAnalyzerManagementException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void exportData(String file)
+ throws BayesianAnalyzerManagementException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public int addSpamFromMbox(String file)
+ throws BayesianAnalyzerManagementException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int addSpamFromDir(String dir)
+ throws BayesianAnalyzerManagementException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int addHamFromMbox(String file)
+ throws BayesianAnalyzerManagementException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int addHamFromDir(String dir)
+ throws BayesianAnalyzerManagementException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+ });
+
+ serviceManager.put(SpoolManagementService.ROLE,
+ new SpoolManagementService() {
+
+ public int resendSpoolItems(String spoolRepositoryURL,
+ String key, List lockingFailures, SpoolFilter filter)
+ throws MessagingException, SpoolManagementException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int removeSpoolItems(String spoolRepositoryURL,
+ String key, List lockingFailures, SpoolFilter filter)
+ throws MessagingException, SpoolManagementException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int moveSpoolItems(String srcSpoolRepositoryURL,
+ String dstSpoolRepositoryURL, String dstState,
+ SpoolFilter filter) throws MessagingException,
+ SpoolManagementException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public List getSpoolItems(String spoolRepositoryURL,
+ SpoolFilter filter) throws MessagingException,
+ SpoolManagementException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ });
+ serviceManager.put(MockStore.ROLE, new MockStore());
+ serviceManager.put(ProcessorManagementService.ROLE,
+ new ProcessorManagementService() {
+
+ public String[] getProcessorNames() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String[] getMatcherParameters(String processorName,
+ int matcherIndex) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String[] getMatcherNames(String processorName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String[] getMailetParameters(String processorName,
+ int mailetIndex) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String[] getMailetNames(String processorName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ });
+ }
+
+ private DNSService setUpDNSServer() {
+ DNSService dns = new AbstractDNSServer() {
+ public String getHostName(InetAddress addr) {
+ return "localhost";
+ }
+
+ public InetAddress getLocalHost() throws UnknownHostException {
+ return InetAddress.getLocalHost();
+ }
+
+ public InetAddress[] getAllByName(String name)
+ throws UnknownHostException {
+ return new InetAddress[] { InetAddress.getLocalHost() };
+ }
+ };
+
+ return dns;
+ }
+
+ /*
+ * public void testCustomCommand() throws Exception {
+ * finishSetUp(m_testConfiguration); connect(); login();
+ *
+ * sendCommand("echo hsif eht lla rof sknaht"); String lastLine =
+ * getLastLine(readAnswer()); assertEquals("Arguments echoed",
+ * "hsif eht lla rof sknaht", lastLine); }
+ */
+ public void testLogin() throws Exception {
+ finishSetUp(m_testConfiguration);
+ connect();
+
+ login();
+ }
+
+ public void testWrongLoginUser() throws Exception {
+ finishSetUp(m_testConfiguration);
+ connect();
+
+ sendCommand("sindbad");
+ List answers = readAnswer();
+ sendCommand(m_testConfiguration.getLoginPassword());
+
+ // we should receive the fail message and a new Login id.
+ answers = readAnswer(2);
+ String last = getLastLine(answers);
+ assertTrue("Last line does not start with 'Login id:' but with '"
+ + last + "'", last.startsWith("Login id:")); // login failed,
+ // getting new
+ // login prompt
+ }
+
+ public void testWrongLoginPassword() throws Exception {
+ finishSetUp(m_testConfiguration);
+ connect();
+
+ sendCommand(m_testConfiguration.getLoginName());
+ List answers = readAnswer();
+ sendCommand("getmethru");
+
+ answers = readAnswer(2);
+ String last = getLastLine(answers);
+ assertTrue("Line does not start with 'Login id:' but with '" + last
+ + "'", last.startsWith("Login id:")); // login failed, getting
+ // new login prompt
+ }
+
+ public void testUserCount() throws Exception {
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("countusers");
+ assertTrue(getLastLine(readAnswer()).endsWith(" 0")); // no user yet
+
+ sendCommand("adduser testCount1 testCount");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added")); // success
+
+ sendCommand("countusers");
+ assertTrue(getLastLine(readAnswer()).endsWith(" 1")); // 1 total
+
+ sendCommand("adduser testCount2 testCount");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added")); // success
+
+ sendCommand("countusers");
+ assertTrue(getLastLine(readAnswer()).endsWith(" 2")); // 2 total
+
+ m_mockUsersRepository.removeUser("testCount1");
+
+ sendCommand("countusers");
+ assertTrue(getLastLine(readAnswer()).endsWith(" 1")); // 1 total
+ }
+
+ public void testAddUserAndVerify() throws Exception {
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("adduser testAdd test");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added")); // success
+
+ sendCommand("verify testNotAdded");
+ assertTrue(getLastLine(readAnswer()).endsWith(" does not exist"));
+
+ sendCommand("verify testAdd");
+ assertTrue(getLastLine(readAnswer()).endsWith(" exists"));
+
+ sendCommand("deluser testAdd");
+ readAnswer();
+
+ sendCommand("verify testAdd");
+ assertTrue(getLastLine(readAnswer()).endsWith(" does not exist"));
+ }
+
+ public void testDelUser() throws Exception {
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("adduser testDel test");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added")); // success
+
+ sendCommand("deluser testNotDeletable");
+ assertTrue(getLastLine(readAnswer()).endsWith(" doesn't exist"));
+
+ sendCommand("verify testDel");
+ assertTrue(getLastLine(readAnswer()).endsWith(" exists"));
+
+ sendCommand("deluser testDel");
+ assertTrue(getLastLine(readAnswer()).endsWith(" deleted"));
+
+ sendCommand("verify testDel");
+ assertTrue(getLastLine(readAnswer()).endsWith(" does not exist"));
+ }
+
+ public void testQuit() throws Exception {
+
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("help");
+ delay();
+ assertTrue("command line is effective", readAnswer().size() > 0);
+
+ sendCommand("quit");
+ delay();
+ assertTrue("", readAnswer(39).contains("Bye"));
+
+ sendCommand("help");
+ delay();
+ assertNull("connection is closed", m_reader.readLine());
+ }
+
+ public void testListUsers() throws Exception {
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ String[] users = new String[] { "ccc", "aaa", "dddd", "bbbbb" };
+
+ for (int i = 0; i < users.length; i++) {
+ String user = users[i];
+ sendCommand("adduser " + user + " test");
+ readAnswer(1);
+ }
+
+ delay();
+
+ sendCommand("listusers");
+ List list = readAnswer(5);
+
+ assertEquals("user count line", "Existing accounts " + users.length,
+ list.get(0));
+
+ List readUserNames = new ArrayList();
+ for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+ String answerLine = (String) iterator.next();
+ if (!answerLine.startsWith("user: "))
+ continue;
+ readUserNames.add(answerLine.substring(6));
+ }
+ assertEquals("user count", users.length, readUserNames.size());
+
+ for (int i = 0; i < users.length; i++) {
+ String user = users[i];
+ assertTrue("name found", readUserNames.contains(user));
+ }
+ }
+
+ private void delay() {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ ; // ignore
+ }
+ }
+
+ public void testCommandCaseInsensitive() throws Exception {
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("adduser testDel test");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added")); // success
+
+ sendCommand("verify testDel");
+ assertTrue(getLastLine(readAnswer()).endsWith(" exists"));
+
+ sendCommand("VERIFY testDel");
+ assertTrue(getLastLine(readAnswer()).endsWith(" exists"));
+
+ sendCommand("vErIfY testDel");
+ assertTrue(getLastLine(readAnswer()).endsWith(" exists"));
+ }
+
+ public void testParameterCaseSensitive() throws Exception {
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("adduser testDel test");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added")); // success
+
+ sendCommand("verify testDel");
+ assertTrue(getLastLine(readAnswer()).endsWith(" exists"));
+
+ sendCommand("verify TESTDEL");
+ assertTrue(getLastLine(readAnswer()).endsWith(" does not exist"));
+
+ sendCommand("verify testdel");
+ assertTrue(getLastLine(readAnswer()).endsWith(" does not exist"));
+ }
+
+ public void testAlias() throws Exception {
+ m_mockUsersRepository.setForceUseJamesUser();
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ // do some tests when parameter users don't exist
+ sendCommand("setalias testNonExist1 testNonExist2");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "No such user testNonExist1"));
+
+ sendCommand("adduser testAlias1 test");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added"));
+
+ sendCommand("showalias testAlias1");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "User testAlias1 does not currently have an alias"));
+
+ sendCommand("setalias testAlias1 testNonExist2");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "Alias unknown to server - create that user first."));
+
+ sendCommand("setalias testNonExist1 testAlias");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "No such user testNonExist1"));
+
+ sendCommand("adduser testAlias2 test");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added"));
+
+ // regular alias
+ sendCommand("setalias testAlias1 testAlias2");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "Alias for testAlias1 set to:testAlias2"));
+
+ // TODO: is this correct? even primitive circular aliasing allowed!
+ sendCommand("setalias testAlias2 testAlias1");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "Alias for testAlias2 set to:testAlias1"));
+
+ // did first one persist?
+ sendCommand("showalias testAlias1");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "Current alias for testAlias1 is: testAlias2"));
+
+ // TODO: is this correct? setting self as alias!
+ sendCommand("setalias testAlias1 testAlias1");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "Alias for testAlias1 set to:testAlias1"));
+
+ sendCommand("adduser testAlias3 test");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added"));
+
+ // re-set, simply overwrites
+ sendCommand("setalias testAlias1 testAlias3");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "Alias for testAlias1 set to:testAlias3"));
+
+ // check overwrite
+ sendCommand("showalias testAlias1");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "Current alias for testAlias1 is: testAlias3"));
+
+ // retreat
+ sendCommand("unsetalias testAlias1");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "Alias for testAlias1 unset"));
+
+ // check removed alias
+ sendCommand("showalias testAlias1");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "User testAlias1 does not currently have an alias"));
+
+ }
+
+ public void testForward() throws Exception {
+ m_mockUsersRepository.setForceUseJamesUser();
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ // do some tests when parameter users don't exist
+ sendCommand("setforwarding testNonExist1 testForward1@locahost");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "No such user testNonExist1"));
+
+ sendCommand("adduser testForwardUser test");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added"));
+
+ sendCommand("showforwarding testForwardUser");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "User testForwardUser is not currently being forwarded"));
+
+ sendCommand("setforwarding testForwardUser testForward1@locahost");
+ assertTrue(getLastLine(readAnswer())
+ .equals(
+ "Forwarding destination for testForwardUser set to:testForward1@locahost"));
+
+ // did it persist?
+ sendCommand("showforwarding testForwardUser");
+ assertTrue(getLastLine(readAnswer())
+ .equals(
+ "Current forwarding destination for testForwardUser is: testForward1@locahost"));
+
+ // re-set, simply overwrites
+ sendCommand("setforwarding testForwardUser testForward2@locahost");
+ assertTrue(getLastLine(readAnswer())
+ .equals(
+ "Forwarding destination for testForwardUser set to:testForward2@locahost"));
+
+ // check overwrite
+ sendCommand("showforwarding testForwardUser");
+ assertTrue(getLastLine(readAnswer())
+ .equals(
+ "Current forwarding destination for testForwardUser is: testForward2@locahost"));
+
+ // retreat
+ sendCommand("unsetforwarding testForwardUser");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "Forward for testForwardUser unset"));
+
+ // check removed forward
+ sendCommand("showforwarding testForwardUser");
+ assertTrue(getLastLine(readAnswer()).equals(
+ "User testForwardUser is not currently being forwarded"));
+
+ }
+
+ public void testSetPassword() throws Exception {
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ String lastLine;
+
+ sendCommand("adduser testPwdUser pwd1");
+ lastLine = getLastLine(readAnswer());
+ assertTrue(lastLine.endsWith(" added"));
+
+ assertTrue("initial password", m_mockUsersRepository.test(
+ "testPwdUser", "pwd1"));
+
+ sendCommand("setpassword testPwdUser ");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("password changed to empty: " + lastLine,
+ m_mockUsersRepository.test("testPwdUser", "pwd1"));
+
+ // change pwd
+ sendCommand("setpassword testPwdUser pwd2");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("password not changed to pwd2: " + lastLine,
+ m_mockUsersRepository.test("testPwdUser", "pwd2"));
+
+ // assure case sensitivity
+ sendCommand("setpassword testPwdUser pWD2");
+ lastLine = getLastLine(readAnswer());
+ assertFalse("password not changed to pWD2: " + lastLine,
+ m_mockUsersRepository.test("testPwdUser", "pwd2"));
+ assertTrue("password not changed to pWD2: " + lastLine,
+ m_mockUsersRepository.test("testPwdUser", "pWD2"));
+
+ }
+
+ public void testAddMapping() throws Exception {
+ String lastLine;
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("addmapping test@test junit");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add mapping", lastLine.endsWith("true"));
+
+ sendCommand("addmapping test@test junit");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Not add mapping... allready exists", lastLine
+ .endsWith("false"));
+ }
+
+ public void testRemoveMapping() throws Exception {
+ String lastLine;
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("addmapping test@test junit");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add mapping", lastLine.endsWith("true"));
+
+ sendCommand("removemapping test@test junit");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("remove mapping", lastLine.endsWith("true"));
+
+ sendCommand("removemapping test@test junit");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Not remove mapping... mapping not exists", lastLine
+ .endsWith("false"));
+ }
+
+ public void testListAllMappings() throws Exception {
+ String lastLine;
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("addmapping test@test junit");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add mapping", lastLine.endsWith("true"));
+
+ sendCommand("addmapping test2@test junit2");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add mapping", lastLine.endsWith("true"));
+
+ sendCommand("listallmappings");
+ List answer = readAnswer(3);
+ assertTrue("Read first mapping", answer.get(1).toString().contains(
+ "junit"));
+ assertTrue("Read second mapping line", answer.get(2).toString()
+ .contains("junit2"));
+ }
+
+ public void testListMapping() throws Exception {
+ String lastLine;
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("addmapping test@test junit");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add mapping", lastLine.endsWith("true"));
+
+ sendCommand("addmapping test2@test junit2");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add mapping", lastLine.endsWith("true"));
+
+ sendCommand("listmapping test@test");
+ lastLine = readAnswer(2).get(1).toString();
+ assertTrue("list mapping", lastLine.endsWith("junit"));
+ }
+
+ public void testaddDomain() throws Exception {
+ String lastLine;
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("adddomain domain");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add domain", lastLine.endsWith("successful"));
+
+ sendCommand("adddomain domain");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add domain which exists", lastLine.endsWith("fail"));
+
+ sendCommand("listdomains");
+
+ lastLine = readAnswer(2).get(1).toString();
+ assertTrue("list domain", lastLine.endsWith("domain"));
+ }
+
+ public void testremoveDomain() throws Exception {
+ String lastLine;
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("adddomain domain");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add domain", lastLine.endsWith("successful"));
-public class AsyncRemoteManagerTest extends RemoteManagerTest{
+ sendCommand("removedomain domain");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Remove domain", lastLine.endsWith("successful"));
+ sendCommand("removedomain domain");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Remove domain which not exist", lastLine.endsWith("fail"));
+ }
- private AsyncRemoteManager remotemanager;
+ public void testListDomains() throws Exception {
+ String lastLine;
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
- protected void setUp() throws Exception {
- setUpServiceManager();
+ sendCommand("adddomain domain");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add domain", lastLine.endsWith("successful"));
- remotemanager = new AsyncRemoteManager();
- remotemanager.setDNSService(dnsservice);
- remotemanager.setFileSystem(filesystem);
- remotemanager.setLoader(serviceManager);
- SimpleLog log = new SimpleLog("Mock");
- log.setLevel(SimpleLog.LOG_LEVEL_DEBUG);
- remotemanager.setLog(log);
- remotemanager.setMailServer(mailServer);
- m_testConfiguration = new RemoteManagerTestConfiguration(m_remoteManagerListenerPort);
- }
-
- protected void finishSetUp(RemoteManagerTestConfiguration testConfiguration) throws Exception {
- testConfiguration.init();
- remotemanager.configure(testConfiguration);
- remotemanager.init();
- }
+ sendCommand("adddomain domain2");
+ lastLine = getLastLine(readAnswer());
+ assertTrue("Add domain", lastLine.endsWith("successful"));
+ sendCommand("listdomains");
+ List answer = readAnswer(3);
+ assertTrue("list domain 1", answer.get(1).toString().endsWith("domain"));
+ assertTrue("list domain 2", answer.get(2).toString()
+ .endsWith("domain2"));
+ }
}
Modified: james/server/trunk/smtpserver-function/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver-function/pom.xml?rev=902049&r1=902048&r2=902049&view=diff
==============================================================================
--- james/server/trunk/smtpserver-function/pom.xml (original)
+++ james/server/trunk/smtpserver-function/pom.xml Fri Jan 22 10:29:27 2010
@@ -73,10 +73,6 @@
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
- <artifactId>james-server-avalon-socket-library</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.james</groupId>
<artifactId>james-server-mina-socket-library</artifactId>
</dependency>
<dependency>
@@ -96,14 +92,7 @@
<groupId>org.apache.avalon.cornerstone.store</groupId>
<artifactId>cornerstone-store-api</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.avalon.cornerstone.threads</groupId>
- <artifactId>cornerstone-threads-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.avalon.cornerstone.sockets</groupId>
- <artifactId>cornerstone-sockets-api</artifactId>
- </dependency>
+
<dependency>
<groupId>org.apache.avalon.framework</groupId>
<artifactId>avalon-framework-impl</artifactId>
@@ -129,11 +118,7 @@
<artifactId>dnsjava</artifactId>
<scope>runtime</scope>
</dependency>
- <dependency>
- <groupId>commons-jxpath</groupId>
- <artifactId>commons-jxpath</artifactId>
- <scope>runtime</scope>
- </dependency>
+
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org