1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.email.functional;
12
13 import org.mule.api.MuleMessage;
14 import org.mule.module.client.MuleClient;
15 import org.mule.tck.FunctionalTestCase;
16 import org.mule.transport.email.GreenMailUtilities;
17 import org.mule.transport.email.ImapConnector;
18 import org.mule.transport.email.Pop3Connector;
19
20 import com.icegreen.greenmail.util.GreenMail;
21 import com.icegreen.greenmail.util.ServerSetup;
22
23 import java.io.IOException;
24
25 import javax.mail.Message;
26 import javax.mail.MessagingException;
27 import javax.mail.internet.MimeMessage;
28
29 public abstract class AbstractEmailFunctionalTestCase extends FunctionalTestCase
30 {
31
32 protected static final String CONFIG_BASE = "-functional-test.xml";
33 protected static final long DELIVERY_DELAY_MS = 1000L;
34 protected static final boolean MIME_MESSAGE = true;
35 protected static final boolean STRING_MESSAGE = false;
36
37 protected static final String DEFAULT_EMAIL = "bob@example.com";
38 protected static final String DEFAULT_USER = "bob";
39 protected static final String DEFAULT_MESSAGE = "Test email message";
40 protected static final String DEFAULT_PASSWORD = "password";
41
42 private String protocol;
43 private boolean isMimeMessage;
44 private int port;
45 private String configFile;
46 private GreenMail server;
47 private String email;
48 private String user;
49 private String message;
50 private String password;
51
52 protected AbstractEmailFunctionalTestCase(int port, boolean isMimeMessage, String protocol)
53 {
54 this(port, isMimeMessage, protocol, protocol + CONFIG_BASE);
55 }
56
57 protected AbstractEmailFunctionalTestCase(int port, boolean isMimeMessage, String protocol, String configFile)
58 {
59 this(port, isMimeMessage, protocol, configFile,
60 DEFAULT_EMAIL, DEFAULT_USER, DEFAULT_MESSAGE, DEFAULT_PASSWORD);
61 }
62
63 protected AbstractEmailFunctionalTestCase(int port, boolean isMimeMessage, String protocol, String configFile,
64 String email, String user, String message,
65 String password)
66 {
67 this.isMimeMessage = isMimeMessage;
68 this.protocol = protocol;
69 this.port = port;
70 this.configFile = configFile;
71 this.email = email;
72 this.user = user;
73 this.message = message;
74 this.password = password;
75 }
76
77 protected String getConfigResources()
78 {
79 return configFile;
80 }
81
82
83 protected void suitePreSetUp() throws Exception
84 {
85 startServer();
86 }
87
88
89
90 protected void suitePostTearDown() throws Exception
91 {
92 stopServer();
93 }
94
95 protected void doSend() throws Exception
96 {
97 Object msg;
98 if (isMimeMessage)
99 {
100 msg = GreenMailUtilities.toMessage(message, email);
101 }
102 else
103 {
104 msg = message;
105 }
106
107 MuleClient client = new MuleClient();
108 client.send("vm://send", msg, null);
109
110 server.waitForIncomingEmail(DELIVERY_DELAY_MS, 1);
111
112 MimeMessage[] messages = server.getReceivedMessages();
113 assertNotNull("did not receive any messages", messages);
114 assertEquals("did not receive 1 mail", 1, messages.length);
115 verifyMessage(messages[0]);
116 }
117
118 protected void verifyMessage(MimeMessage received) throws IOException, MessagingException
119 {
120 assertTrue("Did not receive a message with String contents",
121 received.getContent() instanceof String);
122 verifyMessage((String) received.getContent());
123 assertNotNull(received.getRecipients(Message.RecipientType.TO));
124 assertEquals(1, received.getRecipients(Message.RecipientType.TO).length);
125 assertEquals(received.getRecipients(Message.RecipientType.TO)[0].toString(), email);
126 }
127
128 protected void verifyMessage(String receivedText)
129 {
130
131
132 assertEquals(message, receivedText.trim());
133 }
134
135 protected void doRequest() throws Exception
136 {
137 assertEquals(1, server.getReceivedMessages().length);
138
139 MuleClient client = new MuleClient();
140 MuleMessage message = client.request("vm://receive", 5000);
141
142 assertNotNull(message);
143 Object payload = message.getPayload();
144 if (isMimeMessage)
145 {
146 assertTrue(payload instanceof MimeMessage);
147 verifyMessage((MimeMessage) payload);
148 }
149 else
150 {
151 assertTrue(payload instanceof String);
152 verifyMessage((String) payload);
153 }
154 }
155
156 private void startServer() throws Exception
157 {
158 logger.debug("starting server on port " + port);
159 ServerSetup setup = new ServerSetup(port, null, protocol);
160 server = new GreenMail(setup);
161 server.start();
162 if (protocol.startsWith(Pop3Connector.POP3) || protocol.startsWith(ImapConnector.IMAP))
163 {
164 GreenMailUtilities.storeEmail(server.getManagers().getUserManager(),
165 email, user, password,
166 GreenMailUtilities.toMessage(message, email));
167 }
168 logger.debug("server started for protocol " + protocol);
169 }
170
171 private void stopServer()
172 {
173 server.stop();
174 }
175
176 }