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 ba...@apache.org on 2006/01/10 01:01:17 UTC
svn commit: r367429 - in /james/server/trunk/src/test/org/apache/james:
pop3server/POP3ServerTest.java remotemanager/RemoteManagerTest.java
test/mock/james/MockUsersRepository.java test/util/Util.java
Author: bago
Date: Mon Jan 9 16:01:10 2006
New Revision: 367429
URL: http://svn.apache.org/viewcvs?rev=367429&view=rev
Log:
Applied unittest patch v0.4 (JAMES-427)
Thanx to Bernd Fondermann
Modified:
james/server/trunk/src/test/org/apache/james/pop3server/POP3ServerTest.java
james/server/trunk/src/test/org/apache/james/remotemanager/RemoteManagerTest.java
james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersRepository.java
james/server/trunk/src/test/org/apache/james/test/util/Util.java
Modified: james/server/trunk/src/test/org/apache/james/pop3server/POP3ServerTest.java
URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/pop3server/POP3ServerTest.java?rev=367429&r1=367428&r2=367429&view=diff
==============================================================================
--- james/server/trunk/src/test/org/apache/james/pop3server/POP3ServerTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/pop3server/POP3ServerTest.java Mon Jan 9 16:01:10 2006
@@ -41,6 +41,7 @@
import com.sun.mail.util.SharedByteArrayInputStream;
import javax.mail.internet.MimeMessage;
+import javax.mail.MessagingException;
import java.io.IOException;
import java.io.InputStream;
@@ -208,25 +209,7 @@
m_usersRepository.addUser("foo2", "bar2");
MockMailRepository mailRep = new MockMailRepository();
- MimeMessage mw = new MimeMessageWrapper(
- 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())));
- MimeMessage mw2 = new MimeMessageWrapper(
- new MimeMessageInputStreamSource(
- "test2",
- new SharedByteArrayInputStream(
- ("").getBytes())));
- ArrayList recipients = new ArrayList();
- recipients.add(new MailAddress("recipient@test.com"));
- mailRep.store(new MailImpl("name", new MailAddress("from@test.com"),
- recipients, mw));
- mailRep.store(new MailImpl("name2", new MailAddress("from@test.com"),
- recipients, mw2));
+ setupTestMails(mailRep);
m_mailServer.setUserInbox("foo2", mailRep);
@@ -318,6 +301,88 @@
}
pop3Protocol.quit();
}
+
+ private void setupTestMails(MockMailRepository mailRep) throws MessagingException {
+ ArrayList recipients = new ArrayList();
+ recipients.add(new MailAddress("recipient@test.com"));
+ MimeMessage mw = new MimeMessageWrapper(
+ 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())));
+ mailRep.store(new MailImpl("name", new MailAddress("from@test.com"),
+ recipients, mw));
+ MimeMessage mw2 = new MimeMessageWrapper(
+ new MimeMessageInputStreamSource(
+ "test2",
+ new SharedByteArrayInputStream(
+ ("").getBytes())));
+ mailRep.store(new MailImpl("name2", new MailAddress("from@test.com"),
+ recipients, mw2));
+ }
+
+ 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);
+
+ // open two connections
+ POP3Protocol pop3Protocol1 = new POP3Protocol("127.0.0.1",
+ m_pop3ListenerPort);
+ POP3Protocol pop3Protocol2 = new POP3Protocol("127.0.0.1",
+ m_pop3ListenerPort);
+ pop3Protocol1.openPort();
+ pop3Protocol2.openPort();
+
+ assertEquals("first connection taken", 1, pop3Protocol1.getState());
+ assertEquals("second connection taken", 1, pop3Protocol2.getState());
+
+ // open two accounts
+ int res = 0;
+ try {
+ pop3Protocol1.userPass("foo1", "bar1".toCharArray());
+ } catch (POP3Exception e) {
+ res = e.getResponse().getType();
+ }
+
+ try {
+ pop3Protocol2.userPass("foo2", "bar2".toCharArray());
+ } catch (POP3Exception e) {
+ res = e.getResponse().getType();
+ }
+
+ ScanListEntry[] entries = null;
+ try {
+ entries = pop3Protocol1.list();
+ assertEquals("foo1 has mails", 2, entries.length);
+ } catch (POP3Exception e) {
+ res = e.getResponse().getType();
+ }
+
+ try {
+ entries = pop3Protocol2.list();
+ assertEquals("foo2 has no mails", 0, entries.length);
+ } catch (POP3Exception e) {
+ res = e.getResponse().getType();
+ }
+
+ // put both to rest
+ pop3Protocol1.quit();
+ pop3Protocol2.quit();
+ }
+
}
class MyPOP3Protocol extends POP3Protocol {
Modified: james/server/trunk/src/test/org/apache/james/remotemanager/RemoteManagerTest.java
URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/remotemanager/RemoteManagerTest.java?rev=367429&r1=367428&r2=367429&view=diff
==============================================================================
--- james/server/trunk/src/test/org/apache/james/remotemanager/RemoteManagerTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/remotemanager/RemoteManagerTest.java Mon Jan 9 16:01:10 2006
@@ -38,12 +38,17 @@
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
-import java.util.List;
import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
/**
- * Tests the org.apache.james.remotemanager.RemoteManager
+ * Tests the org.apache.james.remotemanager.RemoteManager
+ * TODO: impl missing command tests for:
+ * USER
+ * SHUTDOWN (hard to test, because it does shutdown the whole (testing) JVM
*/
+
public class RemoteManagerTest extends TestCase {
protected int m_remoteManagerListenerPort = Util.getRandomNonPrivilegedPort();
@@ -74,8 +79,12 @@
}
protected void login() throws IOException {
- sendCommand(m_testConfiguration.getLoginName());
- sendCommand(m_testConfiguration.getLoginPassword());
+ login(m_testConfiguration.getLoginName(), m_testConfiguration.getLoginPassword());
+ }
+
+ protected void login(String name, String password) throws IOException {
+ sendCommand(name);
+ sendCommand(password);
List answers = readAnswer();
String last = getLastLine(answers);
@@ -86,7 +95,7 @@
if (list == null || list.isEmpty()) return null;
return (String)list.get(list.size()-1);
}
-
+
protected List readAnswer() {
try {
while (!m_reader.ready()) { ; }
@@ -169,7 +178,7 @@
String last = getLastLine(answers);
assertTrue(last.startsWith("Login id:")); // login failed, getting new login prompt
}
-
+
public void testUserCount() throws IOException {
finishSetUp(m_testConfiguration);
connect();
@@ -189,7 +198,7 @@
sendCommand("countusers");
assertTrue(getLastLine(readAnswer()).endsWith(" 2")); // 2 total
-
+
m_mockUsersRepository.removeUser("testCount1");
sendCommand("countusers");
@@ -206,13 +215,13 @@
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"));
}
@@ -227,17 +236,85 @@
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 IOException {
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("help");
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ ; // ignore
+ }
+ assertTrue("command line is effective", readAnswer().size() > 0);
+
+ sendCommand("quit");
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ ; // ignore
+ }
+ List answers = readAnswer();
+
+ sendCommand("help");
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ ; // ignore
+ }
+ assertNull("connection is closed", m_reader.readLine());
+ }
+
+ public void testListUsers() throws IOException {
+ 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");
+ }
+
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ ; // ignore
+ }
+ readAnswer();
+
+ sendCommand("listusers");
+ List list = readAnswer();
+
+ 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));
+ }
+ }
+
public void testCommandCaseInsensitive() throws IOException {
finishSetUp(m_testConfiguration);
connect();
@@ -248,10 +325,10 @@
sendCommand("verify testDel");
assertTrue(getLastLine(readAnswer()).endsWith(" exists"));
-
+
sendCommand("VERIFY testDel");
assertTrue(getLastLine(readAnswer()).endsWith(" exists"));
-
+
sendCommand("vErIfY testDel");
assertTrue(getLastLine(readAnswer()).endsWith(" exists"));
}
@@ -266,11 +343,141 @@
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 IOException {
+ 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 IOException {
+ 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 IOException {
+ finishSetUp(m_testConfiguration);
+ connect();
+ login();
+
+ sendCommand("adduser testPwdUser pwd1");
+ assertTrue(getLastLine(readAnswer()).endsWith(" added"));
+
+ assertTrue("initial password", m_mockUsersRepository.test("testPwdUser", "pwd1"));
+
+ sendCommand("setpassword testPwdUser ");
+ assertTrue("password not changed to empty", m_mockUsersRepository.test("testPwdUser", "pwd1"));
+ readAnswer(); // ignore
+
+ // change pwd
+ sendCommand("setpassword testPwdUser pwd2");
+ assertTrue("password not changed to empty", m_mockUsersRepository.test("testPwdUser", "pwd2"));
+ readAnswer(); // ignore
+
+ // assure case sensitivity
+ sendCommand("setpassword testPwdUser pWD2");
+ assertFalse("password not changed to empty", m_mockUsersRepository.test("testPwdUser", "pwd2"));
+ assertTrue("password not changed to empty", m_mockUsersRepository.test("testPwdUser", "pWD2"));
+ readAnswer(); // ignore
+
}
}
Modified: james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersRepository.java
URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersRepository.java?rev=367429&r1=367428&r2=367429&view=diff
==============================================================================
--- james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersRepository.java (original)
+++ james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersRepository.java Mon Jan 9 16:01:10 2006
@@ -20,24 +20,48 @@
import org.apache.james.services.User;
import org.apache.james.services.UsersRepository;
import org.apache.james.userrepository.DefaultUser;
+import org.apache.james.userrepository.DefaultJamesUser;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
+import java.util.LinkedList;
public class MockUsersRepository implements UsersRepository {
private final HashMap m_users = new HashMap();
+ /**
+ * force the repository to hold implementations of JamesUser interface, instead of User
+ * JamesUser is _not_ required as of the UsersRepository interface, so the necessarity forcing it
+ * is due to code using UsersRepository while at the same time expecting it to hold JamesUsers
+ * (like in RemoteManagerHandler)
+ */
+ private boolean m_forceUseJamesUser = false;
+
+ public void setForceUseJamesUser() {
+ m_forceUseJamesUser = true;
+ }
+
public boolean addUser(User user) {
String key = user.getUserName();
if (m_users.containsKey(key)) return false;
m_users.put(key, user);
- return true;
+ return true;
}
public void addUser(String name, Object attributes) {
try {
- addUser(new DefaultUser(name, DigestUtil.digestString(((String)attributes), "SHA"), "SHA"));
+ String passwordHash = DigestUtil.digestString(((String) attributes), "SHA");
+
+ User user;
+ if (m_forceUseJamesUser) {
+ user = new DefaultJamesUser(name, passwordHash, "SHA");
+ } else {
+ user = new DefaultUser(name, passwordHash, "SHA");
+ }
+
+ addUser(user);
} catch (Exception e) {
e.printStackTrace(); // encoding failed
}
@@ -89,7 +113,17 @@
return m_users.size();
}
+ protected List listUserNames() {
+ Iterator users = m_users.values().iterator();
+ List userNames = new LinkedList();
+ while ( users.hasNext() ) {
+ User user = (User)users.next();
+ userNames.add(user.getUserName());
+ }
+
+ return userNames;
+ }
public Iterator list() {
- return m_users.values().iterator();
+ return listUserNames().iterator();
}
}
Modified: james/server/trunk/src/test/org/apache/james/test/util/Util.java
URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/test/util/Util.java?rev=367429&r1=367428&r2=367429&view=diff
==============================================================================
--- james/server/trunk/src/test/org/apache/james/test/util/Util.java (original)
+++ james/server/trunk/src/test/org/apache/james/test/util/Util.java Mon Jan 9 16:01:10 2006
@@ -23,7 +23,7 @@
public class Util {
public static int getRandomNonPrivilegedPort() {
- return ((int)( Math.random() * 1000) + 3000);
+ return ((int)( Math.random() * 3000) + 8000);
}
public static Configuration getValuedConfiguration(String name, String value) {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org