Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/ReplyMessageHandlerTest.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/ReplyMessageHandlerTest.java?rev=908000&r1=907999&r2=908000&view=diff ============================================================================== --- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/ReplyMessageHandlerTest.java (original) +++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/handler/ReplyMessageHandlerTest.java Tue Feb 9 11:00:47 2010 @@ -20,15 +20,13 @@ package org.apache.hupa.server.handler; -import javax.mail.Message; -import javax.servlet.http.HttpSession; +import com.sun.mail.imap.IMAPStore; import org.apache.hupa.server.FileItemRegistry; import org.apache.hupa.server.HupaTestCase; import org.apache.hupa.server.IMAPStoreCache; import org.apache.hupa.server.guice.DemoModeConstants; import org.apache.hupa.server.mock.MockIMAPFolder; -import org.apache.hupa.server.mock.MockIMAPStoreCache; import org.apache.hupa.server.utils.SessionUtils; import org.apache.hupa.server.utils.TestUtils; import org.apache.hupa.shared.data.IMAPFolder; @@ -36,7 +34,8 @@ import org.apache.hupa.shared.data.User; import org.apache.hupa.shared.rpc.ReplyMessage; -import com.sun.mail.imap.IMAPStore; +import javax.mail.Message; +import javax.servlet.http.HttpSession; public class ReplyMessageHandlerTest extends HupaTestCase { @@ -47,12 +46,10 @@ httpSession.setAttribute("user", demouser); IMAPStoreCache storeCache = injector.getInstance(IMAPStoreCache.class); - IMAPStore store = injector.getInstance(IMAPStore.class); - ((MockIMAPStoreCache)storeCache).addValidUser(demouser, store); + IMAPStore store = storeCache.get(demouser); FileItemRegistry registry = SessionUtils.getSessionRegistry(logger, httpSession); - MockIMAPFolder sentbox = (MockIMAPFolder) store.getFolder(DemoModeConstants.DEMO_MODE_SENT_FOLDER); assertTrue(sentbox.getMessages().length == 0);
Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/integration/StoreBugTest.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/integration/StoreBugTest.java?rev=908000&r1=907999&r2=908000&view=diff ============================================================================== --- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/integration/StoreBugTest.java (original) +++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/integration/StoreBugTest.java Tue Feb 9 11:00:47 2010 @@ -19,13 +19,8 @@ package org.apache.hupa.server.integration; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Properties; - -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Session; +import com.sun.mail.imap.IMAPFolder; +import com.sun.mail.imap.IMAPStore; import junit.framework.Assert; @@ -34,10 +29,16 @@ import org.apache.hupa.server.mock.MockIMAPStore; import org.apache.hupa.server.mock.MockLog; import org.apache.hupa.shared.data.User; +import org.junit.Ignore; import org.junit.Test; -import com.sun.mail.imap.IMAPFolder; -import com.sun.mail.imap.IMAPStore; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Properties; + +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Session; public class StoreBugTest { @@ -51,7 +52,7 @@ static int threadTimeout = 15000; Session session = Session.getDefaultInstance(new Properties(), null); - static InMemoryIMAPStoreCache cache = new InMemoryIMAPStoreCache(new MockLog(), imapServer, imapPort, isSSl, 2, 60000, new SessionProvider()); + static InMemoryIMAPStoreCache cache = new InMemoryIMAPStoreCache(new MockLog(), imapServer, imapPort, isSSl, 2, 60000, false, new SessionProvider()); static User user = new User() { private static final long serialVersionUID = 1L; {setName(imapUser); setPassword(imapPass);} @@ -64,7 +65,7 @@ Assert.assertFalse(getThreadsSpentTime(threads).contains("-1")); } - @Test + @Test @Ignore public void testIMAPStoreIdleHungs() throws Exception { IMAPStore store = null; try { @@ -102,7 +103,7 @@ return threads; } - @Test + @Test @Ignore public void testInMemoryImapStoreCacheDoesntHung() throws Exception { try { cache.get(user); Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/mock/MockIMAPStoreCache.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/mock/MockIMAPStoreCache.java?rev=908000&r1=907999&r2=908000&view=diff ============================================================================== --- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/mock/MockIMAPStoreCache.java (original) +++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/mock/MockIMAPStoreCache.java Tue Feb 9 11:00:47 2010 @@ -29,19 +29,28 @@ import java.util.HashMap; import java.util.Map; +import java.util.Properties; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import javax.mail.Session; public class MockIMAPStoreCache implements IMAPStoreCache { - private Provider<Session> provider; + + private Provider<Session> provider = new Provider<Session>() { + public Session get() { + Session session = Session.getDefaultInstance(new Properties()); + session.addProvider(MockIMAPStore.getProvider()); + return session; + } + }; + private Map<String, String> users = new HashMap<String, String>(); private Map<String, IMAPStore> stores = new HashMap<String, IMAPStore>(); @Inject - public MockIMAPStoreCache(Provider<Session> provider) { - this.provider = provider; + public MockIMAPStoreCache(User user) { + addValidUser(user); } public void addValidUser(User user, IMAPStore store) { @@ -61,7 +70,8 @@ try { addValidUser(username, password, (IMAPStore)provider.get().getStore("mockimap")); } catch (NoSuchProviderException e) { - throw new RuntimeException("Invalid store"); + e.printStackTrace(); + throw new RuntimeException("Invalid store", e); } } Added: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/InImapUserPreferencesStorageTest.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/InImapUserPreferencesStorageTest.java?rev=908000&view=auto ============================================================================== --- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/InImapUserPreferencesStorageTest.java (added) +++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/InImapUserPreferencesStorageTest.java Tue Feb 9 11:00:47 2010 @@ -0,0 +1,169 @@ +package org.apache.hupa.server.preferences; + +import com.google.inject.Module; + +import com.sun.mail.imap.IMAPStore; + +import org.apache.hupa.server.HupaGuiceTestCase; +import org.apache.hupa.server.guice.GuiceTestModule; +import org.apache.hupa.server.utils.SessionUtils; +import org.apache.hupa.server.utils.TestUtils; +import org.apache.hupa.shared.data.IMAPFolder; +import org.apache.hupa.shared.data.SMTPMessage; +import org.apache.hupa.shared.rpc.FetchMessages; +import org.apache.hupa.shared.rpc.FetchMessagesResult; +import org.apache.hupa.shared.rpc.SendMessage; + +import java.util.ArrayList; +import java.util.Arrays; + +import javax.mail.Flags; +import javax.mail.Folder; + +public class InImapUserPreferencesStorageTest extends HupaGuiceTestCase { + + /** + * These tests should work with Courier, Gmail and any other real IMAP implementation. + * So, if you wanted to run these tests against your IMAP server do this: + * - Set the correct properties. + * - Be sure the user and password are set correctly + * - Comment the delay + */ + static class MyModule extends GuiceTestModule { + public MyModule() { + // properties = courierProperties; + // properties = gmailProperties; + // logClass = LogProvider.class; + userPreferencesClass = InImapUserPreferencesStorage.class; + // Change the default delay to run test faster + InImapUserPreferencesStorage.IMAP_SAVE_DELAY = 400; + } + } + + @Override + protected Module getModule() { + return new MyModule(); + } + + /** + * Delete contacts from session and all messages in user's dratfs folder + */ + public void setUp() throws Exception { + httpSession.removeAttribute(InImapUserPreferencesStorage.CONTACTS_ATTR); + Folder f = storeCache.get(testUser).getFolder(testUser.getSettings().getDraftsFolderName()); + if (f.exists() && f.getMessageCount() > 0) { + f.open(Folder.READ_WRITE); + f.setFlags(f.getMessages(), new Flags(Flags.Flag.DELETED), true); + f.close(true); + } + } + + public void atestAnySerializableObjectCanBeSavedInIMAP() throws Exception { + IMAPStore store = storeCache.get(testUser); + String folderName = testUser.getSettings().getInboxFolderName() + store.getDefaultFolder().getSeparator() + "aFolder"; + String magicSubject = "magicSubject"; + Object objectOne = new String("a serializable object"); + Object objectTwo = new String("another serializable object"); + + // Remove the folder if exist + Folder f = store.getFolder(folderName); + if (f.exists()) { + f.delete(true); + } + + // Check saving an object when the folder doesnt exist + Object o = InImapUserPreferencesStorage.readUserPreferencesFromIMAP(logger, testUser, store, folderName, magicSubject); + assertNull(o); + + InImapUserPreferencesStorage.saveUserPreferencesInIMAP(logger, testUser, session, store, folderName, magicSubject, objectOne); + + Folder folder = store.getFolder(folderName); + assertNotNull(folder); + assertEquals(1, folder.getMessageCount()); + + o = InImapUserPreferencesStorage.readUserPreferencesFromIMAP(logger, testUser, store, folderName, magicSubject); + assertNotNull(o); + assertEquals(objectOne, o); + + // Check saving an object when the folder already exist + InImapUserPreferencesStorage.saveUserPreferencesInIMAP(logger, testUser, session, store, folderName, magicSubject, objectTwo); + folder = store.getFolder(folderName); + assertEquals(1, folder.getMessageCount()); + o = InImapUserPreferencesStorage.readUserPreferencesFromIMAP(logger, testUser, store, folderName, magicSubject); + assertEquals(objectTwo, o); + + // Remove the folder + store.getFolder(folderName).delete(true); + } + + public void testFetchMessagesFillsTheContactsListAndItIsSavedAsynchronously() throws Exception { + IMAPStore store = storeCache.get(testUser); + String folderName = testUser.getSettings().getDraftsFolderName(); + + // Setup deletes all Drafts messages and contacts in session + assertEquals(0, userPreferences.getContacts().length); + Folder folder = store.getFolder(folderName); + if (folder.exists()) + assertTrue(folder.getMessageCount() == 0); + + // Fetch inbox messages + IMAPFolder cFolder = new IMAPFolder(testUser.getSettings().getInboxFolderName()); + FetchMessagesResult result = fetchMessagesHandler.execute(new FetchMessages(cFolder, 0, 10, null), null); + + // Could be possible that there insn't any message in inbox + if (result.getRealCount() > 0) { + int contactsCount = userPreferences.getContacts().length; + assertTrue(contactsCount > 0); + + // The imap is saved asynchronously after a delay, so the folder exists after a while + folder = store.getFolder(folderName); + if (folder.exists()) + assertTrue(folder.getMessageCount() == 0); + + Thread.sleep(InImapUserPreferencesStorage.IMAP_SAVE_DELAY + 500); + folder = store.getFolder(folderName); + assertNotNull(folder); + assertTrue(folder.exists()); + assertEquals(1, folder.getMessageCount()); + + // When data is deleted from session, contacts came from imap + httpSession.removeAttribute(InImapUserPreferencesStorage.USER_ATTR); + assertEquals(contactsCount, userPreferences.getContacts().length ); + } + } + + public void testSendMessagesAddContactsToList() throws Exception { + // Setup deletes all Drafts messages and contacts in session + assertEquals(0, userPreferences.getContacts().length); + + // Send an email to only one email + SMTPMessage smtpmsg = TestUtils.createMockSMTPMessage(SessionUtils.getSessionRegistry(logger, httpSession), 2); + smtpmsg.setFrom(testUser.getName()); + smtpmsg.setTo(new ArrayList<String>(Arrays.asList(testUser.getName()))); + smtpmsg.setCc(new ArrayList<String>()); + smtpmsg.setBcc(new ArrayList<String>()); + SendMessage action = new SendMessage(smtpmsg); + abstSendMsgHndl.execute(action, null); + + // The email has to be added to the contact list + assertEquals(1, userPreferences.getContacts().length); + + // The imap is saved asynchronously after a delay, so the folder exists after a while + String folderName = testUser.getSettings().getDraftsFolderName(); + Folder folder = store.getFolder(folderName); + folder = store.getFolder(folderName); + if (folder.exists()) + assertTrue(folder.getMessageCount() == 0); + + Thread.sleep(InImapUserPreferencesStorage.IMAP_SAVE_DELAY + 500); + folder = store.getFolder(folderName); + assertNotNull(folder); + assertTrue(folder.exists()); + assertEquals(1, folder.getMessageCount()); + + // When data is deleted from session, contacts came from imap + httpSession.removeAttribute(InImapUserPreferencesStorage.USER_ATTR); + assertEquals(1, userPreferences.getContacts().length); + } + +} Copied: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/InSessionUserPreferencesStorageTest.java (from r907633, james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/UserPreferencesStorageTest.java) URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/InSessionUserPreferencesStorageTest.java?p2=james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/InSessionUserPreferencesStorageTest.java&p1=james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/UserPreferencesStorageTest.java&r1=907633&r2=908000&rev=908000&view=diff ============================================================================== --- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/UserPreferencesStorageTest.java (original) +++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/preferences/InSessionUserPreferencesStorageTest.java Tue Feb 9 11:00:47 2010 @@ -1,57 +1,44 @@ package org.apache.hupa.server.preferences; -import com.sun.mail.imap.IMAPStore; - -import org.apache.hupa.server.HupaTestCase; -import org.apache.hupa.server.IMAPStoreCache; -import org.apache.hupa.server.guice.DemoModeConstants; +import org.apache.hupa.server.HupaGuiceTestCase; import org.apache.hupa.server.handler.FetchFoldersHandler; import org.apache.hupa.server.handler.FetchMessagesHandler; -import org.apache.hupa.server.mock.MockIMAPStoreCache; +import org.apache.hupa.server.utils.SessionUtils; +import org.apache.hupa.server.utils.TestUtils; import org.apache.hupa.shared.data.IMAPFolder; -import org.apache.hupa.shared.data.User; +import org.apache.hupa.shared.data.SMTPMessage; import org.apache.hupa.shared.rpc.FetchFolders; import org.apache.hupa.shared.rpc.FetchMessages; import org.apache.hupa.shared.rpc.FetchMessagesResult; +import org.apache.hupa.shared.rpc.SendMessage; -import javax.servlet.http.HttpSession; - - -public class UserPreferencesStorageTest extends HupaTestCase { +public class InSessionUserPreferencesStorageTest extends HupaGuiceTestCase { - public void testPutContactsInSession() throws Exception { - UserPreferencesStorage userPreferences = injector.getInstance(UserPreferencesStorage.class); - - userPreferences.addContact(" ' \"Somebody\" <[email protected]>"); - assertEquals("Somebody", userPreferences.getContacts()[0].realname); - assertEquals("[email protected]", userPreferences.getContacts()[0].mail); - + public void setUp() throws Exception { + httpSession.removeAttribute(InImapUserPreferencesStorage.CONTACTS_ATTR); } - + public void testFetchMessagesFillsContactsList() throws Exception { - assertEquals(0, userPreferences.getContacts().length); - - User demouser = DemoModeConstants.demoUser; - - HttpSession httpSession = injector.getInstance(HttpSession.class); - httpSession.setAttribute("user", demouser); - - IMAPStoreCache storeCache = injector.getInstance(IMAPStoreCache.class); - IMAPStore store = injector.getInstance(IMAPStore.class); - ((MockIMAPStoreCache)storeCache).addValidUser(demouser, store); - + FetchFoldersHandler fetchFoldersHandler = injector.getInstance(FetchFoldersHandler.class); fetchFoldersHandler.execute(new FetchFolders(), null); - IMAPFolder folder = new IMAPFolder(demouser.getSettings().getInboxFolderName()); + IMAPFolder folder = new IMAPFolder(testUser.getSettings().getInboxFolderName()); FetchMessagesHandler fetchMessagesHandler = injector.getInstance(FetchMessagesHandler.class); FetchMessagesResult result = fetchMessagesHandler.execute(new FetchMessages(folder, 0, 10, null), null); assertTrue(result.getRealCount()>1); - - assertTrue(userPreferences.getContacts().length>1); - } + public void testSendMessagesAddContactsToList() throws Exception { + assertEquals(0, userPreferences.getContacts().length); + + SMTPMessage smtpmsg = TestUtils.createMockSMTPMessage(SessionUtils.getSessionRegistry(logger, httpSession), 2); + SendMessage action = new SendMessage(smtpmsg); + abstSendMsgHndl.execute(action, null); + + assertEquals(3, userPreferences.getContacts().length); + } + } Modified: james/hupa/trunk/server/src/test/java/org/apache/hupa/server/utils/TestUtils.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/server/src/test/java/org/apache/hupa/server/utils/TestUtils.java?rev=908000&r1=907999&r2=908000&view=diff ============================================================================== --- james/hupa/trunk/server/src/test/java/org/apache/hupa/server/utils/TestUtils.java (original) +++ james/hupa/trunk/server/src/test/java/org/apache/hupa/server/utils/TestUtils.java Tue Feb 9 11:00:47 2010 @@ -19,6 +19,19 @@ package org.apache.hupa.server.utils; +import com.sun.mail.imap.IMAPStore; + +import junit.framework.TestCase; + +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.hupa.server.FileItemRegistry; +import org.apache.hupa.server.guice.DemoModeConstants; +import org.apache.hupa.server.handler.AbstractSendMessageHandler; +import org.apache.hupa.shared.data.MessageAttachment; +import org.apache.hupa.shared.data.SMTPMessage; + import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; @@ -27,6 +40,7 @@ import java.util.Arrays; import javax.mail.BodyPart; +import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; @@ -36,17 +50,6 @@ import javax.mail.internet.AddressException; import javax.mail.internet.MimeMessage; -import junit.framework.TestCase; - -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileItemFactory; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.hupa.server.FileItemRegistry; -import org.apache.hupa.server.guice.DemoModeConstants; -import org.apache.hupa.server.handler.AbstractSendMessageHandler; -import org.apache.hupa.shared.data.MessageAttachment; -import org.apache.hupa.shared.data.SMTPMessage; - /** * A bunch of useful methods used for testing */ @@ -191,7 +194,7 @@ } SMTPMessage smtpMessage = new SMTPMessage(); - smtpMessage.setFrom("[email protected]"); + smtpMessage.setFrom("Test user <[email protected]>"); smtpMessage.setTo(new ArrayList<String>(Arrays.asList("[email protected]"))); smtpMessage.setCc(new ArrayList<String>(Arrays.asList("[email protected]"))); smtpMessage.setBcc(new ArrayList<String>(Arrays.asList("[email protected]"))); @@ -268,5 +271,14 @@ mpart.addBodyPart(part); message.saveChanges(); } + + + public static String dumpStore(IMAPStore store) throws MessagingException { + String ret = ""; + for (Folder f : store.getDefaultFolder().list()) { + ret += f.getFullName() + " " + f.getMessageCount() + "\n"; + } + return ret; + } } \ No newline at end of file Modified: james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/Settings.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/Settings.java?rev=908000&r1=907999&r2=908000&view=diff ============================================================================== --- james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/Settings.java (original) +++ james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/data/Settings.java Tue Feb 9 11:00:47 2010 @@ -26,6 +26,7 @@ public static final String DEFAULT_INBOX = "INBOX"; public static final String DEFAULT_TRASH = "Trash"; public static final String DEFAULT_SENT = "Sent"; + public static final String DEFAULT_DRAFT = "Draft"; /** * @@ -34,6 +35,8 @@ private String trashFolderName = DEFAULT_TRASH; private String sentFolderName = DEFAULT_SENT; private String inboxFolderName = DEFAULT_INBOX; + private String draftsFolderName = DEFAULT_DRAFT; + private int prefetchCount = 20; public String getInboxFolderName() { @@ -68,5 +71,13 @@ this.prefetchCount = prefetchCount; } + public String getDraftsFolderName() { + return draftsFolderName; + } + + public void setDraftsFolderName(String draftFolderName) { + this.draftsFolderName = draftFolderName; + } + } Modified: james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/LoginUser.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/LoginUser.java?rev=908000&r1=907999&r2=908000&view=diff ============================================================================== --- james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/LoginUser.java (original) +++ james/hupa/trunk/shared/src/main/java/org/apache/hupa/shared/rpc/LoginUser.java Tue Feb 9 11:00:47 2010 @@ -46,6 +46,10 @@ public String getPassword() { return password; } + + public String toString() { + return userName + ":" + password; + } } Modified: james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/WidgetsCSS.java URL: http://svn.apache.org/viewvc/james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/WidgetsCSS.java?rev=908000&r1=907999&r2=908000&view=diff ============================================================================== --- james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/WidgetsCSS.java (original) +++ james/hupa/trunk/widgets/src/main/java/org/apache/hupa/widgets/WidgetsCSS.java Tue Feb 9 11:00:47 2010 @@ -4,6 +4,7 @@ public static final String C_hyperlink = "hupa-hyperlink"; public static final String C_loading = "hupa-loading"; - public static String C_hupa_rnd_container = "hupa-rounded"; + public static final String C_hupa_rnd_container = "hupa-rounded"; + public static final String C_attachment = "hupa-attachment"; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
