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