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