blob: e10bf5a7f296eeb96aedbeba966349cbd967676f [file] [log] [blame]
/**
* 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.geronimo.javamail.issues;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.PrintStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import junit.framework.Assert;
import org.apache.geronimo.javamail.testserver.AbstractProtocolTest;
import org.apache.geronimo.javamail.testserver.MailServer;
public class IssuesTest extends AbstractProtocolTest {
public void testGERONIMO6519() throws Exception {
PrintStream original = System.out;
try {
start();
// Setup JavaMail session
Properties props = new Properties();
props.setProperty("mail.debug", "true");
props.setProperty("mail.smtp.port", String.valueOf(smtpConf.getListenerPort()));
props.setProperty("mail.smtp.localhost", "some.full.qualified.name.com");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
System.setOut(new PrintStream(baos, true));
Session session = Session.getInstance(props);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress("test@localhost"));
message.setRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress("test@localhost"));
message.setText("test");
Transport.send(message);
Assert.assertTrue(baos.toString().contains("EHLO some.full.qualified.name.com"));
} finally {
System.setOut(original);
}
}
public void testGERONIMO4594() throws Exception {
Assert.assertTrue(doGERONIMO4594(true, true));
}
public void testGERONIMO4594Fail0() throws Exception {
Assert.assertFalse(doGERONIMO4594(false, true));
}
public void testGERONIMO4594Fail1() throws Exception {
Assert.assertFalse(doGERONIMO4594(false, false));
}
public void testGERONIMO4594Fail2() throws Exception {
Assert.assertFalse(doGERONIMO4594(true, false));
}
private boolean doGERONIMO4594(boolean decode, boolean encode) throws Exception {
final String specialFileName = "encoded_filename_\u00C4\u00DC\u00D6\u0226(test).pdf";
System.setProperty("mail.mime.decodefilename", String.valueOf(decode));
System.setProperty("mail.mime.encodefilename", String.valueOf(encode));
try {
start();
// Setup JavaMail session
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.smtp.port", String.valueOf(smtpConf.getListenerPort()));
props.setProperty("mail.store.protocol", "imap");
props.setProperty("mail.imap.port", String.valueOf(imapConf.getListenerPort()));
//props.setProperty("mail.debug","true");
Session session = Session.getInstance(props);
MimeMessage msg = new MimeMessage(session);
msg.setSubject("a file for you");
msg.setRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress("serveruser@localhost"));
msg.setFrom(new InternetAddress("serveruser@localhost"));
MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
messageBodyPart.setText("This is message body");
File file = MailServer.getAbsoluteFilePathFromClassPath("pdf-test.pdf");
Assert.assertTrue(file.exists());
DataSource source = new FileDataSource(file.getAbsoluteFile());
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(specialFileName);
multipart.addBodyPart(messageBodyPart);
msg.setContent(multipart);
sendMessage(msg);
server.ensureMsgCount(1);
Session jmsession = Session.getInstance(props);
Store store = jmsession.getStore();
store.connect("127.0.0.1", "serveruser", "serverpass");
Folder f = store.getFolder("INBOX");
f.open(Folder.READ_ONLY); //TODO STAT only when folder open???
Assert.assertEquals(1, f.getMessageCount());
Message[] messages = new Message[2];
messages[0] = f.getMessage(1);
boolean match = specialFileName.equals(((Multipart) messages[0].getContent()).getBodyPart(0).getFileName());
f.close(false);
store.close();
return match;
} finally {
System.setProperty("mail.mime.decodefilename", "false");
System.setProperty("mail.mime.encodefilename", "false");
}
}
}