Author: btellier
Date: Thu Dec 17 15:12:09 2015
New Revision: 1720600
URL: http://svn.apache.org/viewvc?rev=1720600&view=rev
Log:
JAMES-1620 Add base for SieveMailet tests
Added:
james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
Added:
james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java?rev=1720600&view=auto
==============================================================================
---
james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
(added)
+++
james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
Thu Dec 17 15:12:09 2015
@@ -0,0 +1,183 @@
+/****************************************************************
+ * 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.james.transport.mailets.delivery;
+
+import com.google.common.collect.Lists;
+import org.apache.james.domainlist.api.DomainList;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.rrt.api.RecipientRewriteTable;
+import org.apache.james.sieverepository.api.SieveRepository;
+import org.apache.james.sieverepository.api.exception.ScriptNotFoundException;
+import org.apache.james.transport.mailets.LocalDelivery;
+import org.apache.james.transport.mailets.SieveMailet;
+import org.apache.james.user.api.UsersRepository;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+import org.apache.mailet.base.test.FakeMail;
+import org.apache.mailet.base.test.FakeMailetConfig;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.slf4j.Logger;
+
+import javax.activation.DataHandler;
+import javax.mail.Flags;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.util.ByteArrayDataSource;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.Properties;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+public class SieveMailetTest {
+
+ private UsersRepository usersRepository;
+ private RecipientRewriteTable recipientRewriteTable;
+ private MailboxManager mailboxManager;
+ private DomainList domainList;
+ private SieveRepository sieveRepository;
+ private SieveMailet sieveMailet;
+
+ @Before
+ public void setUp() throws Exception {
+ sieveRepository = mock(SieveRepository.class);
+ usersRepository = mock(UsersRepository.class);
+ recipientRewriteTable = mock(RecipientRewriteTable.class);
+ mailboxManager = mock(MailboxManager.class);
+ domainList = mock(DomainList.class);
+
+ sieveMailet = new SieveMailet(usersRepository, mailboxManager,
sieveRepository, "INBOX");
+ }
+
+ @Test
+ public void
mailShouldBeWellDeliveredByDefaultToUserWhenvirtualHostingIsTurnedOn() throws
Exception {
+ when(usersRepository.supportVirtualHosting()).thenAnswer(new
Answer<Boolean>() {
+ public Boolean answer(InvocationOnMock invocationOnMock) throws
Throwable {
+ return true;
+ }
+ });
+ when(sieveRepository.getActive("[email protected]")).thenThrow(new
ScriptNotFoundException());
+ MailboxPath inbox = new MailboxPath("#private", "[email protected]",
"INBOX");
+ final MessageManager messageManager = mock(MessageManager.class);
+ when(mailboxManager.getMailbox(eq(inbox),
any(MailboxSession.class))).thenAnswer(new Answer<MessageManager>() {
+ public MessageManager answer(InvocationOnMock invocationOnMock)
throws Throwable {
+ return messageManager;
+ }
+ });
+ final MailboxSession session = mock(MailboxSession.class);
+ when(session.getPathDelimiter()).thenAnswer(new Answer<Character>() {
+ @Override
+ public Character answer(InvocationOnMock invocationOnMock) throws
Throwable {
+ return '.';
+ }
+ });
+ when(mailboxManager.createSystemSession(any(String.class),
any(Logger.class))).thenAnswer(new Answer<MailboxSession>() {
+ @Override
+ public MailboxSession answer(InvocationOnMock invocationOnMock)
throws Throwable {
+ return session;
+ }
+ });
+
+ Mail mail = createMail();
+
+ sieveMailet.init(new FakeMailetConfig());
+ sieveMailet.service(mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class),
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ @Test
+ public void
mailShouldBeWellDeliveredByDefaultToUserWhenvirtualHostingIsTurnedOff() throws
Exception {
+ when(usersRepository.supportVirtualHosting()).thenAnswer(new
Answer<Boolean>() {
+ public Boolean answer(InvocationOnMock invocationOnMock) throws
Throwable {
+ return false;
+ }
+ });
+ when(sieveRepository.getActive("receiver")).thenThrow(new
ScriptNotFoundException());
+ MailboxPath inbox = new MailboxPath("#private", "receiver", "INBOX");
+ final MessageManager messageManager = mock(MessageManager.class);
+ when(mailboxManager.getMailbox(eq(inbox),
any(MailboxSession.class))).thenAnswer(new Answer<MessageManager>() {
+ public MessageManager answer(InvocationOnMock invocationOnMock)
throws Throwable {
+ return messageManager;
+ }
+ });
+ final MailboxSession session = mock(MailboxSession.class);
+ when(session.getPathDelimiter()).thenAnswer(new Answer<Character>() {
+ @Override
+ public Character answer(InvocationOnMock invocationOnMock) throws
Throwable {
+ return '.';
+ }
+ });
+ when(mailboxManager.createSystemSession(any(String.class),
any(Logger.class))).thenAnswer(new Answer<MailboxSession>() {
+ @Override
+ public MailboxSession answer(InvocationOnMock invocationOnMock)
throws Throwable {
+ return session;
+ }
+ });
+
+ Mail mail = createMail();
+
+ sieveMailet.init(new FakeMailetConfig());
+ sieveMailet.service(mail);
+
+ verify(messageManager).appendMessage(any(InputStream.class),
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+ }
+
+ private Mail createMail() throws MessagingException, IOException {
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new
Properties()));
+ message.setSubject("Subject");
+ message.setSender(new InternetAddress("[email protected]"));
+ message.setRecipient(MimeMessage.RecipientType.TO, new
InternetAddress("[email protected]"));
+ MimeMultipart multipart = new MimeMultipart();
+ MimeBodyPart scriptPart = new MimeBodyPart();
+ scriptPart.setDataHandler(
+ new DataHandler(
+ new ByteArrayDataSource(
+ "toto",
+ "application/sieve; charset=UTF-8")
+ ));
+ scriptPart.setDisposition(MimeBodyPart.ATTACHMENT);
+ scriptPart.setHeader("Content-Type", "application/sieve;
charset=UTF-8");
+ scriptPart.setFileName("file.txt");
+ multipart.addBodyPart(scriptPart);
+ message.setContent(multipart);
+ message.saveChanges();
+ Mail mail = new FakeMail(message);
+ mail.setState(Mail.DEFAULT);
+ mail.setRecipients(Lists.newArrayList(new
MailAddress("[email protected]")));
+ return mail;
+ }
+
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]