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 rd...@apache.org on 2008/09/06 22:21:48 UTC

svn commit: r692726 - in /james/protocols/imap/trunk/main-deployment: ./ src/test/java/org/apache/james/experimental/imapserver/ src/test/java/org/apache/james/mailboxmanager/mock/

Author: rdonkin
Date: Sat Sep  6 13:21:47 2008
New Revision: 692726

URL: http://svn.apache.org/viewvc?rev=692726&view=rev
Log:
Fixed test harness.

Modified:
    james/protocols/imap/trunk/main-deployment/   (props changed)
    james/protocols/imap/trunk/main-deployment/build.xml
    james/protocols/imap/trunk/main-deployment/src/test/java/org/apache/james/experimental/imapserver/ExperimentalHostSystem.java
    james/protocols/imap/trunk/main-deployment/src/test/java/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java

Propchange: james/protocols/imap/trunk/main-deployment/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sat Sep  6 13:21:47 2008
@@ -1,2 +1,3 @@
 target
 .*
+*.log

Modified: james/protocols/imap/trunk/main-deployment/build.xml
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/main-deployment/build.xml?rev=692726&r1=692725&r2=692726&view=diff
==============================================================================
--- james/protocols/imap/trunk/main-deployment/build.xml (original)
+++ james/protocols/imap/trunk/main-deployment/build.xml Sat Sep  6 13:21:47 2008
@@ -3,4 +3,26 @@
   <description>Builds main-deployment module. This is an deployment module.</description>
   <property name="name.module" value="main-deployment" />
   <import file="../build-tools/deployment-build.xml" optional="no" />
+	
+    <target 
+        name='dist'
+        description='Builds and creates distribution without cleaning'
+        depends='build, check-environment, conditional-clean, test'
+        unless='dont.build.module'>
+        <CreateJar 
+            name='${name.module}'   
+            bin='${dir.build.bin}'
+            lib='${dir.stage.james}'/>  
+        <CreateJar 
+            name='${name.module}-test'   
+            bin='${dir.build.test}'
+            lib='${dir.stage.james}'/>  
+	<!-- JavaDocs fails unless source exists in main
+        <CreateJavaDocs/>
+        <CreateJar 
+            name='${name.module}-javadoc'   
+            bin='${build.javadocs}'
+            lib='${dir.stage.james}'/>     
+            -->
+    </target> 
 </project>

Modified: james/protocols/imap/trunk/main-deployment/src/test/java/org/apache/james/experimental/imapserver/ExperimentalHostSystem.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/main-deployment/src/test/java/org/apache/james/experimental/imapserver/ExperimentalHostSystem.java?rev=692726&r1=692725&r2=692726&view=diff
==============================================================================
--- james/protocols/imap/trunk/main-deployment/src/test/java/org/apache/james/experimental/imapserver/ExperimentalHostSystem.java (original)
+++ james/protocols/imap/trunk/main-deployment/src/test/java/org/apache/james/experimental/imapserver/ExperimentalHostSystem.java Sat Sep  6 13:21:47 2008
@@ -35,6 +35,7 @@
 import org.apache.james.api.imap.process.ImapProcessor;
 import org.apache.james.imapserver.codec.decode.ImapDecoder;
 import org.apache.james.imapserver.codec.encode.ImapEncoder;
+import org.apache.james.mailboxmanager.mock.TorqueMailboxManagerProviderSingleton;
 import org.apache.james.test.functional.imap.HostSystem;
 
 public class ExperimentalHostSystem implements HostSystem {
@@ -239,7 +240,7 @@
     }
 
 	public boolean addUser(String user, String password) throws Exception {
-		
-		return false;
+		TorqueMailboxManagerProviderSingleton.addUser(user, password);
+		return true;
 	}
 }

Modified: james/protocols/imap/trunk/main-deployment/src/test/java/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/main-deployment/src/test/java/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java?rev=692726&r1=692725&r2=692726&view=diff
==============================================================================
--- james/protocols/imap/trunk/main-deployment/src/test/java/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java (original)
+++ james/protocols/imap/trunk/main-deployment/src/test/java/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java Sat Sep  6 13:21:47 2008
@@ -19,17 +19,160 @@
 
 package org.apache.james.mailboxmanager.mock;
 
-import java.util.Collection;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Locale;
 
+import org.apache.commons.configuration.BaseConfiguration;
 import org.apache.james.experimental.imapserver.ExperimentalHostSystem;
-import org.apache.james.experimental.imapserver.HostSystemFactory;
 import org.apache.james.mailboxmanager.impl.DefaultMailboxManagerProvider;
 import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
-import org.apache.james.mailboxmanager.manager.SubscriptionException;
 import org.apache.james.mailboxmanager.torque.TorqueMailboxManager;
+import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
+import org.apache.james.mailboxmanager.torque.om.MessageBodyPeer;
+import org.apache.james.mailboxmanager.torque.om.MessageFlagsPeer;
+import org.apache.james.mailboxmanager.torque.om.MessageHeaderPeer;
+import org.apache.james.mailboxmanager.torque.om.MessageRowPeer;
+import org.apache.torque.Torque;
+import org.apache.torque.util.BasePeer;
+import org.apache.torque.util.Transaction;
 
 public class TorqueMailboxManagerProviderSingleton {
    
+	//TODO: replicates code in server
+    private static final String[] tableNames = new String[] {
+            MailboxRowPeer.TABLE_NAME, 
+            MessageRowPeer.TABLE_NAME,
+            MessageFlagsPeer.TABLE_NAME,
+            MessageHeaderPeer.TABLE_NAME, 
+            MessageBodyPeer.TABLE_NAME
+            };
+	//TODO: replicates code in server
+    private static final String[] CREATE_STATEMENTS = {
+    "CREATE TABLE mailbox" +
+    "(" +
+    "  mailbox_id BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY," +
+    "        name VARCHAR(255) NOT NULL," +
+    "        uid_validity BIGINT NOT NULL," +
+    "        last_uid BIGINT NOT NULL," +
+    "        message_count INTEGER default 0," +
+    "        size BIGINT default 0," +
+    "        PRIMARY KEY(mailbox_id)," +
+    "        UNIQUE (name))",
+    "        CREATE TABLE message" +
+    "    (" +
+    "        mailbox_id BIGINT NOT NULL," +
+    "        uid BIGINT NOT NULL," +
+    "        internal_date TIMESTAMP," +
+    "        size INTEGER," +
+    "        PRIMARY KEY(mailbox_id,uid)," +
+    "        FOREIGN KEY (mailbox_id) REFERENCES mailbox (mailbox_id)" +
+    "            ON DELETE CASCADE" +
+    "      )",   
+    "CREATE TABLE message_flags" +
+    "    (" +
+    "        mailbox_id BIGINT NOT NULL," +
+    "        uid BIGINT NOT NULL," +
+    "        answered INTEGER default 0 NOT NULL," +
+    "        deleted INTEGER default 0 NOT NULL," +
+    "        draft INTEGER default 0 NOT NULL," +
+    "        flagged INTEGER default 0 NOT NULL," +
+    "        recent INTEGER default 0 NOT NULL," +
+    "        seen INTEGER default 0 NOT NULL," +
+    "        PRIMARY KEY(mailbox_id,uid)," +
+    "        FOREIGN KEY (mailbox_id, uid) REFERENCES message (mailbox_id, uid)" +
+    "            ON DELETE CASCADE" +
+    "      )",
+    "CREATE TABLE message_header" +
+    "    (" +
+    "        mailbox_id BIGINT NOT NULL," +
+    "        uid BIGINT NOT NULL," +
+    "        line_number INTEGER NOT NULL," +
+    "        field VARCHAR(256) NOT NULL," +
+    "        value VARCHAR(1024) NOT NULL," +
+    "        PRIMARY KEY(mailbox_id,uid,line_number)," +
+    "        FOREIGN KEY (mailbox_id, uid) REFERENCES message (mailbox_id, uid)" +
+    "            ON DELETE CASCADE" +
+    "      )", 
+    "CREATE TABLE message_body" +
+    "    (" +
+    "        mailbox_id BIGINT NOT NULL," +
+    "        uid BIGINT NOT NULL," +
+    "        body BLOB NOT NULL," +
+    "        PRIMARY KEY(mailbox_id,uid)," +
+    "        FOREIGN KEY (mailbox_id, uid) REFERENCES message (mailbox_id, uid)" +
+    "            ON DELETE CASCADE" +
+    "      )"};  
+	//TODO: replicates code in server
+    public static void initialize() throws Exception {
+    	BaseConfiguration torqueConf = configureDefaults();
+    	Connection conn = null;
+    	Torque.init(torqueConf);
+    	conn = Transaction.begin(MailboxRowPeer.DATABASE_NAME);
+
+    	DatabaseMetaData dbMetaData = conn.getMetaData();
+
+    	for (int i = 0; i < tableNames.length; i++) {
+    		if (!tableExists(dbMetaData, tableNames[i])) {
+    			BasePeer.executeStatement(CREATE_STATEMENTS[i],
+    					conn);
+    			System.out.println("Created table " + tableNames[i]);
+    			System.out.println(CREATE_STATEMENTS[i]);
+    		}
+    	}
+
+    	Transaction.commit(conn);
+    	System.out.println("MailboxManager has been initialized");
+    }
+	//TODO: replicates code in server
+    private static boolean tableExists(DatabaseMetaData dbMetaData, String tableName)
+    throws SQLException {
+    	return (tableExistsCaseSensitive(dbMetaData, tableName)
+    			|| tableExistsCaseSensitive(dbMetaData, tableName
+    					.toUpperCase(Locale.US)) || tableExistsCaseSensitive(
+    							dbMetaData, tableName.toLowerCase(Locale.US)));
+    }
+	//TODO: replicates code in server
+    private static boolean tableExistsCaseSensitive(DatabaseMetaData dbMetaData,
+    		String tableName) throws SQLException {
+    	ResultSet rsTables = dbMetaData.getTables(null, null, tableName, null);
+    	try {
+    		boolean found = rsTables.next();
+    		return found;
+    	} finally {
+    		if (rsTables != null) {
+    			rsTables.close();
+    		}
+    	}
+    }
+	//TODO: replicates code in server
+    public static BaseConfiguration configureDefaults()
+            throws org.apache.commons.configuration.ConfigurationException {
+    	BaseConfiguration torqueConf = new BaseConfiguration();
+            torqueConf.addProperty("torque.database.default", "mailboxmanager");
+            torqueConf.addProperty("torque.database.mailboxmanager.adapter",
+                    "derby");
+            torqueConf.addProperty("torque.dsfactory.mailboxmanager.factory",
+                    "org.apache.torque.dsfactory.SharedPoolDataSourceFactory");
+            torqueConf.addProperty(
+                    "torque.dsfactory.mailboxmanager.connection.driver",
+                    "org.apache.derby.jdbc.EmbeddedDriver");
+            torqueConf.addProperty(
+                    "torque.dsfactory.mailboxmanager.connection.url",
+                    "jdbc:derby:target/testdb;create=true");
+            torqueConf.addProperty(
+                    "torque.dsfactory.mailboxmanager.connection.user", "app");
+            torqueConf.addProperty(
+                    "torque.dsfactory.mailboxmanager.connection.password",
+                    "app");
+            torqueConf.addProperty(
+                    "torque.dsfactory.mailboxmanager.pool.maxActive", "100");
+        return torqueConf;
+    }
+	
+    
     private static TorqueMailboxManager torqueMailboxManager;
     private static SimpleUserManager userManager;
     private static DefaultMailboxManagerProvider defaultMailboxManagerProvider;
@@ -52,6 +195,7 @@
     private static TorqueMailboxManager getMailboxManager() throws Exception {
         if (torqueMailboxManager == null) {
         	userManager = new SimpleUserManager();
+        	initialize();
             torqueMailboxManager=new TorqueMailboxManager(userManager);
         }
         return torqueMailboxManager;



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