Author: woonsan
Date: Thu Apr  8 18:04:55 2010
New Revision: 932038

URL: http://svn.apache.org/viewvc?rev=932038&view=rev
Log:
JS2-1180: Adding geronimo-javamail_1.4_provider because we cannot send an email 
without it.
FYI, to replace the javamail by geronimo-javamail, we need both 
geronimo-javamail_1.4_spec and geronimo-javamail_1.4_provider.
Also, improve the test case to verify this.

Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/pom.xml
    
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/administration/PortalAdministrationImpl.java
    
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/administration/TestPortalAdministrationImpl.java
    portals/jetspeed-2/portal/trunk/pom.xml

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/pom.xml
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/pom.xml?rev=932038&r1=932037&r2=932038&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/pom.xml 
(original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/pom.xml Thu Apr  
8 18:04:55 2010
@@ -132,6 +132,10 @@
       <artifactId>geronimo-javamail_1.4_spec</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.geronimo.javamail</groupId>
+      <artifactId>geronimo-javamail_1.4_provider</artifactId>
+    </dependency>
+    <dependency>
       <groupId>net.sf.ehcache</groupId>
       <artifactId>ehcache-core</artifactId>
     </dependency>

Modified: 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/administration/PortalAdministrationImpl.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/administration/PortalAdministrationImpl.java?rev=932038&r1=932037&r2=932038&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/administration/PortalAdministrationImpl.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/administration/PortalAdministrationImpl.java
 Thu Apr  8 18:04:55 2010
@@ -442,7 +442,7 @@ public class PortalAdministrationImpl im
         catch (MailException ex)
         {
             throw new AdministrationEmailException(
-                    "Failed to send forgotten password email to user with 
email address because "+ex.getMessage()
+                    "Failed to send forgotten password email to user with 
email address because "+ex.getMessage(), ex
                             ); //+ user.getEmail());
         }
     }

Modified: 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/administration/TestPortalAdministrationImpl.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/administration/TestPortalAdministrationImpl.java?rev=932038&r1=932037&r2=932038&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/administration/TestPortalAdministrationImpl.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/test/java/org/apache/jetspeed/administration/TestPortalAdministrationImpl.java
 Thu Apr  8 18:04:55 2010
@@ -16,23 +16,39 @@
 */
 package org.apache.jetspeed.administration;
 
+import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.mail.Address;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.NoSuchProviderException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.URLName;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
 import org.apache.jetspeed.aggregator.TestWorkerMonitor;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
 
-
+/**
+ * TestPortalAdministrationImpl
+ * 
+ * @version $Id$
+ */
 public class TestPortalAdministrationImpl extends  TestCase
-
 {
-
+    private String smtpHost;
     
     public static void main(String args[])
     {
@@ -43,8 +59,11 @@ public class TestPortalAdministrationImp
     {
         super.setUp();
         
-        
-        
+        // If the following sys property is provided (e.g. 
'-DTestPortalAdministrationImpl.smtp.host=localhost')
+        // and if the destination smtp server is provided, then
+        // this test case will send message to the target server.
+        // Otherwise, by default, this test case uses a mock object. 
+        smtpHost = 
System.getProperty("TestPortalAdministrationImpl.smtp.host");
     }
     
     public static Test suite()
@@ -62,10 +81,52 @@ public class TestPortalAdministrationImp
         
     }
     
-    public void xtestSendEmail() throws Exception {
-        PortalAdministrationImpl pai = new 
PortalAdministrationImpl(null,null,null,null,null,null,null,null);
-        pai.sendEmail("[email protected]","this is a 
unittest","[email protected]","this is the content of the message");
+    public void testSendEmail() throws Exception 
+    {
+        JavaMailSenderImpl javaMailSender = null;
         
+        if (smtpHost != null)
+        {
+            javaMailSender = new JavaMailSenderImpl();
+            javaMailSender.setHost(smtpHost);
+        }
+        else
+        {
+            javaMailSender = new MockJavaMailSender();
+            javaMailSender.setHost("mocksmtpserver");
+        }
+        
+        PortalAdministrationImpl pai = new 
PortalAdministrationImpl(null,null,null,null,null,null,javaMailSender,null);
+        pai.sendEmail("[email protected]","this is a 
unittest","[email protected]","this is the content of the message");
+        
+        if (javaMailSender instanceof MockJavaMailSender)
+        {
+            MockJavaMailSender mockJavaMailSender = (MockJavaMailSender) 
javaMailSender;
+            
+            assertTrue(mockJavaMailSender.transport.isCloseCalled());
+            
+            assertEquals(1, 
mockJavaMailSender.transport.getSentMessages().size());
+            
+            MimeMessage sentMessage = 
mockJavaMailSender.transport.getSentMessage(0);
+            
+            List<Address> froms = Arrays.asList(sentMessage.getFrom());
+            assertEquals(1, froms.size());
+            assertEquals("[email protected]", ((InternetAddress) 
froms.get(0)).getAddress());
+            
+            List<Address> tos = 
Arrays.asList(sentMessage.getRecipients(Message.RecipientType.TO));
+            assertEquals(1, tos.size());
+            assertEquals("[email protected]", ((InternetAddress) 
tos.get(0)).getAddress());
+            
+            assertEquals("this is a unittest", sentMessage.getSubject());
+            
+            assertEquals("this is the content of the message", 
sentMessage.getContent());
+            
+            ByteArrayOutputStream output = new ByteArrayOutputStream();
+            sentMessage.writeTo(output);
+            String payload = new String(output.toByteArray());
+            
+            System.out.println("Mail message payload:\n\n" + payload + "\n");
+        }
     }
     
     // this needs too much init to test easily right now
@@ -88,5 +149,103 @@ public class TestPortalAdministrationImp
         
     }
     
+    private static class MockJavaMailSender extends JavaMailSenderImpl 
+    {
+        private MockTransport transport;
 
+        @Override
+        protected Transport getTransport(Session session) throws 
NoSuchProviderException 
+        {
+            this.transport = new MockTransport(session, null);
+            return transport;
+        }
+    }
+    
+    private static class MockTransport extends Transport 
+    {
+        private String connectedHost = null;
+        private int connectedPort = -2;
+        private String connectedUsername = null;
+        private String connectedPassword = null;
+        private boolean closeCalled = false;
+        private List<Message> sentMessages = new ArrayList<Message>();
+
+        private MockTransport(Session session, URLName urlName) 
+        {
+            super(session, urlName);
+        }
+
+        public String getConnectedHost() 
+        {
+            return connectedHost;
+        }
+
+        public int getConnectedPort() 
+        {
+            return connectedPort;
+        }
+
+        public String getConnectedUsername() 
+        {
+            return connectedUsername;
+        }
+
+        public String getConnectedPassword() 
+        {
+            return connectedPassword;
+        }
+
+        public boolean isCloseCalled() 
+        {
+            return closeCalled;
+        }
+
+        public List<Message> getSentMessages() 
+        {
+            return sentMessages;
+        }
+
+        public MimeMessage getSentMessage(int index) 
+        {
+            return (MimeMessage) this.sentMessages.get(index);
+        }
+
+        @Override
+        public void connect(String host, int port, String username, String 
password) throws MessagingException 
+        {
+            if (host == null) 
+            {
+                throw new MessagingException("no host");
+            }
+            
+            this.connectedHost = host;
+            this.connectedPort = port;
+            this.connectedUsername = username;
+            this.connectedPassword = password;
+        }
+
+        @Override
+        public synchronized void close() throws MessagingException 
+        {
+            this.closeCalled = true;
+        }
+
+        @Override
+        public void sendMessage(Message message, Address[] addresses) throws 
MessagingException 
+        {
+            List<Address> addr1 = Arrays.asList(message.getAllRecipients());
+            List<Address> addr2 = Arrays.asList(addresses);
+            
+            if (!addr1.equals(addr2)) 
+            {
+                throw new MessagingException("addresses not correct");
+            }
+            
+            if (message.getSentDate() == null) {
+                throw new MessagingException("No sentDate specified");
+            }
+            
+            this.sentMessages.add(message);
+        }
+    }
 }

Modified: portals/jetspeed-2/portal/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/pom.xml?rev=932038&r1=932037&r2=932038&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/pom.xml (original)
+++ portals/jetspeed-2/portal/trunk/pom.xml Thu Apr  8 18:04:55 2010
@@ -263,6 +263,7 @@
     <hsqldb.version>1.8.0.2</hsqldb.version>
     <javolution.version>4.0.2</javolution.version>
     
<geronimo-javamail_1.4_spec.version>1.6</geronimo-javamail_1.4_spec.version>
+    
<geronimo-javamail_1.4_provider.version>1.7</geronimo-javamail_1.4_provider.version>
     <javax.activation.version>1.1</javax.activation.version>
     <javax.servlet.jstl.version>1.1.2</javax.servlet.jstl.version>
     
<geronimo-servlet_2.4_spec.version>1.1.1</geronimo-servlet_2.4_spec.version>
@@ -1233,6 +1234,11 @@
         <version>${geronimo-javamail_1.4_spec.version}</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.geronimo.javamail</groupId>
+        <artifactId>geronimo-javamail_1.4_provider</artifactId>
+        <version>${geronimo-javamail_1.4_provider.version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.apache.geronimo.specs</groupId>
         <artifactId>geronimo-activation_1.1_spec</artifactId>
         <version>${geronimo-activation_1.1_spec.version}</version>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to