Author: bfoster
Date: Tue Jun  7 22:05:42 2011
New Revision: 1133174

URL: http://svn.apache.org/viewvc?rev=1133174&view=rev
Log:

- unit-test updates 

---------------
OODT-194

Added:
    oodt/branches/protocol/protocol-imaps/src/test/
    oodt/branches/protocol/protocol-imaps/src/test/org/
    oodt/branches/protocol/protocol-imaps/src/test/org/apache/
    oodt/branches/protocol/protocol-imaps/src/test/org/apache/oodt/
    oodt/branches/protocol/protocol-imaps/src/test/org/apache/oodt/cas/
    oodt/branches/protocol/protocol-imaps/src/test/org/apache/oodt/cas/protocol/
    
oodt/branches/protocol/protocol-imaps/src/test/org/apache/oodt/cas/protocol/imaps/
    
oodt/branches/protocol/protocol-imaps/src/test/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java
   (with props)
Modified:
    oodt/branches/protocol/protocol-imaps/pom.xml
    
oodt/branches/protocol/protocol-imaps/src/main/java/org/apache/oodt/cas/protocol/imaps/ImapsProtocol.java

Modified: oodt/branches/protocol/protocol-imaps/pom.xml
URL: 
http://svn.apache.org/viewvc/oodt/branches/protocol/protocol-imaps/pom.xml?rev=1133174&r1=1133173&r2=1133174&view=diff
==============================================================================
--- oodt/branches/protocol/protocol-imaps/pom.xml (original)
+++ oodt/branches/protocol/protocol-imaps/pom.xml Tue Jun  7 22:05:42 2011
@@ -99,6 +99,12 @@
                        <version>0.8</version>
                </dependency>
                <dependency>
+                       <groupId>com.icegreen</groupId>
+                       <artifactId>greenmail</artifactId>
+                       <version>1.3.1b</version>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>3.8.2</version>

Modified: 
oodt/branches/protocol/protocol-imaps/src/main/java/org/apache/oodt/cas/protocol/imaps/ImapsProtocol.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/protocol/protocol-imaps/src/main/java/org/apache/oodt/cas/protocol/imaps/ImapsProtocol.java?rev=1133174&r1=1133173&r2=1133174&view=diff
==============================================================================
--- 
oodt/branches/protocol/protocol-imaps/src/main/java/org/apache/oodt/cas/protocol/imaps/ImapsProtocol.java
 (original)
+++ 
oodt/branches/protocol/protocol-imaps/src/main/java/org/apache/oodt/cas/protocol/imaps/ImapsProtocol.java
 Tue Jun  7 22:05:42 2011
@@ -56,17 +56,19 @@ import org.apache.tika.sax.BodyContentHa
 import org.apache.tika.sax.TextContentHandler;
 
 /**
+ * IMAP Secure {@link Protocol} implementation
  * 
  * @author bfoster
  * @version $Revision$
- * 
  */
 public class ImapsProtocol implements Protocol {
 
   static Store store;
 
   static Folder currentFolder;
-
+  
+  static Folder homeFolder;
+  
   static int port = 993;
 
   static Session session;
@@ -74,24 +76,35 @@ public class ImapsProtocol implements Pr
   static int openCalls = 0;
 
   static int connectCalls = 0;
-
+  
   public synchronized void cd(ProtocolFile file) throws ProtocolException {
     try {
       String remotePath = file.getPath();
-      // System.out.println("cd to " + remotePath);
       if (remotePath.startsWith("/"))
         remotePath = remotePath.substring(1);
       if (remotePath.trim().equals(""))
-        currentFolder = store.getDefaultFolder();
+        homeFolder = currentFolder = store.getDefaultFolder();
       else {
-        currentFolder = store.getFolder(remotePath);
+        homeFolder = currentFolder = store.getFolder(remotePath);
       }
     } catch (Exception e) {
-      e.printStackTrace();
+      throw new ProtocolException("Failed to change directory to '" 
+               + file + "' : " + e.getMessage(), e);
     }
-    // changedDir = true;
   }
 
+  public synchronized void cdRoot() throws ProtocolException {
+    try {
+      cd(new ProtocolFile("/", true));
+    } catch (Exception e) {
+      throw new ProtocolException("Failed to cd to root : " + e.getMessage(), 
e);
+    }
+  }
+  
+  public synchronized void cdHome() throws ProtocolException {
+       currentFolder = homeFolder;
+  }
+  
   public synchronized void connect(String host, Authentication auth)
       throws ProtocolException {
     try {
@@ -103,31 +116,30 @@ public class ImapsProtocol implements Pr
       }
       this.incrementConnections();
     } catch (Exception e) {
-      e.printStackTrace();
       throw new ProtocolException("Failed to connected to IMAPS server " + host
-          + " with username " + auth.getUser() + " : " + e.getMessage());
+          + " with username " + auth.getUser() + " : " + e.getMessage(), e);
     }
   }
 
   public synchronized void close() throws ProtocolException {
     decrementConnections();
     if (connectCalls <= 0) {
-      // changedDir = true;
       try {
-        if (!currentFolder.isOpen()) {
-          try {
-            currentFolder.open(Folder.READ_WRITE);
-          } catch (Exception e) {
-            try {
-              currentFolder.open(Folder.READ_ONLY);
-            } catch (Exception e2) {
-            }
-          }
-        }
-        currentFolder.close(true);
+//        if (!currentFolder.isOpen()) {
+//          try {
+//            currentFolder.open(Folder.READ_WRITE);
+//          } catch (Exception e) {
+//            try {
+//              currentFolder.open(Folder.READ_ONLY);
+//            } catch (Exception e2) {
+//            }
+//          }
+//        }
+//        currentFolder.close(true);
         store.close();
       } catch (Exception e) {
-        e.printStackTrace();
+       e.printStackTrace();
+        throw new ProtocolException("Failed to close connection : " + 
e.getMessage(), e);
       } finally {
         store = null;
       }
@@ -156,9 +168,8 @@ public class ImapsProtocol implements Pr
         }
       }
     } catch (Exception e) {
-      e.printStackTrace();
       throw new ProtocolException("Failed to download " + fromFile + " to "
-          + toFile + " : " + e.getMessage());
+          + toFile + " : " + e.getMessage(), e);
     } finally {
       try {
         closeFolder(currentFolder);
@@ -219,7 +230,7 @@ public class ImapsProtocol implements Pr
       // changedDir = false;
     } catch (Exception e) {
       if (!currentFolder.getFullName().equals(""))
-        throw new ProtocolException("Failed to ls");
+        throw new ProtocolException("Failed to ls : " + e.getMessage(), e);
     } finally {
       try {
         closeFolder(currentFolder);
@@ -233,12 +244,12 @@ public class ImapsProtocol implements Pr
   public synchronized ProtocolFile pwd()
       throws ProtocolException {
     try {
-      String pwd = this.currentFolder.getFullName();
+      String pwd = currentFolder.getFullName();
       if (!pwd.equals("") && !pwd.startsWith("/"))
         pwd = "/" + pwd;
       return new ProtocolFile(pwd, true);
     } catch (Exception e) {
-      throw new ProtocolException("Failed to pwd : " + e.getMessage());
+      throw new ProtocolException("Failed to pwd : " + e.getMessage(), e);
     }
   }
 

Added: 
oodt/branches/protocol/protocol-imaps/src/test/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/protocol/protocol-imaps/src/test/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java?rev=1133174&view=auto
==============================================================================
--- 
oodt/branches/protocol/protocol-imaps/src/test/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java
 (added)
+++ 
oodt/branches/protocol/protocol-imaps/src/test/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java
 Tue Jun  7 22:05:42 2011
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.oodt.cas.protocol.imaps;
+
+//OODT imports
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.oodt.cas.protocol.ProtocolFile;
+import org.apache.oodt.cas.protocol.auth.BasicAuthentication;
+import org.apache.oodt.cas.protocol.exceptions.ProtocolException;
+
+//GreenMail imports
+import com.icegreen.greenmail.util.DummySSLSocketFactory;
+import com.icegreen.greenmail.util.GreenMail;
+import com.icegreen.greenmail.util.GreenMailUtil;
+
+//JUnit imports
+import junit.framework.TestCase;
+
+/**
+ * Test class for {@link ImapsProtocol}.
+ * 
+ * @author bfoster
+ */
+public class TestImapsProtocol extends TestCase {
+
+       private GreenMail gMail;
+       private ImapsProtocol imapsProtocol;
+       
+       @Override
+       public void setUp() {
+       System.setProperty("mail.imaps.socketFactory.class", 
DummySSLSocketFactory.class.getCanonicalName());
+               System.setProperty("mail.imaps.socketFactory.fallback", 
"false");
+               gMail = new GreenMail();
+               gMail.setUser("[email protected]", "password");
+               gMail.start();
+               ImapsProtocol.port = gMail.getImaps().getPort();
+               imapsProtocol = new ImapsProtocol();
+               try {
+                       imapsProtocol.connect("localhost", new 
BasicAuthentication("[email protected]", "password"));
+               } catch (ProtocolException e) {
+                       fail("Failed to connect to GreenMail IMAPS server : " + 
e.getMessage());
+               }
+               assertEquals(1, ImapsProtocol.connectCalls);
+       }
+       
+       @Override
+       public void tearDown() {
+               gMail.stop();
+               try {
+                       imapsProtocol.close();
+               } catch (ProtocolException e) {
+                       fail("Failed to disconnect from GreenMail IMAPS server 
: " + e.getMessage());
+               }
+               assertEquals(0, ImapsProtocol.connectCalls);
+       }
+       
+       public void testCDAndPWD() throws ProtocolException {
+               assertEquals("", imapsProtocol.pwd().getPath());
+               imapsProtocol.cd(new ProtocolFile("INBOX", true));
+               assertEquals("/INBOX", imapsProtocol.pwd().getPath());
+       }
+       
+       public void testLSandGET() throws ProtocolException, IOException {
+               GreenMailUtil.sendTextEmailSecureTest("[email protected]", 
"[email protected]", "Test Subject", "Test Body");
+               imapsProtocol.cd(new ProtocolFile("INBOX", true));
+               List<ProtocolFile> emails = imapsProtocol.ls();
+               assertEquals(1, emails.size());
+               File bogusFile = File.createTempFile("bogus", "bogus");
+               File tmpDir = new File(bogusFile.getParentFile(), 
"TestImapsProtocol");
+               bogusFile.delete();
+               tmpDir.mkdirs();
+               
+               File email = new File(tmpDir, "test-email");
+               imapsProtocol.get(emails.get(0), email);
+               String[] splitEmail = FileUtils.readFileToString(email, 
"UTF-8").split("\n");
+               assertEquals("From: [email protected]", splitEmail[0]);
+               assertEquals("To: [email protected]", splitEmail[1]);
+               assertEquals("Subject: Test Subject", splitEmail[2]);
+               // 3 is divider text (i.e. ----- ~ Message ~ -----)
+               assertEquals("Test Body", splitEmail[4]);
+       }
+       
+       public void testDelete() throws ProtocolException {
+               GreenMailUtil.sendTextEmailSecureTest("[email protected]", 
"[email protected]", "Test Subject", "Test Body");
+               imapsProtocol.cd(new ProtocolFile("INBOX", true));
+               List<ProtocolFile> emails = imapsProtocol.ls();
+               assertEquals(1, emails.size());
+               imapsProtocol.delete(emails.get(0));
+               emails = imapsProtocol.ls();
+               assertEquals(0, emails.size());
+       }
+}

Propchange: 
oodt/branches/protocol/protocol-imaps/src/test/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to