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 jo...@apache.org on 2006/10/09 19:15:42 UTC

svn commit: r454432 [13/14] - in /james/server/sandbox/imap-integration: ./ lib/ src/java/ src/java/org/apache/james/imapserver/ src/java/org/apache/james/imapserver/commands/ src/java/org/apache/james/imapserver/debug/ src/java/org/apache/james/imapse...

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/CopySessionTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/CopySessionTest.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/CopySessionTest.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/CopySessionTest.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,147 @@
+package org.apache.james.imapserver.handler.session;
+
+import java.io.IOException;
+
+import javax.mail.MessagingException;
+import javax.mail.Flags.Flag;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.client.CopyClientCommand;
+import org.apache.james.imapserver.client.LoginCommand;
+import org.apache.james.imapserver.client.LogoutClientCommand;
+import org.apache.james.imapserver.client.MessageSet;
+import org.apache.james.imapserver.client.SelectCommand;
+import org.apache.james.imapserver.store.MailboxException;
+import org.apache.james.imapserver.util.MessageGenerator;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+
+public class CopySessionTest extends AbstractSessionTest {
+	
+	
+	String[] folders = {USER_MAILBOX_ROOT+".INBOX",USER_MAILBOX_ROOT+".test",USER_MAILBOX_ROOT+".test2"};
+	MimeMessage[] msgs= null;
+	long[] uids = null;
+	
+	public void setUp() throws MailboxException, MessagingException, IOException, MailboxManagerException {
+		super.setUp();
+		msgs=MessageGenerator.generateSimplesMessages(4);
+		createFolders(folders);
+		// increase the uid
+		appendMessagesClosed(USER_MAILBOX_ROOT+".INBOX",msgs);
+		deleteAll(USER_MAILBOX_ROOT+".INBOX");
+		msgs[0].setFlag(Flag.SEEN,true);
+		msgs[0].setFlag(Flag.ANSWERED,true);
+		msgs[1].setFlag(Flag.SEEN,true);
+		msgs[2].setFlag(Flag.ANSWERED,true);
+		uids=addUIDMessagesOpen(USER_MAILBOX_ROOT+".INBOX",msgs);
+	}
+	
+	
+	public void doTestCopyAll(boolean uid) throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+		verifyCommand(new SelectCommand("INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX")));
+
+		final MessageSet set;
+		if (uid) {
+			set = new MessageSet(msgs,uids,1,-1);
+		} else {
+			set = new MessageSet(msgs,1,-1);
+		}
+		verifyCommand(new CopyClientCommand(set,"test"));
+		
+		useFolder(USER_MAILBOX_ROOT+".test");
+		MimeMessage[] testMsgs=getMessages(USER_MAILBOX_ROOT+".test");
+		assertEquals(4,testMsgs.length);
+		for (int i = 0; i < msgs.length; i++) {
+			assertEquals("Message content differs "+i, MessageGenerator.messageContentToString(msgs[i]),
+					MessageGenerator.messageContentToString(testMsgs[i]));
+			assertEquals("Flags differ "+i,msgs[i].getFlags(),testMsgs[i].getFlags());
+		}
+		freeFolder(USER_MAILBOX_ROOT+".test");
+		
+		verifyCommand(new LogoutClientCommand());
+		assertFalse(isOpen(USER_MAILBOX_ROOT+".INBOX"));
+		assertFalse(isOpen(USER_MAILBOX_ROOT+".test"));	
+	}
+	
+	
+	public void doTestCopyOne(boolean uid) throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+		verifyCommand(new SelectCommand("INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX")));
+
+		final MessageSet set;
+		if (uid) {
+			set = new MessageSet(msgs,uids,6);
+		} else {
+			set = new MessageSet(msgs,2);
+		}
+		verifyCommand(new CopyClientCommand(set,"test"));
+		
+		useFolder("test");
+		MimeMessage[] testMsgs=getMessages(USER_MAILBOX_ROOT+".test");
+		assertEquals(1,testMsgs.length);
+		
+			assertEquals("Message content differs ", MessageGenerator.messageContentToString(msgs[1]),
+					MessageGenerator.messageContentToString(testMsgs[0]));
+			assertEquals("Flags differ ",msgs[1].getFlags(),testMsgs[0].getFlags());
+		
+		freeFolder(USER_MAILBOX_ROOT+".test");
+		
+		verifyCommand(new LogoutClientCommand());
+		assertFalse(isOpen(USER_MAILBOX_ROOT+".INBOX"));
+		assertFalse(isOpen(USER_MAILBOX_ROOT+".test"));	
+	}
+	public void doTestCopyThree(boolean uid) throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+		verifyCommand(new SelectCommand("INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX")));
+
+		final MessageSet set;
+		if (uid) {
+			set = new MessageSet(msgs,uids,6,8);
+		} else {
+			set = new MessageSet(msgs,2,4);
+		}
+		verifyCommand(new CopyClientCommand(set,"test"));
+		
+		useFolder(USER_MAILBOX_ROOT+".test");
+		MimeMessage[] testMsgs=getMessages(USER_MAILBOX_ROOT+".test");
+		assertEquals(3,testMsgs.length);
+		for (int i=0; i<3; i++) {
+			assertEquals("Message content differs ", MessageGenerator.messageContentToString(msgs[i+1]),
+					MessageGenerator.messageContentToString(testMsgs[i]));
+			assertEquals("Flags differ ",msgs[i+1].getFlags(),testMsgs[i].getFlags());
+		}
+		
+		freeFolder(USER_MAILBOX_ROOT+".test");
+		
+		verifyCommand(new LogoutClientCommand());
+		assertFalse(isOpen(USER_MAILBOX_ROOT+".INBOX"));
+		assertFalse(isOpen(USER_MAILBOX_ROOT+".test"));	
+	}
+	
+	
+	public void testCopyAll() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestCopyAll(false);
+	}
+	
+	public void testUidCopyAll() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestCopyAll(true);
+	}
+	
+	public void testCopyOne() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestCopyOne(false);
+	}
+	
+	public void testUidCopyOne() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestCopyOne(true);
+	}
+	
+	public void testCopyThree() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestCopyThree(false);
+	}
+	
+	public void testUidCopyThree() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestCopyThree(true);
+	}
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/CreateSessionTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/CreateSessionTest.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/CreateSessionTest.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/CreateSessionTest.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,36 @@
+package org.apache.james.imapserver.handler.session;
+
+import java.io.IOException;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.client.CreateClientCommand;
+import org.apache.james.imapserver.client.LoginCommand;
+import org.apache.james.imapserver.client.LogoutClientCommand;
+import org.apache.james.imapserver.client.SelectCommand;
+import org.apache.james.imapserver.store.MailboxException;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+
+public class CreateSessionTest extends AbstractSessionTest {
+	
+	String[] folders = {USER_MAILBOX_ROOT+".INBOX",USER_MAILBOX_ROOT+".test",USER_MAILBOX_ROOT+".test1",USER_MAILBOX_ROOT+".test1.test1a",USER_MAILBOX_ROOT+".test1.test1b",USER_MAILBOX_ROOT+".test2.test2a",USER_MAILBOX_ROOT+".test2.test2b"};
+	
+    public void setUp() throws MailboxException, MessagingException, IOException, MailboxManagerException {
+		super.setUp();
+		createFolders(folders);
+	}
+	
+	public void testCreateSelect() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+		
+		verifyCommand(new CreateClientCommand("Drafts"));
+		assertTrue(folderExists(USER_MAILBOX_ROOT+".Drafts"));
+		
+		verifyCommand(new SelectCommand("Drafts", new MimeMessage[0],getUidValidity(USER_MAILBOX_ROOT+".Drafts")));
+		
+		verifyCommand(new LogoutClientCommand());
+	}
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/DeleteSessionTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/DeleteSessionTest.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/DeleteSessionTest.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/DeleteSessionTest.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,53 @@
+package org.apache.james.imapserver.handler.session;
+
+import java.io.IOException;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.client.DeleteClientCommand;
+import org.apache.james.imapserver.client.LoginCommand;
+import org.apache.james.imapserver.client.LogoutClientCommand;
+import org.apache.james.imapserver.store.MailboxException;
+import org.apache.james.imapserver.util.MessageGenerator;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+
+public class DeleteSessionTest extends AbstractSessionTest {
+
+    String[] folders = { USER_MAILBOX_ROOT + ".INBOX",
+            USER_MAILBOX_ROOT + ".test", USER_MAILBOX_ROOT + ".test1",
+            USER_MAILBOX_ROOT + ".test1.test1a",
+            USER_MAILBOX_ROOT + ".test1.test1b",
+            USER_MAILBOX_ROOT + ".test2.test2a",
+            USER_MAILBOX_ROOT + ".test2.test2b" };
+
+    MimeMessage[] msgs = null;
+
+    public void setUp() throws MailboxException, MessagingException,
+            IOException, MailboxManagerException {
+        super.setUp();
+        msgs = MessageGenerator.generateSimplesMessages(4);
+        createFolders(folders);
+        // increase the uid
+        appendMessagesClosed(USER_MAILBOX_ROOT+".test1.test1a", msgs);
+ 
+    }
+
+    public void tearDown() throws Exception {
+        super.tearDown();
+        for (int i = 0; i < folders.length; i++) {
+            assertFalse(folders[i] + " is still in use!", isOpen(folders[i]));
+        }
+    }
+
+    public void testDeleteExisting() throws ProtocolException, IOException,
+            MessagingException, MailboxManagerException {
+        verifyCommand(new LoginCommand(USER_NAME, USER_PASSWORD));
+        assertTrue(folderExists(USER_MAILBOX_ROOT + ".test1.test1a"));
+        verifyCommand(new DeleteClientCommand("test1.test1a"));
+        assertFalse(folderExists(USER_MAILBOX_ROOT + ".test1.test1a"));
+        verifyCommand(new LogoutClientCommand());
+    }
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/RenameSessionTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/RenameSessionTest.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/RenameSessionTest.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/RenameSessionTest.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,78 @@
+package org.apache.james.imapserver.handler.session;
+
+import java.io.IOException;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.client.LoginCommand;
+import org.apache.james.imapserver.client.LogoutClientCommand;
+import org.apache.james.imapserver.client.RenameClientCommand;
+import org.apache.james.imapserver.store.MailboxException;
+import org.apache.james.imapserver.util.MessageGenerator;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+
+public class RenameSessionTest extends AbstractSessionTest {
+
+    String[] folders = { USER_MAILBOX_ROOT + ".INBOX",
+            USER_MAILBOX_ROOT + ".test", USER_MAILBOX_ROOT + ".test1",
+            USER_MAILBOX_ROOT + ".test1.test1a",
+            USER_MAILBOX_ROOT + ".test1.test1b",
+            USER_MAILBOX_ROOT + ".test2.test2a",
+            USER_MAILBOX_ROOT + ".test2.test2b" };
+
+    MimeMessage[] msgs = null;
+
+    public void setUp() throws MailboxException, MessagingException,
+            IOException, MailboxManagerException {
+        super.setUp();
+        msgs = MessageGenerator.generateSimplesMessages(2);
+        createFolders(folders);
+        for (int i = 0; i < folders.length; i++) {
+            appendMessagesClosed(folders[i], msgs);
+        }
+    }
+
+    public void tearDown() throws Exception {
+        super.tearDown();
+        for (int i = 0; i < folders.length; i++) {
+            assertFalse(folders[i] + " is still in use!", isOpen(folders[i]));
+        }
+    }
+
+    public void testRenameSubfolder() throws ProtocolException, IOException,
+            MessagingException, MailboxManagerException {
+        verifyCommand(new LoginCommand(USER_NAME, USER_PASSWORD));
+
+        verifyCommand(new RenameClientCommand("test1.test1a", "test1.test1neu"));
+
+        String[] expected = { USER_MAILBOX_ROOT + ".INBOX",
+                USER_MAILBOX_ROOT + ".test", USER_MAILBOX_ROOT + ".test1",
+                USER_MAILBOX_ROOT + ".test1.test1neu",
+                USER_MAILBOX_ROOT + ".test1.test1b",
+                USER_MAILBOX_ROOT + ".test2.test2a",
+                USER_MAILBOX_ROOT + ".test2.test2b" };
+        verifyFolderList(expected, getFolderNames());
+
+        verifyCommand(new LogoutClientCommand());
+    }
+
+    public void testRenameParentfolder() throws ProtocolException, IOException,
+            MessagingException, MailboxManagerException {
+        verifyCommand(new LoginCommand(USER_NAME, USER_PASSWORD));
+
+        verifyCommand(new RenameClientCommand("test1", "test2"));
+
+        String[] expected = { USER_MAILBOX_ROOT + ".INBOX",
+                USER_MAILBOX_ROOT + ".test", USER_MAILBOX_ROOT + ".test2",
+                USER_MAILBOX_ROOT + ".test2.test1a",
+                USER_MAILBOX_ROOT + ".test2.test1b",
+                USER_MAILBOX_ROOT + ".test2.test2a",
+                USER_MAILBOX_ROOT + ".test2.test2b" };
+        verifyFolderList(expected, getFolderNames());
+
+        verifyCommand(new LogoutClientCommand());
+    }
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/SessionTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/SessionTest.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/SessionTest.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/SessionTest.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,171 @@
+package org.apache.james.imapserver.handler.session;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Flags.Flag;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.client.LoginCommand;
+import org.apache.james.imapserver.store.MailboxException;
+import org.apache.james.imapserver.util.MessageGenerator;
+import org.apache.james.imapserver.util.UnsolicitedResponseGenerator;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+
+
+public class SessionTest extends AbstractSessionTest
+{
+
+	String[] existing = {USER_MAILBOX_ROOT+".INBOX",USER_MAILBOX_ROOT+".test",USER_MAILBOX_ROOT+".test1",USER_MAILBOX_ROOT+".test1.test1a",USER_MAILBOX_ROOT+".test1.test1b",USER_MAILBOX_ROOT+".test2.test2a",USER_MAILBOX_ROOT+".test2.test2b"};
+	Set existingSet = null;
+
+	public void setUp() throws MailboxException, MessagingException, IOException, MailboxManagerException
+	{
+		super.setUp();
+		existingSet=new HashSet(Arrays.asList(existing));
+        createFolders((String[]) existingSet.toArray(new String[0]));
+	}
+
+
+
+	
+	public void testLogin() throws ProtocolException, IOException, MessagingException
+	{
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+	}
+	
+	public void testCreate() throws ProtocolException, MessagingException, IOException, MailboxManagerException{
+		testLogin();
+		assertFalse(folderExists(USER_MAILBOX_ROOT+".Trash"));
+		String response = handleRequest((++counter)+" create \"Trash\"\n");
+		assertEquals(counter+" OK CREATE completed.\r\n",response);
+		assertTrue(folderExists(USER_MAILBOX_ROOT+".Trash"));
+	}   
+	
+	public void testListInbox() throws ProtocolException, MessagingException, IOException {
+		testLogin();
+		String response = handleRequest((++counter)+" LIST \"\" \"INBOX\"\n");
+		assertEquals("* LIST () \".\" INBOX\r\n"+counter+" OK LIST completed.\r\n",response);
+	}
+    
+    public void testListInboxFullName() throws ProtocolException, MessagingException, IOException {
+        testLogin();
+        String response = handleRequest((++counter)+" LIST \"\" \""+USER_MAILBOX_ROOT+".INBOX\"\n");
+        assertEquals("* LIST () \".\" "+USER_MAILBOX_ROOT+".INBOX\r\n"+counter+" OK LIST completed.\r\n",response);
+    }
+    
+	public void testLsubAll() throws ProtocolException, MessagingException, IOException {
+		testLogin();
+		BufferedReader br = handleRequestReader((++counter)+" LSUB \""+USER_MAILBOX_ROOT+"\" \"*\"\n");
+		String response=null;
+		String start="* LSUB () \".\" ";
+		while ((response=br.readLine())!=null) {
+			System.out.println("Parsing "+response);
+			if (response.charAt(0)=='*') {
+				assertTrue(response.startsWith(start));
+				String name=response.substring(start.length());
+				assertTrue(existingSet.remove(name));
+ 
+			} else {
+				break; 
+			}
+		}
+		assertEquals(0,existingSet.size());
+		assertEquals(counter+" OK LSUB completed.",response);
+		assertNull(br.readLine());
+		
+		
+	}
+	public void testListAll() throws ProtocolException, MessagingException, IOException {
+		testLogin();
+		BufferedReader br = handleRequestReader((++counter)+" LIST \""+USER_MAILBOX_ROOT+"\" \"*\"\n");
+		String response=null;
+		String start="* LIST () \".\" ";
+		while ((response=br.readLine())!=null) {
+			System.out.println("Parsing "+response);
+			if (response.charAt(0)=='*') {
+				assertTrue(response.startsWith(start));
+				String name=response.substring(start.length());
+				assertTrue(existingSet.remove(name));
+
+			} else {
+				break; 
+			}
+		}
+		assertEquals(0,existingSet.size());
+		assertEquals(counter+" OK LIST completed.",response);
+		assertNull(br.readLine());
+	}
+	
+	
+	public void testSelectNonEmpty() throws ProtocolException, MessagingException, IOException, MailboxManagerException {
+		long uidv=getUidValidity(USER_MAILBOX_ROOT+".test");
+		MimeMessage[] msgs=MessageGenerator.generateSimplesMessages(5);
+		msgs[0].setFlag(Flag.SEEN,true);
+		msgs[1].setFlag(Flag.SEEN,true);
+		addUIDMessagesOpen(USER_MAILBOX_ROOT+".test",msgs);
+		msgs=MessageGenerator.generateSimplesMessages(5);
+		appendMessagesClosed(USER_MAILBOX_ROOT+".test",msgs);
+		testLogin();
+		String command=" SELECT \"test\"";
+
+		UnsolicitedResponseGenerator rg=new UnsolicitedResponseGenerator();
+		rg.addExists(10);
+		rg.addRecent(5);
+		rg.addFlags();
+		rg.addUidValidity(uidv);
+		rg.addFirstUnseen(3);
+		rg.addPermanentFlags();
+		
+		String statusResponse="OK [READ-WRITE] SELECT completed.";
+	
+		verify(command,rg.getResponseSet(),statusResponse);
+	}
+	
+
+
+	public void testAppendToSelectedInbox() throws ProtocolException, MessagingException, IOException, MailboxManagerException {
+		testLogin();
+		
+		long uidv=getUidValidity(USER_MAILBOX_ROOT+".test");
+		
+		String command=" SELECT \"test\"";
+		
+		UnsolicitedResponseGenerator rg=new UnsolicitedResponseGenerator();
+		rg.addExists(0);
+		rg.addRecent(0);
+		rg.addFlags();
+		rg.addUidValidity(uidv);
+		rg.addFirstUnseen(0);
+		rg.addPermanentFlags();
+		
+		String statusResponse="OK [READ-WRITE] SELECT completed.";
+	
+		verify(command,rg.getResponseSet(),statusResponse);
+		
+		
+		
+		MimeMessage mm=MessageGenerator.generateSimpleMessage();
+		String content=MessageGenerator.messageContentToString(mm);
+		String request=" append \"test\" (\\Seen) {"+content.length()+"+}\n";
+		request += content;
+		
+		rg=new UnsolicitedResponseGenerator();
+		rg.addRecent(0);
+		rg.addExists(1);
+
+		verify(request,rg.getResponseSet(),"OK APPEND completed.");
+
+		Message[] msgs=getMessages(USER_MAILBOX_ROOT+".test");
+		assertEquals(1,msgs.length);
+		assertEquals(content,MessageGenerator.messageContentToString(msgs[0]));
+	}
+}
+
+

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/UidFlagSizeFetchSessionTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/UidFlagSizeFetchSessionTest.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/UidFlagSizeFetchSessionTest.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/UidFlagSizeFetchSessionTest.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,98 @@
+package org.apache.james.imapserver.handler.session;
+
+import java.io.IOException;
+
+import javax.mail.Flags;
+import javax.mail.MessagingException;
+import javax.mail.Flags.Flag;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.client.FetchCommand;
+import org.apache.james.imapserver.client.LoginCommand;
+import org.apache.james.imapserver.client.SelectCommand;
+import org.apache.james.imapserver.store.MailboxException;
+import org.apache.james.imapserver.util.MessageGenerator;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+
+public class UidFlagSizeFetchSessionTest extends AbstractSessionTest {
+	
+	String[] folders = {USER_MAILBOX_ROOT + ".INBOX",USER_MAILBOX_ROOT + ".test",USER_MAILBOX_ROOT + ".test1",USER_MAILBOX_ROOT + ".test1.test1a",USER_MAILBOX_ROOT + ".test1.test1b",USER_MAILBOX_ROOT + ".test2.test2a",USER_MAILBOX_ROOT + ".test2.test2b"};
+	String[] onlyInbox = {USER_MAILBOX_ROOT + ".INBOX"};
+	MimeMessage[] msgs= null;
+	long[] uids = null;
+	
+	public void setUp() throws MailboxException, MessagingException, IOException, MailboxManagerException {
+		super.setUp();
+		msgs=MessageGenerator.generateSimplesMessages(10);
+		createFolders(onlyInbox);
+		// increase the uid
+		appendMessagesClosed(USER_MAILBOX_ROOT+".INBOX",msgs);
+		deleteAll(USER_MAILBOX_ROOT+".INBOX");
+		uids=addUIDMessagesOpen(USER_MAILBOX_ROOT+".INBOX",msgs);
+	}
+	
+	public void testEmptyFetchInRange() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+		verifyCommand(new SelectCommand(USER_MAILBOX_ROOT+".INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX")));
+		
+		verifyCommand(new FetchCommand(msgs,1,-1));
+		verifyCommand(new FetchCommand(msgs,1,5));
+		verifyCommand(new FetchCommand(msgs,5,-1));
+		verifyCommand(new FetchCommand(msgs,2,2));
+	}
+
+	public void testEmptyFetchOutOfRange() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+		verifyCommand(new SelectCommand(USER_MAILBOX_ROOT+".INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX")));
+
+		verifyCommand(new FetchCommand(msgs,0,2)); 
+		verifyCommand(new FetchCommand(msgs,3,2));
+		verifyCommand(new FetchCommand(msgs,3,12));
+	}
+	
+	public void testFetchUids() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+		verifyCommand(new SelectCommand(USER_MAILBOX_ROOT+".INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX")));
+		
+		FetchCommand fc=new FetchCommand(msgs,1,-1);
+		fc.setUids(uids);
+		verifyCommand(fc);
+
+	}
+	
+	public void testFetchUidsFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		// Folder hast to be kept open for RECENT Flags
+		useFolder(USER_MAILBOX_ROOT+".INBOX");
+		appendMessagesClosed(USER_MAILBOX_ROOT+".INBOX",MessageGenerator.generateSimplesMessages(5));
+        setFlags(USER_MAILBOX_ROOT+".INBOX", 12, 12, new Flags(Flags.Flag.SEEN), true, false);
+        setFlags(USER_MAILBOX_ROOT+".INBOX", 14, 14, new Flags(Flags.Flag.SEEN), true, false);
+		msgs=getMessages(USER_MAILBOX_ROOT+".INBOX");
+		uids=getUids(USER_MAILBOX_ROOT+".INBOX");
+		
+
+		
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+		SelectCommand sc=new SelectCommand(USER_MAILBOX_ROOT+".INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX"));
+		assertEquals(sc.getRecentCount(),5);
+		verifyCommand(sc);
+		
+		FetchCommand fc=new FetchCommand(msgs,1,-1);
+		fc.setUids(uids);
+		fc.setFetchFlags(true);
+		verifyCommand(fc);
+		freeFolder(USER_MAILBOX_ROOT+".INBOX");
+
+	}
+	
+	public void testRfc822Size() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+		verifyCommand(new SelectCommand(USER_MAILBOX_ROOT+".INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX")));
+		msgs=getMessages(USER_MAILBOX_ROOT+".INBOX");
+		FetchCommand fc=new FetchCommand(msgs,1,-1);
+		fc.setFetchRfc822Size(true);
+		verifyCommand(fc);
+	}
+	
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/UidStoreSessionTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/UidStoreSessionTest.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/UidStoreSessionTest.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/handler/session/UidStoreSessionTest.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,257 @@
+package org.apache.james.imapserver.handler.session;
+
+import java.io.IOException;
+
+import javax.mail.Flags;
+import javax.mail.MessagingException;
+import javax.mail.Flags.Flag;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.client.LoginCommand;
+import org.apache.james.imapserver.client.LogoutClientCommand;
+import org.apache.james.imapserver.client.MessageSet;
+import org.apache.james.imapserver.client.SelectCommand;
+import org.apache.james.imapserver.client.StoreClientCommand;
+import org.apache.james.imapserver.store.MailboxException;
+import org.apache.james.imapserver.util.MessageGenerator;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+
+
+
+public class UidStoreSessionTest extends AbstractSessionTest {
+	
+	
+	String[] onlyInbox = {USER_MAILBOX_ROOT+".INBOX"};
+	MimeMessage[] msgs= null;
+	long[] uids = null;
+	
+	public void setUp() throws MailboxException, MessagingException, IOException, MailboxManagerException {
+		super.setUp();
+		msgs=MessageGenerator.generateSimplesMessages(4);
+		createFolders(onlyInbox);
+		// increase the uid
+		appendMessagesClosed(USER_MAILBOX_ROOT+".INBOX",msgs);
+		deleteAll(USER_MAILBOX_ROOT+".INBOX");
+		uids=addUIDMessagesOpen(USER_MAILBOX_ROOT+".INBOX",msgs);
+	}
+	
+	public void doTestSetFlags(boolean uid, boolean silent) throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+        Flags flagsMany= new Flags();
+        flagsMany.add(Flag.SEEN);
+        flagsMany.add(Flag.FLAGGED);
+        flagsMany.add(Flag.ANSWERED);
+        setFlags(USER_MAILBOX_ROOT+".INBOX", 5, 6, flagsMany, true, false);
+        setFlags(USER_MAILBOX_ROOT+".INBOX", 8, 8, flagsMany, true, false);
+        msgs=getMessages(USER_MAILBOX_ROOT+".INBOX");
+        uids=getUids(USER_MAILBOX_ROOT+".INBOX");
+        
+        verifyCommand(new SelectCommand(USER_MAILBOX_ROOT+".INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX")));
+
+
+
+		MessageSet set;
+		StoreClientCommand storeCommand;
+
+		
+		Flags flagsSeen=new Flags();
+		flagsSeen.add(Flag.SEEN);
+		
+		
+		if (uid) {
+			set=new MessageSet(msgs,uids,7,8);	
+		} else {
+			set=new MessageSet(msgs,3,4);
+		}
+        
+        msgs[2].setFlag(Flag.SEEN, true);
+        msgs[3].setFlags(flagsMany,false);
+        msgs[3].setFlag(Flag.SEEN, true);
+             
+		storeCommand=new StoreClientCommand(StoreClientCommand.MODE_SET,silent,flagsSeen,set);
+		verifyCommand(storeCommand);
+		
+		if (uid) {
+			set=new MessageSet(msgs,uids,5);	
+		}else {
+			set=new MessageSet(msgs,1);
+		}
+        
+        msgs[0].setFlags(flagsMany,false);
+        msgs[0].setFlag(Flag.SEEN, true);
+        
+		storeCommand=new StoreClientCommand(StoreClientCommand.MODE_SET,silent,flagsSeen,set);
+		verifyCommand(storeCommand);
+		
+		msgs=getMessages(USER_MAILBOX_ROOT+".INBOX");
+		
+		assertEquals(flagsSeen,msgs[0].getFlags());
+		assertEquals(flagsMany,msgs[1].getFlags());
+		assertEquals(flagsSeen,msgs[2].getFlags());
+		assertEquals(flagsSeen,msgs[3].getFlags());
+		verifyCommand(new LogoutClientCommand());
+		assertFalse(isOpen(USER_MAILBOX_ROOT+".INBOX"));
+	}
+	
+	public void doTestAddFlags(boolean uid, boolean silent) throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+        setFlags(USER_MAILBOX_ROOT+".INBOX", 5, 8, new Flags(Flags.Flag.DRAFT), true, false);
+		verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+		verifyCommand(new SelectCommand(USER_MAILBOX_ROOT+".INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX")));
+		msgs=getMessages(USER_MAILBOX_ROOT+".INBOX");
+		uids=getUids(USER_MAILBOX_ROOT+".INBOX");
+
+		MessageSet set;
+		StoreClientCommand storeCommand;
+		
+		Flags flagsSeen=new Flags();
+		flagsSeen.add(Flag.SEEN);
+		if (uid) {
+			set=new MessageSet(msgs,uids,5);	
+		} else {
+			set=new MessageSet(msgs,1);
+		}
+		msgs[0].setFlags(flagsSeen, true);
+        
+		storeCommand=new StoreClientCommand(StoreClientCommand.MODE_ADD,silent,flagsSeen,set);
+		verifyCommand(storeCommand);
+		
+		Flags flagsMany= new Flags();
+		flagsMany.add(Flag.SEEN);
+		flagsMany.add(Flag.FLAGGED);
+		flagsMany.add(Flag.ANSWERED);
+		
+		if (uid) {
+			set=new MessageSet(msgs,uids,6,8);	
+		}else {
+			set=new MessageSet(msgs,2,4);
+		}
+        msgs[1].setFlags(flagsMany, true);
+        msgs[2].setFlags(flagsMany, true);
+        msgs[3].setFlags(flagsMany, true);
+
+		storeCommand=new StoreClientCommand(StoreClientCommand.MODE_ADD,silent,flagsMany,set);
+		verifyCommand(storeCommand);
+		
+		msgs=getMessages(USER_MAILBOX_ROOT+".INBOX");
+		
+        flagsSeen.add(Flags.Flag.DRAFT);
+        flagsMany.add(Flags.Flag.DRAFT);
+        
+		assertEquals(flagsSeen,msgs[0].getFlags());
+		assertEquals(flagsMany,msgs[1].getFlags());
+		assertEquals(flagsMany,msgs[2].getFlags());
+		assertEquals(flagsMany,msgs[3].getFlags());
+		verifyCommand(new LogoutClientCommand());
+		assertFalse(isOpen(USER_MAILBOX_ROOT+".INBOX"));
+	}
+	
+	public void doTestRemoveFlags(boolean uid, boolean silent) throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+
+		Flags flagsEmpty=new Flags();
+		
+		Flags flagsSeen=new Flags();
+		flagsSeen.add(Flag.SEEN);
+		
+		Flags flagsAnswered=new Flags();
+		flagsAnswered.add(Flag.ANSWERED);
+		
+		Flags flagsSeenFlagged= new Flags();
+		flagsSeenFlagged.add(Flag.SEEN);
+		flagsSeenFlagged.add(Flag.FLAGGED);
+		
+		Flags flagsSeenFlaggedAnswered= new Flags();
+		flagsSeenFlaggedAnswered.add(Flag.SEEN);
+		flagsSeenFlaggedAnswered.add(Flag.FLAGGED);
+		flagsSeenFlaggedAnswered.add(Flag.ANSWERED);
+		
+        setFlags(USER_MAILBOX_ROOT+".INBOX", 5, 5, flagsSeenFlaggedAnswered, true, false);
+        setFlags(USER_MAILBOX_ROOT+".INBOX", 6, 6, flagsSeen, true, false);
+        setFlags(USER_MAILBOX_ROOT+".INBOX", 7, 8, flagsSeenFlaggedAnswered, true, false);
+
+        msgs=getMessages(USER_MAILBOX_ROOT+".INBOX");
+        uids=getUids(USER_MAILBOX_ROOT+".INBOX");
+        
+        verifyCommand(new LoginCommand(USER_NAME,USER_PASSWORD));
+        verifyCommand(new SelectCommand(USER_MAILBOX_ROOT+".INBOX", msgs, getUidValidity(USER_MAILBOX_ROOT+".INBOX")));
+        
+		MessageSet set;
+		StoreClientCommand storeCommand;
+
+        set=new MessageSet(msgs,1,3,new int[] {1,3},uids,uid);
+        
+        msgs[0].setFlag(Flags.Flag.ANSWERED,false);
+        msgs[2].setFlag(Flags.Flag.ANSWERED,false);
+       
+		storeCommand=new StoreClientCommand(StoreClientCommand.MODE_REMOVE,silent,flagsAnswered,set);
+		verifyCommand(storeCommand);
+
+		if (uid) {
+    		set=new MessageSet(msgs,uids,8);
+		} else {
+			set=new MessageSet(msgs,4);
+		}
+        msgs[3].setFlags(flagsSeenFlaggedAnswered,false);
+        
+		storeCommand=new StoreClientCommand(StoreClientCommand.MODE_REMOVE,silent,flagsSeenFlaggedAnswered,set);
+		verifyCommand(storeCommand);
+		
+		msgs=getMessages(USER_MAILBOX_ROOT+".INBOX");
+		
+		assertEquals(flagsSeenFlagged,msgs[0].getFlags());
+		assertEquals(flagsSeen,msgs[1].getFlags());
+		assertEquals(flagsSeenFlagged,msgs[2].getFlags());
+		assertEquals(flagsEmpty,msgs[3].getFlags());
+		verifyCommand(new LogoutClientCommand());
+		assertFalse(isOpen(USER_MAILBOX_ROOT+".INBOX"));
+	}
+	
+	public void testSetFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestSetFlags(false, false);
+	}
+	
+	public void testAddFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestAddFlags(false, false);
+	}
+	
+	public void testRemoveFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestRemoveFlags(false, false);
+	}
+	
+	public void testUidSetFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestSetFlags(true, false);
+	}
+	
+	public void testUidAddFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestAddFlags(true, false);
+	}
+	
+	public void testUidRemoveFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestRemoveFlags(true, false);
+	}
+	
+	
+	public void testSilentSetFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestSetFlags(false, true);
+	}
+	
+	public void testSilentAddFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestAddFlags(false, true);
+	}
+	
+	public void testSilentRemoveFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestRemoveFlags(false, true);
+	}
+	
+	public void testSilentUidSetFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestSetFlags(true, true);
+	}
+	
+	public void testSilentUidAddFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestAddFlags(true, true);
+	}
+	
+	public void testSilentUidRemoveFlags() throws ProtocolException, IOException, MessagingException, MailboxManagerException {
+		doTestRemoveFlags(true, true);
+	}
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MailboxManagerProviderSingleton.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MailboxManagerProviderSingleton.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MailboxManagerProviderSingleton.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MailboxManagerProviderSingleton.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,21 @@
+package org.apache.james.imapserver.mock;
+
+import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
+import org.apache.james.mailboxmanager.torque.TorqueMailboxManagerProvider;
+
+public class MailboxManagerProviderSingleton {
+    
+    
+    private static TorqueMailboxManagerProvider torqueMailboxManagerProvider;
+
+    public synchronized static MailboxManagerProvider getMailboxManagerProviderInstance() throws Exception {
+        if (torqueMailboxManagerProvider==null) {
+            torqueMailboxManagerProvider=new TorqueMailboxManagerProvider();
+            torqueMailboxManagerProvider.configureDefaults();
+            torqueMailboxManagerProvider.initialize();
+        }
+        return torqueMailboxManagerProvider;
+        
+    }
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockImapHandler.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockImapHandler.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockImapHandler.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockImapHandler.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,15 @@
+package org.apache.james.imapserver.mock;
+
+import org.apache.james.imapserver.ImapHandlerInterface;
+
+public class MockImapHandler implements ImapHandlerInterface {
+
+	public void forceConnectionClose(String byeMessage) {
+
+	}
+
+	public void resetHandler() {
+
+	}
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockImapHandlerConfigurationData.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockImapHandlerConfigurationData.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockImapHandlerConfigurationData.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockImapHandlerConfigurationData.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,61 @@
+package org.apache.james.imapserver.mock;
+
+import org.apache.james.imapserver.ImapHandlerConfigurationData;
+import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
+import org.apache.james.mailboxmanager.torque.TorqueMailboxManagerProvider;
+import org.apache.james.services.MailServer;
+import org.apache.james.services.UsersRepository;
+
+public class MockImapHandlerConfigurationData implements
+		ImapHandlerConfigurationData
+{
+
+	public MailServer mailServer;
+	public UsersRepository usersRepository = new MockUsersRepository();
+	public MailboxManagerProvider mailboxManagerProvider;
+
+	public String getHelloName()
+	{
+		return "thats.my.host.org";
+	}
+
+	public int getResetLength()
+	{
+		return 24*1024;
+	}
+
+	public MailServer getMailServer()
+	{
+		if (mailServer==null) {
+			mailServer=new MockMailServer();
+		}
+		return mailServer;
+	}
+
+	public UsersRepository getUsersRepository()
+	{
+		
+		return usersRepository;
+	}
+
+
+    public MailboxManagerProvider getMailboxManagerProvider() {
+        if (mailboxManagerProvider==null) {
+            try {
+				mailboxManagerProvider=MailboxManagerProviderSingleton.getMailboxManagerProviderInstance();
+			} catch (Exception e) {
+				throw new RuntimeException(e);
+			}
+        }
+        return mailboxManagerProvider;
+    }
+
+	public boolean doStreamdump() {
+		return true;
+	}
+
+	public String getStreamdumpDir() {
+		return "streamdump";
+	}
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockMailServer.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockMailServer.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockMailServer.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockMailServer.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,64 @@
+package org.apache.james.imapserver.mock;
+
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.imapserver.TestConstants;
+import org.apache.james.services.MailRepository;
+import org.apache.james.services.MailServer;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+
+public class MockMailServer implements MailServer, TestConstants
+{
+
+	public void sendMail(MailAddress sender, Collection recipients,
+			MimeMessage msg) throws MessagingException
+	{
+		throw new RuntimeException("not implemented");
+
+	}
+
+	public void sendMail(MailAddress sender, Collection recipients,
+			InputStream msg) throws MessagingException
+	{
+		throw new RuntimeException("not implemented");
+	}
+
+	public void sendMail(Mail mail) throws MessagingException
+	{
+		throw new RuntimeException("not implemented");
+	}
+
+	public void sendMail(MimeMessage message) throws MessagingException
+	{
+		throw new RuntimeException("not implemented");
+	}
+
+	Map userToMailRepo = new HashMap();
+
+	public MailRepository getUserInbox(String userName)	{
+        return null;
+	}
+
+	public String getId()
+	{
+		throw new RuntimeException("not implemented");
+	}
+
+	public boolean addUser(String userName, String password)
+	{
+		throw new RuntimeException("not implemented");
+	}
+
+	public boolean isLocalServer(String serverName)
+	{
+		throw new RuntimeException("not implemented");
+	}
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockUser.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockUser.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockUser.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockUser.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,25 @@
+package org.apache.james.imapserver.mock;
+
+import org.apache.james.imapserver.TestConstants;
+import org.apache.james.services.User;
+
+public class MockUser implements User,TestConstants
+{
+
+	public String getUserName()
+	{
+		return USER_NAME;
+	}
+
+	public boolean verifyPassword(String pass)
+	{
+	
+		return USER_PASSWORD.equals(pass);
+	}
+
+	public boolean setPassword(String newPass)
+	{
+		throw new RuntimeException("not implemented");
+	}
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockUsersRepository.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockUsersRepository.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockUsersRepository.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockUsersRepository.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,102 @@
+package org.apache.james.imapserver.mock;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.apache.james.imapserver.TestConstants;
+import org.apache.james.services.User;
+import org.apache.james.services.UsersRepository;
+
+public class MockUsersRepository implements UsersRepository, TestConstants
+{
+
+	public boolean addUser(User user)
+	{
+		throw new RuntimeException("not implemented");
+	}
+
+	public void addUser(String name, Object attributes)
+	{
+		throw new RuntimeException("not implemented");
+	}
+
+	public boolean addUser(String username, String password)
+	{
+		throw new RuntimeException("not implemented");
+	}
+
+	public User getUserByName(String name)
+	{
+		if (USER_NAME.equals(name)) {
+			return new MockUser();
+		}
+		return null;
+	}
+
+	public User getUserByNameCaseInsensitive(String name)
+	{
+		if (USER_NAME.equalsIgnoreCase(name)) {
+			return new MockUser();
+		}
+		return null;
+	}
+
+	public String getRealName(String name)
+	{
+		if (USER_NAME.equalsIgnoreCase(name)) {
+			return USER_REALNAME;
+		} else {
+			return null;
+		}
+	}
+
+	public boolean updateUser(User user)
+	{
+		throw new RuntimeException("not implemented");
+
+	}
+
+	public void removeUser(String name)
+	{
+		throw new RuntimeException("not implemented");
+
+	}
+
+	public boolean contains(String name)
+	{
+		if (USER_NAME.equals(name)) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	public boolean containsCaseInsensitive(String name)
+	{
+		if (USER_NAME.equalsIgnoreCase(name)) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	public boolean test(String name, String password)
+	{
+		User user=getUserByName(name);
+		if (user!=null) {
+			return user.verifyPassword(password);
+		}
+		return false;
+	}
+
+	public int countUsers()
+	{
+		return 1;
+	}
+
+	public Iterator list()
+	{
+		return Arrays.asList(new String[] { USER_NAME }).iterator();
+	}
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockWatchdog.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockWatchdog.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockWatchdog.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/mock/MockWatchdog.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,24 @@
+package org.apache.james.imapserver.mock;
+
+import org.apache.james.util.watchdog.Watchdog;
+
+public class MockWatchdog implements Watchdog
+{
+
+	public void start()
+	{
+
+
+	}
+
+	public void reset()
+	{
+
+	}
+
+	public void stop()
+	{
+
+	}
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/ImapServerLauncher.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/ImapServerLauncher.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/ImapServerLauncher.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/ImapServerLauncher.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,60 @@
+package org.apache.james.imapserver.util;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+import javax.mail.MessagingException;
+
+import org.apache.james.imapserver.ImapHandler;
+import org.apache.james.imapserver.TestConstants;
+import org.apache.james.imapserver.mock.MockImapHandlerConfigurationData;
+import org.apache.james.imapserver.mock.MockWatchdog;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.manager.GeneralManager;
+import org.apache.james.test.mock.avalon.MockLogger;
+
+public class ImapServerLauncher  implements TestConstants 
+{
+
+
+	public void go() throws IOException, MessagingException, MailboxManagerException
+	{
+		ServerSocket ss = new ServerSocket(HOST_PORT);
+		final MockImapHandlerConfigurationData theConfigData=new MockImapHandlerConfigurationData();
+		while (true) {
+            
+			final Socket s=ss.accept();
+			new Thread() {
+				public void run() {
+					try {
+						ImapHandler imapHandler=new ImapHandler();
+						imapHandler.enableLogging(new MockLogger());
+						imapHandler.setConfigurationData(theConfigData);
+						imapHandler.setWatchdog(new MockWatchdog());
+						System.out.println("Handle connection "+s);
+						imapHandler.handleConnection(s);
+						System.out.println("Handle connection finished."+s);
+	
+					} catch (IOException e) {
+						throw new RuntimeException(e);
+					}		
+				}
+			}.start();
+			
+			
+		}
+
+	}
+
+	public static void main(String[] args)
+	{
+		try {
+			new ImapServerLauncher().go();
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+
+	}
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/JavaMailFolderHelper.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/JavaMailFolderHelper.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/JavaMailFolderHelper.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/JavaMailFolderHelper.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,6 @@
+package org.apache.james.imapserver.util;
+
+public class JavaMailFolderHelper
+{
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/MessageGenerator.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/MessageGenerator.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/MessageGenerator.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/MessageGenerator.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,65 @@
+package org.apache.james.imapserver.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Date;
+import java.util.Random;
+
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+
+import com.sun.mail.util.CRLFOutputStream;
+
+public class MessageGenerator
+{
+    private static Random random;
+
+	protected static synchronized Random getRandom() {
+        if (random == null) {
+            random = new Random();
+        }
+        return random;
+
+    }
+	
+	public static int calculateSize(MimeMessage m) throws IOException, MessagingException {
+		ByteArrayOutputStream os =new ByteArrayOutputStream();
+		m.writeTo(os);
+		return os.size();
+	}
+
+    public static MimeMessage generateSimpleMessage() throws MessagingException {
+        
+        MimeMessage mm = new MimeMessage((Session) null);
+        int r = getRandom().nextInt() % 100000;
+        int r2 = getRandom().nextInt() % 100000;
+        mm.setSubject("good news" + r);
+        mm.setFrom(new InternetAddress("user" + r + "@localhost"));
+        mm.setSentDate(new Date());
+        mm.setRecipients(Message.RecipientType.TO,
+                new InternetAddress[] { new InternetAddress("user" + r2
+                        + "@localhost") });
+        String text = "Hello User" + r2
+                + "!\r\n\r\nhave a nice holiday.\r\n\r\ngreetings,\nUser" + r
+                + "\r\n";
+        mm.setText(text);
+        return mm;
+    }
+	public static String messageContentToString(Message mm) throws IOException, MessagingException {
+		ByteArrayOutputStream os=new ByteArrayOutputStream();
+		mm.writeTo(new CRLFOutputStream(os));
+		return os.toString();
+	}
+
+	public static MimeMessage[] generateSimplesMessages(int c) throws MessagingException
+	{
+		MimeMessage[] msgs=new MimeMessage[c];
+		for (int i=0; i<c; i++) {
+			msgs[i]=generateSimpleMessage();
+		}
+		return msgs;
+	}
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/UnsolicitedResponseGenerator.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/UnsolicitedResponseGenerator.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/UnsolicitedResponseGenerator.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/imapserver/util/UnsolicitedResponseGenerator.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,82 @@
+package org.apache.james.imapserver.util;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.mail.MessagingException;
+import javax.mail.Flags.Flag;
+import javax.mail.internet.MimeMessage;
+
+public class UnsolicitedResponseGenerator
+{
+	Set responseSet = new HashSet();
+	int recent=0;
+	
+	public void addByMessages(MimeMessage[] msgs) throws MessagingException {
+		addExists(msgs.length);
+		int recent=0;
+		int firstUnseen=0;
+		for (int i=0; i<msgs.length; i++) {
+			if (msgs[i].isSet(Flag.RECENT)) {
+				recent++;
+			}
+			if (firstUnseen==0 && !msgs[i].isSet(Flag.SEEN)) {
+				firstUnseen=i+1;
+			}
+			
+		}
+		addRecent(recent);
+		addFlags();
+		addFirstUnseen(firstUnseen);			
+		addPermanentFlags();
+	}
+
+	public void addExists(int i)
+	{
+		responseSet.add("* " + i + " EXISTS");
+	}
+
+	public void addRecent(int i)
+	{
+		recent=i;
+		responseSet.add("* " + i + " RECENT");
+	}
+
+	public void addFlags()
+	{
+		responseSet
+				.add("* FLAGS (\\Answered \\Deleted \\Draft \\Flagged \\Recent \\Seen)");
+	}
+
+	public void addUidValidity(long uidv)
+	{
+		responseSet.add("* OK [UIDVALIDITY " + uidv + "]");
+	}
+
+	public void addFirstUnseen(int firstUnseen)
+	{
+		if (firstUnseen > 0) {
+			responseSet.add("* OK [UNSEEN "+firstUnseen+"] Message "+firstUnseen+" is the first unseen");
+		} else {
+			responseSet.add("* OK No messages unseen");
+		}
+	}
+
+	public void addPermanentFlags()
+	{
+		responseSet
+				.add("* OK [PERMANENTFLAGS (\\Answered \\Deleted \\Draft \\Flagged \\Recent \\Seen)]");
+	}
+
+	public Set getResponseSet()
+	{
+
+		return responseSet;
+	}
+
+	public int getRecent() {
+
+		return recent;
+	}
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/AbstractImapMailboxSelfTestCase.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,141 @@
+package org.apache.james.mailboxmanager;
+
+import java.util.Date;
+
+import javax.mail.Flags;
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
+import junit.framework.TestCase;
+
+import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
+import org.apache.james.mailboxmanager.impl.MailboxListenerCollector;
+import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
+import org.apache.james.mailboxmanager.manager.GeneralManager;
+
+public abstract class AbstractImapMailboxSelfTestCase extends TestCase {
+    
+    protected GeneralManager mailboxManager;
+    
+    protected ImapMailboxSession mailbox;
+    
+    protected MailboxListenerCollector collector;
+    
+    public static final String INBOX="#users.tuser.INBOX";
+    
+    public void setUp() throws Exception {
+        super.setUp();
+        mailboxManager.createMailbox(INBOX);
+        mailbox=mailboxManager.getGenericImapMailboxSession(INBOX);
+        collector=new MailboxListenerCollector();
+        mailbox.addListener(collector, 0);
+        assertNotNull(mailbox);
+    }
+    
+    public void testGetFirstUnseen() throws MailboxManagerException, MessagingException {
+        assertNotNull(mailbox);
+        for (int i = 0; i < 5; i++) {
+            MimeMessage mm=TestUtil.createMessage();
+            mm.setFlags(new Flags(Flags.Flag.SEEN), true);
+            MessageResult mr=mailbox.appendMessage(mm, new Date(), MessageResult.UID);
+            assertEquals(i+1, mr.getUid());
+        }
+        for (int i = 0; i < 3; i++) {
+            MessageResult mr=mailbox.appendMessage(TestUtil.createMessage(), new Date(), MessageResult.UID);
+            assertEquals(i+6, mr.getUid());
+        }
+        for (int i = 0; i < 3; i++) {
+            MimeMessage mm=TestUtil.createMessage();
+            mm.setFlags(new Flags(Flags.Flag.SEEN), true);
+            MessageResult mr=mailbox.appendMessage(mm, new Date(), MessageResult.UID);
+            assertEquals(i+9, mr.getUid());
+        }
+        MessageResult mr;
+        mr=mailbox.getFirstUnseen(MessageResult.UID | MessageResult.MSN);
+        assertNotNull(mr);
+        assertEquals(6, mr.getUid());
+        assertEquals(6, mr.getMsn());
+        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.uidRange(1,3), null);
+        mailbox.expunge(GeneralMessageSetImpl.all(), 0);
+        mailbox.getExpungedEvents(true);
+        mr=mailbox.getFirstUnseen(MessageResult.UID | MessageResult.MSN);
+        assertNotNull(mr);
+        assertEquals(6, mr.getUid());
+        assertEquals(3, mr.getMsn());
+    }
+    
+    public void testGetExpungedEvents() throws MessagingException, MailboxManagerException {
+        for (int i = 0; i < 5; i++) {
+            MessageResult mr=mailbox.appendMessage(TestUtil.createMessage(), new Date(), MessageResult.UID | MessageResult.MSN);
+            assertEquals(i+1, mr.getUid());
+            assertEquals(i+1, mr.getMsn());
+        }
+        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.uidRange(2, 4), null);
+        final MessageResult[] expungeResult1=mailbox.expunge(GeneralMessageSetImpl.all(), MessageResult.UID | MessageResult.MSN);
+        checkMessageResults(new long[] {2,3,4},new int[] {2,3,4},expungeResult1);
+        
+        final MessageResult[] getResult1 = mailbox.getMessages(GeneralMessageSetImpl.all(), MessageResult.UID | MessageResult.MSN);
+        checkMessageResults(new long[] {1,5},new int[] {1,5},getResult1);
+        
+        
+        final MessageResult[] expungeEventResult1 = mailbox.getExpungedEvents(false);
+        checkMessageResults(new long[] {2,3,4},new int[] {2,3,4},expungeEventResult1);
+        final MessageResult[] expungeEventResult2 = mailbox.getExpungedEvents(true);
+        checkMessageResults(new long[] {2,3,4},new int[] {2,2,2},expungeEventResult2);
+        
+        
+        final MessageResult[] getResult2 = mailbox.getMessages(GeneralMessageSetImpl.all(), MessageResult.UID | MessageResult.MSN);
+        checkMessageResults(new long[] {1,5},new int[] {1,2},getResult2);
+        
+        for (int i = 0; i < 5; i++) {
+            MessageResult mr=mailbox.appendMessage(TestUtil.createMessage(), new Date(), MessageResult.UID | MessageResult.MSN);
+            assertEquals(6+i, mr.getUid());
+            assertEquals(3+i, mr.getMsn());
+        }
+
+        final MessageResult[] getResult3 = mailbox.getMessages(GeneralMessageSetImpl.all(), MessageResult.UID | MessageResult.MSN);
+        checkMessageResults(new long[] {1,5,6,7,8,9,10},new int[] {1,2,3,4,5,6,7},getResult3);
+        
+        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.msnRange(2,4), null);
+        mailbox.setFlags(new Flags(Flags.Flag.DELETED), true, false, GeneralMessageSetImpl.oneMsn(6), null);
+        
+        final MessageResult[] expungeResult2=mailbox.expunge(GeneralMessageSetImpl.all(), MessageResult.UID | MessageResult.MSN);
+        checkMessageResults(new long[] {5,6,7,9},new int[] {2,3,4,6},expungeResult2);
+        
+        final MessageResult[] getResult4 = mailbox.getMessages(GeneralMessageSetImpl.all(), MessageResult.UID | MessageResult.MSN);
+        checkMessageResults(new long[] {1,8,10},new int[] {1,5,7},getResult4);
+        
+        final MessageResult[] expungeEventResult3 = mailbox.getExpungedEvents(false);
+        checkMessageResults(new long[] {5,6,7,9},new int[] {2,3,4,6},expungeEventResult3);
+        final MessageResult[] expungeEventResult4 = mailbox.getExpungedEvents(true);
+        checkMessageResults(new long[] {5,6,7,9},new int[] {2,2,2,3},expungeEventResult4);
+        
+        final MessageResult[] getResult5 = mailbox.getMessages(GeneralMessageSetImpl.all(), MessageResult.UID | MessageResult.MSN);
+        checkMessageResults(new long[] {1,8,10},new int[] {1,2,3},getResult5);
+    }
+    
+    public void testAddedEvents() throws MailboxManagerException, MessagingException {
+    	assertEquals(0,mailbox.getFlagEvents(false).length);
+    	MessageResult mr=mailbox.appendMessage(TestUtil.createMessage(), new Date(), MessageResult.UID | MessageResult.MSN);
+        assertEquals(0,mailbox.getFlagEvents(false).length);
+        assertEquals(0,mailbox.getFlagEvents(true).length);
+    }
+    
+    protected void assertEventCount(MailboxListenerCollector collector,long[] added, long[] flags, long[] expunged) {
+    	assertEquals("added size", added.length, collector.getAddedList(true).size());
+    	assertEquals("flags size", added.length, collector.getFlaggedList(true).size());
+    	assertEquals("deleted size", added.length, collector.getExpungedList(true).size());
+    	
+    }
+    
+    protected void checkMessageResults(long[] uids,int[] msns,MessageResult[] messageResults) {
+    	assertEquals(uids.length, msns.length);
+    	assertEquals(uids.length, messageResults.length);
+        for (int i = 0; i < messageResults.length; i++) {
+        	assertEquals("Uid at pos "+i,uids[i], messageResults[i].getUid());
+        	assertEquals("Msn at pos "+i,msns[i], messageResults[i].getMsn());
+		}
+    	
+    }
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/AbstractMailboxManagerSelfTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/AbstractMailboxManagerSelfTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/AbstractMailboxManagerSelfTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/AbstractMailboxManagerSelfTestCase.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,55 @@
+package org.apache.james.mailboxmanager;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.james.mailboxmanager.mailbox.GeneralMailboxSession;
+import org.apache.james.mailboxmanager.manager.GeneralManager;
+
+import junit.framework.TestCase;
+
+public abstract class AbstractMailboxManagerSelfTestCase extends TestCase {
+    
+    protected GeneralManager mailboxManager;
+    
+    
+    public void testCreateList() throws MailboxManagerException {
+        ListResult[] listResult;
+        listResult=mailboxManager.list("","*",false);
+        assertNotNull(listResult);
+        assertEquals(0,mailboxManager.list("","*",false).length);
+        Set boxes=new HashSet();
+        boxes.add("#users.joachim.INBOX");
+        boxes.add("#users.joachim.INBOX.Drafts");
+        boxes.add("#users.joachim2.INBOX");
+        for (Iterator iter = boxes.iterator(); iter.hasNext();) {
+            String box = (String) iter.next();
+            mailboxManager.createMailbox(box);    
+        }
+        listResult=mailboxManager.list("","*",false);
+        assertEquals(3,listResult.length);
+        for (int i = 0; i < listResult.length; i++) {
+            assertTrue(boxes.contains(listResult[i].getName()));
+        }
+    }
+    
+    public void testGetSessionMailbox() throws MailboxManagerException {
+        mailboxManager.createMailbox("#users.joachim3.INBOX");
+        GeneralMailboxSession sessionMailbox=mailboxManager.getGenericGeneralMailboxSession("#users.joachim3.INBOX");
+        assertNotNull(sessionMailbox);
+    }
+    
+    public void testListOne() throws MailboxManagerException {
+        mailboxManager.createMailbox("test1");    
+        mailboxManager.createMailbox("INBOX");
+        mailboxManager.createMailbox("INBOX2");
+        
+        ListResult[] listResult=mailboxManager.list("","INBOX",false);
+        assertNotNull(listResult);
+        assertEquals(1, listResult.length);
+        assertEquals("INBOX", listResult[0].getName());
+    }
+    
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/TestUtil.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/TestUtil.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/TestUtil.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/TestUtil.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,101 @@
+package org.apache.james.mailboxmanager;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Random;
+import java.util.Set;
+
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+
+import com.sun.mail.util.CRLFOutputStream;
+
+public class TestUtil {
+    
+    private static Random random;
+    
+
+    public static boolean contentEquals(MimeMessage m1, MimeMessage m2, boolean verbose)
+            throws IOException, MessagingException {
+        ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
+        m1.writeTo(new CRLFOutputStream(baos1));
+        ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
+        m2.writeTo(new CRLFOutputStream(baos2));
+        if (verbose) {
+            byte[] b1=baos1.toByteArray();
+            byte[] b2=baos2.toByteArray();
+            int size=b1.length;
+            if (b2.length<b1.length) size=b2.length;
+            for (int i=0; i< size; i++) {
+                if (b1[i]!=b2[i]) {
+                    System.out.println("I: "+i+" B1: "+b1[i]+" B2 "+b2[i]);
+                    System.out.println("B1:"+new String(b1,0,i+1)+"°");
+                    System.out.println("B2:"+new String(b2,0,i+1)+"°");
+                    break;
+                }
+            }
+            
+        }
+        
+        return Arrays.equals(baos1.toByteArray(), baos2.toByteArray());
+    }
+
+    public static byte[] messageToByteArray(MimeMessage mm)
+            throws IOException, MessagingException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        mm.writeTo(new CRLFOutputStream(baos));
+        return baos.toByteArray();
+    }
+
+    public static boolean messageSetsEqual(Collection ma1, Collection ma2)
+            throws IOException, MessagingException {
+        if (ma1.size() != ma2.size())
+            return false;
+        Set s1 = new HashSet();
+        Set s2 = new HashSet();
+        for (Iterator it = ma1.iterator(); it.hasNext();) {
+            MimeMessage mm = (MimeMessage) it.next();
+            s1.add(new Integer(Arrays.hashCode(messageToByteArray(mm))));
+        }
+        for (Iterator it = ma2.iterator(); it.hasNext();) {
+            MimeMessage mm = (MimeMessage) it.next();
+            s2.add(new Integer(Arrays.hashCode(messageToByteArray(mm))));
+        }
+        return s1.equals(s2);
+    }
+    
+    
+    public static MimeMessage createMessage() throws MessagingException {
+        MimeMessage mm = new MimeMessage((Session) null);
+        int r = getRandom().nextInt() % 100000;
+        int r2 = getRandom().nextInt() % 100000;
+        mm.setSubject("good news" + r);
+        mm.setFrom(new InternetAddress("user" + r + "@localhost"));
+        mm.setRecipients(Message.RecipientType.TO,
+                new InternetAddress[] { new InternetAddress("user" + r2
+                        + "@localhost") });
+        String text = "Hello User" + r2
+                + "!\n\nhave a nice holiday.\r\n\r\ngreetings,\nUser" + r
+                + "\n";
+        mm.setText(text);
+        mm.saveChanges();
+        return mm;
+    }
+
+    public static synchronized Random getRandom() {
+        if (random == null) {
+            random = new Random();
+        }
+        return random;
+
+    }
+
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/impl/UidChangeTrackerTestCase.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,67 @@
+package org.apache.james.mailboxmanager.impl;
+
+import javax.mail.Flags;
+
+import junit.framework.TestCase;
+
+import org.apache.james.mailboxmanager.MessageResult;
+import org.apache.james.mailboxmanager.tracking.UidChangeTracker;
+import org.apache.james.mailboxmanager.tracking.UidRange;
+
+public class UidChangeTrackerTestCase extends TestCase {
+    
+    protected UidChangeTracker tracker;
+    
+    protected MailboxListenerCollector collector;
+    
+    public void setUp() {
+        tracker=new UidChangeTracker(null,"test",1000);
+        collector=new MailboxListenerCollector();
+        tracker.addMailboxListener(collector);
+    }
+    
+    
+    
+    protected void assertCollectorSizes(int added, int expunged, int flags) {
+        assertEquals(added,collector.getAddedList(false).size());
+        assertEquals(expunged,collector.getExpungedList(false).size());
+        assertEquals(flags,collector.getFlaggedList(false).size());
+    }
+    
+    
+    public void testFound() {
+        MessageResultImpl[] results;
+        MessageResult result;
+        
+        results=new MessageResultImpl[1];
+        
+        results[0]=new MessageResultImpl(1000l);
+        tracker.found(new UidRange(1000,1000),results, null);
+        assertCollectorSizes(0,0,0);
+        
+        results[0]=new MessageResultImpl(1001l);
+        tracker.found(new UidRange(1001,1001),results, null);
+        assertCollectorSizes(1,0,0);
+        assertEquals(1001,((MessageResult) collector.getAddedList(true).get(0)).getUid());
+        assertCollectorSizes(0,0,0);
+        
+        results[0]=new MessageResultImpl(1001l,new Flags(Flags.Flag.FLAGGED));
+        tracker.found(new UidRange(1001,1001),results, null);
+        assertCollectorSizes(0,0,1);
+        result=(MessageResult) collector.getFlaggedList(true).get(0);
+        assertEquals(1001,result.getUid());
+        assertEquals(new Flags(Flags.Flag.FLAGGED),result.getFlags());
+        
+        // nothing changed
+        tracker.found(new UidRange(1001,1001),results,null);
+        assertCollectorSizes(0,0,0);
+        
+        // 1000 got expunged
+        tracker.found(new UidRange(1000,1001),results,null);
+        assertCollectorSizes(0,1,0);
+        assertEquals(1000,((MessageResult) collector.getExpungedList(true).get(0)).getUid());
+        
+        
+    }
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/mock/MockUser.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/mock/MockUser.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/mock/MockUser.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/mock/MockUser.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,21 @@
+package org.apache.james.mailboxmanager.mock;
+
+import org.apache.james.services.User;
+
+public class MockUser implements User {
+
+    public String getUserName() {
+        return "tuser";
+    }
+
+    public boolean setPassword(String newPass) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    public boolean verifyPassword(String pass) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,20 @@
+package org.apache.james.mailboxmanager.mock;
+
+import org.apache.james.mailboxmanager.torque.TorqueMailboxManagerProvider;
+
+public class TorqueMailboxManagerProviderSingleton {
+    
+    
+    private static TorqueMailboxManagerProvider torqueMailboxManagerProvider;
+
+    public synchronized static TorqueMailboxManagerProvider getTorqueMailboxManagerProviderInstance() throws Exception {
+        if (torqueMailboxManagerProvider==null) {
+            torqueMailboxManagerProvider=new TorqueMailboxManagerProvider();
+            torqueMailboxManagerProvider.configureDefaults();
+            torqueMailboxManagerProvider.initialize();
+        }
+        return torqueMailboxManagerProvider;
+        
+    }
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositoryNativeTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositoryNativeTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositoryNativeTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositoryNativeTestCase.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,123 @@
+package org.apache.james.mailboxmanager.redundant;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.mail.MessagingException;
+
+import org.apache.mailet.Mail;
+
+public abstract class AbstractMailRepositoryNativeTestCase extends
+        AbstractMailRepositorySelfTestCase {
+
+    public void testStore() throws MessagingException, IOException {
+        Collection added = new ArrayList();
+        for (int i = 0; i < 10; i++) {
+            Mail m = generateMail();
+            mailRepository.store(m);
+            assertNativeMessageCountEquals(i + 1);
+            added.add(m.getMessage());
+            assertNativeMessagesEqual(added);
+        }
+    }
+
+    public void testStoreRemoveByMailOrKey() throws MessagingException,
+            IOException {
+        Collection added = new ArrayList();
+        for (int i = 0; i < 10; i++) {
+            Mail m1 = generateMail();
+            Mail m2 = generateMail();
+            mailRepository.store(m1);
+            assertNativeMessageCountEquals(i + 1);
+            mailRepository.store(m2);
+            assertNativeMessageCountEquals(i + 2);
+            if (i % 2 == 0) {
+                mailRepository.remove(m1);
+            } else {
+                mailRepository.remove(m1.getName());
+            }
+            assertNativeMessageCountEquals(i + 1);
+            added.add(m2.getMessage());
+        }
+        assertNativeMessagesEqual(added);
+    }
+
+    public void testStoreRemoveByCollection() throws MessagingException,
+            IOException {
+        Collection retain = new ArrayList();
+        Collection delete = new ArrayList();
+
+        for (int i = 0; i < 10; i++) {
+            Mail m1 = generateMail();
+            mailRepository.store(m1);
+            assertNativeMessageCountEquals(i + 1);
+            if (i % 2 == 0) {
+                delete.add(m1);
+            } else {
+                retain.add(m1.getMessage());
+            }
+        }
+        mailRepository.remove(delete);
+        assertNativeMessageCountEquals(5);
+        assertNativeMessagesEqual(retain);
+    }
+    
+    /*
+     * Test method for
+     * 'org.apache.james.mailrepository.UIDPlusFolderMailRepository.list()'
+     */
+    public void testListRetrieve() throws MessagingException, IOException {
+        try {
+            Collection added = new ArrayList();
+            for (int i = 0; i < 10; i++) {
+                Mail m = generateMail();
+                nativeStoreMessage(m.getMessage());
+                added.add(m.getMessage());
+            }
+            assertNativeMessageCountEquals(10);
+            assertNativeMessagesEqual(added);
+            
+            Collection retrieved = new ArrayList();
+            for (Iterator it= mailRepository.list(); it.hasNext();) {
+                String key = (String) it.next();
+                assertNotNull("key is null",key);
+                Mail m=mailRepository.retrieve(key);
+                assertNotNull("Mail is null",m);
+                assertNotNull("key of Mail is null",key);
+                assertEquals("key differs",key,m.getName());
+                retrieved.add(m.getMessage());
+            }
+            assertEquals("number of retrieved messages differs",10,retrieved.size());
+            assertTrue("messages differ",messageSetsEqual(added,retrieved));
+            
+            
+        } catch (NativeMethodNotSupportetException e) {
+
+        }
+    }
+    public void testListRemove() throws MessagingException, IOException {
+        try {
+            Collection added = new ArrayList();
+            for (int i = 0; i < 10; i++) {
+                Mail m = generateMail();
+                nativeStoreMessage(m.getMessage());
+                added.add(m.getMessage());
+            }
+            assertNativeMessageCountEquals(10);
+            int count=10;
+            for (Iterator it= mailRepository.list(); it.hasNext();) {
+                String key = (String) it.next();
+                assertNotNull("key is null",key);
+                mailRepository.remove(key);
+                count--;
+                assertNativeMessageCountEquals(count);
+            }
+        } catch (NativeMethodNotSupportetException e) {
+
+        }
+    }
+
+
+}

Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositorySelfTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositorySelfTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositorySelfTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositorySelfTestCase.java Mon Oct  9 10:15:30 2006
@@ -0,0 +1,133 @@
+package org.apache.james.mailboxmanager.redundant;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.mailet.Mail;
+
+public abstract class AbstractMailRepositorySelfTestCase extends AbstractMailRepositoryTestCase {
+
+    /*
+     * Test method for
+     * 'org.apache.james.mailrepository.UIDPlusFolderMailRepository.retrieve(String)'
+     */
+    public void testStoreRetrieve() throws MessagingException, IOException {
+        int addedCount = 0;
+        Collection added=new ArrayList();
+        for (int i = 1; i < 10; i++) {
+            Mail[] ms = new Mail[i];
+            
+            for (int j = 0; j < i; j++) {
+                ms[j] = generateMail();
+                added.add(ms[j].getMessage());
+                mailRepository.store(ms[j]);
+                addedCount++;
+                assertNativeMessageCountEquals(addedCount);
+            }
+            assertNativeMessagesEqual(added);
+            for (int j = 0; j < i; j++) {
+                Mail originalMail = ms[j];
+                Mail retrievedMail = mailRepository.retrieve(ms[j].getName());
+                assertNotNull("Mail is null", retrievedMail);
+                assertEquals("keys differs!", originalMail.getName(),
+                        retrievedMail.getName());
+                assertEquals("subject differs", originalMail.getMessage()
+                        .getSubject(), retrievedMail.getMessage().getSubject());
+                assertTrue("content differs!", contentEquals(originalMail
+                        .getMessage(), retrievedMail.getMessage()));
+            }
+        }
+    }
+    
+    public void testStoreUpdateRetrieve() throws MessagingException, IOException {
+        Mail[] ms = new Mail[15];
+        MimeMessage[] mms = new MimeMessage[15];
+        int addedCount = 0;
+        for (int j = 0; j < 15; j++) {
+            ms[j] = generateMail();
+            mms[j]=ms[j].getMessage();
+            mailRepository.store(ms[j]);
+            addedCount++;
+            assertNativeMessageCountEquals(addedCount);
+        }
+        assertNativeMessagesEqual(Arrays.asList(mms));
+        System.out.println(" ####### Test: doing updates #####");
+        for (int j = 5; j < 10 ; j++) {
+            Mail m= generateMail();
+            m.setName(ms[j].getName());
+            mailRepository.store(m);
+            mms[j]=m.getMessage();
+            assertNativeMessageCountEquals(addedCount);
+        }
+        assertNativeMessagesEqual(Arrays.asList(mms));
+        for (int j = 0; j < 15; j++) {
+            Mail m=mailRepository.retrieve(ms[j].getName());
+            assertTrue(contentEquals(mms[j], m.getMessage()));
+        }
+    }
+    
+    class RemoveThread extends Thread {
+        
+        String key;
+        boolean exception=false;        
+        
+        RemoveThread(String key) {
+            super("rt");
+            this.key=key;
+        }
+        
+        public void run() {
+            try {
+                mailRepository.remove(key);
+            } catch (MessagingException e) {
+                exception=true;
+            }
+        }
+        public synchronized void doWait(){
+            try {
+                wait();
+            } catch (InterruptedException e) {
+            }
+        }
+    }
+    
+    /*
+     * Test method for
+     * 'org.apache.james.mailrepository.UIDPlusFolderMailRepository.lock(String)'
+     */
+    public void testLock() throws MessagingException {
+        Mail m1=generateMail();
+        Mail m2=generateMail();
+        mailRepository.store(m1);
+        mailRepository.store(m2);
+        assertNativeMessageCountEquals(2);
+        
+        // Try to remove locked message by different Thread
+        mailRepository.lock(m1.getName());
+        RemoveThread rt=new RemoveThread(m1.getName());
+        rt.start();
+        rt.doWait();
+        assertTrue("RemoveThread1 should have thrown exception",rt.exception);
+        assertNativeMessageCountEquals(2);
+        
+        // Try to remove unlocked message by different Thread
+        mailRepository.unlock(m1.getName());
+        rt=new RemoveThread(m1.getName());
+        rt.start();
+        rt.doWait();
+        assertFalse("RemoveThread2 should not have thrown an exception",rt.exception);
+        assertNativeMessageCountEquals(1);
+        
+        // try to remove locked message by same Thread
+        mailRepository.lock(m2.getName());
+        mailRepository.remove(m2.getName());
+        assertNativeMessageCountEquals(0);
+    }
+
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org