JAMES-1854 Use parametrized tests for mailets So that : - SieveLocalDelivery and LocalDelivery pass the same subset of tests - Idem for ToRecipientFolder and SieveToRecipientFolder
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/164d9248 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/164d9248 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/164d9248 Branch: refs/heads/master Commit: 164d92487e422e87eeef82b4c854b231e7ab04dd Parents: 2490351 Author: Benoit Tellier <[email protected]> Authored: Mon Oct 31 11:23:15 2016 +0100 Committer: Benoit Tellier <[email protected]> Committed: Fri Nov 18 18:46:46 2016 +0700 ---------------------------------------------------------------------- .../mailets/delivery/LocalDeliveryTest.java | 217 ++++++++++++++++ .../delivery/SieveLocalDeliveryTest.java | 153 ----------- .../delivery/SieveToRecipientFolderTest.java | 189 -------------- .../mailets/delivery/ToRecipientFolderTest.java | 251 +++++++++++++++++++ 4 files changed, 468 insertions(+), 342 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/164d9248/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java new file mode 100644 index 0000000..748d8d0 --- /dev/null +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java @@ -0,0 +1,217 @@ +/**************************************************************** + * 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 static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collection; +import java.util.Date; +import java.util.Properties; + +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 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.exception.MailboxException; +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.SieveLocalDelivery; +import org.apache.james.user.api.UsersRepository; +import org.apache.mailet.Mail; +import org.apache.mailet.MailAddress; +import org.apache.mailet.Mailet; +import org.apache.mailet.base.test.FakeMail; +import org.apache.mailet.base.test.FakeMailetConfig; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.slf4j.Logger; + +import com.google.common.base.Throwables; +import com.google.common.collect.ImmutableList; + +@RunWith(Parameterized.class) +public class LocalDeliveryTest { + + public static class Parameter { + private final UsersRepository usersRepository; + private final MailboxManager mailboxManager; + private final SieveRepository sieveRepository; + private final Mailet mailet; + private final MailboxSession.User user; + + public Parameter(UsersRepository usersRepository, MailboxManager mailboxManager, SieveRepository sieveRepository, + Mailet mailet, MailboxSession.User user) { + this.usersRepository = usersRepository; + this.mailboxManager = mailboxManager; + this.sieveRepository = sieveRepository; + this.mailet = mailet; + this.user = user; + } + + public UsersRepository getUsersRepository() { + return usersRepository; + } + + public MailboxManager getMailboxManager() { + return mailboxManager; + } + + public SieveRepository getSieveRepository() { + return sieveRepository; + } + + public Mailet getMailet() { + return mailet; + } + + public MailboxSession.User getUser() { + return user; + } + } + + @Parameterized.Parameters + public static Collection<Object[]> getLocalDeliveryClasses() { + SieveRepository sieveRepository = mock(SieveRepository.class); + UsersRepository usersRepository = mock(UsersRepository.class); + MailboxManager mailboxManager = mock(MailboxManager.class); + RecipientRewriteTable recipientRewriteTable = mock(RecipientRewriteTable.class); + DomainList domainList = mock(DomainList.class); + + SieveLocalDelivery sieveLocalDelivery = new SieveLocalDelivery(); + sieveLocalDelivery.setDomainList(domainList); + sieveLocalDelivery.setMailboxManager(mailboxManager); + sieveLocalDelivery.setRrt(recipientRewriteTable); + sieveLocalDelivery.setUsersRepository(usersRepository); + sieveLocalDelivery.setSieveRepository(sieveRepository); + + LocalDelivery localDelivery = new LocalDelivery(); + localDelivery.setDomainList(domainList); + localDelivery.setRrt(recipientRewriteTable); + localDelivery.setMailboxManager(mailboxManager); + localDelivery.setUsersRepository(usersRepository); + + MailboxSession.User user = mock(MailboxSession.User.class); + MailboxSession session = mock(MailboxSession.class); + when(session.getPathDelimiter()).thenReturn('.'); + try { + when(mailboxManager.createSystemSession(any(String.class), any(Logger.class))).thenReturn(session); + } catch (MailboxException e) { + throw Throwables.propagate(e); + } + when(session.getUser()).thenReturn(user); + + return ImmutableList.of( + new Object[]{new Parameter(usersRepository, mailboxManager, sieveRepository, sieveLocalDelivery, user)}, + new Object[]{new Parameter(usersRepository, mailboxManager, sieveRepository, localDelivery, user)} + ); + } + + @Parameterized.Parameter + public Parameter parameter; + + @Test + public void mailShouldBeWellDeliveredByDefaultToUserWhenVirtualHostingIsTurnedOn() throws Exception { + // Given + String username = "[email protected]"; + MailboxPath inbox = new MailboxPath("#private", username, "INBOX"); + MessageManager messageManager = mock(MessageManager.class); + + when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true); + doThrow(new ScriptNotFoundException()).when(parameter.getSieveRepository()).getActive(username); + when(parameter.getMailboxManager().getMailbox(eq(inbox), any(MailboxSession.class))).thenReturn(messageManager); + when(parameter.getUser().getUserName()).thenReturn(username); + + // When + Mail mail = createMail(); + parameter.getMailet().init(new FakeMailetConfig()); + parameter.getMailet().service(mail); + + // Then + verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class)); + } + + @Test + public void mailShouldBeWellDeliveredByDefaultToUserWhenVirtualHostingIsTurnedOff() throws Exception { + // Given + String username = "receiver"; + MailboxPath inbox = new MailboxPath("#private", username, "INBOX"); + MessageManager messageManager = mock(MessageManager.class); + when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(false); + doThrow(new ScriptNotFoundException()).when(parameter.getSieveRepository()).getActive(username); + when(parameter.getMailboxManager().getMailbox(eq(inbox), any(MailboxSession.class))).thenReturn(messageManager); + when(parameter.getUser().getUserName()).thenReturn(username); + + // When + Mail mail = createMail(); + parameter.getMailet().init(new FakeMailetConfig()); + parameter.getMailet().service(mail); + + // Then + 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(); + return FakeMail.builder() + .mimeMessage(message) + .state(Mail.DEFAULT) + .recipient(new MailAddress("[email protected]")) + .build(); + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/164d9248/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveLocalDeliveryTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveLocalDeliveryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveLocalDeliveryTest.java deleted file mode 100644 index 3b081ab..0000000 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveLocalDeliveryTest.java +++ /dev/null @@ -1,153 +0,0 @@ -/**************************************************************** - * 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 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; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Date; -import java.util.Properties; - -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 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.SieveLocalDelivery; -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.slf4j.Logger; - -public class SieveLocalDeliveryTest { - - private UsersRepository usersRepository; - private MailboxManager mailboxManager; - private SieveRepository sieveRepository; - private SieveLocalDelivery sieveLocalDelivery; - private MailboxSession.User user; - - @Before - public void setUp() throws Exception { - sieveRepository = mock(SieveRepository.class); - usersRepository = mock(UsersRepository.class); - mailboxManager = mock(MailboxManager.class); - RecipientRewriteTable recipientRewriteTable = mock(RecipientRewriteTable.class); - DomainList domainList = mock(DomainList.class); - user = mock(MailboxSession.User.class); - MailboxSession session = mock(MailboxSession.class); - - sieveLocalDelivery = new SieveLocalDelivery(); - sieveLocalDelivery.setDomainList(domainList); - sieveLocalDelivery.setMailboxManager(mailboxManager); - sieveLocalDelivery.setRrt(recipientRewriteTable); - sieveLocalDelivery.setUsersRepository(usersRepository); - sieveLocalDelivery.setSieveRepository(sieveRepository); - - when(session.getPathDelimiter()).thenReturn('.'); - when(mailboxManager.createSystemSession(any(String.class), any(Logger.class))).thenReturn(session); - when(session.getUser()).thenReturn(user); - } - - @Test - public void mailShouldBeWellDeliveredByDefaultToUserWhenVirtualHostingIsTurnedOn() throws Exception { - when(usersRepository.supportVirtualHosting()).thenReturn(true); - String username = "[email protected]"; - when(sieveRepository.getActive(username)).thenThrow(new ScriptNotFoundException()); - MailboxPath inbox = new MailboxPath("#private", username, "INBOX"); - MessageManager messageManager = mock(MessageManager.class); - when(mailboxManager.getMailbox(eq(inbox), any(MailboxSession.class))).thenReturn(messageManager); - when(user.getUserName()).thenReturn(username); - - Mail mail = createMail(); - - sieveLocalDelivery.init(new FakeMailetConfig()); - sieveLocalDelivery.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()).thenReturn(false); - String username = "receiver"; - when(sieveRepository.getActive(username)).thenThrow(new ScriptNotFoundException()); - MailboxPath inbox = new MailboxPath("#private", username, "INBOX"); - final MessageManager messageManager = mock(MessageManager.class); - when(mailboxManager.getMailbox(eq(inbox), any(MailboxSession.class))).thenReturn(messageManager); - when(user.getUserName()).thenReturn(username); - - Mail mail = createMail(); - - sieveLocalDelivery.init(new FakeMailetConfig()); - sieveLocalDelivery.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(); - return FakeMail.builder() - .mimeMessage(message) - .state(Mail.DEFAULT) - .recipient(new MailAddress("[email protected]")) - .build(); - } - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/164d9248/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveToRecipientFolderTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveToRecipientFolderTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveToRecipientFolderTest.java deleted file mode 100644 index dbc7537..0000000 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveToRecipientFolderTest.java +++ /dev/null @@ -1,189 +0,0 @@ -/**************************************************************** - * 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 static org.assertj.core.api.Assertions.assertThat; -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; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Date; -import java.util.Properties; - -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 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.sieverepository.api.SieveRepository; -import org.apache.james.transport.mailets.SieveToRecipientFolder; -import org.apache.james.transport.mailets.ToRecipientFolder; -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.FakeMailContext; -import org.apache.mailet.base.test.FakeMailetConfig; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.slf4j.Logger; - -public class SieveToRecipientFolderTest { - - public static final String USER_LOCAL_PART = "receiver"; - public static final String USER = USER_LOCAL_PART + "@domain.com"; - public static final MailboxPath INBOX = new MailboxPath("#private", USER, "INBOX"); - public static final MailboxPath JUNK = new MailboxPath("#private", USER_LOCAL_PART, "Junk"); - public static final MailboxPath JUNK_VIRTUAL_HOSTING = new MailboxPath("#private", USER, "Junk"); - private UsersRepository usersRepository; - private MailboxManager mailboxManager; - private SieveToRecipientFolder recipientFolder; - private FakeMailetConfig mailetConfig; - private MailboxSession.User user; - private MessageManager messageManager; - - @Before - public void setUp() throws Exception { - usersRepository = mock(UsersRepository.class); - mailboxManager = mock(MailboxManager.class); - - mailetConfig = new FakeMailetConfig("RecipientFolderTest", FakeMailContext.defaultContext()); - - recipientFolder = new SieveToRecipientFolder(); - recipientFolder.setMailboxManager(mailboxManager); - recipientFolder.setUsersRepository(usersRepository); - recipientFolder.setSieveRepository(mock(SieveRepository.class)); - - messageManager = mock(MessageManager.class); - MailboxSession session = mock(MailboxSession.class); - when(session.getPathDelimiter()).thenReturn('.'); - when(mailboxManager.createSystemSession(any(String.class), any(Logger.class))).thenReturn(session); - user = mock(MailboxSession.User.class); - when(session.getUser()).thenReturn(user); - } - - @Test - public void initParameterTesting() throws Exception { - mailetConfig.setProperty(ToRecipientFolder.FOLDER_PARAMETER, "Junk"); - recipientFolder.init(mailetConfig); - - Assert.assertEquals("Junk", recipientFolder.getInitParameter(ToRecipientFolder.FOLDER_PARAMETER)); - } - - @Test - public void consumeOptionShouldGhostTheMail() throws Exception { - mailetConfig.setProperty(ToRecipientFolder.CONSUME_PARAMETER, "true"); - recipientFolder.init(mailetConfig); - - Mail mail = createMail(); - recipientFolder.service(mail); - - assertThat(mail.getState()).isEqualTo(Mail.GHOST); - } - - @Test - public void consumeOptionShouldNotGhostTheMailByDefault() throws Exception { - recipientFolder.init(mailetConfig); - - Mail mail = createMail(); - recipientFolder.service(mail); - - assertThat(mail.getState()).isEqualTo(Mail.DEFAULT); - } - - @Test - public void folderParameterShouldIndicateDestinationFolder() throws Exception { - when(usersRepository.supportVirtualHosting()).thenReturn(true); - when(mailboxManager.getMailbox(eq(JUNK_VIRTUAL_HOSTING), any(MailboxSession.class))).thenReturn(messageManager); - when(user.getUserName()).thenReturn(USER); - - mailetConfig.setProperty(ToRecipientFolder.FOLDER_PARAMETER, "Junk"); - recipientFolder.init(mailetConfig); - recipientFolder.service(createMail()); - - verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class)); - } - - @Test - public void folderParameterShouldBeInboxByDefault() throws Exception { - when(usersRepository.supportVirtualHosting()).thenReturn(true); - when(mailboxManager.getMailbox(eq(INBOX), any(MailboxSession.class))).thenReturn(messageManager); - when(user.getUserName()).thenReturn(USER); - - recipientFolder.init(mailetConfig); - recipientFolder.service(createMail()); - - verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class)); - } - - @Test - public void folderParameterShouldWorkWhenVirtualHostingIsTurnedOff() throws Exception { - when(usersRepository.supportVirtualHosting()).thenReturn(false); - when(mailboxManager.getMailbox(eq(JUNK), any(MailboxSession.class))).thenReturn(messageManager); - when(user.getUserName()).thenReturn(USER_LOCAL_PART); - - mailetConfig.setProperty(ToRecipientFolder.FOLDER_PARAMETER, "Junk"); - recipientFolder.init(mailetConfig); - recipientFolder.service(createMail()); - - 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(USER)); - 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(); - return FakeMail.builder() - .mimeMessage(message) - .state(Mail.DEFAULT) - .recipient(new MailAddress(USER)) - .build(); - } - -} http://git-wip-us.apache.org/repos/asf/james-project/blob/164d9248/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java new file mode 100644 index 0000000..e1db93b --- /dev/null +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java @@ -0,0 +1,251 @@ +/**************************************************************** + * 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 static org.assertj.core.api.Assertions.assertThat; +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; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Collection; +import java.util.Date; +import java.util.Properties; + +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 org.apache.james.mailbox.MailboxManager; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.MessageManager; +import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.model.MailboxPath; +import org.apache.james.sieverepository.api.SieveRepository; +import org.apache.james.transport.mailets.SieveToRecipientFolder; +import org.apache.james.transport.mailets.ToRecipientFolder; +import org.apache.james.user.api.UsersRepository; +import org.apache.mailet.Mail; +import org.apache.mailet.MailAddress; +import org.apache.mailet.base.GenericMailet; +import org.apache.mailet.base.test.FakeMail; +import org.apache.mailet.base.test.FakeMailContext; +import org.apache.mailet.base.test.FakeMailetConfig; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.slf4j.Logger; + +import com.google.common.base.Throwables; +import com.google.common.collect.ImmutableList; + +@RunWith(Parameterized.class) +public class ToRecipientFolderTest { + + public static final String USER_LOCAL_PART = "receiver"; + public static final String USER = USER_LOCAL_PART + "@domain.com"; + public static final MailboxPath INBOX = new MailboxPath("#private", USER, "INBOX"); + public static final MailboxPath JUNK = new MailboxPath("#private", USER_LOCAL_PART, "Junk"); + public static final MailboxPath JUNK_VIRTUAL_HOSTING = new MailboxPath("#private", USER, "Junk"); + private MessageManager messageManager; + + public static class Parameter { + private final UsersRepository usersRepository; + private final MailboxManager mailboxManager; + private final SieveRepository sieveRepository; + private final GenericMailet mailet; + private final MailboxSession.User user; + + public Parameter(UsersRepository usersRepository, MailboxManager mailboxManager, SieveRepository sieveRepository, + GenericMailet mailet, MailboxSession.User user) { + this.usersRepository = usersRepository; + this.mailboxManager = mailboxManager; + this.sieveRepository = sieveRepository; + this.mailet = mailet; + this.user = user; + } + + public UsersRepository getUsersRepository() { + return usersRepository; + } + + public MailboxManager getMailboxManager() { + return mailboxManager; + } + + public SieveRepository getSieveRepository() { + return sieveRepository; + } + + public GenericMailet getMailet() { + return mailet; + } + + public MailboxSession.User getUser() { + return user; + } + } + + @Parameterized.Parameters + public static Collection<Object[]> getLocalDeliveryClasses() { + SieveRepository sieveRepository = mock(SieveRepository.class); + UsersRepository usersRepository = mock(UsersRepository.class); + MailboxManager mailboxManager = mock(MailboxManager.class); + + SieveToRecipientFolder sieveToRecipientFolder = new SieveToRecipientFolder(); + sieveToRecipientFolder.setMailboxManager(mailboxManager); + sieveToRecipientFolder.setUsersRepository(usersRepository); + sieveToRecipientFolder.setSieveRepository(sieveRepository); + + ToRecipientFolder toRecipientFolder = new ToRecipientFolder(); + toRecipientFolder.setMailboxManager(mailboxManager); + toRecipientFolder.setUsersRepository(usersRepository); + + MailboxSession.User user = mock(MailboxSession.User.class); + MailboxSession session = mock(MailboxSession.class); + when(session.getPathDelimiter()).thenReturn('.'); + try { + when(mailboxManager.createSystemSession(any(String.class), any(Logger.class))).thenReturn(session); + } catch (MailboxException e) { + throw Throwables.propagate(e); + } + when(session.getUser()).thenReturn(user); + + return ImmutableList.of( + new Object[]{new Parameter(usersRepository, mailboxManager, sieveRepository, sieveToRecipientFolder, user)}, + new Object[]{new Parameter(usersRepository, mailboxManager, sieveRepository, toRecipientFolder, user)} + ); + } + + @Parameterized.Parameter + public Parameter parameter; + private FakeMailetConfig mailetConfig; + + @Before + public void setUp() throws Exception { + mailetConfig = new FakeMailetConfig("RecipientFolderTest", FakeMailContext.defaultContext()); + messageManager = mock(MessageManager.class); + } + + @Test + public void initParameterTesting() throws Exception { + mailetConfig.setProperty(ToRecipientFolder.FOLDER_PARAMETER, "Junk"); + parameter.getMailet().init(mailetConfig); + + Assert.assertEquals("Junk", parameter.getMailet().getInitParameter(ToRecipientFolder.FOLDER_PARAMETER)); + } + + @Test + public void consumeOptionShouldGhostTheMail() throws Exception { + mailetConfig.setProperty(ToRecipientFolder.CONSUME_PARAMETER, "true"); + parameter.getMailet().init(mailetConfig); + + Mail mail = createMail(); + parameter.getMailet().service(mail); + + assertThat(mail.getState()).isEqualTo(Mail.GHOST); + } + + @Test + public void consumeOptionShouldNotGhostTheMailByDefault() throws Exception { + parameter.getMailet().init(mailetConfig); + + Mail mail = createMail(); + parameter.getMailet().service(mail); + + assertThat(mail.getState()).isEqualTo(Mail.DEFAULT); + } + + @Test + public void folderParameterShouldIndicateDestinationFolder() throws Exception { + when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true); + when(parameter.getMailboxManager().getMailbox(eq(JUNK_VIRTUAL_HOSTING), any(MailboxSession.class))).thenReturn(messageManager); + when(parameter.getUser().getUserName()).thenReturn(USER); + + mailetConfig.setProperty(ToRecipientFolder.FOLDER_PARAMETER, "Junk"); + parameter.getMailet().init(mailetConfig); + parameter.getMailet().service(createMail()); + + verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class)); + } + + @Test + public void folderParameterShouldBeInboxByDefault() throws Exception { + when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true); + when(parameter.getMailboxManager().getMailbox(eq(INBOX), any(MailboxSession.class))).thenReturn(messageManager); + when(parameter.getUser().getUserName()).thenReturn(USER); + + parameter.getMailet().init(mailetConfig); + parameter.getMailet().service(createMail()); + + verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class)); + } + + @Test + public void folderParameterShouldWorkWhenVirtualHostingIsTurnedOff() throws Exception { + when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(false); + when(parameter.getMailboxManager().getMailbox(eq(JUNK), any(MailboxSession.class))).thenReturn(messageManager); + when(parameter.getUser().getUserName()).thenReturn(USER_LOCAL_PART); + + mailetConfig.setProperty(ToRecipientFolder.FOLDER_PARAMETER, "Junk"); + parameter.getMailet().init(mailetConfig); + parameter.getMailet().service(createMail()); + + 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(USER)); + 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(); + return FakeMail.builder() + .mimeMessage(message) + .state(Mail.DEFAULT) + .recipient(new MailAddress(USER)) + .build(); + } + +} --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
