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 [14/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/mailboxmanager/redundant/AbstractMailRepositoryTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositoryTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositoryTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/redundant/AbstractMailRepositoryTestCase.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,174 @@
+/***********************************************************************
+ * Copyright (c) 1999-2006 The Apache Software Foundation. *
+ * All rights reserved. *
+ * ------------------------------------------------------------------- *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you *
+ * may not use this file except in compliance with the License. You *
+ * may obtain a copy of the License at: *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, software *
+ * distributed under the License is distributed on an "AS IS" BASIS, *
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or *
+ * implied. See the License for the specific language governing *
+ * permissions and limitations under the License. *
+ ***********************************************************************/
+package org.apache.james.mailboxmanager.redundant;
+
+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 junit.framework.TestCase;
+
+import org.apache.james.core.MailImpl;
+import org.apache.james.mailrepository.javamail.HashJavamailStoreMailRepository;
+import org.apache.james.services.MailRepository;
+import org.apache.mailet.Mail;
+
+import com.sun.mail.util.CRLFOutputStream;
+
+public abstract class AbstractMailRepositoryTestCase extends TestCase {
+
+ protected MailRepository mailRepository;
+
+ private static Random random;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ destroyRepository();
+ configureRepository();
+ assertNotNull(mailRepository);
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ destroyRepository();
+ mailRepository = null;
+ }
+
+ protected abstract void configureRepository() throws Exception;
+
+ protected abstract void destroyRepository() throws IOException, MessagingException;
+
+ public static Mail generateMail() throws MessagingException {
+ Mail m = new MailImpl();
+ 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);
+ m.setMessage(mm);
+ String key = "james-test-" + System.currentTimeMillis() + "-"
+ + getRandom().nextLong();
+ m.setName(key);
+ return m;
+ }
+
+ protected static boolean contentEquals(MimeMessage m1, MimeMessage m2)
+ throws IOException, MessagingException {
+ ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
+ m1.writeTo(new CRLFOutputStream(baos1));
+ ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
+ m2.writeTo(new CRLFOutputStream(baos2));
+ return Arrays.equals(baos1.toByteArray(), baos2.toByteArray());
+ }
+
+ protected static int messageHashSum(MimeMessage mm)
+ throws IOException, MessagingException {
+ HashJavamailStoreMailRepository.HasherOutputStream hos=new HashJavamailStoreMailRepository.HasherOutputStream();
+ mm.writeTo(new CRLFOutputStream(hos));
+ return hos.getHash();
+ }
+
+ protected 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(messageHashSum(mm)));
+ }
+ for (Iterator it = ma2.iterator(); it.hasNext();) {
+ MimeMessage mm = (MimeMessage) it.next();
+ s2.add(new Integer(messageHashSum(mm)));
+ }
+ return s1.equals(s2);
+ }
+
+ protected static synchronized Random getRandom() {
+ if (random == null) {
+ random = new Random();
+ }
+ return random;
+
+ }
+
+ protected void assertNativeMessageCountEquals(int count) {
+ try {
+ assertEquals("message count differs", count,
+ getNativeMessageCount());
+ } catch (NativeMethodNotSupportetException e) {
+ }
+ }
+
+ protected void assertNativeMessagesEqual(Collection added)
+ throws IOException, MessagingException {
+ try {
+ boolean equ = messageSetsEqual(getNativeMessages(), added);
+ assertTrue("messages differ", equ);
+ } catch (NativeMethodNotSupportetException e) {
+ }
+
+ }
+
+ protected int getNativeMessageCount()
+ throws NativeMethodNotSupportetException {
+ throw new NativeMethodNotSupportetException(
+ "AbstractMailRepositoryTestCase.getNativeMessageCount() not supported");
+ }
+
+ protected Collection getNativeMessages()
+ throws NativeMethodNotSupportetException {
+ throw new NativeMethodNotSupportetException(
+ "AbstractMailRepositoryTestCase.getNativeMessages() not supported");
+ }
+
+ protected void nativeStoreMessage(MimeMessage mm)
+ throws NativeMethodNotSupportetException {
+ throw new NativeMethodNotSupportetException(
+ "AbstractMailRepositoryTestCase.nativeStoreMessage() not supported");
+ }
+
+ class NativeMethodNotSupportetException extends Exception {
+
+ public NativeMethodNotSupportetException(String string) {
+ super(string);
+ }
+
+ private static final long serialVersionUID = 1477298541686913960L;
+
+ }
+
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/AbstractMailboxRowTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/AbstractMailboxRowTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/AbstractMailboxRowTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/AbstractMailboxRowTestCase.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,26 @@
+package org.apache.james.mailboxmanager.torque;
+
+import org.apache.james.mailboxmanager.manager.GeneralManager;
+import org.apache.james.mailboxmanager.mock.MockUser;
+import org.apache.james.mailboxmanager.mock.TorqueMailboxManagerProviderSingleton;
+import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
+import org.apache.torque.TorqueException;
+import org.apache.torque.util.Criteria;
+
+public abstract class AbstractMailboxRowTestCase extends AbstractTorqueTestCase {
+
+ GeneralManager mm;
+
+ public AbstractMailboxRowTestCase() throws TorqueException {
+ super();
+ }
+ public void setUp() throws Exception {
+ super.setUp();
+ assertEquals(0,MailboxRowPeer.doSelect(new Criteria()).size());
+ mm=TorqueMailboxManagerProviderSingleton.getTorqueMailboxManagerProviderInstance().getGeneralManagerInstance(new MockUser());
+ }
+ public void tearDown() {
+
+ }
+
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/AbstractTorqueTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/AbstractTorqueTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/AbstractTorqueTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/AbstractTorqueTestCase.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,18 @@
+package org.apache.james.mailboxmanager.torque;
+
+import junit.framework.TestCase;
+
+import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.mock.TorqueMailboxManagerProviderSingleton;
+import org.apache.torque.TorqueException;
+
+public abstract class AbstractTorqueTestCase extends TestCase {
+
+ public AbstractTorqueTestCase() throws TorqueException {
+ super();
+ }
+
+ public void setUp() throws TorqueException, MailboxManagerException, Exception {
+ TorqueMailboxManagerProviderSingleton.getTorqueMailboxManagerProviderInstance().deleteEverything();
+ }
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueImapMailboxSelfTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueImapMailboxSelfTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueImapMailboxSelfTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueImapMailboxSelfTestCase.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,31 @@
+package org.apache.james.mailboxmanager.torque;
+
+import javax.mail.MessagingException;
+
+import org.apache.james.mailboxmanager.AbstractImapMailboxSelfTestCase;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
+import org.apache.james.mailboxmanager.mock.MockUser;
+import org.apache.james.mailboxmanager.mock.TorqueMailboxManagerProviderSingleton;
+import org.apache.torque.TorqueException;
+
+public class TorqueImapMailboxSelfTestCase extends
+ AbstractImapMailboxSelfTestCase {
+
+ public TorqueImapMailboxSelfTestCase() throws TorqueException {
+ super();
+ }
+
+ public void setUp() throws Exception {
+ MailboxManagerProvider mailboxManagerProvider=TorqueMailboxManagerProviderSingleton.getTorqueMailboxManagerProviderInstance();
+ mailboxManagerProvider.deleteEverything();
+ mailboxManager = mailboxManagerProvider .getGeneralManagerInstance(new MockUser());
+
+ super.setUp();
+ }
+
+ public void testAddedEvents() throws MailboxManagerException, MessagingException {
+ super.testAddedEvents();
+ }
+
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerSelfTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerSelfTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerSelfTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerSelfTestCase.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,21 @@
+package org.apache.james.mailboxmanager.torque;
+
+import org.apache.james.mailboxmanager.AbstractMailboxManagerSelfTestCase;
+import org.apache.james.mailboxmanager.mock.MockUser;
+import org.apache.james.mailboxmanager.mock.TorqueMailboxManagerProviderSingleton;
+import org.apache.torque.Torque;
+import org.apache.torque.TorqueException;
+
+public class TorqueMailboxManagerSelfTestCase extends
+ AbstractMailboxManagerSelfTestCase {
+
+ public TorqueMailboxManagerSelfTestCase() throws TorqueException {
+ super();
+ }
+
+ public void setUp() throws Exception {
+ TorqueMailboxManagerProviderSingleton.getTorqueMailboxManagerProviderInstance().deleteEverything();
+ mailboxManager = TorqueMailboxManagerProviderSingleton.getTorqueMailboxManagerProviderInstance().getGeneralManagerInstance(new MockUser());
+ }
+
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerTest.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerTest.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerTest.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,34 @@
+package org.apache.james.mailboxmanager.torque;
+
+import java.util.List;
+
+import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.torque.om.MailboxRow;
+import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
+import org.apache.torque.TorqueException;
+import org.apache.torque.util.Criteria;
+
+public class TorqueMailboxManagerTest extends AbstractMailboxRowTestCase {
+
+
+
+ public TorqueMailboxManagerTest() throws TorqueException {
+ super();
+ }
+
+ public void testCreateRenameDeleteMailbox() throws TorqueException, MailboxManagerException {
+ mm.createMailbox("#users.tuser.INBOX");
+ List l=MailboxRowPeer.doSelect(new Criteria());
+ assertEquals(1,l.size());
+ assertEquals("#users.tuser.INBOX",((MailboxRow)l.get(0)).getName());
+
+ mm.renameMailbox("#users.tuser.INBOX","#users.tuser2.INBOX");
+ l=MailboxRowPeer.doSelect(new Criteria());
+ assertEquals(1,l.size());
+ assertEquals("#users.tuser2.INBOX",((MailboxRow)l.get(0)).getName());
+
+ mm.deleteMailbox("#users.tuser2.INBOX");
+ l=MailboxRowPeer.doSelect(new Criteria());
+ assertEquals(0,l.size());
+ }
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueMailboxTestCase.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,73 @@
+package org.apache.james.mailboxmanager.torque;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.mail.Flags;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.james.mailboxmanager.MessageResult;
+import org.apache.james.mailboxmanager.TestUtil;
+import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
+import org.apache.james.mailboxmanager.impl.MailboxListenerCollector;
+import org.apache.james.mailboxmanager.torque.om.MailboxRow;
+import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
+import org.apache.james.mailboxmanager.torque.om.MessageRow;
+import org.apache.james.mailboxmanager.torque.om.MessageRowPeer;
+import org.apache.james.mailboxmanager.tracking.UidChangeTracker;
+import org.apache.torque.TorqueException;
+import org.apache.torque.util.Criteria;
+
+public class TorqueMailboxTestCase extends AbstractTorqueTestCase {
+
+
+ public TorqueMailboxTestCase() throws TorqueException {
+ super();
+ }
+
+ public void testAppendGetDeleteMessage() throws Exception {
+ MailboxRow mr = new MailboxRow("#users.tuser.INBOX", 100);
+ mr.save();
+ mr=MailboxRowPeer.retrieveByName("#users.tuser.INBOX");
+ TorqueMailbox torqueMailbox = new TorqueMailbox(mr, new UidChangeTracker(null,"#users.tuser.INBOX",100),null);
+ torqueMailbox.addListener(new MailboxListenerCollector(), MessageResult.NOTHING);
+ assertEquals(0,torqueMailbox.getMessageCount());
+
+ long time = System.currentTimeMillis();
+ time = time - (time % 1000);
+ Date date = new Date(time);
+ MimeMessage mm=TestUtil.createMessage();
+ Flags flags=new Flags();
+ flags.add(Flags.Flag.ANSWERED);
+ flags.add(Flags.Flag.SEEN);
+ mm.setFlags(flags,true);
+ mm.writeTo(System.out);
+ torqueMailbox.appendMessage(mm, date, 0);
+ assertEquals(1,torqueMailbox.getMessageCount());
+ List l = MessageRowPeer.doSelect(new Criteria());
+ assertEquals(1, l.size());
+ MessageRow msg = (MessageRow) l.get(0);
+ assertEquals(mr.getMailboxId(), msg.getMailboxId());
+ assertEquals(1, msg.getUid());
+
+ assertEquals(date, msg.getInternalDate());
+ assertEquals(flags, msg.getMessageFlags().getFlagsObject());
+
+ mr = MailboxRowPeer.retrieveByPK(mr.getMailboxId());
+ assertEquals(1, mr.getLastUid());
+
+ MessageResult[] messageResult=torqueMailbox.getMessages(GeneralMessageSetImpl.oneUid(1l),MessageResult.MIME_MESSAGE);
+ assertNotNull(messageResult);
+ assertEquals(1,messageResult.length);
+ messageResult[0].getMimeMessage().writeTo(System.out);
+ assertTrue(TorqueTestUtil.contentEquals(mm,messageResult[0].getMimeMessage(),true));
+
+ Flags f=new Flags();
+ f.add(Flags.Flag.DELETED);
+ torqueMailbox.setFlags(f,true,false, GeneralMessageSetImpl.oneUid(1l), null);
+ MessageResult[] messageResults=torqueMailbox.expunge(GeneralMessageSetImpl.all(),MessageResult.UID);
+ assertEquals(1,messageResults.length);
+ assertEquals(1l,messageResults[0].getUid());
+ }
+
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueTestSuite.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueTestSuite.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueTestSuite.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueTestSuite.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,20 @@
+package org.apache.james.mailboxmanager.torque;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class TorqueTestSuite {
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(
+ "Test for org.apache.james.mailboxmanager.torque");
+ //$JUnit-BEGIN$
+ suite.addTestSuite(TorqueMailboxManagerSelfTestCase.class);
+ suite.addTestSuite(TorqueMailboxManagerTest.class);
+ suite.addTestSuite(TorqueImapMailboxSelfTestCase.class);
+ suite.addTestSuite(TorqueMailboxTestCase.class);
+ //$JUnit-END$
+ return suite;
+ }
+
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueTestUtil.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueTestUtil.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueTestUtil.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/TorqueTestUtil.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,25 @@
+package org.apache.james.mailboxmanager.torque;
+
+import org.apache.james.mailboxmanager.TestUtil;
+import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
+import org.apache.torque.TorqueException;
+import org.apache.torque.util.Criteria;
+
+public class TorqueTestUtil extends TestUtil {
+
+
+
+ public static void clearTables() throws TorqueException {
+// MessageBodyPeer.doDelete(new Criteria().and(MessageBodyPeer.MAILBOX_ID,
+// new Integer(-1), Criteria.GREATER_THAN));
+// MessageHeaderPeer.doDelete(new Criteria().and(MessageHeaderPeer.MAILBOX_ID,
+// new Integer(-1), Criteria.GREATER_THAN));
+// MessageFlagsPeer.doDelete(new Criteria().and(MessageFlagsPeer.MAILBOX_ID,
+// new Integer(-1), Criteria.GREATER_THAN));
+// MessageRowPeer.doDelete(new Criteria().and(MessageRowPeer.MAILBOX_ID,
+// new Integer(-1), Criteria.GREATER_THAN));
+ MailboxRowPeer.doDelete(new Criteria().and(MailboxRowPeer.MAILBOX_ID,
+ new Integer(-1), Criteria.GREATER_THAN));
+ }
+
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/om/MailboxRowPeerTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/om/MailboxRowPeerTest.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/om/MailboxRowPeerTest.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/om/MailboxRowPeerTest.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,90 @@
+package org.apache.james.mailboxmanager.torque.om;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.apache.james.mailboxmanager.torque.AbstractMailboxRowTestCase;
+import org.apache.torque.TorqueException;
+import org.apache.torque.util.Transaction;
+
+/**
+ *
+ * Made this abstract because it doesn't work with derby, don't know why.
+ *
+ */
+
+public abstract class MailboxRowPeerTest extends AbstractMailboxRowTestCase {
+
+
+
+ public MailboxRowPeerTest() throws TorqueException {
+ super();
+ }
+
+ private Thread runThread(final long id, final int no) {
+ Thread t = new Thread() {
+ public void run() {
+ System.out.println("Thread " + no + " started.");
+ Connection c = null;
+ boolean retry;
+ do {
+ retry = false;
+ try {
+ c = Transaction.begin("mailboxmanager");
+ c.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
+ c.setAutoCommit(false);
+ MailboxRow m = MailboxRowPeer.retrieveByPK(id, c);
+ System.out.println("Thread " + no + " sleeps.");
+ long uid = m.getLastUid() + 1;
+ m.setLastUid(uid);
+ m.save(c);
+ Transaction.commit(c);
+ System.out.println("Thread " + no + " has set to "
+ + uid);
+ } catch (TorqueException e) {
+
+ int errorCode = -1;
+ String state ="";
+ Transaction.safeRollback(c);
+ Throwable t = e.getCause();
+ if (t instanceof SQLException) {
+ errorCode=((SQLException) t).getErrorCode();
+ if (errorCode==1213) retry=true;
+ state = ((SQLException) t).getSQLState();
+ }
+ System.out.println("Thread " + no + " State: "+state+ " SQLERROR"+errorCode + " " + e);
+ } catch (SQLException e) {
+ System.out.println("SQLException!");
+ e.printStackTrace();
+ }
+// catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+ } while (retry);
+
+ }
+
+ };
+ t.start();
+ return t;
+ }
+
+ public void testConcurrentSerializableMailboxRowUidUpdate() throws Exception {
+ MailboxRow m=new MailboxRow();
+ m.setName("#users.joachim.INBOX");
+ m.save();
+ m=MailboxRowPeer.retrieveByName("#users.joachim.INBOX");
+ long id=m.getMailboxId();
+
+ Thread t[] = new Thread[16];
+ for (int i = 0; i < t.length; i++) {
+ t[i] = runThread(id, i);
+ }
+ for (int i = 0; i < t.length; i++) {
+ System.out.println("Warte auf Thread " + i);
+ t[i].join();
+ }
+
+ }
+
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/om/MailboxRowTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/om/MailboxRowTest.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/om/MailboxRowTest.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/om/MailboxRowTest.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,66 @@
+package org.apache.james.mailboxmanager.torque.om;
+
+import java.sql.SQLException;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.apache.james.mailboxmanager.torque.AbstractMailboxRowTestCase;
+import org.apache.torque.TorqueException;
+
+public class MailboxRowTest extends AbstractMailboxRowTestCase {
+
+ public MailboxRowTest() throws TorqueException {
+ super();
+ }
+
+
+ public void testConcurrentConsumeUid() throws Exception {
+ MailboxRow mr=new MailboxRow("#users.tuser.INBOX",100);
+ mr.save();
+ mr=MailboxRowPeer.retrieveByName("#users.tuser.INBOX");
+ ConsumeUidThread[] t=new ConsumeUidThread[10];
+ for (int i = 0; i < t.length; i++) {
+ t[i]=new ConsumeUidThread(mr);
+ t[i].start();
+ }
+ SortedSet set=new TreeSet();
+ for (int i = 0; i < t.length; i++) {
+ t[i].join();
+ set.add(new Long(t[i].mr.getLastUid()));
+ }
+ assertEquals(t.length,set.size());
+
+ }
+
+ class ConsumeUidThread extends Thread {
+ MailboxRow mr;
+
+ ConsumeUidThread( MailboxRow mr) {
+ this.mr=mr;
+ }
+ public void run() {
+ try {
+ mr=mr.consumeNextUid();
+ } catch (TorqueException e) {
+ e.printStackTrace();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+ public void testConsumeUid() throws Exception {
+ MailboxRow mr=new MailboxRow("#users.tuser2.INBOX",100);
+ mr.save();
+ mr=MailboxRowPeer.retrieveByName("#users.tuser2.INBOX");
+ assertEquals(0,mr.getLastUid());
+ mr=mr.consumeNextUid();
+ assertEquals(1,mr.getLastUid());
+ mr=mr.consumeNextUid();
+ assertEquals(2,mr.getLastUid());
+ mr=mr.consumeNextUid();
+ assertEquals(3,mr.getLastUid());
+ }
+
+}
Added: james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/repository/TorqueMailboxManagerMailRepositoryNativeTestCase.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/repository/TorqueMailboxManagerMailRepositoryNativeTestCase.java?view=auto&rev=454432
==============================================================================
--- james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/repository/TorqueMailboxManagerMailRepositoryNativeTestCase.java (added)
+++ james/server/sandbox/imap-integration/src/test/org/apache/james/mailboxmanager/torque/repository/TorqueMailboxManagerMailRepositoryNativeTestCase.java Mon Oct 9 10:15:30 2006
@@ -0,0 +1,131 @@
+package org.apache.james.mailboxmanager.torque.repository;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.MessageResult;
+import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
+import org.apache.james.mailboxmanager.mailbox.GeneralMailboxSession;
+import org.apache.james.mailboxmanager.mock.MockUser;
+import org.apache.james.mailboxmanager.mock.TorqueMailboxManagerProviderSingleton;
+import org.apache.james.mailboxmanager.redundant.AbstractMailRepositoryNativeTestCase;
+import org.apache.james.mailboxmanager.repository.MailboxManagerMailRepository;
+
+public class TorqueMailboxManagerMailRepositoryNativeTestCase extends
+ AbstractMailRepositoryNativeTestCase {
+
+ GeneralMailboxSession shadowMailbox = null;
+
+ protected void configureRepository() throws Exception {
+ TorqueMailboxManagerProviderSingleton
+ .getTorqueMailboxManagerProviderInstance().deleteEverything();
+ MailboxManagerMailRepository mailboxManagerMailRepository = new MailboxManagerMailRepository();
+
+ DefaultConfigurationBuilder db = new DefaultConfigurationBuilder();
+
+ Configuration conf = db
+ .build(
+ new ByteArrayInputStream(
+ ("<repository destinationURL=\"mailboxmanager://users/tuser\" type=\"MAIL\"></repository>").getBytes()),
+ "repository");
+ mailboxManagerMailRepository.configure(conf);
+ mailboxManagerMailRepository.initialize();
+ mailboxManagerMailRepository.setMailboxManagerProvider(TorqueMailboxManagerProviderSingleton
+ .getTorqueMailboxManagerProviderInstance());
+ mailRepository = mailboxManagerMailRepository;
+
+ }
+
+ protected void destroyRepository() throws IOException, MessagingException {
+ }
+
+ protected void assertNativeMessageCountEquals(int count) {
+ assertEquals(count, getNativeMessageCount());
+ }
+
+
+ protected void assertNativeMessagesEqual(Collection expectedMessages)
+ throws IOException, MessagingException {
+ Collection existing = getNativeMessages();
+ Set existingSet = new HashSet();
+ for (Iterator iter = existing.iterator(); iter.hasNext();) {
+ MimeMessage mm = (MimeMessage) iter.next();
+ existingSet.add(new Integer(messageHashSum(mm)));
+ }
+ Set expectedSet = new HashSet();
+ for (Iterator iter = expectedMessages.iterator(); iter.hasNext();) {
+ MimeMessage mm = (MimeMessage) iter.next();
+ expectedSet.add(new Integer(messageHashSum(mm)));
+ }
+ assertEquals(expectedSet.size(), existingSet.size());
+ assertTrue(expectedSet.equals(existingSet));
+
+ }
+
+ protected int getNativeMessageCount() {
+ try {
+ return getShadowMailbox().getMessageCount();
+ } catch (MailboxManagerException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void testLock() throws MessagingException {
+ super.testLock();
+ }
+
+
+ protected Collection getNativeMessages() {
+ final MessageResult[] mr;
+ try {
+ mr = getShadowMailbox().getMessages(GeneralMessageSetImpl.all(),
+ MessageResult.MIME_MESSAGE);
+
+ } catch (MailboxManagerException e) {
+ throw new RuntimeException(e);
+ }
+ Collection existing = new ArrayList();
+ for (int i = 0; i < mr.length; i++) {
+ existing.add(mr[i].getMimeMessage());
+ }
+ return existing;
+ }
+
+ protected void nativeStoreMessage(MimeMessage mm) {
+ try {
+ getShadowMailbox().appendMessage(mm, new Date(),
+ MessageResult.NOTHING);
+ } catch (MailboxManagerException e) {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ protected GeneralMailboxSession getShadowMailbox() {
+ if (shadowMailbox == null) {
+ try {
+ shadowMailbox = (GeneralMailboxSession) TorqueMailboxManagerProviderSingleton
+ .getTorqueMailboxManagerProviderInstance()
+ .getGeneralManagerInstance(new MockUser())
+ .getGenericGeneralMailboxSession("#mail.tuser.INBOX");
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ return shadowMailbox;
+ }
+
+}
Added: james/server/sandbox/imap-integration/tools/lib/jmock-1.1.0RC1.jar
URL: http://svn.apache.org/viewvc/james/server/sandbox/imap-integration/tools/lib/jmock-1.1.0RC1.jar?view=auto&rev=454432
==============================================================================
Binary file - no diff available.
Propchange: james/server/sandbox/imap-integration/tools/lib/jmock-1.1.0RC1.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org